diff --git a/Project.toml b/Project.toml index 107b28f3..fa247721 100644 --- a/Project.toml +++ b/Project.toml @@ -6,7 +6,9 @@ version = "0.7.2" [deps] AcousticMetrics = "046f749b-9c1e-43ca-86bc-6902340f753e" CCBlade = "e1828068-15df-11e9-03e4-ef195ea46fa4" +CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" ConcreteStructs = "2569d6c7-a4a2-43d3-a901-331e8e4be471" +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" FLOWMath = "6cb5d3fb-0fe8-4cc2-bd89-9fe0b19a99d3" FlexiMaps = "6394faf6-06db-4fa8-b750-35ccc60383f7" Formatting = "59287772-0a20-5a39-b81b-1366585eb4c0" diff --git a/docs/Project.toml b/docs/Project.toml index e557a725..75353c30 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -2,9 +2,11 @@ AcousticAnalogies = "e71b3392-1e0c-4536-b366-2bd1fce6fba0" AcousticMetrics = "046f749b-9c1e-43ca-86bc-6902340f753e" CCBlade = "e1828068-15df-11e9-03e4-ef195ea46fa4" +ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" FLOWMath = "6cb5d3fb-0fe8-4cc2-bd89-9fe0b19a99d3" GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" +Interpolations = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" KinematicCoordinateTransformations = "730d3219-0a85-48f9-b699-9f31f8913d09" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" NLsolve = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" diff --git a/docs/make.jl b/docs/make.jl index 77612a1d..ebf7db6e 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,7 +1,7 @@ module AADocs using Documenter, AcousticAnalogies -function main() +function doit() IN_CI = get(ENV, "CI", nothing)=="true" makedocs(sitename="AcousticAnalogies.jl", modules=[AcousticAnalogies], doctest=false, @@ -10,6 +10,7 @@ function main() "Guided Example"=>"guided_example.md", "CCBlade.jl Example"=>"ccblade_example.md", "WriteVTK.jl Support"=>"writevtk_support.md", + "OpenFAST Example"=>"openfast_example.md", "API Reference"=>"api.md", "Software Quality Assurance"=>"sqa.md"]) @@ -20,7 +21,7 @@ function main() end if !isinteractive() - main() + doit() end end # module diff --git a/docs/src/openfast_example.md b/docs/src/openfast_example.md index 99b27199..435133ae 100644 --- a/docs/src/openfast_example.md +++ b/docs/src/openfast_example.md @@ -15,23 +15,19 @@ https://github.com/IEAWindTask37/IEA-3.4-130-RWT. We start by loading Julia dependencies, which are available in the General registry ```@example first_example -module iea3p4 using AcousticAnalogies using AcousticMetrics using ColorSchemes: colorschemes using GLMakie -using DelimitedFiles +using Interpolations: linear_interpolation +using FLOWMath: FLOWMath using KinematicCoordinateTransformations using LinearAlgebra: × -using StaticArrays -using AcousticMetrics +using StaticArrays: @SVector using Statistics -using Interpolations nothing # hide ``` - - Next, we set the user-defined inputs: * number of blades, usually 3 for modern wind turbines * hub radius in m, it is specified in the ElastoDyn main input file of OpenFAST @@ -51,7 +47,8 @@ Chord = [2.600e+00, 2.645e+00, 3.020e+00, 3.437e+00, 3.781e+00, 4.036e+00, 4.201 4.284e+00, 4.288e+00, 4.223e+00, 4.098e+00, 3.923e+00, 3.709e+00, 3.468e+00, 3.220e+00, 2.986e+00, 2.770e+00, 2.581e+00, 2.412e+00, 2.266e+00, 2.142e+00, 2.042e+00, 1.964e+00, 1.909e+00, 1.870e+00, 1.807e+00, 1.666e+00, 1.387e+00, 9.172e-01, 1.999e-01] -file_path = joinpath(@__DIR__, "IEA-3.4-130-RWT.out") +file_path = joinpath(@__DIR__, "..", "..", "test", "gen_test_data", "openfast_data", "IEA-3.4-130-RWT.out") +@show @__DIR__ HH = 110. # m RSpn = BlSpn .+ Rhub x0 = @SVector [HH .+ RSpn[end], 0.0, -HH] @@ -70,106 +67,172 @@ dradii = RSpn[begin+1:end] .- RSpn[begin:end-1] # Compute the blade angles θs = 2*pi/num_blades.*(0:(num_blades-1)) # Create a linear interpolation object to interpolate chord onto the radial mid-points -itp = LinearInterpolation(RSpn, Chord) +itp_chord = linear_interpolation(RSpn, Chord) # Perform interpolation -chord = itp(radii) -# Cross-sectional area of each element in m**2. This is taking a bit of a shortcut +chord = itp_chord(radii) +# Cross-sectional area of each element in m**2. This is taking a bit of a shortcut—the value of `cs_area_over_chord_squared` does not actually correspond to the IEAWindTask37 turbine blade. cs_area_over_chord_squared = 0.064 cs_area = cs_area_over_chord_squared.*chord.^2 -# Code to parse the data from the OpenFAST .out file -# Function to parse a line of data, converting strings to floats -function parse_line(line) - # Split the line by whitespace and filter out any empty strings - elements = filter(x -> !isempty(x), split(line)) - # Convert elements to Float64 - return map(x -> parse(Float64, x), elements) -end - -# Initialize an empty array to store the data -data = [] - -# Open the file and read the data, skipping the first 8 lines -open(file_path) do file - # Skip the first 8 lines (header and description) - for i in 1:8 - readline(file) +# # Code to parse the data from the OpenFAST .out file +# # Function to parse a line of data, converting strings to floats +# function parse_line(line) +# # Split the line by whitespace and filter out any empty strings +# elements = filter(x -> !isempty(x), split(line)) +# # Convert elements to Float64 +# return map(x -> parse(Float64, x), elements) +# end +# +# # Initialize an empty array to store the data +# data = [] +# +# # Open the file and read the data, skipping the first 8 lines +# open(file_path) do file +# # Skip the first 8 lines (header and description) +# for i in 1:8 +# readline(file) +# end +# +# # Read the rest of the lines and parse them +# for line in eachline(file) +# push!(data, parse_line(line)) +# end +# end +# +# # Convert the data to an array of arrays (matrix) +# data = reduce(hcat, data) +# time = data[1, :] +# avg_wind_speed = mean(data[2, :]) +# sim_length_s = time[end] - time[1] # s +# @show length(time) +# +# # Reopen the file and read the lines +# lines = open(file_path) do f +# readlines(f) +# end +# +# # Find the index of the line that contains the column headers +# header_index = findfirst(x -> startswith(x, "Time"), lines) +# +# # Extract the headers +# headers = split(lines[header_index], '\t') +# +# id_b1_Fx = findfirst(x -> x == "AB1N001Fxl", headers) +# id_b2_Fx = findfirst(x -> x == "AB2N001Fxl", headers) +# id_b3_Fx = findfirst(x -> x == "AB3N001Fxl", headers) +# id_b1_Fy = findfirst(x -> x == "AB1N001Fyl", headers) +# id_b2_Fy = findfirst(x -> x == "AB2N001Fyl", headers) +# id_b3_Fy = findfirst(x -> x == "AB3N001Fyl", headers) +# id_rot_speed = findfirst(x -> x == "RotSpeed", headers) +# n_elems = length(radii) +# Fx_b1_locs = data[id_b1_Fx:id_b1_Fx+n_elems,:] +# Fy_b1_locs = data[id_b1_Fy:id_b1_Fy+n_elems,:] +# Fx_b2_locs = data[id_b2_Fx:id_b2_Fx+n_elems,:] +# Fy_b2_locs = data[id_b2_Fy:id_b2_Fy+n_elems,:] +# Fx_b3_locs = data[id_b3_Fx:id_b3_Fx+n_elems,:] +# Fy_b3_locs = data[id_b3_Fy:id_b3_Fy+n_elems,:] +# +# # Reinterpolate onto the mid-sections +# Fx_b1 = Array{Float64}(undef, 29, 6001) +# Fx_b2 = Array{Float64}(undef, 29, 6001) +# Fx_b3 = Array{Float64}(undef, 29, 6001) +# Fy_b1 = Array{Float64}(undef, 29, 6001) +# Fy_b2 = Array{Float64}(undef, 29, 6001) +# Fy_b3 = Array{Float64}(undef, 29, 6001) +# for j in axes(Fx_b1_locs, 2) +# itp = LinearInterpolation(RSpn, Fx_b1_locs[:, j], extrapolation_bc=Line()) +# Fx_b1[:, j] = itp(radii) +# end +# for j in axes(Fx_b2_locs, 2) +# itp = LinearInterpolation(RSpn, Fx_b2_locs[:, j], extrapolation_bc=Line()) +# Fx_b2[:, j] = itp(radii) +# end +# for j in axes(Fx_b3_locs, 2) +# itp = LinearInterpolation(RSpn, Fx_b3_locs[:, j], extrapolation_bc=Line()) +# Fx_b3[:, j] = itp(radii) +# end +# for j in axes(Fy_b1_locs, 2) +# itp = LinearInterpolation(RSpn, Fy_b1_locs[:, j], extrapolation_bc=Line()) +# Fy_b1[:, j] = itp(radii) +# end +# for j in axes(Fy_b2_locs, 2) +# itp = LinearInterpolation(RSpn, Fy_b2_locs[:, j], extrapolation_bc=Line()) +# Fy_b2[:, j] = itp(radii) +# end +# for j in axes(Fy_b3_locs, 2) +# itp = LinearInterpolation(RSpn, Fy_b3_locs[:, j], extrapolation_bc=Line()) +# Fy_b3[:, j] = itp(radii) +# end + +# Read the data from the file and create an `OpenFASTData` object, a simple struct with fields like `time`, `omega`, `axial_loading`, etc. +data = AcousticAnalogies.read_openfast_file(file_path) + +# Interpolate the loading data into the mid-sections. +# Start with the axial loading. +# data.axial_loading has size (num_times, num_radial, num_blades). +# Since we're interpolating onto the mid-sections, the interpolated data will have size (num_times, num_radial-1, num_blades). +axial_loading = data.axial_loading +axial_loading_mid = Array{eltype(axial_loading)}(undef, size(axial_loading, 1), size(axial_loading, 2)-1, size(axial_loading, 3)) + +# Now start doing the interpolation. +for b in 1:size(axial_loading, 3) + for t in 1:size(axial_loading, 1) + itp_loading = linear_interpolation(RSpn, axial_loading[t, :, b]) + axial_loading_mid[t, :, b] .= itp_loading(radii) end +end - # Read the rest of the lines and parse them - for line in eachline(file) - push!(data, parse_line(line)) +# Do the same thing for the circumferential loading. +circum_loading = data.circum_loading +circum_loading_mid = Array{eltype(circum_loading)}(undef, size(circum_loading, 1), size(circum_loading, 2)-1, size(circum_loading, 3)) +for bidx in 1:size(circum_loading, 3) + for tidx in 1:size(circum_loading, 1) + itp_loading = linear_interpolation(RSpn, circum_loading[tidx, :, bidx]) + circum_loading_mid[tidx, :, bidx] .= itp_loading(radii) end end -# Convert the data to an array of arrays (matrix) -data = reduce(hcat, data) -time = data[1, :] -avg_wind_speed = mean(data[2, :]) -sim_length_s = time[end] - time[1] # s -@show length(time) - -# Reopen the file and read the lines -lines = open(file_path) do f - readlines(f) -end +# New thought: F1A is a function of the time-derivative of the loading. +# How should we get that? +# We could use finite differences. +# I guess we'll do that. +# But is the time step constant? +# Let's find out. +# @show extrema((data.time[2:end] .- data.time[1:end-1]) .- (data.time[2] - data.time[1])) +dts = data.time[2:end] - data.time[1:end-1] +@show all(dts .≈ dts[1]) +dt = dts[1] + +# Looks like it is uniformly spaced. + +# Now use second-order finite differences to differentiate. +# We'll create a simple function to do that for us. +function finite_diff_2nd_order(f, h) + # Create an array the same size as `f`. + fdot = similar(f) + + @views begin + # These stencils are in Tannehill, Anderson, Pletcher, "Computational Fluid Mechanics and Heat Transfer," 2nd edition, page 50. + # First do the interior points. + fdot[begin+1:end-1, :, :] .= (f[begin+2:end, :, :] .- f[begin:end-2, :, :]) ./ (2*h) + + # Then the left boundary. + fdot[begin, :, :] .= (-3 .* f[begin] .+ 4 .* f[begin+1] .- f[begin+2]) ./ (2*h) + + # Then the right boundary. + fdot[end, :, :] .= (3 .* f[end] .- 4 .* f[end-1] .+ f[end-2]) ./ (2*h) + end -# Find the index of the line that contains the column headers -header_index = findfirst(x -> startswith(x, "Time"), lines) - -# Extract the headers -headers = split(lines[header_index], '\t') - -id_b1_Fx = findfirst(x -> x == "AB1N001Fxl", headers) -id_b2_Fx = findfirst(x -> x == "AB2N001Fxl", headers) -id_b3_Fx = findfirst(x -> x == "AB3N001Fxl", headers) -id_b1_Fy = findfirst(x -> x == "AB1N001Fyl", headers) -id_b2_Fy = findfirst(x -> x == "AB2N001Fyl", headers) -id_b3_Fy = findfirst(x -> x == "AB3N001Fyl", headers) -id_rot_speed = findfirst(x -> x == "RotSpeed", headers) -n_elems = length(radii) -Fx_b1_locs = data[id_b1_Fx:id_b1_Fx+n_elems,:] -Fy_b1_locs = data[id_b1_Fy:id_b1_Fy+n_elems,:] -Fx_b2_locs = data[id_b2_Fx:id_b2_Fx+n_elems,:] -Fy_b2_locs = data[id_b2_Fy:id_b2_Fy+n_elems,:] -Fx_b3_locs = data[id_b3_Fx:id_b3_Fx+n_elems,:] -Fy_b3_locs = data[id_b3_Fy:id_b3_Fy+n_elems,:] - -# Reinterpolate onto the mid-sections -Fx_b1 = Array{Float64}(undef, 29, 6001) -Fx_b2 = Array{Float64}(undef, 29, 6001) -Fx_b3 = Array{Float64}(undef, 29, 6001) -Fy_b1 = Array{Float64}(undef, 29, 6001) -Fy_b2 = Array{Float64}(undef, 29, 6001) -Fy_b3 = Array{Float64}(undef, 29, 6001) -for j in axes(Fx_b1_locs, 2) - itp = LinearInterpolation(RSpn, Fx_b1_locs[:, j], extrapolation_bc=Line()) - Fx_b1[:, j] = itp(radii) -end -for j in axes(Fx_b2_locs, 2) - itp = LinearInterpolation(RSpn, Fx_b2_locs[:, j], extrapolation_bc=Line()) - Fx_b2[:, j] = itp(radii) -end -for j in axes(Fx_b3_locs, 2) - itp = LinearInterpolation(RSpn, Fx_b3_locs[:, j], extrapolation_bc=Line()) - Fx_b3[:, j] = itp(radii) -end -for j in axes(Fy_b1_locs, 2) - itp = LinearInterpolation(RSpn, Fy_b1_locs[:, j], extrapolation_bc=Line()) - Fy_b1[:, j] = itp(radii) -end -for j in axes(Fy_b2_locs, 2) - itp = LinearInterpolation(RSpn, Fy_b2_locs[:, j], extrapolation_bc=Line()) - Fy_b2[:, j] = itp(radii) -end -for j in axes(Fy_b3_locs, 2) - itp = LinearInterpolation(RSpn, Fy_b3_locs[:, j], extrapolation_bc=Line()) - Fy_b3[:, j] = itp(radii) + return fdot end +# Now use that function to differentiate the axial and circumferential loading. +axial_loading_mid_dot = finite_diff_2nd_order(axial_loading_mid, dt) +circum_loading_mid_dot = finite_diff_2nd_order(circum_loading_mid, dt) # Extract the mean rotor speed -omega_rpm = mean(data[id_rot_speed,:]) +omega_rpm = mean(data.omega) +@show omega_rpm nothing # hide ``` @@ -177,12 +240,12 @@ Once we are here we have parsed the OpenFAST output file and are ready to run th Before that, let's plot the unsteady loading acting on the wind turbine blade. ```@example first_example - # Let's plot the unsteady loading 1 of every 500 timesteps # x-axis is the span position (mid-sections) # times are indicated by the colorbar on the right of the plot. -@assert size(Fx_b1) == size(Fx_b2) == size(Fx_b3) == size(Fy_b1) == size(Fy_b2) == size(Fy_b3) -ntimes_loading = size(Fx_b1, 2) +# @assert size(Fx_b1) == size(Fx_b2) == size(Fx_b3) == size(Fy_b1) == size(Fy_b2) == size(Fy_b3) +# ntimes_loading = size(Fx_b1, 2) +ntimes_loading = size(axial_loading_mid, 1) fig = Figure() ax11 = fig[1, 1] = Axis(fig, xlabel="Span Position (m)", ylabel="Fx (N/m)", title="blade 1") ax21 = fig[2, 1] = Axis(fig, xlabel="Span Position (m)", ylabel="Fy (N/m)") @@ -192,14 +255,16 @@ ax13 = fig[1, 3] = Axis(fig, xlabel="Span Position (m)", ylabel="Fx (N/m)", titl ax23 = fig[2, 3] = Axis(fig, xlabel="Span Position (m)", ylabel="Fy (N/m)") bpp = 60/omega_rpm/num_blades colormap = colorschemes[:viridis] +time = data.time +sim_length_s = time[end] - time[begin] for tidx in 1:500:ntimes_loading cidx = (time[tidx] - time[1])/sim_length_s - l1 = lines!(ax11, radii, Fx_b1[:,tidx], label ="b1", color=colormap[cidx]) - l1 = lines!(ax12, radii, Fx_b2[:,tidx], label ="b2", color=colormap[cidx]) - l1 = lines!(ax13, radii, Fx_b3[:,tidx], label ="b3", color=colormap[cidx]) - l2 = lines!(ax21, radii, Fy_b1[:,tidx], label ="b1", color=colormap[cidx]) - l2 = lines!(ax22, radii, Fy_b2[:,tidx], label ="b2", color=colormap[cidx]) - l2 = lines!(ax23, radii, Fy_b3[:,tidx], label ="b3", color=colormap[cidx]) + l1 = lines!(ax11, radii, axial_loading_mid[tidx,:,1], label ="b1", color=colormap[cidx]) + l1 = lines!(ax12, radii, axial_loading_mid[tidx,:,2], label ="b2", color=colormap[cidx]) + l1 = lines!(ax13, radii, axial_loading_mid[tidx,:,3], label ="b3", color=colormap[cidx]) + l2 = lines!(ax21, radii, circum_loading_mid[tidx,:,1], label ="b1", color=colormap[cidx]) + l2 = lines!(ax22, radii, circum_loading_mid[tidx,:,2], label ="b2", color=colormap[cidx]) + l2 = lines!(ax23, radii, circum_loading_mid[tidx,:,3], label ="b3", color=colormap[cidx]) end linkxaxes!(ax21, ax11) @@ -221,19 +286,76 @@ hideydecorations!(ax13, grid=false) hideydecorations!(ax22, grid=false) hideydecorations!(ax23, grid=false) +cbar = fig[:, 4] = Colorbar(fig; limits=(time[begin], time[end]), colormap=:viridis, label="time (sec)") + save(joinpath(@__DIR__, "Fx_t-all_time.png"), fig) nothing # hide ``` +![Axial Loading](Fx_t-all_time.png) + +Let's also see what the time derivative of the loading looks like. + +```@example first_example +# Let's plot the unsteady loading time derivative 1 of every 500 timesteps +# x-axis is the span position (mid-sections) +# times are indicated by the colorbar on the right of the plot. +ntimes_loading = size(axial_loading_mid_dot, 1) +fig = Figure() +ax11 = fig[1, 1] = Axis(fig, xlabel="Span Position (m)", ylabel="∂Fx/∂t (N/(m*s))", title="blade 1") +ax21 = fig[2, 1] = Axis(fig, xlabel="Span Position (m)", ylabel="∂Fy/∂t (N/(m*s))") +ax12 = fig[1, 2] = Axis(fig, xlabel="Span Position (m)", ylabel="∂Fx/∂t (N/(m*s))", title="blade 2") +ax22 = fig[2, 2] = Axis(fig, xlabel="Span Position (m)", ylabel="∂Fy/∂t (N/(m*s))") +ax13 = fig[1, 3] = Axis(fig, xlabel="Span Position (m)", ylabel="∂Fx/∂t (N/(m*s))", title="blade 3") +ax23 = fig[2, 3] = Axis(fig, xlabel="Span Position (m)", ylabel="∂Fy/∂t (N/(m*s))") +bpp = 60/omega_rpm/num_blades +colormap = colorschemes[:viridis] +time = data.time +sim_length_s = time[end] - time[begin] +for tidx in 1:500:ntimes_loading + cidx = (time[tidx] - time[1])/sim_length_s + l1 = lines!(ax11, radii, axial_loading_mid_dot[tidx,:,1], label ="b1", color=colormap[cidx]) + l1 = lines!(ax12, radii, axial_loading_mid_dot[tidx,:,2], label ="b2", color=colormap[cidx]) + l1 = lines!(ax13, radii, axial_loading_mid_dot[tidx,:,3], label ="b3", color=colormap[cidx]) + l2 = lines!(ax21, radii, circum_loading_mid_dot[tidx,:,1], label ="b1", color=colormap[cidx]) + l2 = lines!(ax22, radii, circum_loading_mid_dot[tidx,:,2], label ="b2", color=colormap[cidx]) + l2 = lines!(ax23, radii, circum_loading_mid_dot[tidx,:,3], label ="b3", color=colormap[cidx]) +end + +linkxaxes!(ax21, ax11) +linkxaxes!(ax21, ax11) +linkxaxes!(ax12, ax11) +linkxaxes!(ax22, ax11) +linkxaxes!(ax13, ax11) +linkxaxes!(ax23, ax11) +linkyaxes!(ax12, ax11) +linkyaxes!(ax13, ax11) +linkyaxes!(ax22, ax21) +linkyaxes!(ax23, ax21) + +hidexdecorations!(ax11, grid=false) +hidexdecorations!(ax12, grid=false) +hidexdecorations!(ax13, grid=false) +hideydecorations!(ax12, grid=false) +hideydecorations!(ax13, grid=false) +hideydecorations!(ax22, grid=false) +hideydecorations!(ax23, grid=false) + +cbar = fig[:, 4] = Colorbar(fig; limits=(time[begin], time[end]), colormap=:viridis, label="time (sec)") + +save(joinpath(@__DIR__, "Fx_t-all_time-dot.png"), fig) +nothing # hide +``` +![Axial Loading Time Derivative](Fx_t-all_time-dot.png) Perfect, we are now ready to run the core of AcousticAnalogies.jl ```@example first_example - # To do F1A correctly, we need to put all source elements in a coordinate system that # moves with the fluid, i.e. one in which the fluid appears stationary. # So, to do that, we have the blades translating in the # negative x direction at the average horizontal wind speed. +avg_wind_speed = mean(data.v) v = -avg_wind_speed # m/s omega = omega_rpm * 2*pi/60 # rad/s @@ -243,83 +365,95 @@ radii = reshape(radii, 1, :, 1) dradii = reshape(dradii, 1, :, 1) cs_area = reshape(cs_area, 1, :, 1) src_times = reshape(time, :, 1, 1) # This isn't really necessary. -fx = cat(transpose(Fx_b1), transpose(Fx_b2), transpose(Fx_b3), dims=3) -fc = cat(transpose(Fy_b1), transpose(Fy_b2), transpose(Fy_b3), dims=3) - -# source elements, with negative Fx -ses = CompactSourceElement.(rho, c0, radii, θs, dradii, cs_area, -fx, 0.0, fc, src_times) - -t0 = 0.0 # Time at which the angle between the source and target coordinate systems is equal to offest. -offset = 0.0 # Angular offset between the source and target coordinate systems at t0. -# steady rotation around the x axis -rot_trans = SteadyRotXTransformation(t0, omega, offset) - -# orient the rotation axis of the blades as it is the global frame -rot_axis = @SVector [1.0, 0.0, 0.0] # rotation axis aligned along global x-axis -blade_axis = @SVector [0.0, 0.0, 1.0] # blade 1 pointing up, along z-axis -global_trans = ConstantLinearMap(hcat(rot_axis, blade_axis, rot_axis×blade_axis)) - -# blade to move with the appropriate forward velocity, and -# start from the desired location in the global reference frame -y0_hub = @SVector [0.0, 0.0, 0.0] # Position of the hub at time t0 -v0_hub = SVector{3}(v.*rot_axis) # Constant velocity of the hub in the global reference frame -const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) - -# combine these three transformations into one, and then use that on the SourceElements -trans = compose.(src_times, Ref(const_vel_trans), compose.(src_times, Ref(global_trans), Ref(rot_trans))) - -# trans will perform the three transformations from right to left (rot_trans, global_trans, const_vel_trans) -ses = ses .|> trans - -# The ses object now describes how each blade element source is moving through the global reference -# frame over the time src_time. As it does this, it will emit acoustics that can be sensed by an acoustic observer -# (a human, or a microphone). The exact "amount" of acoustics the observer will experience depends -# on the relative location and motion between each source and the observer. - -# This creates an acoustic observer moving with constant velocity v0_hub that is at location `x0` at time `t0`. -obs = ConstVelocityAcousticObserver(t0, x0, v0_hub) - -# Now, in order to perform the F1A calculation, -# we need to know when each acoustic disturbance emitted -# by the source arrives at the observer. This is referred -# to an advanced time calculation, and is done this way: -apth = f1a.(ses, Ref(obs)) - -# We now have a noise prediction for each of the individual source elements in ses at the acoustic observer obs. -# What we ultimately want is the total noise prediction at obs—we want to add all the acoustic pressures in apth together. -# But we can't add them directly, yet, since the observer times are not all the same. What we need to do -# is first interpolate the apth of each source onto a common observer time grid, and then add them up. -# We'll do this using the AcousticAnalogies.combine function. -period = 2*pi/omega -bpp = period/num_blades # blade passing period -obs_time_range = sim_length_s/60*omega_rpm*bpp - -# Note that we need to be careful to avoid extrapolation in the `combine` calculation. -# That won't happen in this case, since obs_time_range/sim_length_s is 1/3, so the observer time -# range is much less than the source time range. -# The observer time range is 1/3 of the source time range, and we're using the same number of -# simulation times, so that means the observer time step is 1/3 that of the source time step. -num_obs_times = length(time) -apth_total = combine(apth, obs_time_range, num_obs_times, 1) -# The loading data is unsteady, so we may need to be careful to window the time history -# to avoid problems with discontinuities going from the begining/end of the pressure time history. -nothing # hide +# fx = cat(transpose(Fx_b1), transpose(Fx_b2), transpose(Fx_b3), dims=3) +# fc = cat(transpose(Fy_b1), transpose(Fy_b2), transpose(Fy_b3), dims=3) +# The `axial_loading_mid` and `circum_loading_mid` have shape `(num_times, num_radial-1, num_blades)`, so no reshaping necessary. +fx = axial_loading_mid +fc = circum_loading_mid + +# AcousticAnalogies.jl requires the loading *on the fluid*, not on the blade/lifting surface/body that is commonly calculated by aerodynamic prediction codes. +# The freestream velocity is in the positive x direction, so, for a wind turbine, we'd expect the axial loading on the blades to also be in the positive x direction. +# The plots of the loading above show that the axial loading is positive. +# The axial loading on the fluid is opposite that, so we'll need to switch the sign on the axial loading. + +# Next, we'll think about the circumferential loading. +# We will be rotating the blades about the positive x axis. +# The `CompactSourceElement` constructor assumes that the blade is initially aligned with the y axis (and then rotated by the angle `θ` about the x axis). +# So the blade will be moving in the positive z direction, and the circumferential loading on the blade will be in negative z direction, matching the plot of `circum_loading` above. +# But we want the loading on the fluid, so we'll also need to switch the sign on the `circum_loading` array. +ses = CompactSourceElement.(rho, c0, radii, θs, dradii, cs_area, -fx, 0.0, -fc, src_times) + +# t0 = 0.0 # Time at which the angle between the source and target coordinate systems is equal to offest. +# offset = 0.0 # Angular offset between the source and target coordinate systems at t0. +# # steady rotation around the x axis +# rot_trans = SteadyRotXTransformation(t0, omega, offset) +# +# # orient the rotation axis of the blades as it is the global frame +# rot_axis = @SVector [1.0, 0.0, 0.0] # rotation axis aligned along global x-axis +# blade_axis = @SVector [0.0, 0.0, 1.0] # blade 1 pointing up, along z-axis +# global_trans = ConstantLinearMap(hcat(rot_axis, blade_axis, rot_axis×blade_axis)) +# +# # blade to move with the appropriate forward velocity, and +# # start from the desired location in the global reference frame +# y0_hub = @SVector [0.0, 0.0, 0.0] # Position of the hub at time t0 +# v0_hub = SVector{3}(v.*rot_axis) # Constant velocity of the hub in the global reference frame +# const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) +# +# # combine these three transformations into one, and then use that on the SourceElements +# trans = compose.(src_times, Ref(const_vel_trans), compose.(src_times, Ref(global_trans), Ref(rot_trans))) +# +# # trans will perform the three transformations from right to left (rot_trans, global_trans, const_vel_trans) +# ses = ses .|> trans +# +# # The ses object now describes how each blade element source is moving through the global reference +# # frame over the time src_time. As it does this, it will emit acoustics that can be sensed by an acoustic observer +# # (a human, or a microphone). The exact "amount" of acoustics the observer will experience depends +# # on the relative location and motion between each source and the observer. +# +# # This creates an acoustic observer moving with constant velocity v0_hub that is at location `x0` at time `t0`. +# obs = ConstVelocityAcousticObserver(t0, x0, v0_hub) +# +# # Now, in order to perform the F1A calculation, +# # we need to know when each acoustic disturbance emitted +# # by the source arrives at the observer. This is referred +# # to an advanced time calculation, and is done this way: +# apth = f1a.(ses, Ref(obs)) +# +# # We now have a noise prediction for each of the individual source elements in ses at the acoustic observer obs. +# # What we ultimately want is the total noise prediction at obs—we want to add all the acoustic pressures in apth together. +# # But we can't add them directly, yet, since the observer times are not all the same. What we need to do +# # is first interpolate the apth of each source onto a common observer time grid, and then add them up. +# # We'll do this using the AcousticAnalogies.combine function. +# period = 2*pi/omega +# bpp = period/num_blades # blade passing period +# obs_time_range = sim_length_s/60*omega_rpm*bpp +# +# # Note that we need to be careful to avoid extrapolation in the `combine` calculation. +# # That won't happen in this case, since obs_time_range/sim_length_s is 1/3, so the observer time +# # range is much less than the source time range. +# # The observer time range is 1/3 of the source time range, and we're using the same number of +# # simulation times, so that means the observer time step is 1/3 that of the source time step. +# num_obs_times = length(time) +# apth_total = combine(apth, obs_time_range, num_obs_times, 1) +# # The loading data is unsteady, so we may need to be careful to window the time history +# # to avoid problems with discontinuities going from the begining/end of the pressure time history. +# nothing # hide ``` We can now have a look at the total acoustic pressure time history at the observer: ```@example first_example -fig = Figure() -ax1 = fig[1, 1] = Axis(fig, xlabel="time, s", ylabel="monopole, Pa") -ax2 = fig[2, 1] = Axis(fig, xlabel="time, s", ylabel="dipole, Pa") -ax3 = fig[3, 1] = Axis(fig, xlabel="time, s", ylabel="total, Pa") -l1 = lines!(ax1, time, apth_total.p_m) -l2 = lines!(ax2, time, apth_total.p_d) -l3 = lines!(ax3, time, apth_total.p_m.+apth_total.p_d) -hidexdecorations!(ax1, grid=false) -hidexdecorations!(ax2, grid=false) -save(joinpath(@__DIR__, "openfast-apth_total.png"), fig) -nothing # hide +# fig = Figure() +# ax1 = fig[1, 1] = Axis(fig, xlabel="time, s", ylabel="monopole, Pa") +# ax2 = fig[2, 1] = Axis(fig, xlabel="time, s", ylabel="dipole, Pa") +# ax3 = fig[3, 1] = Axis(fig, xlabel="time, s", ylabel="total, Pa") +# l1 = lines!(ax1, time, apth_total.p_m) +# l2 = lines!(ax2, time, apth_total.p_d) +# l3 = lines!(ax3, time, apth_total.p_m.+apth_total.p_d) +# hidexdecorations!(ax1, grid=false) +# hidexdecorations!(ax2, grid=false) +# save(joinpath(@__DIR__, "openfast-apth_total.png"), fig) +# nothing # hide ``` The plot shows that the monopole/thickness noise is much lower than the dipole/loading noise. @@ -332,19 +466,19 @@ Next, we will calculate the narrowband spectrum. Finally, we will calculate the overall A-weighted sound pressure level from the narrowband spectrum. ```@example first_example -oaspl_from_apth = AcousticMetrics.OASPL(apth_total) -nbs = AcousticMetrics.MSPSpectrumAmplitude(apth_total) -oaspl_from_nbs = AcousticMetrics.OASPL(nbs) -(oaspl_from_apth, oaspl_from_nbs) -nothing # hide +# oaspl_from_apth = AcousticMetrics.OASPL(apth_total) +# nbs = AcousticMetrics.MSPSpectrumAmplitude(apth_total) +# oaspl_from_nbs = AcousticMetrics.OASPL(nbs) +# (oaspl_from_apth, oaspl_from_nbs) +# nothing # hide ``` As a last step, we create VTK files that one can visualize in Paraview (or similar software) ```@example first_example -name = joinpath(@__DIR__, "vtk", "iea3p4_vtk") -mkpath(dirname(name)) -outfiles = AcousticAnalogies.to_paraview_collection(name, ses) -end # module -nothing # hide -``` \ No newline at end of file +# name = joinpath(@__DIR__, "vtk", "iea3p4_vtk") +# mkpath(dirname(name)) +# outfiles = AcousticAnalogies.to_paraview_collection(name, ses) +# end # module +# nothing # hide +``` diff --git a/src/AcousticAnalogies.jl b/src/AcousticAnalogies.jl index aba0ef7f..37b94d70 100644 --- a/src/AcousticAnalogies.jl +++ b/src/AcousticAnalogies.jl @@ -3,6 +3,8 @@ module AcousticAnalogies using AcousticMetrics using CCBlade using ConcreteStructs: @concrete +using CSV: CSV +using DataFrames: DataFrames using FLOWMath: akima, linear, ksmax, dot_cs_safe, norm_cs_safe using Formatting: format using JuliennedArrays: JuliennedArrays @@ -27,6 +29,9 @@ export combine!, combine include("ccblade_helpers.jl") export source_elements_ccblade +include("openfast_helpers.jl") +export read_openfast_file + include("writevtk.jl") end # module diff --git a/src/openfast_helpers.jl b/src/openfast_helpers.jl new file mode 100644 index 00000000..d1fd7234 --- /dev/null +++ b/src/openfast_helpers.jl @@ -0,0 +1,280 @@ +""" +Struct for holding data from an OpenFAST (AeroDyn?) output file. + +# Fields: +* `time`: vector of simulation times with size `(num_times,)` +* `v`: vector of freestream velocity time history with size `(num_times,)` +* `azimuth`: vector of azimuth angle time history with size `(num_times,)` +* `omega`: vector of rotation rate time history with size `(num_times,)` +* `pitch`: array of pitch angle time history with size `(num_times, num_blades)` +* `axial_loading`: array of axial loading time history with size `(num_times, num_radial, num_blades)` +* `circum_loading`: array of circumferential loading time history with size `(num_times, num_radial, num_blades)` +""" +struct OpenFASTData{TTime,TV,TAzimuth,TOmega,TPitch,TAxialLoading,TTangentialLoading} + time::TTime + v::TV + azimuth::TAzimuth + omega::TOmega + pitch::TPitch + axial_loading::TAxialLoading + circum_loading::TTangentialLoading + + function OpenFASTData(time, v, azimuth, omega, pitch, axial_loading, circum_loading) + # Figure out what num_times is. + if time !== nothing + num_times = length(time) + elseif v !== nothing + num_times = length(v) + elseif azimuth !== nothing + num_times = length(azimuth) + elseif omega !== nothing + num_times = length(omega) + elseif pitch !== nothing + num_times = size(pitch, 1) + elseif axial_loading !== nothing + num_times = size(axial_loading, 1) + elseif circum_loading !== nothing + num_times = size(circum_loading, 1) + end + + # Figure out what num_blades is. + if pitch !== nothing + num_blades = size(pitch, 2) + elseif axial_loading !== nothing + num_blades = size(axial_loading, 3) + elseif circum_loading !== nothing + num_blades = size(circum_loading, 3) + end + + # Figure out what num_radial is. + if axial_loading !== nothing + num_radial = size(axial_loading, 2) + elseif circum_loading !== nothing + num_radial = size(circum_loading, 2) + end + + if time !== nothing + # I don't think this can ever happen since the check for time !== nothing at the beginning is first, but whatever. + size(time) == (num_times,) || raise(ArgumentError("size(time) = $(size(time)) inconsistent with other inputs")) + end + + if v !== nothing + size(v) == (num_times,) || raise(ArgumentError("size(v) = $(size(v)) does not match size(time) = $(size(time))")) + end + + if azimuth !== nothing + size(azimuth) == (num_times,) || raise(ArgumentError("size(azimuth) = $(size(azimuth)) does not match size(time) = $(size(time))")) + end + + if omega !== nothing + size(omega) == (num_times,) || raise(ArgumentError("size(omega) = $(size(omega)) does not match size(time) = $(size(time))")) + end + + if pitch !== nothing + size(pitch) == (num_times, num_blades) || raise(ArgumentError("size(pitch) = $(size(pitch)) not consistent with size(time) = $(size(time)) and/or size(axial_loading) = $(size(axial_loading))")) + end + + if axial_loading !== nothing + size(axial_loading) == (num_times, num_radial, num_blades) || raise(ArgumentError("size(axial_loading) = $(size(axial_loading)) not consistent with size(time) = $(size(time))")) + end + + if circum_loading !== nothing + size(circum_loading) == (num_times, num_radial, num_blades) || raise(ArgumentError("size(circum_loading) = $(size(circum_loading)) not consistent with size(time) = $(size(time)) and/or size(axial_loading) = $(size(axial_loading))")) + end + + return new{typeof(time),typeof(v),typeof(azimuth),typeof(omega),typeof(pitch),typeof(axial_loading),typeof(circum_loading)}(time, v, azimuth, omega, pitch, axial_loading, circum_loading) + end +end + +function _get_num_blades(fmt, column_names) + # Match the format against the column names. + ms = match.(fmt, column_names) + + # Remove any non-matches, for which `match` returns `nothing`. + ms_only_matches = filter(x->!isnothing(x), ms) + + # Now, get all the sorted, unique blade indices, converting them from strings to Ints. + blade_idxs = parse.(Int, unique(sort(getindex.(ms_only_matches, :blade)))) + + # The blade indices appear to start at 1, so the highest blade index is the number of blades. + num_blades = maximum(blade_idxs) + + # But check that the blade indices are what we assumed. + @assert all(blade_idxs .== 1:num_blades) + + return num_blades, ms_only_matches +end + +function _get_num_blades_num_radial(fmt, column_names) + # Let's figure out how many blades and radial stations there are. + # First, apply the loading regular expression to each column name: + ms = match.(fmt, column_names) + + # Remove any non-matches, for which `match` returns `nothing`. + ms_only_matches = filter(x->!isnothing(x), ms) + + # Now, get all the sorted, unique blade indices, converting them from strings to Ints. + blade_idxs = parse.(Int, unique(sort(getindex.(ms_only_matches, :blade)))) + + # The blade indices appear to start at 1, so the highest blade index is the number of blades. + num_blades = maximum(blade_idxs) + + # But check that the blade indices are what we assumed. + @assert all(blade_idxs .== 1:num_blades) + + # Now do the same thing for the radial indices. + radial_idxs = parse.(Int, unique(sort(getindex.(ms_only_matches, :radial)))) + num_radial = maximum(radial_idxs) + @assert all(radial_idxs .== 1:num_radial) + + return num_blades, num_radial, ms_only_matches +end + +""" + read_openfast_file(fname; + header_keyword="Time", + has_units_header=true, + time_column_name="Time", + freestream_vel_column_name="Wind1VelX", + azimuth_column_name="Azimuth", + omega_column_name="RotSpeed", + pitch_fmt=r"BlPitch(?[[:digit:]]+)", + axial_loading_fmt=r"AB(?[[:digit:]]+)N(?[[:digit:]]+)Fxl", + circum_loading_fmt=r"AB(?[[:digit:]]+)N(?[[:digit:]]+)Fyl") + +Read an OpenFAST output file and return a [`OpenFASTData`](@ref) object. + +# Arguments +* `fname`: name of the OpenFAST output file to read +* `header_keyword="Time"`: string at the beginning of the header line (maybe always "Time"?) +* `has_units_header=true`: if true, assume the file has a line directly after the header line with the units of each column +* `time_column_name=header_keyword`: name of time column in file. Set to `nothing` to skip. +* `freestream_vel_column_name`: name of the freestream velocity column in the file. Set to `nothing` to skip. +* `azimuth_column_name`: name of the azimuth column in the file. Set to `nothing` to skip. +* `omega_column_name`: name of the omega column in the file. Set to `nothing` to skip. +* `pitch_fmt`: Format for finding all pitch columns in the file. Should be a regex with a capture group named `blade` for the blade index, or `nothing` to skip. +* `axial_loading_fmt`: Format for finding all axial loading columns in the file. Should be a regex with a captures groups named `blade` and `radial` for the blade and radial indices, or `nothing` to skip. +* `circum_loading_fmt`: Format for finding all radial loading columns in the file. Should be a regex with a captures groups named `blade` and `radial` for the blade and radial indices, or `nothing` to skip. +""" +function read_openfast_file(fname; + header_keyword="Time", + has_units_header=true, + # time_column_name="Time", + time_column_name=header_keyword, + freestream_vel_column_name="Wind1VelX", + azimuth_column_name="Azimuth", + omega_column_name="RotSpeed", + pitch_fmt=r"BlPitch(?[[:digit:]]+)", + axial_loading_fmt=r"AB(?[[:digit:]]+)N(?[[:digit:]]+)Fxl", + circum_loading_fmt=r"AB(?[[:digit:]]+)N(?[[:digit:]]+)Fyl") + + # Remove leading and trailing whitespace from header keyword. + header_keyword_s = strip(header_keyword) + + # Find the first line that starts with `header_keyword_s`, which is where the header starts. + idx_header = 0 + found_header = false + for line in eachline(fname) + idx_header += 1 + if startswith(strip(line), header_keyword_s) + found_header = true + break + end + end + + # If we didn't find a header, throw an error. + if !found_header + throw(ArgumentError("Unable to find header (line starting with \"$(header_keyword_s)\") in $(fname)")) + end + + # Decide what to do with the units header. + if has_units_header + # If we have a units header, then we'll want to start reading right after it. + skipto = idx_header + 2 + else + # If there is no units header, then we don't need to skip anything and we'll just start reading directly after the header. + skipto = idx_header + 1 + end + + # Read the file into a dataframe. + df = CSV.read(fname, DataFrames.DataFrame; header=idx_header, skipto=skipto) + + # The number of times is equal to the number of rows in the dataframe. + num_times = DataFrames.nrow(df) + + # This gives us all the column names in the dataframe. + colnames = DataFrames.names(df) + + if time_column_name === nothing + time = nothing + else + time = df[!, time_column_name] + end + + if freestream_vel_column_name === nothing + v = nothing + else + v = df[!, freestream_vel_column_name] + end + + if azimuth_column_name === nothing + azimuth = nothing + else + azimuth = df[!, azimuth_column_name] + end + + if omega_column_name === nothing + omega = nothing + else + omega = df[!, omega_column_name] + end + + if pitch_fmt === nothing + pitch = nothing + else + # Get the number of blades and the pitch column names according to the pitch format. + pitch_num_blades, pitch_matches = _get_num_blades(pitch_fmt, colnames) + + # Decide on an element type for the pitch, then read in the pitch. + TF_pitch = promote_type(eltype.(getproperty.(Ref(df), getproperty.(pitch_matches, :match)))...) + pitch = Array{TF_pitch, 2}(undef, num_times, pitch_num_blades) + for m in pitch_matches + b = parse(Int, m[:blade]) + pitch[:, b] .= df[!, m.match] + end + end + + if axial_loading_fmt === nothing + axial_loading = nothing + else + # Get the number of blades and radial stations according to the axial loading format. + axial_num_blades, axial_num_radial, axial_matches = _get_num_blades_num_radial(axial_loading_fmt, colnames) + + # Decide on an element type for the axial loading, then read in the axial loading. + TF_axial = promote_type(eltype.(getproperty.(Ref(df), getproperty.(axial_matches, :match)))...) + axial_loading = Array{TF_axial, 3}(undef, num_times, axial_num_radial, axial_num_blades) + for m in axial_matches + b = parse(Int, m[:blade]) + r = parse(Int, m[:radial]) + axial_loading[:, r, b] .= df[!, m.match] + end + end + + if circum_loading_fmt === nothing + circum_loading = nothing + else + # Make sure we get the same thing if we use the circumferential loading format. + circum_num_blades, circum_num_radial, circum_matches = _get_num_blades_num_radial(circum_loading_fmt, colnames) + + # Decide on an element type for the axial loading. + TF_circum = promote_type(eltype.(getproperty.(Ref(df), getproperty.(circum_matches, :match)))...) + circum_loading = Array{TF_circum, 3}(undef, num_times, circum_num_radial, circum_num_blades) + for m in circum_matches + b = parse(Int, m[:blade]) + r = parse(Int, m[:radial]) + circum_loading[:, r, b] .= df[!, m.match] + end + end + + return OpenFASTData(time, v, azimuth, omega, pitch, axial_loading, circum_loading) +end diff --git a/test/Project.toml b/test/Project.toml index 91eb067b..93aed7bd 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,6 +1,7 @@ [deps] AcousticMetrics = "046f749b-9c1e-43ca-86bc-6902340f753e" CCBlade = "e1828068-15df-11e9-03e4-ef195ea46fa4" +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" FLOWMath = "6cb5d3fb-0fe8-4cc2-bd89-9fe0b19a99d3" Formatting = "59287772-0a20-5a39-b81b-1366585eb4c0" @@ -15,4 +16,5 @@ Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" SHA = "ea8e919c-243c-51af-8825-aaa63cd721ce" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/test/combine_tests.jl b/test/combine_tests.jl index d0136e97..51628586 100644 --- a/test/combine_tests.jl +++ b/test/combine_tests.jl @@ -2,7 +2,7 @@ module CombineTests using AcousticAnalogies using FLOWMath: akima, linear -using Random +# using Random using Test @testset "Combine F1AOutput tests" begin @@ -18,11 +18,19 @@ using Test # Add a bit of random noise to the time grid. Make sure that the amount of # randomness isn't large enough to make the time values non-monotonically # increasing (i.e., they don't overlap). - t1 .+= 0.49.*dt.*(1 .- 2 .* rand(size(t1)...)) + # t1 .+= 0.49.*dt.*(1 .- 2 .* rand(size(t1)...)) + # Annoyed by the randomness. + # Let's make sure we have the same amount of "noise" for each test. + wiggle1 = 0.49.*dt.*(cos.(2.0*pi.*t1)) + t1 .+= wiggle1 t2 = collect(range(0.1, 1.1, length=n)) dt = t2[2] - t2[1] - t2 .+= 0.49.*dt.*(1 .- 2 .* rand(size(t2)...)) + # t2 .+= 0.49.*dt.*(1 .- 2 .* rand(size(t2)...)) + # Annoyed by the randomness. + # Let's make sure we have the same amount of "noise" for each test. + wiggle2 = 0.45.*dt.*(cos.(4.0*pi.*t2)) + t2 .+= wiggle2 # Now I need a bunch of acoustic pressures. apth1 = @. F1AOutput(t1, fa(t1), 2*fa(t1)) diff --git a/test/gen_test_data/openfast_data/IEA-3.4-130-RWT-small-FooTime.out b/test/gen_test_data/openfast_data/IEA-3.4-130-RWT-small-FooTime.out new file mode 100644 index 00000000..5eb16c76 --- /dev/null +++ b/test/gen_test_data/openfast_data/IEA-3.4-130-RWT-small-FooTime.out @@ -0,0 +1,19 @@ + +Predictions were generated on 21-Jun-2024 at 12:10:07 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.3 + linked with NWTC Subroutine Library; ElastoDyn; InflowWind; AeroDyn; ServoDyn + +Description from the FAST input file: Generated with AeroElasticSE FAST driver + +FooTime Wind1VelX Azimuth BlPitch1 BlPitch2 BlPitch3 GenSpeed RotSpeed AB1N001Fxl AB1N002Fxl AB1N003Fxl AB1N004Fxl AB1N005Fxl AB1N006Fxl AB1N007Fxl AB1N008Fxl AB1N009Fxl AB1N010Fxl AB1N011Fxl AB1N012Fxl AB1N013Fxl AB1N014Fxl AB1N015Fxl AB1N016Fxl AB1N017Fxl AB1N018Fxl AB1N019Fxl AB1N020Fxl AB1N021Fxl AB1N022Fxl AB1N023Fxl AB1N024Fxl AB1N025Fxl AB1N026Fxl AB1N027Fxl AB1N028Fxl AB1N029Fxl AB1N030Fxl AB2N001Fxl AB2N002Fxl AB2N003Fxl AB2N004Fxl AB2N005Fxl AB2N006Fxl AB2N007Fxl AB2N008Fxl AB2N009Fxl AB2N010Fxl AB2N011Fxl AB2N012Fxl AB2N013Fxl AB2N014Fxl AB2N015Fxl AB2N016Fxl AB2N017Fxl AB2N018Fxl AB2N019Fxl AB2N020Fxl AB2N021Fxl AB2N022Fxl AB2N023Fxl AB2N024Fxl AB2N025Fxl AB2N026Fxl AB2N027Fxl AB2N028Fxl AB2N029Fxl AB2N030Fxl AB3N001Fxl AB3N002Fxl AB3N003Fxl AB3N004Fxl AB3N005Fxl AB3N006Fxl AB3N007Fxl AB3N008Fxl AB3N009Fxl AB3N010Fxl AB3N011Fxl AB3N012Fxl AB3N013Fxl AB3N014Fxl AB3N015Fxl AB3N016Fxl AB3N017Fxl AB3N018Fxl AB3N019Fxl AB3N020Fxl AB3N021Fxl AB3N022Fxl AB3N023Fxl AB3N024Fxl AB3N025Fxl AB3N026Fxl AB3N027Fxl AB3N028Fxl AB3N029Fxl AB3N030Fxl AB1N001Fyl AB1N002Fyl AB1N003Fyl AB1N004Fyl AB1N005Fyl AB1N006Fyl AB1N007Fyl AB1N008Fyl AB1N009Fyl AB1N010Fyl AB1N011Fyl AB1N012Fyl AB1N013Fyl AB1N014Fyl AB1N015Fyl AB1N016Fyl AB1N017Fyl AB1N018Fyl AB1N019Fyl AB1N020Fyl AB1N021Fyl AB1N022Fyl AB1N023Fyl AB1N024Fyl AB1N025Fyl AB1N026Fyl AB1N027Fyl AB1N028Fyl AB1N029Fyl AB1N030Fyl AB2N001Fyl AB2N002Fyl AB2N003Fyl AB2N004Fyl AB2N005Fyl AB2N006Fyl AB2N007Fyl AB2N008Fyl AB2N009Fyl AB2N010Fyl AB2N011Fyl AB2N012Fyl AB2N013Fyl AB2N014Fyl AB2N015Fyl AB2N016Fyl AB2N017Fyl AB2N018Fyl AB2N019Fyl AB2N020Fyl AB2N021Fyl AB2N022Fyl AB2N023Fyl AB2N024Fyl AB2N025Fyl AB2N026Fyl AB2N027Fyl AB2N028Fyl AB2N029Fyl AB2N030Fyl AB3N001Fyl AB3N002Fyl AB3N003Fyl AB3N004Fyl AB3N005Fyl AB3N006Fyl AB3N007Fyl AB3N008Fyl AB3N009Fyl AB3N010Fyl AB3N011Fyl AB3N012Fyl AB3N013Fyl AB3N014Fyl AB3N015Fyl AB3N016Fyl AB3N017Fyl AB3N018Fyl AB3N019Fyl AB3N020Fyl AB3N021Fyl AB3N022Fyl AB3N023Fyl AB3N024Fyl AB3N025Fyl AB3N026Fyl AB3N027Fyl AB3N028Fyl AB3N029Fyl AB3N030Fyl +(s) (m/s) (deg) (deg) (deg) (deg) (rpm) (rpm) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) + 60.0000 7.000E+00 3.970E+01 0.000E+00 0.000E+00 0.000E+00 7.885E+02 8.129E+00 1.938E-17 2.882E+01 8.455E+01 2.074E+02 3.452E+02 4.612E+02 7.604E+02 9.048E+02 1.074E+03 1.229E+03 1.400E+03 1.564E+03 1.714E+03 1.843E+03 1.961E+03 2.065E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.218E+03 3.351E+03 3.364E+03 3.114E+03 2.348E+03 3.941E+02 -2.364E-17 2.144E+01 7.560E+01 2.024E+02 3.448E+02 5.349E+02 6.793E+02 8.087E+02 9.574E+02 1.111E+03 1.267E+03 1.414E+03 1.543E+03 1.653E+03 1.751E+03 1.837E+03 1.919E+03 2.016E+03 2.124E+03 2.226E+03 2.319E+03 2.417E+03 2.526E+03 2.652E+03 2.792E+03 2.906E+03 2.929E+03 2.748E+03 2.107E+03 3.806E+02 4.573E-18 4.265E+01 9.755E+01 2.325E+02 3.798E+02 6.198E+02 6.952E+02 8.279E+02 9.837E+02 1.137E+03 1.295E+03 1.448E+03 1.589E+03 1.709E+03 1.818E+03 1.913E+03 2.004E+03 2.110E+03 2.226E+03 2.338E+03 2.443E+03 2.553E+03 2.675E+03 2.820E+03 2.979E+03 3.098E+03 3.107E+03 2.893E+03 2.189E+03 3.797E+02 3.475E+00 -1.641E+01 1.674E+00 -6.842E+01 -1.338E+02 -1.995E+02 -2.806E+02 -2.895E+02 -2.997E+02 -3.036E+02 -3.053E+02 -3.052E+02 -3.050E+02 -3.060E+02 -3.074E+02 -3.090E+02 -3.104E+02 -3.121E+02 -3.142E+02 -3.153E+02 -3.154E+02 -3.156E+02 -3.157E+02 -3.150E+02 -3.111E+02 -3.026E+02 -2.875E+02 -2.571E+02 -1.949E+02 2.959E+00 3.353E+00 -2.540E+01 -6.108E+00 -6.035E+01 -1.292E+02 -2.160E+02 -2.324E+02 -2.414E+02 -2.498E+02 -2.537E+02 -2.529E+02 -2.498E+02 -2.461E+02 -2.437E+02 -2.419E+02 -2.406E+02 -2.393E+02 -2.375E+02 -2.355E+02 -2.334E+02 -2.311E+02 -2.282E+02 -2.243E+02 -2.183E+02 -2.101E+02 -2.010E+02 -1.902E+02 -1.727E+02 -1.331E+02 2.803E+00 9.194E-01 1.383E+01 -6.531E+00 -7.908E+01 -1.497E+02 -2.811E+02 -2.587E+02 -2.667E+02 -2.757E+02 -2.810E+02 -2.822E+02 -2.816E+02 -2.806E+02 -2.806E+02 -2.810E+02 -2.814E+02 -2.818E+02 -2.827E+02 -2.838E+02 -2.839E+02 -2.826E+02 -2.805E+02 -2.781E+02 -2.746E+02 -2.681E+02 -2.573E+02 -2.420E+02 -2.177E+02 -1.659E+02 2.387E+00 + 60.0100 7.000E+00 4.019E+01 0.000E+00 0.000E+00 0.000E+00 7.885E+02 8.128E+00 5.068E-17 2.865E+01 8.455E+01 2.075E+02 3.454E+02 4.595E+02 7.604E+02 9.047E+02 1.074E+03 1.229E+03 1.400E+03 1.564E+03 1.714E+03 1.843E+03 1.961E+03 2.065E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.218E+03 3.351E+03 3.364E+03 3.114E+03 2.348E+03 3.942E+02 -4.667E-17 2.143E+01 7.539E+01 2.019E+02 3.440E+02 5.341E+02 6.783E+02 8.078E+02 9.565E+02 1.110E+03 1.266E+03 1.413E+03 1.543E+03 1.652E+03 1.751E+03 1.836E+03 1.918E+03 2.015E+03 2.123E+03 2.224E+03 2.318E+03 2.415E+03 2.524E+03 2.651E+03 2.790E+03 2.904E+03 2.927E+03 2.746E+03 2.106E+03 3.806E+02 1.747E-17 4.267E+01 9.752E+01 2.324E+02 3.797E+02 6.191E+02 6.956E+02 8.284E+02 9.844E+02 1.137E+03 1.296E+03 1.449E+03 1.590E+03 1.710E+03 1.819E+03 1.915E+03 2.006E+03 2.112E+03 2.228E+03 2.339E+03 2.444E+03 2.555E+03 2.677E+03 2.822E+03 2.981E+03 3.101E+03 3.110E+03 2.895E+03 2.190E+03 3.798E+02 3.494E+00 -1.674E+01 1.688E+00 -6.842E+01 -1.338E+02 -1.988E+02 -2.805E+02 -2.894E+02 -2.996E+02 -3.034E+02 -3.051E+02 -3.050E+02 -3.048E+02 -3.058E+02 -3.073E+02 -3.088E+02 -3.102E+02 -3.120E+02 -3.140E+02 -3.151E+02 -3.153E+02 -3.155E+02 -3.156E+02 -3.149E+02 -3.110E+02 -3.025E+02 -2.874E+02 -2.570E+02 -1.948E+02 2.961E+00 3.324E+00 -2.538E+01 -6.145E+00 -6.018E+01 -1.289E+02 -2.156E+02 -2.320E+02 -2.410E+02 -2.495E+02 -2.534E+02 -2.527E+02 -2.496E+02 -2.459E+02 -2.435E+02 -2.417E+02 -2.404E+02 -2.391E+02 -2.373E+02 -2.352E+02 -2.332E+02 -2.308E+02 -2.279E+02 -2.239E+02 -2.179E+02 -2.097E+02 -2.006E+02 -1.898E+02 -1.723E+02 -1.328E+02 2.800E+00 9.212E-01 1.384E+01 -6.452E+00 -7.899E+01 -1.496E+02 -2.805E+02 -2.590E+02 -2.669E+02 -2.760E+02 -2.813E+02 -2.825E+02 -2.819E+02 -2.809E+02 -2.810E+02 -2.813E+02 -2.818E+02 -2.822E+02 -2.832E+02 -2.843E+02 -2.844E+02 -2.831E+02 -2.810E+02 -2.786E+02 -2.750E+02 -2.685E+02 -2.578E+02 -2.424E+02 -2.181E+02 -1.662E+02 2.389E+00 + 60.0200 7.000E+00 4.068E+01 0.000E+00 0.000E+00 0.000E+00 7.884E+02 8.128E+00 -5.120E-18 2.848E+01 8.455E+01 2.075E+02 3.455E+02 4.578E+02 7.603E+02 9.046E+02 1.074E+03 1.229E+03 1.400E+03 1.564E+03 1.714E+03 1.843E+03 1.961E+03 2.064E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.114E+03 2.349E+03 3.942E+02 -5.752E-17 2.143E+01 7.518E+01 2.014E+02 3.431E+02 5.333E+02 6.773E+02 8.068E+02 9.556E+02 1.110E+03 1.265E+03 1.412E+03 1.542E+03 1.651E+03 1.750E+03 1.835E+03 1.917E+03 2.014E+03 2.122E+03 2.223E+03 2.316E+03 2.414E+03 2.522E+03 2.649E+03 2.789E+03 2.902E+03 2.925E+03 2.744E+03 2.105E+03 3.805E+02 3.038E-17 4.268E+01 9.750E+01 2.323E+02 3.796E+02 6.185E+02 6.960E+02 8.289E+02 9.851E+02 1.138E+03 1.297E+03 1.450E+03 1.591E+03 1.711E+03 1.820E+03 1.916E+03 2.007E+03 2.113E+03 2.229E+03 2.341E+03 2.446E+03 2.557E+03 2.679E+03 2.825E+03 2.983E+03 3.103E+03 3.112E+03 2.897E+03 2.192E+03 3.800E+02 3.513E+00 -1.707E+01 1.702E+00 -6.842E+01 -1.338E+02 -1.981E+02 -2.803E+02 -2.893E+02 -2.994E+02 -3.033E+02 -3.050E+02 -3.048E+02 -3.046E+02 -3.057E+02 -3.071E+02 -3.086E+02 -3.100E+02 -3.118E+02 -3.139E+02 -3.149E+02 -3.152E+02 -3.153E+02 -3.154E+02 -3.148E+02 -3.109E+02 -3.024E+02 -2.873E+02 -2.570E+02 -1.948E+02 2.963E+00 3.295E+00 -2.536E+01 -6.182E+00 -6.001E+01 -1.286E+02 -2.151E+02 -2.316E+02 -2.407E+02 -2.492E+02 -2.532E+02 -2.524E+02 -2.494E+02 -2.456E+02 -2.433E+02 -2.415E+02 -2.402E+02 -2.388E+02 -2.370E+02 -2.349E+02 -2.329E+02 -2.305E+02 -2.275E+02 -2.236E+02 -2.175E+02 -2.093E+02 -2.002E+02 -1.894E+02 -1.719E+02 -1.326E+02 2.797E+00 9.232E-01 1.385E+01 -6.374E+00 -7.891E+01 -1.494E+02 -2.799E+02 -2.592E+02 -2.672E+02 -2.762E+02 -2.816E+02 -2.828E+02 -2.822E+02 -2.813E+02 -2.813E+02 -2.817E+02 -2.822E+02 -2.826E+02 -2.836E+02 -2.847E+02 -2.848E+02 -2.836E+02 -2.814E+02 -2.790E+02 -2.755E+02 -2.690E+02 -2.583E+02 -2.429E+02 -2.185E+02 -1.665E+02 2.390E+00 + 60.0300 7.000E+00 4.117E+01 0.000E+00 0.000E+00 0.000E+00 7.884E+02 8.128E+00 5.894E-17 2.832E+01 8.455E+01 2.076E+02 3.457E+02 4.562E+02 7.603E+02 9.045E+02 1.074E+03 1.229E+03 1.399E+03 1.563E+03 1.714E+03 1.843E+03 1.961E+03 2.064E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.114E+03 2.349E+03 3.943E+02 4.009E-18 2.143E+01 7.497E+01 2.008E+02 3.422E+02 5.324E+02 6.762E+02 8.058E+02 9.546E+02 1.109E+03 1.264E+03 1.412E+03 1.541E+03 1.650E+03 1.749E+03 1.834E+03 1.916E+03 2.013E+03 2.121E+03 2.222E+03 2.315E+03 2.413E+03 2.521E+03 2.647E+03 2.787E+03 2.900E+03 2.923E+03 2.742E+03 2.104E+03 3.805E+02 4.887E-18 4.269E+01 9.747E+01 2.323E+02 3.795E+02 6.178E+02 6.965E+02 8.295E+02 9.858E+02 1.139E+03 1.298E+03 1.451E+03 1.592E+03 1.712E+03 1.821E+03 1.917E+03 2.009E+03 2.114E+03 2.231E+03 2.342E+03 2.448E+03 2.559E+03 2.681E+03 2.827E+03 2.986E+03 3.105E+03 3.114E+03 2.899E+03 2.193E+03 3.801E+02 3.532E+00 -1.738E+01 1.716E+00 -6.841E+01 -1.339E+02 -1.974E+02 -2.802E+02 -2.891E+02 -2.993E+02 -3.032E+02 -3.048E+02 -3.047E+02 -3.045E+02 -3.055E+02 -3.069E+02 -3.084E+02 -3.099E+02 -3.117E+02 -3.137E+02 -3.148E+02 -3.150E+02 -3.152E+02 -3.153E+02 -3.146E+02 -3.107E+02 -3.022E+02 -2.872E+02 -2.569E+02 -1.947E+02 2.965E+00 3.266E+00 -2.533E+01 -6.219E+00 -5.983E+01 -1.283E+02 -2.147E+02 -2.312E+02 -2.404E+02 -2.489E+02 -2.529E+02 -2.522E+02 -2.491E+02 -2.454E+02 -2.430E+02 -2.412E+02 -2.399E+02 -2.386E+02 -2.367E+02 -2.347E+02 -2.326E+02 -2.301E+02 -2.272E+02 -2.232E+02 -2.171E+02 -2.088E+02 -1.997E+02 -1.890E+02 -1.715E+02 -1.323E+02 2.794E+00 9.252E-01 1.385E+01 -6.296E+00 -7.882E+01 -1.493E+02 -2.793E+02 -2.595E+02 -2.675E+02 -2.765E+02 -2.819E+02 -2.831E+02 -2.825E+02 -2.816E+02 -2.817E+02 -2.821E+02 -2.826E+02 -2.830E+02 -2.840E+02 -2.851E+02 -2.853E+02 -2.840E+02 -2.819E+02 -2.795E+02 -2.760E+02 -2.695E+02 -2.588E+02 -2.434E+02 -2.189E+02 -1.667E+02 2.392E+00 + 60.0400 7.000E+00 4.165E+01 0.000E+00 0.000E+00 0.000E+00 7.883E+02 8.127E+00 -8.886E-17 2.816E+01 8.454E+01 2.077E+02 3.459E+02 4.546E+02 7.602E+02 9.044E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.714E+03 1.843E+03 1.961E+03 2.064E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.114E+03 2.349E+03 3.944E+02 -8.505E-17 2.143E+01 7.476E+01 2.003E+02 3.413E+02 5.315E+02 6.751E+02 8.047E+02 9.535E+02 1.108E+03 1.263E+03 1.411E+03 1.540E+03 1.649E+03 1.747E+03 1.833E+03 1.915E+03 2.012E+03 2.120E+03 2.221E+03 2.314E+03 2.411E+03 2.519E+03 2.645E+03 2.785E+03 2.898E+03 2.921E+03 2.741E+03 2.103E+03 3.804E+02 4.950E-17 4.271E+01 9.744E+01 2.322E+02 3.795E+02 6.171E+02 6.969E+02 8.300E+02 9.865E+02 1.139E+03 1.299E+03 1.452E+03 1.593E+03 1.713E+03 1.823E+03 1.919E+03 2.010E+03 2.116E+03 2.232E+03 2.344E+03 2.449E+03 2.560E+03 2.682E+03 2.829E+03 2.988E+03 3.108E+03 3.117E+03 2.901E+03 2.195E+03 3.803E+02 3.551E+00 -1.769E+01 1.730E+00 -6.841E+01 -1.339E+02 -1.967E+02 -2.801E+02 -2.890E+02 -2.991E+02 -3.030E+02 -3.047E+02 -3.045E+02 -3.043E+02 -3.053E+02 -3.067E+02 -3.083E+02 -3.097E+02 -3.115E+02 -3.135E+02 -3.146E+02 -3.149E+02 -3.150E+02 -3.152E+02 -3.145E+02 -3.106E+02 -3.021E+02 -2.871E+02 -2.568E+02 -1.946E+02 2.967E+00 3.237E+00 -2.531E+01 -6.255E+00 -5.965E+01 -1.279E+02 -2.142E+02 -2.307E+02 -2.400E+02 -2.486E+02 -2.526E+02 -2.519E+02 -2.489E+02 -2.452E+02 -2.428E+02 -2.410E+02 -2.397E+02 -2.383E+02 -2.365E+02 -2.344E+02 -2.322E+02 -2.298E+02 -2.268E+02 -2.228E+02 -2.167E+02 -2.084E+02 -1.993E+02 -1.886E+02 -1.712E+02 -1.320E+02 2.792E+00 9.274E-01 1.386E+01 -6.219E+00 -7.874E+01 -1.491E+02 -2.787E+02 -2.597E+02 -2.677E+02 -2.768E+02 -2.822E+02 -2.834E+02 -2.828E+02 -2.820E+02 -2.820E+02 -2.825E+02 -2.829E+02 -2.834E+02 -2.844E+02 -2.855E+02 -2.857E+02 -2.844E+02 -2.824E+02 -2.799E+02 -2.764E+02 -2.700E+02 -2.593E+02 -2.438E+02 -2.193E+02 -1.670E+02 2.394E+00 + 60.0500 7.000E+00 4.214E+01 0.000E+00 0.000E+00 0.000E+00 7.883E+02 8.127E+00 1.840E-17 2.801E+01 8.454E+01 2.077E+02 3.461E+02 4.531E+02 7.602E+02 9.043E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.843E+03 1.960E+03 2.064E+03 2.161E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.944E+02 -1.679E-17 2.144E+01 7.456E+01 1.997E+02 3.404E+02 5.305E+02 6.739E+02 8.035E+02 9.524E+02 1.107E+03 1.262E+03 1.410E+03 1.539E+03 1.648E+03 1.746E+03 1.832E+03 1.913E+03 2.011E+03 2.118E+03 2.219E+03 2.312E+03 2.409E+03 2.517E+03 2.643E+03 2.783E+03 2.896E+03 2.919E+03 2.739E+03 2.101E+03 3.804E+02 1.297E-17 4.272E+01 9.742E+01 2.321E+02 3.794E+02 6.164E+02 6.974E+02 8.306E+02 9.872E+02 1.140E+03 1.299E+03 1.453E+03 1.594E+03 1.714E+03 1.824E+03 1.920E+03 2.011E+03 2.117E+03 2.233E+03 2.345E+03 2.450E+03 2.562E+03 2.684E+03 2.831E+03 2.990E+03 3.110E+03 3.119E+03 2.903E+03 2.196E+03 3.804E+02 3.569E+00 -1.799E+01 1.743E+00 -6.841E+01 -1.339E+02 -1.959E+02 -2.799E+02 -2.888E+02 -2.990E+02 -3.029E+02 -3.045E+02 -3.043E+02 -3.041E+02 -3.051E+02 -3.065E+02 -3.081E+02 -3.095E+02 -3.113E+02 -3.134E+02 -3.145E+02 -3.147E+02 -3.149E+02 -3.150E+02 -3.144E+02 -3.105E+02 -3.020E+02 -2.870E+02 -2.567E+02 -1.946E+02 2.970E+00 3.207E+00 -2.528E+01 -6.292E+00 -5.947E+01 -1.276E+02 -2.137E+02 -2.303E+02 -2.396E+02 -2.482E+02 -2.523E+02 -2.517E+02 -2.486E+02 -2.449E+02 -2.425E+02 -2.407E+02 -2.394E+02 -2.380E+02 -2.362E+02 -2.341E+02 -2.319E+02 -2.295E+02 -2.265E+02 -2.224E+02 -2.163E+02 -2.080E+02 -1.989E+02 -1.882E+02 -1.708E+02 -1.317E+02 2.789E+00 9.298E-01 1.387E+01 -6.142E+00 -7.865E+01 -1.490E+02 -2.780E+02 -2.600E+02 -2.680E+02 -2.771E+02 -2.825E+02 -2.837E+02 -2.832E+02 -2.823E+02 -2.824E+02 -2.829E+02 -2.833E+02 -2.838E+02 -2.848E+02 -2.859E+02 -2.861E+02 -2.849E+02 -2.828E+02 -2.803E+02 -2.769E+02 -2.704E+02 -2.598E+02 -2.443E+02 -2.197E+02 -1.673E+02 2.396E+00 + 60.0600 7.000E+00 4.263E+01 0.000E+00 0.000E+00 0.000E+00 7.883E+02 8.126E+00 4.315E-17 2.786E+01 8.454E+01 2.078E+02 3.462E+02 4.516E+02 7.601E+02 9.042E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.843E+03 1.960E+03 2.064E+03 2.161E+03 2.271E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.945E+02 3.447E-17 2.144E+01 7.435E+01 1.992E+02 3.394E+02 5.295E+02 6.726E+02 8.023E+02 9.512E+02 1.105E+03 1.261E+03 1.408E+03 1.537E+03 1.647E+03 1.745E+03 1.831E+03 1.912E+03 2.009E+03 2.117E+03 2.218E+03 2.311E+03 2.408E+03 2.516E+03 2.641E+03 2.781E+03 2.894E+03 2.917E+03 2.737E+03 2.100E+03 3.804E+02 -2.018E-17 4.273E+01 9.740E+01 2.321E+02 3.793E+02 6.158E+02 6.978E+02 8.311E+02 9.879E+02 1.141E+03 1.300E+03 1.454E+03 1.595E+03 1.716E+03 1.825E+03 1.921E+03 2.013E+03 2.119E+03 2.235E+03 2.347E+03 2.452E+03 2.564E+03 2.686E+03 2.832E+03 2.992E+03 3.112E+03 3.121E+03 2.905E+03 2.197E+03 3.805E+02 3.587E+00 -1.828E+01 1.757E+00 -6.840E+01 -1.340E+02 -1.952E+02 -2.798E+02 -2.887E+02 -2.988E+02 -3.027E+02 -3.043E+02 -3.041E+02 -3.039E+02 -3.049E+02 -3.064E+02 -3.079E+02 -3.093E+02 -3.112E+02 -3.132E+02 -3.143E+02 -3.146E+02 -3.147E+02 -3.149E+02 -3.142E+02 -3.103E+02 -3.019E+02 -2.868E+02 -2.566E+02 -1.945E+02 2.972E+00 3.177E+00 -2.526E+01 -6.329E+00 -5.928E+01 -1.272E+02 -2.132E+02 -2.298E+02 -2.392E+02 -2.479E+02 -2.520E+02 -2.514E+02 -2.483E+02 -2.446E+02 -2.423E+02 -2.404E+02 -2.391E+02 -2.377E+02 -2.359E+02 -2.337E+02 -2.316E+02 -2.291E+02 -2.261E+02 -2.220E+02 -2.159E+02 -2.076E+02 -1.985E+02 -1.878E+02 -1.704E+02 -1.314E+02 2.786E+00 9.323E-01 1.388E+01 -6.066E+00 -7.857E+01 -1.489E+02 -2.774E+02 -2.602E+02 -2.682E+02 -2.773E+02 -2.828E+02 -2.840E+02 -2.835E+02 -2.827E+02 -2.828E+02 -2.833E+02 -2.837E+02 -2.842E+02 -2.852E+02 -2.863E+02 -2.865E+02 -2.853E+02 -2.833E+02 -2.808E+02 -2.773E+02 -2.709E+02 -2.602E+02 -2.447E+02 -2.201E+02 -1.675E+02 2.397E+00 + 60.0700 7.000E+00 4.312E+01 0.000E+00 0.000E+00 0.000E+00 7.882E+02 8.126E+00 1.788E-17 2.771E+01 8.454E+01 2.079E+02 3.464E+02 4.503E+02 7.600E+02 9.041E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.842E+03 1.960E+03 2.064E+03 2.161E+03 2.271E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.945E+02 -7.687E-17 2.145E+01 7.414E+01 1.986E+02 3.384E+02 5.284E+02 6.713E+02 8.011E+02 9.500E+02 1.104E+03 1.260E+03 1.407E+03 1.536E+03 1.645E+03 1.744E+03 1.829E+03 1.911E+03 2.008E+03 2.116E+03 2.216E+03 2.309E+03 2.406E+03 2.514E+03 2.640E+03 2.779E+03 2.892E+03 2.915E+03 2.735E+03 2.099E+03 3.803E+02 1.476E-17 4.275E+01 9.737E+01 2.320E+02 3.792E+02 6.151E+02 6.983E+02 8.317E+02 9.886E+02 1.141E+03 1.301E+03 1.455E+03 1.596E+03 1.717E+03 1.826E+03 1.923E+03 2.014E+03 2.120E+03 2.236E+03 2.348E+03 2.453E+03 2.566E+03 2.688E+03 2.834E+03 2.994E+03 3.115E+03 3.124E+03 2.907E+03 2.199E+03 3.807E+02 3.606E+00 -1.856E+01 1.770E+00 -6.840E+01 -1.340E+02 -1.946E+02 -2.797E+02 -2.886E+02 -2.987E+02 -3.026E+02 -3.042E+02 -3.040E+02 -3.037E+02 -3.047E+02 -3.062E+02 -3.077E+02 -3.092E+02 -3.110E+02 -3.130E+02 -3.141E+02 -3.144E+02 -3.146E+02 -3.147E+02 -3.141E+02 -3.101E+02 -3.017E+02 -2.867E+02 -2.565E+02 -1.944E+02 2.974E+00 3.148E+00 -2.524E+01 -6.366E+00 -5.910E+01 -1.268E+02 -2.127E+02 -2.293E+02 -2.388E+02 -2.475E+02 -2.517E+02 -2.511E+02 -2.481E+02 -2.444E+02 -2.420E+02 -2.401E+02 -2.388E+02 -2.374E+02 -2.355E+02 -2.334E+02 -2.312E+02 -2.287E+02 -2.257E+02 -2.216E+02 -2.154E+02 -2.071E+02 -1.980E+02 -1.873E+02 -1.700E+02 -1.312E+02 2.783E+00 9.349E-01 1.389E+01 -5.990E+00 -7.848E+01 -1.487E+02 -2.768E+02 -2.605E+02 -2.685E+02 -2.776E+02 -2.831E+02 -2.843E+02 -2.838E+02 -2.830E+02 -2.831E+02 -2.836E+02 -2.841E+02 -2.846E+02 -2.856E+02 -2.868E+02 -2.869E+02 -2.857E+02 -2.837E+02 -2.812E+02 -2.777E+02 -2.713E+02 -2.607E+02 -2.452E+02 -2.204E+02 -1.678E+02 2.399E+00 + 60.0800 7.000E+00 4.360E+01 0.000E+00 0.000E+00 0.000E+00 7.882E+02 8.126E+00 -8.062E-17 2.757E+01 8.454E+01 2.079E+02 3.466E+02 4.489E+02 7.600E+02 9.040E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.842E+03 1.960E+03 2.064E+03 2.161E+03 2.271E+03 2.393E+03 2.509E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.946E+02 -2.856E-17 2.146E+01 7.394E+01 1.980E+02 3.374E+02 5.273E+02 6.700E+02 7.997E+02 9.486E+02 1.103E+03 1.259E+03 1.406E+03 1.535E+03 1.644E+03 1.742E+03 1.828E+03 1.909E+03 2.006E+03 2.114E+03 2.215E+03 2.307E+03 2.404E+03 2.512E+03 2.637E+03 2.777E+03 2.890E+03 2.913E+03 2.734E+03 2.098E+03 3.803E+02 5.655E-17 4.276E+01 9.735E+01 2.320E+02 3.791E+02 6.144E+02 6.988E+02 8.323E+02 9.893E+02 1.142E+03 1.302E+03 1.456E+03 1.597E+03 1.718E+03 1.828E+03 1.924E+03 2.016E+03 2.121E+03 2.238E+03 2.349E+03 2.455E+03 2.567E+03 2.690E+03 2.836E+03 2.996E+03 3.117E+03 3.126E+03 2.908E+03 2.200E+03 3.808E+02 3.624E+00 -1.883E+01 1.784E+00 -6.839E+01 -1.340E+02 -1.939E+02 -2.795E+02 -2.884E+02 -2.985E+02 -3.024E+02 -3.040E+02 -3.038E+02 -3.035E+02 -3.045E+02 -3.060E+02 -3.075E+02 -3.090E+02 -3.108E+02 -3.128E+02 -3.139E+02 -3.142E+02 -3.144E+02 -3.146E+02 -3.139E+02 -3.100E+02 -3.016E+02 -2.865E+02 -2.564E+02 -1.944E+02 2.976E+00 3.118E+00 -2.521E+01 -6.403E+00 -5.891E+01 -1.264E+02 -2.122E+02 -2.288E+02 -2.383E+02 -2.471E+02 -2.513E+02 -2.508E+02 -2.477E+02 -2.440E+02 -2.417E+02 -2.398E+02 -2.385E+02 -2.371E+02 -2.352E+02 -2.330E+02 -2.308E+02 -2.283E+02 -2.253E+02 -2.212E+02 -2.150E+02 -2.067E+02 -1.976E+02 -1.869E+02 -1.696E+02 -1.309E+02 2.780E+00 9.377E-01 1.390E+01 -5.914E+00 -7.840E+01 -1.486E+02 -2.761E+02 -2.607E+02 -2.687E+02 -2.779E+02 -2.834E+02 -2.846E+02 -2.841E+02 -2.834E+02 -2.835E+02 -2.840E+02 -2.845E+02 -2.850E+02 -2.860E+02 -2.871E+02 -2.873E+02 -2.861E+02 -2.841E+02 -2.816E+02 -2.781E+02 -2.718E+02 -2.612E+02 -2.456E+02 -2.208E+02 -1.681E+02 2.401E+00 + 60.0900 7.000E+00 4.409E+01 0.000E+00 0.000E+00 0.000E+00 7.882E+02 8.125E+00 7.231E-17 2.744E+01 8.454E+01 2.080E+02 3.468E+02 4.477E+02 7.599E+02 9.039E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.842E+03 1.960E+03 2.063E+03 2.161E+03 2.271E+03 2.393E+03 2.509E+03 2.621E+03 2.742E+03 2.877E+03 3.041E+03 3.216E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.947E+02 -3.398E-17 2.147E+01 7.373E+01 1.974E+02 3.364E+02 5.262E+02 6.685E+02 7.983E+02 9.472E+02 1.101E+03 1.257E+03 1.405E+03 1.533E+03 1.643E+03 1.741E+03 1.826E+03 1.908E+03 2.005E+03 2.112E+03 2.213E+03 2.305E+03 2.402E+03 2.510E+03 2.635E+03 2.774E+03 2.888E+03 2.911E+03 2.732E+03 2.097E+03 3.802E+02 -6.772E-18 4.277E+01 9.733E+01 2.319E+02 3.791E+02 6.137E+02 6.992E+02 8.328E+02 9.900E+02 1.143E+03 1.303E+03 1.457E+03 1.598E+03 1.719E+03 1.829E+03 1.925E+03 2.017E+03 2.123E+03 2.239E+03 2.351E+03 2.456E+03 2.569E+03 2.691E+03 2.838E+03 2.998E+03 3.119E+03 3.128E+03 2.910E+03 2.202E+03 3.809E+02 3.642E+00 -1.909E+01 1.797E+00 -6.839E+01 -1.341E+02 -1.932E+02 -2.794E+02 -2.882E+02 -2.983E+02 -3.023E+02 -3.038E+02 -3.036E+02 -3.034E+02 -3.043E+02 -3.058E+02 -3.073E+02 -3.088E+02 -3.106E+02 -3.126E+02 -3.137E+02 -3.140E+02 -3.143E+02 -3.144E+02 -3.138E+02 -3.098E+02 -3.014E+02 -2.864E+02 -2.563E+02 -1.943E+02 2.978E+00 3.088E+00 -2.519E+01 -6.439E+00 -5.872E+01 -1.261E+02 -2.116E+02 -2.283E+02 -2.379E+02 -2.467E+02 -2.509E+02 -2.504E+02 -2.474E+02 -2.437E+02 -2.413E+02 -2.395E+02 -2.382E+02 -2.367E+02 -2.348E+02 -2.327E+02 -2.304E+02 -2.279E+02 -2.249E+02 -2.207E+02 -2.145E+02 -2.062E+02 -1.971E+02 -1.865E+02 -1.693E+02 -1.306E+02 2.777E+00 9.406E-01 1.392E+01 -5.838E+00 -7.831E+01 -1.485E+02 -2.755E+02 -2.610E+02 -2.690E+02 -2.782E+02 -2.837E+02 -2.849E+02 -2.845E+02 -2.837E+02 -2.839E+02 -2.844E+02 -2.849E+02 -2.853E+02 -2.864E+02 -2.875E+02 -2.877E+02 -2.865E+02 -2.846E+02 -2.820E+02 -2.786E+02 -2.722E+02 -2.616E+02 -2.461E+02 -2.212E+02 -1.684E+02 2.403E+00 + 60.1000 7.000E+00 4.458E+01 0.000E+00 0.000E+00 0.000E+00 7.881E+02 8.125E+00 -2.519E-18 2.730E+01 8.453E+01 2.081E+02 3.469E+02 4.465E+02 7.598E+02 9.037E+02 1.072E+03 1.228E+03 1.398E+03 1.562E+03 1.713E+03 1.842E+03 1.960E+03 2.063E+03 2.161E+03 2.271E+03 2.393E+03 2.509E+03 2.621E+03 2.742E+03 2.877E+03 3.041E+03 3.216E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.947E+02 -1.121E-17 2.148E+01 7.353E+01 1.969E+02 3.353E+02 5.250E+02 6.671E+02 7.969E+02 9.457E+02 1.100E+03 1.256E+03 1.403E+03 1.532E+03 1.641E+03 1.739E+03 1.825E+03 1.906E+03 2.003E+03 2.110E+03 2.211E+03 2.304E+03 2.400E+03 2.508E+03 2.633E+03 2.772E+03 2.886E+03 2.909E+03 2.730E+03 2.096E+03 3.802E+02 1.074E-17 4.279E+01 9.731E+01 2.318E+02 3.790E+02 6.131E+02 6.997E+02 8.334E+02 9.907E+02 1.144E+03 1.303E+03 1.458E+03 1.599E+03 1.720E+03 1.830E+03 1.927E+03 2.018E+03 2.124E+03 2.240E+03 2.352E+03 2.458E+03 2.570E+03 2.693E+03 2.840E+03 3.000E+03 3.121E+03 3.130E+03 2.912E+03 2.203E+03 3.810E+02 3.660E+00 -1.934E+01 1.810E+00 -6.838E+01 -1.341E+02 -1.926E+02 -2.792E+02 -2.881E+02 -2.982E+02 -3.021E+02 -3.036E+02 -3.034E+02 -3.032E+02 -3.041E+02 -3.056E+02 -3.071E+02 -3.086E+02 -3.104E+02 -3.124E+02 -3.136E+02 -3.139E+02 -3.141E+02 -3.142E+02 -3.136E+02 -3.096E+02 -3.013E+02 -2.862E+02 -2.562E+02 -1.942E+02 2.980E+00 3.058E+00 -2.516E+01 -6.476E+00 -5.853E+01 -1.257E+02 -2.110E+02 -2.277E+02 -2.374E+02 -2.462E+02 -2.505E+02 -2.501E+02 -2.471E+02 -2.434E+02 -2.410E+02 -2.391E+02 -2.378E+02 -2.364E+02 -2.345E+02 -2.322E+02 -2.300E+02 -2.275E+02 -2.244E+02 -2.203E+02 -2.140E+02 -2.057E+02 -1.967E+02 -1.860E+02 -1.689E+02 -1.303E+02 2.775E+00 9.437E-01 1.393E+01 -5.763E+00 -7.823E+01 -1.483E+02 -2.748E+02 -2.613E+02 -2.693E+02 -2.785E+02 -2.839E+02 -2.852E+02 -2.848E+02 -2.840E+02 -2.842E+02 -2.847E+02 -2.853E+02 -2.857E+02 -2.868E+02 -2.879E+02 -2.881E+02 -2.869E+02 -2.850E+02 -2.824E+02 -2.790E+02 -2.726E+02 -2.621E+02 -2.465E+02 -2.216E+02 -1.686E+02 2.405E+00 diff --git a/test/gen_test_data/openfast_data/IEA-3.4-130-RWT-small-no_units.out b/test/gen_test_data/openfast_data/IEA-3.4-130-RWT-small-no_units.out new file mode 100644 index 00000000..56de4d98 --- /dev/null +++ b/test/gen_test_data/openfast_data/IEA-3.4-130-RWT-small-no_units.out @@ -0,0 +1,18 @@ + +Predictions were generated on 21-Jun-2024 at 12:10:07 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.3 + linked with NWTC Subroutine Library; ElastoDyn; InflowWind; AeroDyn; ServoDyn + +Description from the FAST input file: Generated with AeroElasticSE FAST driver + +Time Wind1VelX Azimuth BlPitch1 BlPitch2 BlPitch3 GenSpeed RotSpeed AB1N001Fxl AB1N002Fxl AB1N003Fxl AB1N004Fxl AB1N005Fxl AB1N006Fxl AB1N007Fxl AB1N008Fxl AB1N009Fxl AB1N010Fxl AB1N011Fxl AB1N012Fxl AB1N013Fxl AB1N014Fxl AB1N015Fxl AB1N016Fxl AB1N017Fxl AB1N018Fxl AB1N019Fxl AB1N020Fxl AB1N021Fxl AB1N022Fxl AB1N023Fxl AB1N024Fxl AB1N025Fxl AB1N026Fxl AB1N027Fxl AB1N028Fxl AB1N029Fxl AB1N030Fxl AB2N001Fxl AB2N002Fxl AB2N003Fxl AB2N004Fxl AB2N005Fxl AB2N006Fxl AB2N007Fxl AB2N008Fxl AB2N009Fxl AB2N010Fxl AB2N011Fxl AB2N012Fxl AB2N013Fxl AB2N014Fxl AB2N015Fxl AB2N016Fxl AB2N017Fxl AB2N018Fxl AB2N019Fxl AB2N020Fxl AB2N021Fxl AB2N022Fxl AB2N023Fxl AB2N024Fxl AB2N025Fxl AB2N026Fxl AB2N027Fxl AB2N028Fxl AB2N029Fxl AB2N030Fxl AB3N001Fxl AB3N002Fxl AB3N003Fxl AB3N004Fxl AB3N005Fxl AB3N006Fxl AB3N007Fxl AB3N008Fxl AB3N009Fxl AB3N010Fxl AB3N011Fxl AB3N012Fxl AB3N013Fxl AB3N014Fxl AB3N015Fxl AB3N016Fxl AB3N017Fxl AB3N018Fxl AB3N019Fxl AB3N020Fxl AB3N021Fxl AB3N022Fxl AB3N023Fxl AB3N024Fxl AB3N025Fxl AB3N026Fxl AB3N027Fxl AB3N028Fxl AB3N029Fxl AB3N030Fxl AB1N001Fyl AB1N002Fyl AB1N003Fyl AB1N004Fyl AB1N005Fyl AB1N006Fyl AB1N007Fyl AB1N008Fyl AB1N009Fyl AB1N010Fyl AB1N011Fyl AB1N012Fyl AB1N013Fyl AB1N014Fyl AB1N015Fyl AB1N016Fyl AB1N017Fyl AB1N018Fyl AB1N019Fyl AB1N020Fyl AB1N021Fyl AB1N022Fyl AB1N023Fyl AB1N024Fyl AB1N025Fyl AB1N026Fyl AB1N027Fyl AB1N028Fyl AB1N029Fyl AB1N030Fyl AB2N001Fyl AB2N002Fyl AB2N003Fyl AB2N004Fyl AB2N005Fyl AB2N006Fyl AB2N007Fyl AB2N008Fyl AB2N009Fyl AB2N010Fyl AB2N011Fyl AB2N012Fyl AB2N013Fyl AB2N014Fyl AB2N015Fyl AB2N016Fyl AB2N017Fyl AB2N018Fyl AB2N019Fyl AB2N020Fyl AB2N021Fyl AB2N022Fyl AB2N023Fyl AB2N024Fyl AB2N025Fyl AB2N026Fyl AB2N027Fyl AB2N028Fyl AB2N029Fyl AB2N030Fyl AB3N001Fyl AB3N002Fyl AB3N003Fyl AB3N004Fyl AB3N005Fyl AB3N006Fyl AB3N007Fyl AB3N008Fyl AB3N009Fyl AB3N010Fyl AB3N011Fyl AB3N012Fyl AB3N013Fyl AB3N014Fyl AB3N015Fyl AB3N016Fyl AB3N017Fyl AB3N018Fyl AB3N019Fyl AB3N020Fyl AB3N021Fyl AB3N022Fyl AB3N023Fyl AB3N024Fyl AB3N025Fyl AB3N026Fyl AB3N027Fyl AB3N028Fyl AB3N029Fyl AB3N030Fyl + 60.0000 7.000E+00 3.970E+01 0.000E+00 0.000E+00 0.000E+00 7.885E+02 8.129E+00 1.938E-17 2.882E+01 8.455E+01 2.074E+02 3.452E+02 4.612E+02 7.604E+02 9.048E+02 1.074E+03 1.229E+03 1.400E+03 1.564E+03 1.714E+03 1.843E+03 1.961E+03 2.065E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.218E+03 3.351E+03 3.364E+03 3.114E+03 2.348E+03 3.941E+02 -2.364E-17 2.144E+01 7.560E+01 2.024E+02 3.448E+02 5.349E+02 6.793E+02 8.087E+02 9.574E+02 1.111E+03 1.267E+03 1.414E+03 1.543E+03 1.653E+03 1.751E+03 1.837E+03 1.919E+03 2.016E+03 2.124E+03 2.226E+03 2.319E+03 2.417E+03 2.526E+03 2.652E+03 2.792E+03 2.906E+03 2.929E+03 2.748E+03 2.107E+03 3.806E+02 4.573E-18 4.265E+01 9.755E+01 2.325E+02 3.798E+02 6.198E+02 6.952E+02 8.279E+02 9.837E+02 1.137E+03 1.295E+03 1.448E+03 1.589E+03 1.709E+03 1.818E+03 1.913E+03 2.004E+03 2.110E+03 2.226E+03 2.338E+03 2.443E+03 2.553E+03 2.675E+03 2.820E+03 2.979E+03 3.098E+03 3.107E+03 2.893E+03 2.189E+03 3.797E+02 3.475E+00 -1.641E+01 1.674E+00 -6.842E+01 -1.338E+02 -1.995E+02 -2.806E+02 -2.895E+02 -2.997E+02 -3.036E+02 -3.053E+02 -3.052E+02 -3.050E+02 -3.060E+02 -3.074E+02 -3.090E+02 -3.104E+02 -3.121E+02 -3.142E+02 -3.153E+02 -3.154E+02 -3.156E+02 -3.157E+02 -3.150E+02 -3.111E+02 -3.026E+02 -2.875E+02 -2.571E+02 -1.949E+02 2.959E+00 3.353E+00 -2.540E+01 -6.108E+00 -6.035E+01 -1.292E+02 -2.160E+02 -2.324E+02 -2.414E+02 -2.498E+02 -2.537E+02 -2.529E+02 -2.498E+02 -2.461E+02 -2.437E+02 -2.419E+02 -2.406E+02 -2.393E+02 -2.375E+02 -2.355E+02 -2.334E+02 -2.311E+02 -2.282E+02 -2.243E+02 -2.183E+02 -2.101E+02 -2.010E+02 -1.902E+02 -1.727E+02 -1.331E+02 2.803E+00 9.194E-01 1.383E+01 -6.531E+00 -7.908E+01 -1.497E+02 -2.811E+02 -2.587E+02 -2.667E+02 -2.757E+02 -2.810E+02 -2.822E+02 -2.816E+02 -2.806E+02 -2.806E+02 -2.810E+02 -2.814E+02 -2.818E+02 -2.827E+02 -2.838E+02 -2.839E+02 -2.826E+02 -2.805E+02 -2.781E+02 -2.746E+02 -2.681E+02 -2.573E+02 -2.420E+02 -2.177E+02 -1.659E+02 2.387E+00 + 60.0100 7.000E+00 4.019E+01 0.000E+00 0.000E+00 0.000E+00 7.885E+02 8.128E+00 5.068E-17 2.865E+01 8.455E+01 2.075E+02 3.454E+02 4.595E+02 7.604E+02 9.047E+02 1.074E+03 1.229E+03 1.400E+03 1.564E+03 1.714E+03 1.843E+03 1.961E+03 2.065E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.218E+03 3.351E+03 3.364E+03 3.114E+03 2.348E+03 3.942E+02 -4.667E-17 2.143E+01 7.539E+01 2.019E+02 3.440E+02 5.341E+02 6.783E+02 8.078E+02 9.565E+02 1.110E+03 1.266E+03 1.413E+03 1.543E+03 1.652E+03 1.751E+03 1.836E+03 1.918E+03 2.015E+03 2.123E+03 2.224E+03 2.318E+03 2.415E+03 2.524E+03 2.651E+03 2.790E+03 2.904E+03 2.927E+03 2.746E+03 2.106E+03 3.806E+02 1.747E-17 4.267E+01 9.752E+01 2.324E+02 3.797E+02 6.191E+02 6.956E+02 8.284E+02 9.844E+02 1.137E+03 1.296E+03 1.449E+03 1.590E+03 1.710E+03 1.819E+03 1.915E+03 2.006E+03 2.112E+03 2.228E+03 2.339E+03 2.444E+03 2.555E+03 2.677E+03 2.822E+03 2.981E+03 3.101E+03 3.110E+03 2.895E+03 2.190E+03 3.798E+02 3.494E+00 -1.674E+01 1.688E+00 -6.842E+01 -1.338E+02 -1.988E+02 -2.805E+02 -2.894E+02 -2.996E+02 -3.034E+02 -3.051E+02 -3.050E+02 -3.048E+02 -3.058E+02 -3.073E+02 -3.088E+02 -3.102E+02 -3.120E+02 -3.140E+02 -3.151E+02 -3.153E+02 -3.155E+02 -3.156E+02 -3.149E+02 -3.110E+02 -3.025E+02 -2.874E+02 -2.570E+02 -1.948E+02 2.961E+00 3.324E+00 -2.538E+01 -6.145E+00 -6.018E+01 -1.289E+02 -2.156E+02 -2.320E+02 -2.410E+02 -2.495E+02 -2.534E+02 -2.527E+02 -2.496E+02 -2.459E+02 -2.435E+02 -2.417E+02 -2.404E+02 -2.391E+02 -2.373E+02 -2.352E+02 -2.332E+02 -2.308E+02 -2.279E+02 -2.239E+02 -2.179E+02 -2.097E+02 -2.006E+02 -1.898E+02 -1.723E+02 -1.328E+02 2.800E+00 9.212E-01 1.384E+01 -6.452E+00 -7.899E+01 -1.496E+02 -2.805E+02 -2.590E+02 -2.669E+02 -2.760E+02 -2.813E+02 -2.825E+02 -2.819E+02 -2.809E+02 -2.810E+02 -2.813E+02 -2.818E+02 -2.822E+02 -2.832E+02 -2.843E+02 -2.844E+02 -2.831E+02 -2.810E+02 -2.786E+02 -2.750E+02 -2.685E+02 -2.578E+02 -2.424E+02 -2.181E+02 -1.662E+02 2.389E+00 + 60.0200 7.000E+00 4.068E+01 0.000E+00 0.000E+00 0.000E+00 7.884E+02 8.128E+00 -5.120E-18 2.848E+01 8.455E+01 2.075E+02 3.455E+02 4.578E+02 7.603E+02 9.046E+02 1.074E+03 1.229E+03 1.400E+03 1.564E+03 1.714E+03 1.843E+03 1.961E+03 2.064E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.114E+03 2.349E+03 3.942E+02 -5.752E-17 2.143E+01 7.518E+01 2.014E+02 3.431E+02 5.333E+02 6.773E+02 8.068E+02 9.556E+02 1.110E+03 1.265E+03 1.412E+03 1.542E+03 1.651E+03 1.750E+03 1.835E+03 1.917E+03 2.014E+03 2.122E+03 2.223E+03 2.316E+03 2.414E+03 2.522E+03 2.649E+03 2.789E+03 2.902E+03 2.925E+03 2.744E+03 2.105E+03 3.805E+02 3.038E-17 4.268E+01 9.750E+01 2.323E+02 3.796E+02 6.185E+02 6.960E+02 8.289E+02 9.851E+02 1.138E+03 1.297E+03 1.450E+03 1.591E+03 1.711E+03 1.820E+03 1.916E+03 2.007E+03 2.113E+03 2.229E+03 2.341E+03 2.446E+03 2.557E+03 2.679E+03 2.825E+03 2.983E+03 3.103E+03 3.112E+03 2.897E+03 2.192E+03 3.800E+02 3.513E+00 -1.707E+01 1.702E+00 -6.842E+01 -1.338E+02 -1.981E+02 -2.803E+02 -2.893E+02 -2.994E+02 -3.033E+02 -3.050E+02 -3.048E+02 -3.046E+02 -3.057E+02 -3.071E+02 -3.086E+02 -3.100E+02 -3.118E+02 -3.139E+02 -3.149E+02 -3.152E+02 -3.153E+02 -3.154E+02 -3.148E+02 -3.109E+02 -3.024E+02 -2.873E+02 -2.570E+02 -1.948E+02 2.963E+00 3.295E+00 -2.536E+01 -6.182E+00 -6.001E+01 -1.286E+02 -2.151E+02 -2.316E+02 -2.407E+02 -2.492E+02 -2.532E+02 -2.524E+02 -2.494E+02 -2.456E+02 -2.433E+02 -2.415E+02 -2.402E+02 -2.388E+02 -2.370E+02 -2.349E+02 -2.329E+02 -2.305E+02 -2.275E+02 -2.236E+02 -2.175E+02 -2.093E+02 -2.002E+02 -1.894E+02 -1.719E+02 -1.326E+02 2.797E+00 9.232E-01 1.385E+01 -6.374E+00 -7.891E+01 -1.494E+02 -2.799E+02 -2.592E+02 -2.672E+02 -2.762E+02 -2.816E+02 -2.828E+02 -2.822E+02 -2.813E+02 -2.813E+02 -2.817E+02 -2.822E+02 -2.826E+02 -2.836E+02 -2.847E+02 -2.848E+02 -2.836E+02 -2.814E+02 -2.790E+02 -2.755E+02 -2.690E+02 -2.583E+02 -2.429E+02 -2.185E+02 -1.665E+02 2.390E+00 + 60.0300 7.000E+00 4.117E+01 0.000E+00 0.000E+00 0.000E+00 7.884E+02 8.128E+00 5.894E-17 2.832E+01 8.455E+01 2.076E+02 3.457E+02 4.562E+02 7.603E+02 9.045E+02 1.074E+03 1.229E+03 1.399E+03 1.563E+03 1.714E+03 1.843E+03 1.961E+03 2.064E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.114E+03 2.349E+03 3.943E+02 4.009E-18 2.143E+01 7.497E+01 2.008E+02 3.422E+02 5.324E+02 6.762E+02 8.058E+02 9.546E+02 1.109E+03 1.264E+03 1.412E+03 1.541E+03 1.650E+03 1.749E+03 1.834E+03 1.916E+03 2.013E+03 2.121E+03 2.222E+03 2.315E+03 2.413E+03 2.521E+03 2.647E+03 2.787E+03 2.900E+03 2.923E+03 2.742E+03 2.104E+03 3.805E+02 4.887E-18 4.269E+01 9.747E+01 2.323E+02 3.795E+02 6.178E+02 6.965E+02 8.295E+02 9.858E+02 1.139E+03 1.298E+03 1.451E+03 1.592E+03 1.712E+03 1.821E+03 1.917E+03 2.009E+03 2.114E+03 2.231E+03 2.342E+03 2.448E+03 2.559E+03 2.681E+03 2.827E+03 2.986E+03 3.105E+03 3.114E+03 2.899E+03 2.193E+03 3.801E+02 3.532E+00 -1.738E+01 1.716E+00 -6.841E+01 -1.339E+02 -1.974E+02 -2.802E+02 -2.891E+02 -2.993E+02 -3.032E+02 -3.048E+02 -3.047E+02 -3.045E+02 -3.055E+02 -3.069E+02 -3.084E+02 -3.099E+02 -3.117E+02 -3.137E+02 -3.148E+02 -3.150E+02 -3.152E+02 -3.153E+02 -3.146E+02 -3.107E+02 -3.022E+02 -2.872E+02 -2.569E+02 -1.947E+02 2.965E+00 3.266E+00 -2.533E+01 -6.219E+00 -5.983E+01 -1.283E+02 -2.147E+02 -2.312E+02 -2.404E+02 -2.489E+02 -2.529E+02 -2.522E+02 -2.491E+02 -2.454E+02 -2.430E+02 -2.412E+02 -2.399E+02 -2.386E+02 -2.367E+02 -2.347E+02 -2.326E+02 -2.301E+02 -2.272E+02 -2.232E+02 -2.171E+02 -2.088E+02 -1.997E+02 -1.890E+02 -1.715E+02 -1.323E+02 2.794E+00 9.252E-01 1.385E+01 -6.296E+00 -7.882E+01 -1.493E+02 -2.793E+02 -2.595E+02 -2.675E+02 -2.765E+02 -2.819E+02 -2.831E+02 -2.825E+02 -2.816E+02 -2.817E+02 -2.821E+02 -2.826E+02 -2.830E+02 -2.840E+02 -2.851E+02 -2.853E+02 -2.840E+02 -2.819E+02 -2.795E+02 -2.760E+02 -2.695E+02 -2.588E+02 -2.434E+02 -2.189E+02 -1.667E+02 2.392E+00 + 60.0400 7.000E+00 4.165E+01 0.000E+00 0.000E+00 0.000E+00 7.883E+02 8.127E+00 -8.886E-17 2.816E+01 8.454E+01 2.077E+02 3.459E+02 4.546E+02 7.602E+02 9.044E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.714E+03 1.843E+03 1.961E+03 2.064E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.114E+03 2.349E+03 3.944E+02 -8.505E-17 2.143E+01 7.476E+01 2.003E+02 3.413E+02 5.315E+02 6.751E+02 8.047E+02 9.535E+02 1.108E+03 1.263E+03 1.411E+03 1.540E+03 1.649E+03 1.747E+03 1.833E+03 1.915E+03 2.012E+03 2.120E+03 2.221E+03 2.314E+03 2.411E+03 2.519E+03 2.645E+03 2.785E+03 2.898E+03 2.921E+03 2.741E+03 2.103E+03 3.804E+02 4.950E-17 4.271E+01 9.744E+01 2.322E+02 3.795E+02 6.171E+02 6.969E+02 8.300E+02 9.865E+02 1.139E+03 1.299E+03 1.452E+03 1.593E+03 1.713E+03 1.823E+03 1.919E+03 2.010E+03 2.116E+03 2.232E+03 2.344E+03 2.449E+03 2.560E+03 2.682E+03 2.829E+03 2.988E+03 3.108E+03 3.117E+03 2.901E+03 2.195E+03 3.803E+02 3.551E+00 -1.769E+01 1.730E+00 -6.841E+01 -1.339E+02 -1.967E+02 -2.801E+02 -2.890E+02 -2.991E+02 -3.030E+02 -3.047E+02 -3.045E+02 -3.043E+02 -3.053E+02 -3.067E+02 -3.083E+02 -3.097E+02 -3.115E+02 -3.135E+02 -3.146E+02 -3.149E+02 -3.150E+02 -3.152E+02 -3.145E+02 -3.106E+02 -3.021E+02 -2.871E+02 -2.568E+02 -1.946E+02 2.967E+00 3.237E+00 -2.531E+01 -6.255E+00 -5.965E+01 -1.279E+02 -2.142E+02 -2.307E+02 -2.400E+02 -2.486E+02 -2.526E+02 -2.519E+02 -2.489E+02 -2.452E+02 -2.428E+02 -2.410E+02 -2.397E+02 -2.383E+02 -2.365E+02 -2.344E+02 -2.322E+02 -2.298E+02 -2.268E+02 -2.228E+02 -2.167E+02 -2.084E+02 -1.993E+02 -1.886E+02 -1.712E+02 -1.320E+02 2.792E+00 9.274E-01 1.386E+01 -6.219E+00 -7.874E+01 -1.491E+02 -2.787E+02 -2.597E+02 -2.677E+02 -2.768E+02 -2.822E+02 -2.834E+02 -2.828E+02 -2.820E+02 -2.820E+02 -2.825E+02 -2.829E+02 -2.834E+02 -2.844E+02 -2.855E+02 -2.857E+02 -2.844E+02 -2.824E+02 -2.799E+02 -2.764E+02 -2.700E+02 -2.593E+02 -2.438E+02 -2.193E+02 -1.670E+02 2.394E+00 + 60.0500 7.000E+00 4.214E+01 0.000E+00 0.000E+00 0.000E+00 7.883E+02 8.127E+00 1.840E-17 2.801E+01 8.454E+01 2.077E+02 3.461E+02 4.531E+02 7.602E+02 9.043E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.843E+03 1.960E+03 2.064E+03 2.161E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.944E+02 -1.679E-17 2.144E+01 7.456E+01 1.997E+02 3.404E+02 5.305E+02 6.739E+02 8.035E+02 9.524E+02 1.107E+03 1.262E+03 1.410E+03 1.539E+03 1.648E+03 1.746E+03 1.832E+03 1.913E+03 2.011E+03 2.118E+03 2.219E+03 2.312E+03 2.409E+03 2.517E+03 2.643E+03 2.783E+03 2.896E+03 2.919E+03 2.739E+03 2.101E+03 3.804E+02 1.297E-17 4.272E+01 9.742E+01 2.321E+02 3.794E+02 6.164E+02 6.974E+02 8.306E+02 9.872E+02 1.140E+03 1.299E+03 1.453E+03 1.594E+03 1.714E+03 1.824E+03 1.920E+03 2.011E+03 2.117E+03 2.233E+03 2.345E+03 2.450E+03 2.562E+03 2.684E+03 2.831E+03 2.990E+03 3.110E+03 3.119E+03 2.903E+03 2.196E+03 3.804E+02 3.569E+00 -1.799E+01 1.743E+00 -6.841E+01 -1.339E+02 -1.959E+02 -2.799E+02 -2.888E+02 -2.990E+02 -3.029E+02 -3.045E+02 -3.043E+02 -3.041E+02 -3.051E+02 -3.065E+02 -3.081E+02 -3.095E+02 -3.113E+02 -3.134E+02 -3.145E+02 -3.147E+02 -3.149E+02 -3.150E+02 -3.144E+02 -3.105E+02 -3.020E+02 -2.870E+02 -2.567E+02 -1.946E+02 2.970E+00 3.207E+00 -2.528E+01 -6.292E+00 -5.947E+01 -1.276E+02 -2.137E+02 -2.303E+02 -2.396E+02 -2.482E+02 -2.523E+02 -2.517E+02 -2.486E+02 -2.449E+02 -2.425E+02 -2.407E+02 -2.394E+02 -2.380E+02 -2.362E+02 -2.341E+02 -2.319E+02 -2.295E+02 -2.265E+02 -2.224E+02 -2.163E+02 -2.080E+02 -1.989E+02 -1.882E+02 -1.708E+02 -1.317E+02 2.789E+00 9.298E-01 1.387E+01 -6.142E+00 -7.865E+01 -1.490E+02 -2.780E+02 -2.600E+02 -2.680E+02 -2.771E+02 -2.825E+02 -2.837E+02 -2.832E+02 -2.823E+02 -2.824E+02 -2.829E+02 -2.833E+02 -2.838E+02 -2.848E+02 -2.859E+02 -2.861E+02 -2.849E+02 -2.828E+02 -2.803E+02 -2.769E+02 -2.704E+02 -2.598E+02 -2.443E+02 -2.197E+02 -1.673E+02 2.396E+00 + 60.0600 7.000E+00 4.263E+01 0.000E+00 0.000E+00 0.000E+00 7.883E+02 8.126E+00 4.315E-17 2.786E+01 8.454E+01 2.078E+02 3.462E+02 4.516E+02 7.601E+02 9.042E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.843E+03 1.960E+03 2.064E+03 2.161E+03 2.271E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.945E+02 3.447E-17 2.144E+01 7.435E+01 1.992E+02 3.394E+02 5.295E+02 6.726E+02 8.023E+02 9.512E+02 1.105E+03 1.261E+03 1.408E+03 1.537E+03 1.647E+03 1.745E+03 1.831E+03 1.912E+03 2.009E+03 2.117E+03 2.218E+03 2.311E+03 2.408E+03 2.516E+03 2.641E+03 2.781E+03 2.894E+03 2.917E+03 2.737E+03 2.100E+03 3.804E+02 -2.018E-17 4.273E+01 9.740E+01 2.321E+02 3.793E+02 6.158E+02 6.978E+02 8.311E+02 9.879E+02 1.141E+03 1.300E+03 1.454E+03 1.595E+03 1.716E+03 1.825E+03 1.921E+03 2.013E+03 2.119E+03 2.235E+03 2.347E+03 2.452E+03 2.564E+03 2.686E+03 2.832E+03 2.992E+03 3.112E+03 3.121E+03 2.905E+03 2.197E+03 3.805E+02 3.587E+00 -1.828E+01 1.757E+00 -6.840E+01 -1.340E+02 -1.952E+02 -2.798E+02 -2.887E+02 -2.988E+02 -3.027E+02 -3.043E+02 -3.041E+02 -3.039E+02 -3.049E+02 -3.064E+02 -3.079E+02 -3.093E+02 -3.112E+02 -3.132E+02 -3.143E+02 -3.146E+02 -3.147E+02 -3.149E+02 -3.142E+02 -3.103E+02 -3.019E+02 -2.868E+02 -2.566E+02 -1.945E+02 2.972E+00 3.177E+00 -2.526E+01 -6.329E+00 -5.928E+01 -1.272E+02 -2.132E+02 -2.298E+02 -2.392E+02 -2.479E+02 -2.520E+02 -2.514E+02 -2.483E+02 -2.446E+02 -2.423E+02 -2.404E+02 -2.391E+02 -2.377E+02 -2.359E+02 -2.337E+02 -2.316E+02 -2.291E+02 -2.261E+02 -2.220E+02 -2.159E+02 -2.076E+02 -1.985E+02 -1.878E+02 -1.704E+02 -1.314E+02 2.786E+00 9.323E-01 1.388E+01 -6.066E+00 -7.857E+01 -1.489E+02 -2.774E+02 -2.602E+02 -2.682E+02 -2.773E+02 -2.828E+02 -2.840E+02 -2.835E+02 -2.827E+02 -2.828E+02 -2.833E+02 -2.837E+02 -2.842E+02 -2.852E+02 -2.863E+02 -2.865E+02 -2.853E+02 -2.833E+02 -2.808E+02 -2.773E+02 -2.709E+02 -2.602E+02 -2.447E+02 -2.201E+02 -1.675E+02 2.397E+00 + 60.0700 7.000E+00 4.312E+01 0.000E+00 0.000E+00 0.000E+00 7.882E+02 8.126E+00 1.788E-17 2.771E+01 8.454E+01 2.079E+02 3.464E+02 4.503E+02 7.600E+02 9.041E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.842E+03 1.960E+03 2.064E+03 2.161E+03 2.271E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.945E+02 -7.687E-17 2.145E+01 7.414E+01 1.986E+02 3.384E+02 5.284E+02 6.713E+02 8.011E+02 9.500E+02 1.104E+03 1.260E+03 1.407E+03 1.536E+03 1.645E+03 1.744E+03 1.829E+03 1.911E+03 2.008E+03 2.116E+03 2.216E+03 2.309E+03 2.406E+03 2.514E+03 2.640E+03 2.779E+03 2.892E+03 2.915E+03 2.735E+03 2.099E+03 3.803E+02 1.476E-17 4.275E+01 9.737E+01 2.320E+02 3.792E+02 6.151E+02 6.983E+02 8.317E+02 9.886E+02 1.141E+03 1.301E+03 1.455E+03 1.596E+03 1.717E+03 1.826E+03 1.923E+03 2.014E+03 2.120E+03 2.236E+03 2.348E+03 2.453E+03 2.566E+03 2.688E+03 2.834E+03 2.994E+03 3.115E+03 3.124E+03 2.907E+03 2.199E+03 3.807E+02 3.606E+00 -1.856E+01 1.770E+00 -6.840E+01 -1.340E+02 -1.946E+02 -2.797E+02 -2.886E+02 -2.987E+02 -3.026E+02 -3.042E+02 -3.040E+02 -3.037E+02 -3.047E+02 -3.062E+02 -3.077E+02 -3.092E+02 -3.110E+02 -3.130E+02 -3.141E+02 -3.144E+02 -3.146E+02 -3.147E+02 -3.141E+02 -3.101E+02 -3.017E+02 -2.867E+02 -2.565E+02 -1.944E+02 2.974E+00 3.148E+00 -2.524E+01 -6.366E+00 -5.910E+01 -1.268E+02 -2.127E+02 -2.293E+02 -2.388E+02 -2.475E+02 -2.517E+02 -2.511E+02 -2.481E+02 -2.444E+02 -2.420E+02 -2.401E+02 -2.388E+02 -2.374E+02 -2.355E+02 -2.334E+02 -2.312E+02 -2.287E+02 -2.257E+02 -2.216E+02 -2.154E+02 -2.071E+02 -1.980E+02 -1.873E+02 -1.700E+02 -1.312E+02 2.783E+00 9.349E-01 1.389E+01 -5.990E+00 -7.848E+01 -1.487E+02 -2.768E+02 -2.605E+02 -2.685E+02 -2.776E+02 -2.831E+02 -2.843E+02 -2.838E+02 -2.830E+02 -2.831E+02 -2.836E+02 -2.841E+02 -2.846E+02 -2.856E+02 -2.868E+02 -2.869E+02 -2.857E+02 -2.837E+02 -2.812E+02 -2.777E+02 -2.713E+02 -2.607E+02 -2.452E+02 -2.204E+02 -1.678E+02 2.399E+00 + 60.0800 7.000E+00 4.360E+01 0.000E+00 0.000E+00 0.000E+00 7.882E+02 8.126E+00 -8.062E-17 2.757E+01 8.454E+01 2.079E+02 3.466E+02 4.489E+02 7.600E+02 9.040E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.842E+03 1.960E+03 2.064E+03 2.161E+03 2.271E+03 2.393E+03 2.509E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.946E+02 -2.856E-17 2.146E+01 7.394E+01 1.980E+02 3.374E+02 5.273E+02 6.700E+02 7.997E+02 9.486E+02 1.103E+03 1.259E+03 1.406E+03 1.535E+03 1.644E+03 1.742E+03 1.828E+03 1.909E+03 2.006E+03 2.114E+03 2.215E+03 2.307E+03 2.404E+03 2.512E+03 2.637E+03 2.777E+03 2.890E+03 2.913E+03 2.734E+03 2.098E+03 3.803E+02 5.655E-17 4.276E+01 9.735E+01 2.320E+02 3.791E+02 6.144E+02 6.988E+02 8.323E+02 9.893E+02 1.142E+03 1.302E+03 1.456E+03 1.597E+03 1.718E+03 1.828E+03 1.924E+03 2.016E+03 2.121E+03 2.238E+03 2.349E+03 2.455E+03 2.567E+03 2.690E+03 2.836E+03 2.996E+03 3.117E+03 3.126E+03 2.908E+03 2.200E+03 3.808E+02 3.624E+00 -1.883E+01 1.784E+00 -6.839E+01 -1.340E+02 -1.939E+02 -2.795E+02 -2.884E+02 -2.985E+02 -3.024E+02 -3.040E+02 -3.038E+02 -3.035E+02 -3.045E+02 -3.060E+02 -3.075E+02 -3.090E+02 -3.108E+02 -3.128E+02 -3.139E+02 -3.142E+02 -3.144E+02 -3.146E+02 -3.139E+02 -3.100E+02 -3.016E+02 -2.865E+02 -2.564E+02 -1.944E+02 2.976E+00 3.118E+00 -2.521E+01 -6.403E+00 -5.891E+01 -1.264E+02 -2.122E+02 -2.288E+02 -2.383E+02 -2.471E+02 -2.513E+02 -2.508E+02 -2.477E+02 -2.440E+02 -2.417E+02 -2.398E+02 -2.385E+02 -2.371E+02 -2.352E+02 -2.330E+02 -2.308E+02 -2.283E+02 -2.253E+02 -2.212E+02 -2.150E+02 -2.067E+02 -1.976E+02 -1.869E+02 -1.696E+02 -1.309E+02 2.780E+00 9.377E-01 1.390E+01 -5.914E+00 -7.840E+01 -1.486E+02 -2.761E+02 -2.607E+02 -2.687E+02 -2.779E+02 -2.834E+02 -2.846E+02 -2.841E+02 -2.834E+02 -2.835E+02 -2.840E+02 -2.845E+02 -2.850E+02 -2.860E+02 -2.871E+02 -2.873E+02 -2.861E+02 -2.841E+02 -2.816E+02 -2.781E+02 -2.718E+02 -2.612E+02 -2.456E+02 -2.208E+02 -1.681E+02 2.401E+00 + 60.0900 7.000E+00 4.409E+01 0.000E+00 0.000E+00 0.000E+00 7.882E+02 8.125E+00 7.231E-17 2.744E+01 8.454E+01 2.080E+02 3.468E+02 4.477E+02 7.599E+02 9.039E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.842E+03 1.960E+03 2.063E+03 2.161E+03 2.271E+03 2.393E+03 2.509E+03 2.621E+03 2.742E+03 2.877E+03 3.041E+03 3.216E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.947E+02 -3.398E-17 2.147E+01 7.373E+01 1.974E+02 3.364E+02 5.262E+02 6.685E+02 7.983E+02 9.472E+02 1.101E+03 1.257E+03 1.405E+03 1.533E+03 1.643E+03 1.741E+03 1.826E+03 1.908E+03 2.005E+03 2.112E+03 2.213E+03 2.305E+03 2.402E+03 2.510E+03 2.635E+03 2.774E+03 2.888E+03 2.911E+03 2.732E+03 2.097E+03 3.802E+02 -6.772E-18 4.277E+01 9.733E+01 2.319E+02 3.791E+02 6.137E+02 6.992E+02 8.328E+02 9.900E+02 1.143E+03 1.303E+03 1.457E+03 1.598E+03 1.719E+03 1.829E+03 1.925E+03 2.017E+03 2.123E+03 2.239E+03 2.351E+03 2.456E+03 2.569E+03 2.691E+03 2.838E+03 2.998E+03 3.119E+03 3.128E+03 2.910E+03 2.202E+03 3.809E+02 3.642E+00 -1.909E+01 1.797E+00 -6.839E+01 -1.341E+02 -1.932E+02 -2.794E+02 -2.882E+02 -2.983E+02 -3.023E+02 -3.038E+02 -3.036E+02 -3.034E+02 -3.043E+02 -3.058E+02 -3.073E+02 -3.088E+02 -3.106E+02 -3.126E+02 -3.137E+02 -3.140E+02 -3.143E+02 -3.144E+02 -3.138E+02 -3.098E+02 -3.014E+02 -2.864E+02 -2.563E+02 -1.943E+02 2.978E+00 3.088E+00 -2.519E+01 -6.439E+00 -5.872E+01 -1.261E+02 -2.116E+02 -2.283E+02 -2.379E+02 -2.467E+02 -2.509E+02 -2.504E+02 -2.474E+02 -2.437E+02 -2.413E+02 -2.395E+02 -2.382E+02 -2.367E+02 -2.348E+02 -2.327E+02 -2.304E+02 -2.279E+02 -2.249E+02 -2.207E+02 -2.145E+02 -2.062E+02 -1.971E+02 -1.865E+02 -1.693E+02 -1.306E+02 2.777E+00 9.406E-01 1.392E+01 -5.838E+00 -7.831E+01 -1.485E+02 -2.755E+02 -2.610E+02 -2.690E+02 -2.782E+02 -2.837E+02 -2.849E+02 -2.845E+02 -2.837E+02 -2.839E+02 -2.844E+02 -2.849E+02 -2.853E+02 -2.864E+02 -2.875E+02 -2.877E+02 -2.865E+02 -2.846E+02 -2.820E+02 -2.786E+02 -2.722E+02 -2.616E+02 -2.461E+02 -2.212E+02 -1.684E+02 2.403E+00 + 60.1000 7.000E+00 4.458E+01 0.000E+00 0.000E+00 0.000E+00 7.881E+02 8.125E+00 -2.519E-18 2.730E+01 8.453E+01 2.081E+02 3.469E+02 4.465E+02 7.598E+02 9.037E+02 1.072E+03 1.228E+03 1.398E+03 1.562E+03 1.713E+03 1.842E+03 1.960E+03 2.063E+03 2.161E+03 2.271E+03 2.393E+03 2.509E+03 2.621E+03 2.742E+03 2.877E+03 3.041E+03 3.216E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.947E+02 -1.121E-17 2.148E+01 7.353E+01 1.969E+02 3.353E+02 5.250E+02 6.671E+02 7.969E+02 9.457E+02 1.100E+03 1.256E+03 1.403E+03 1.532E+03 1.641E+03 1.739E+03 1.825E+03 1.906E+03 2.003E+03 2.110E+03 2.211E+03 2.304E+03 2.400E+03 2.508E+03 2.633E+03 2.772E+03 2.886E+03 2.909E+03 2.730E+03 2.096E+03 3.802E+02 1.074E-17 4.279E+01 9.731E+01 2.318E+02 3.790E+02 6.131E+02 6.997E+02 8.334E+02 9.907E+02 1.144E+03 1.303E+03 1.458E+03 1.599E+03 1.720E+03 1.830E+03 1.927E+03 2.018E+03 2.124E+03 2.240E+03 2.352E+03 2.458E+03 2.570E+03 2.693E+03 2.840E+03 3.000E+03 3.121E+03 3.130E+03 2.912E+03 2.203E+03 3.810E+02 3.660E+00 -1.934E+01 1.810E+00 -6.838E+01 -1.341E+02 -1.926E+02 -2.792E+02 -2.881E+02 -2.982E+02 -3.021E+02 -3.036E+02 -3.034E+02 -3.032E+02 -3.041E+02 -3.056E+02 -3.071E+02 -3.086E+02 -3.104E+02 -3.124E+02 -3.136E+02 -3.139E+02 -3.141E+02 -3.142E+02 -3.136E+02 -3.096E+02 -3.013E+02 -2.862E+02 -2.562E+02 -1.942E+02 2.980E+00 3.058E+00 -2.516E+01 -6.476E+00 -5.853E+01 -1.257E+02 -2.110E+02 -2.277E+02 -2.374E+02 -2.462E+02 -2.505E+02 -2.501E+02 -2.471E+02 -2.434E+02 -2.410E+02 -2.391E+02 -2.378E+02 -2.364E+02 -2.345E+02 -2.322E+02 -2.300E+02 -2.275E+02 -2.244E+02 -2.203E+02 -2.140E+02 -2.057E+02 -1.967E+02 -1.860E+02 -1.689E+02 -1.303E+02 2.775E+00 9.437E-01 1.393E+01 -5.763E+00 -7.823E+01 -1.483E+02 -2.748E+02 -2.613E+02 -2.693E+02 -2.785E+02 -2.839E+02 -2.852E+02 -2.848E+02 -2.840E+02 -2.842E+02 -2.847E+02 -2.853E+02 -2.857E+02 -2.868E+02 -2.879E+02 -2.881E+02 -2.869E+02 -2.850E+02 -2.824E+02 -2.790E+02 -2.726E+02 -2.621E+02 -2.465E+02 -2.216E+02 -1.686E+02 2.405E+00 diff --git a/test/gen_test_data/openfast_data/IEA-3.4-130-RWT-small.out b/test/gen_test_data/openfast_data/IEA-3.4-130-RWT-small.out new file mode 100644 index 00000000..2a902fc5 --- /dev/null +++ b/test/gen_test_data/openfast_data/IEA-3.4-130-RWT-small.out @@ -0,0 +1,19 @@ + +Predictions were generated on 21-Jun-2024 at 12:10:07 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.3 + linked with NWTC Subroutine Library; ElastoDyn; InflowWind; AeroDyn; ServoDyn + +Description from the FAST input file: Generated with AeroElasticSE FAST driver + +Time Wind1VelX Azimuth BlPitch1 BlPitch2 BlPitch3 GenSpeed RotSpeed AB1N001Fxl AB1N002Fxl AB1N003Fxl AB1N004Fxl AB1N005Fxl AB1N006Fxl AB1N007Fxl AB1N008Fxl AB1N009Fxl AB1N010Fxl AB1N011Fxl AB1N012Fxl AB1N013Fxl AB1N014Fxl AB1N015Fxl AB1N016Fxl AB1N017Fxl AB1N018Fxl AB1N019Fxl AB1N020Fxl AB1N021Fxl AB1N022Fxl AB1N023Fxl AB1N024Fxl AB1N025Fxl AB1N026Fxl AB1N027Fxl AB1N028Fxl AB1N029Fxl AB1N030Fxl AB2N001Fxl AB2N002Fxl AB2N003Fxl AB2N004Fxl AB2N005Fxl AB2N006Fxl AB2N007Fxl AB2N008Fxl AB2N009Fxl AB2N010Fxl AB2N011Fxl AB2N012Fxl AB2N013Fxl AB2N014Fxl AB2N015Fxl AB2N016Fxl AB2N017Fxl AB2N018Fxl AB2N019Fxl AB2N020Fxl AB2N021Fxl AB2N022Fxl AB2N023Fxl AB2N024Fxl AB2N025Fxl AB2N026Fxl AB2N027Fxl AB2N028Fxl AB2N029Fxl AB2N030Fxl AB3N001Fxl AB3N002Fxl AB3N003Fxl AB3N004Fxl AB3N005Fxl AB3N006Fxl AB3N007Fxl AB3N008Fxl AB3N009Fxl AB3N010Fxl AB3N011Fxl AB3N012Fxl AB3N013Fxl AB3N014Fxl AB3N015Fxl AB3N016Fxl AB3N017Fxl AB3N018Fxl AB3N019Fxl AB3N020Fxl AB3N021Fxl AB3N022Fxl AB3N023Fxl AB3N024Fxl AB3N025Fxl AB3N026Fxl AB3N027Fxl AB3N028Fxl AB3N029Fxl AB3N030Fxl AB1N001Fyl AB1N002Fyl AB1N003Fyl AB1N004Fyl AB1N005Fyl AB1N006Fyl AB1N007Fyl AB1N008Fyl AB1N009Fyl AB1N010Fyl AB1N011Fyl AB1N012Fyl AB1N013Fyl AB1N014Fyl AB1N015Fyl AB1N016Fyl AB1N017Fyl AB1N018Fyl AB1N019Fyl AB1N020Fyl AB1N021Fyl AB1N022Fyl AB1N023Fyl AB1N024Fyl AB1N025Fyl AB1N026Fyl AB1N027Fyl AB1N028Fyl AB1N029Fyl AB1N030Fyl AB2N001Fyl AB2N002Fyl AB2N003Fyl AB2N004Fyl AB2N005Fyl AB2N006Fyl AB2N007Fyl AB2N008Fyl AB2N009Fyl AB2N010Fyl AB2N011Fyl AB2N012Fyl AB2N013Fyl AB2N014Fyl AB2N015Fyl AB2N016Fyl AB2N017Fyl AB2N018Fyl AB2N019Fyl AB2N020Fyl AB2N021Fyl AB2N022Fyl AB2N023Fyl AB2N024Fyl AB2N025Fyl AB2N026Fyl AB2N027Fyl AB2N028Fyl AB2N029Fyl AB2N030Fyl AB3N001Fyl AB3N002Fyl AB3N003Fyl AB3N004Fyl AB3N005Fyl AB3N006Fyl AB3N007Fyl AB3N008Fyl AB3N009Fyl AB3N010Fyl AB3N011Fyl AB3N012Fyl AB3N013Fyl AB3N014Fyl AB3N015Fyl AB3N016Fyl AB3N017Fyl AB3N018Fyl AB3N019Fyl AB3N020Fyl AB3N021Fyl AB3N022Fyl AB3N023Fyl AB3N024Fyl AB3N025Fyl AB3N026Fyl AB3N027Fyl AB3N028Fyl AB3N029Fyl AB3N030Fyl +(s) (m/s) (deg) (deg) (deg) (deg) (rpm) (rpm) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) (N/m) + 60.0000 7.000E+00 3.970E+01 0.000E+00 0.000E+00 0.000E+00 7.885E+02 8.129E+00 1.938E-17 2.882E+01 8.455E+01 2.074E+02 3.452E+02 4.612E+02 7.604E+02 9.048E+02 1.074E+03 1.229E+03 1.400E+03 1.564E+03 1.714E+03 1.843E+03 1.961E+03 2.065E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.218E+03 3.351E+03 3.364E+03 3.114E+03 2.348E+03 3.941E+02 -2.364E-17 2.144E+01 7.560E+01 2.024E+02 3.448E+02 5.349E+02 6.793E+02 8.087E+02 9.574E+02 1.111E+03 1.267E+03 1.414E+03 1.543E+03 1.653E+03 1.751E+03 1.837E+03 1.919E+03 2.016E+03 2.124E+03 2.226E+03 2.319E+03 2.417E+03 2.526E+03 2.652E+03 2.792E+03 2.906E+03 2.929E+03 2.748E+03 2.107E+03 3.806E+02 4.573E-18 4.265E+01 9.755E+01 2.325E+02 3.798E+02 6.198E+02 6.952E+02 8.279E+02 9.837E+02 1.137E+03 1.295E+03 1.448E+03 1.589E+03 1.709E+03 1.818E+03 1.913E+03 2.004E+03 2.110E+03 2.226E+03 2.338E+03 2.443E+03 2.553E+03 2.675E+03 2.820E+03 2.979E+03 3.098E+03 3.107E+03 2.893E+03 2.189E+03 3.797E+02 3.475E+00 -1.641E+01 1.674E+00 -6.842E+01 -1.338E+02 -1.995E+02 -2.806E+02 -2.895E+02 -2.997E+02 -3.036E+02 -3.053E+02 -3.052E+02 -3.050E+02 -3.060E+02 -3.074E+02 -3.090E+02 -3.104E+02 -3.121E+02 -3.142E+02 -3.153E+02 -3.154E+02 -3.156E+02 -3.157E+02 -3.150E+02 -3.111E+02 -3.026E+02 -2.875E+02 -2.571E+02 -1.949E+02 2.959E+00 3.353E+00 -2.540E+01 -6.108E+00 -6.035E+01 -1.292E+02 -2.160E+02 -2.324E+02 -2.414E+02 -2.498E+02 -2.537E+02 -2.529E+02 -2.498E+02 -2.461E+02 -2.437E+02 -2.419E+02 -2.406E+02 -2.393E+02 -2.375E+02 -2.355E+02 -2.334E+02 -2.311E+02 -2.282E+02 -2.243E+02 -2.183E+02 -2.101E+02 -2.010E+02 -1.902E+02 -1.727E+02 -1.331E+02 2.803E+00 9.194E-01 1.383E+01 -6.531E+00 -7.908E+01 -1.497E+02 -2.811E+02 -2.587E+02 -2.667E+02 -2.757E+02 -2.810E+02 -2.822E+02 -2.816E+02 -2.806E+02 -2.806E+02 -2.810E+02 -2.814E+02 -2.818E+02 -2.827E+02 -2.838E+02 -2.839E+02 -2.826E+02 -2.805E+02 -2.781E+02 -2.746E+02 -2.681E+02 -2.573E+02 -2.420E+02 -2.177E+02 -1.659E+02 2.387E+00 + 60.0100 7.000E+00 4.019E+01 0.000E+00 0.000E+00 0.000E+00 7.885E+02 8.128E+00 5.068E-17 2.865E+01 8.455E+01 2.075E+02 3.454E+02 4.595E+02 7.604E+02 9.047E+02 1.074E+03 1.229E+03 1.400E+03 1.564E+03 1.714E+03 1.843E+03 1.961E+03 2.065E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.218E+03 3.351E+03 3.364E+03 3.114E+03 2.348E+03 3.942E+02 -4.667E-17 2.143E+01 7.539E+01 2.019E+02 3.440E+02 5.341E+02 6.783E+02 8.078E+02 9.565E+02 1.110E+03 1.266E+03 1.413E+03 1.543E+03 1.652E+03 1.751E+03 1.836E+03 1.918E+03 2.015E+03 2.123E+03 2.224E+03 2.318E+03 2.415E+03 2.524E+03 2.651E+03 2.790E+03 2.904E+03 2.927E+03 2.746E+03 2.106E+03 3.806E+02 1.747E-17 4.267E+01 9.752E+01 2.324E+02 3.797E+02 6.191E+02 6.956E+02 8.284E+02 9.844E+02 1.137E+03 1.296E+03 1.449E+03 1.590E+03 1.710E+03 1.819E+03 1.915E+03 2.006E+03 2.112E+03 2.228E+03 2.339E+03 2.444E+03 2.555E+03 2.677E+03 2.822E+03 2.981E+03 3.101E+03 3.110E+03 2.895E+03 2.190E+03 3.798E+02 3.494E+00 -1.674E+01 1.688E+00 -6.842E+01 -1.338E+02 -1.988E+02 -2.805E+02 -2.894E+02 -2.996E+02 -3.034E+02 -3.051E+02 -3.050E+02 -3.048E+02 -3.058E+02 -3.073E+02 -3.088E+02 -3.102E+02 -3.120E+02 -3.140E+02 -3.151E+02 -3.153E+02 -3.155E+02 -3.156E+02 -3.149E+02 -3.110E+02 -3.025E+02 -2.874E+02 -2.570E+02 -1.948E+02 2.961E+00 3.324E+00 -2.538E+01 -6.145E+00 -6.018E+01 -1.289E+02 -2.156E+02 -2.320E+02 -2.410E+02 -2.495E+02 -2.534E+02 -2.527E+02 -2.496E+02 -2.459E+02 -2.435E+02 -2.417E+02 -2.404E+02 -2.391E+02 -2.373E+02 -2.352E+02 -2.332E+02 -2.308E+02 -2.279E+02 -2.239E+02 -2.179E+02 -2.097E+02 -2.006E+02 -1.898E+02 -1.723E+02 -1.328E+02 2.800E+00 9.212E-01 1.384E+01 -6.452E+00 -7.899E+01 -1.496E+02 -2.805E+02 -2.590E+02 -2.669E+02 -2.760E+02 -2.813E+02 -2.825E+02 -2.819E+02 -2.809E+02 -2.810E+02 -2.813E+02 -2.818E+02 -2.822E+02 -2.832E+02 -2.843E+02 -2.844E+02 -2.831E+02 -2.810E+02 -2.786E+02 -2.750E+02 -2.685E+02 -2.578E+02 -2.424E+02 -2.181E+02 -1.662E+02 2.389E+00 + 60.0200 7.000E+00 4.068E+01 0.000E+00 0.000E+00 0.000E+00 7.884E+02 8.128E+00 -5.120E-18 2.848E+01 8.455E+01 2.075E+02 3.455E+02 4.578E+02 7.603E+02 9.046E+02 1.074E+03 1.229E+03 1.400E+03 1.564E+03 1.714E+03 1.843E+03 1.961E+03 2.064E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.114E+03 2.349E+03 3.942E+02 -5.752E-17 2.143E+01 7.518E+01 2.014E+02 3.431E+02 5.333E+02 6.773E+02 8.068E+02 9.556E+02 1.110E+03 1.265E+03 1.412E+03 1.542E+03 1.651E+03 1.750E+03 1.835E+03 1.917E+03 2.014E+03 2.122E+03 2.223E+03 2.316E+03 2.414E+03 2.522E+03 2.649E+03 2.789E+03 2.902E+03 2.925E+03 2.744E+03 2.105E+03 3.805E+02 3.038E-17 4.268E+01 9.750E+01 2.323E+02 3.796E+02 6.185E+02 6.960E+02 8.289E+02 9.851E+02 1.138E+03 1.297E+03 1.450E+03 1.591E+03 1.711E+03 1.820E+03 1.916E+03 2.007E+03 2.113E+03 2.229E+03 2.341E+03 2.446E+03 2.557E+03 2.679E+03 2.825E+03 2.983E+03 3.103E+03 3.112E+03 2.897E+03 2.192E+03 3.800E+02 3.513E+00 -1.707E+01 1.702E+00 -6.842E+01 -1.338E+02 -1.981E+02 -2.803E+02 -2.893E+02 -2.994E+02 -3.033E+02 -3.050E+02 -3.048E+02 -3.046E+02 -3.057E+02 -3.071E+02 -3.086E+02 -3.100E+02 -3.118E+02 -3.139E+02 -3.149E+02 -3.152E+02 -3.153E+02 -3.154E+02 -3.148E+02 -3.109E+02 -3.024E+02 -2.873E+02 -2.570E+02 -1.948E+02 2.963E+00 3.295E+00 -2.536E+01 -6.182E+00 -6.001E+01 -1.286E+02 -2.151E+02 -2.316E+02 -2.407E+02 -2.492E+02 -2.532E+02 -2.524E+02 -2.494E+02 -2.456E+02 -2.433E+02 -2.415E+02 -2.402E+02 -2.388E+02 -2.370E+02 -2.349E+02 -2.329E+02 -2.305E+02 -2.275E+02 -2.236E+02 -2.175E+02 -2.093E+02 -2.002E+02 -1.894E+02 -1.719E+02 -1.326E+02 2.797E+00 9.232E-01 1.385E+01 -6.374E+00 -7.891E+01 -1.494E+02 -2.799E+02 -2.592E+02 -2.672E+02 -2.762E+02 -2.816E+02 -2.828E+02 -2.822E+02 -2.813E+02 -2.813E+02 -2.817E+02 -2.822E+02 -2.826E+02 -2.836E+02 -2.847E+02 -2.848E+02 -2.836E+02 -2.814E+02 -2.790E+02 -2.755E+02 -2.690E+02 -2.583E+02 -2.429E+02 -2.185E+02 -1.665E+02 2.390E+00 + 60.0300 7.000E+00 4.117E+01 0.000E+00 0.000E+00 0.000E+00 7.884E+02 8.128E+00 5.894E-17 2.832E+01 8.455E+01 2.076E+02 3.457E+02 4.562E+02 7.603E+02 9.045E+02 1.074E+03 1.229E+03 1.399E+03 1.563E+03 1.714E+03 1.843E+03 1.961E+03 2.064E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.114E+03 2.349E+03 3.943E+02 4.009E-18 2.143E+01 7.497E+01 2.008E+02 3.422E+02 5.324E+02 6.762E+02 8.058E+02 9.546E+02 1.109E+03 1.264E+03 1.412E+03 1.541E+03 1.650E+03 1.749E+03 1.834E+03 1.916E+03 2.013E+03 2.121E+03 2.222E+03 2.315E+03 2.413E+03 2.521E+03 2.647E+03 2.787E+03 2.900E+03 2.923E+03 2.742E+03 2.104E+03 3.805E+02 4.887E-18 4.269E+01 9.747E+01 2.323E+02 3.795E+02 6.178E+02 6.965E+02 8.295E+02 9.858E+02 1.139E+03 1.298E+03 1.451E+03 1.592E+03 1.712E+03 1.821E+03 1.917E+03 2.009E+03 2.114E+03 2.231E+03 2.342E+03 2.448E+03 2.559E+03 2.681E+03 2.827E+03 2.986E+03 3.105E+03 3.114E+03 2.899E+03 2.193E+03 3.801E+02 3.532E+00 -1.738E+01 1.716E+00 -6.841E+01 -1.339E+02 -1.974E+02 -2.802E+02 -2.891E+02 -2.993E+02 -3.032E+02 -3.048E+02 -3.047E+02 -3.045E+02 -3.055E+02 -3.069E+02 -3.084E+02 -3.099E+02 -3.117E+02 -3.137E+02 -3.148E+02 -3.150E+02 -3.152E+02 -3.153E+02 -3.146E+02 -3.107E+02 -3.022E+02 -2.872E+02 -2.569E+02 -1.947E+02 2.965E+00 3.266E+00 -2.533E+01 -6.219E+00 -5.983E+01 -1.283E+02 -2.147E+02 -2.312E+02 -2.404E+02 -2.489E+02 -2.529E+02 -2.522E+02 -2.491E+02 -2.454E+02 -2.430E+02 -2.412E+02 -2.399E+02 -2.386E+02 -2.367E+02 -2.347E+02 -2.326E+02 -2.301E+02 -2.272E+02 -2.232E+02 -2.171E+02 -2.088E+02 -1.997E+02 -1.890E+02 -1.715E+02 -1.323E+02 2.794E+00 9.252E-01 1.385E+01 -6.296E+00 -7.882E+01 -1.493E+02 -2.793E+02 -2.595E+02 -2.675E+02 -2.765E+02 -2.819E+02 -2.831E+02 -2.825E+02 -2.816E+02 -2.817E+02 -2.821E+02 -2.826E+02 -2.830E+02 -2.840E+02 -2.851E+02 -2.853E+02 -2.840E+02 -2.819E+02 -2.795E+02 -2.760E+02 -2.695E+02 -2.588E+02 -2.434E+02 -2.189E+02 -1.667E+02 2.392E+00 + 60.0400 7.000E+00 4.165E+01 0.000E+00 0.000E+00 0.000E+00 7.883E+02 8.127E+00 -8.886E-17 2.816E+01 8.454E+01 2.077E+02 3.459E+02 4.546E+02 7.602E+02 9.044E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.714E+03 1.843E+03 1.961E+03 2.064E+03 2.162E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.114E+03 2.349E+03 3.944E+02 -8.505E-17 2.143E+01 7.476E+01 2.003E+02 3.413E+02 5.315E+02 6.751E+02 8.047E+02 9.535E+02 1.108E+03 1.263E+03 1.411E+03 1.540E+03 1.649E+03 1.747E+03 1.833E+03 1.915E+03 2.012E+03 2.120E+03 2.221E+03 2.314E+03 2.411E+03 2.519E+03 2.645E+03 2.785E+03 2.898E+03 2.921E+03 2.741E+03 2.103E+03 3.804E+02 4.950E-17 4.271E+01 9.744E+01 2.322E+02 3.795E+02 6.171E+02 6.969E+02 8.300E+02 9.865E+02 1.139E+03 1.299E+03 1.452E+03 1.593E+03 1.713E+03 1.823E+03 1.919E+03 2.010E+03 2.116E+03 2.232E+03 2.344E+03 2.449E+03 2.560E+03 2.682E+03 2.829E+03 2.988E+03 3.108E+03 3.117E+03 2.901E+03 2.195E+03 3.803E+02 3.551E+00 -1.769E+01 1.730E+00 -6.841E+01 -1.339E+02 -1.967E+02 -2.801E+02 -2.890E+02 -2.991E+02 -3.030E+02 -3.047E+02 -3.045E+02 -3.043E+02 -3.053E+02 -3.067E+02 -3.083E+02 -3.097E+02 -3.115E+02 -3.135E+02 -3.146E+02 -3.149E+02 -3.150E+02 -3.152E+02 -3.145E+02 -3.106E+02 -3.021E+02 -2.871E+02 -2.568E+02 -1.946E+02 2.967E+00 3.237E+00 -2.531E+01 -6.255E+00 -5.965E+01 -1.279E+02 -2.142E+02 -2.307E+02 -2.400E+02 -2.486E+02 -2.526E+02 -2.519E+02 -2.489E+02 -2.452E+02 -2.428E+02 -2.410E+02 -2.397E+02 -2.383E+02 -2.365E+02 -2.344E+02 -2.322E+02 -2.298E+02 -2.268E+02 -2.228E+02 -2.167E+02 -2.084E+02 -1.993E+02 -1.886E+02 -1.712E+02 -1.320E+02 2.792E+00 9.274E-01 1.386E+01 -6.219E+00 -7.874E+01 -1.491E+02 -2.787E+02 -2.597E+02 -2.677E+02 -2.768E+02 -2.822E+02 -2.834E+02 -2.828E+02 -2.820E+02 -2.820E+02 -2.825E+02 -2.829E+02 -2.834E+02 -2.844E+02 -2.855E+02 -2.857E+02 -2.844E+02 -2.824E+02 -2.799E+02 -2.764E+02 -2.700E+02 -2.593E+02 -2.438E+02 -2.193E+02 -1.670E+02 2.394E+00 + 60.0500 7.000E+00 4.214E+01 0.000E+00 0.000E+00 0.000E+00 7.883E+02 8.127E+00 1.840E-17 2.801E+01 8.454E+01 2.077E+02 3.461E+02 4.531E+02 7.602E+02 9.043E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.843E+03 1.960E+03 2.064E+03 2.161E+03 2.272E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.944E+02 -1.679E-17 2.144E+01 7.456E+01 1.997E+02 3.404E+02 5.305E+02 6.739E+02 8.035E+02 9.524E+02 1.107E+03 1.262E+03 1.410E+03 1.539E+03 1.648E+03 1.746E+03 1.832E+03 1.913E+03 2.011E+03 2.118E+03 2.219E+03 2.312E+03 2.409E+03 2.517E+03 2.643E+03 2.783E+03 2.896E+03 2.919E+03 2.739E+03 2.101E+03 3.804E+02 1.297E-17 4.272E+01 9.742E+01 2.321E+02 3.794E+02 6.164E+02 6.974E+02 8.306E+02 9.872E+02 1.140E+03 1.299E+03 1.453E+03 1.594E+03 1.714E+03 1.824E+03 1.920E+03 2.011E+03 2.117E+03 2.233E+03 2.345E+03 2.450E+03 2.562E+03 2.684E+03 2.831E+03 2.990E+03 3.110E+03 3.119E+03 2.903E+03 2.196E+03 3.804E+02 3.569E+00 -1.799E+01 1.743E+00 -6.841E+01 -1.339E+02 -1.959E+02 -2.799E+02 -2.888E+02 -2.990E+02 -3.029E+02 -3.045E+02 -3.043E+02 -3.041E+02 -3.051E+02 -3.065E+02 -3.081E+02 -3.095E+02 -3.113E+02 -3.134E+02 -3.145E+02 -3.147E+02 -3.149E+02 -3.150E+02 -3.144E+02 -3.105E+02 -3.020E+02 -2.870E+02 -2.567E+02 -1.946E+02 2.970E+00 3.207E+00 -2.528E+01 -6.292E+00 -5.947E+01 -1.276E+02 -2.137E+02 -2.303E+02 -2.396E+02 -2.482E+02 -2.523E+02 -2.517E+02 -2.486E+02 -2.449E+02 -2.425E+02 -2.407E+02 -2.394E+02 -2.380E+02 -2.362E+02 -2.341E+02 -2.319E+02 -2.295E+02 -2.265E+02 -2.224E+02 -2.163E+02 -2.080E+02 -1.989E+02 -1.882E+02 -1.708E+02 -1.317E+02 2.789E+00 9.298E-01 1.387E+01 -6.142E+00 -7.865E+01 -1.490E+02 -2.780E+02 -2.600E+02 -2.680E+02 -2.771E+02 -2.825E+02 -2.837E+02 -2.832E+02 -2.823E+02 -2.824E+02 -2.829E+02 -2.833E+02 -2.838E+02 -2.848E+02 -2.859E+02 -2.861E+02 -2.849E+02 -2.828E+02 -2.803E+02 -2.769E+02 -2.704E+02 -2.598E+02 -2.443E+02 -2.197E+02 -1.673E+02 2.396E+00 + 60.0600 7.000E+00 4.263E+01 0.000E+00 0.000E+00 0.000E+00 7.883E+02 8.126E+00 4.315E-17 2.786E+01 8.454E+01 2.078E+02 3.462E+02 4.516E+02 7.601E+02 9.042E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.843E+03 1.960E+03 2.064E+03 2.161E+03 2.271E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.945E+02 3.447E-17 2.144E+01 7.435E+01 1.992E+02 3.394E+02 5.295E+02 6.726E+02 8.023E+02 9.512E+02 1.105E+03 1.261E+03 1.408E+03 1.537E+03 1.647E+03 1.745E+03 1.831E+03 1.912E+03 2.009E+03 2.117E+03 2.218E+03 2.311E+03 2.408E+03 2.516E+03 2.641E+03 2.781E+03 2.894E+03 2.917E+03 2.737E+03 2.100E+03 3.804E+02 -2.018E-17 4.273E+01 9.740E+01 2.321E+02 3.793E+02 6.158E+02 6.978E+02 8.311E+02 9.879E+02 1.141E+03 1.300E+03 1.454E+03 1.595E+03 1.716E+03 1.825E+03 1.921E+03 2.013E+03 2.119E+03 2.235E+03 2.347E+03 2.452E+03 2.564E+03 2.686E+03 2.832E+03 2.992E+03 3.112E+03 3.121E+03 2.905E+03 2.197E+03 3.805E+02 3.587E+00 -1.828E+01 1.757E+00 -6.840E+01 -1.340E+02 -1.952E+02 -2.798E+02 -2.887E+02 -2.988E+02 -3.027E+02 -3.043E+02 -3.041E+02 -3.039E+02 -3.049E+02 -3.064E+02 -3.079E+02 -3.093E+02 -3.112E+02 -3.132E+02 -3.143E+02 -3.146E+02 -3.147E+02 -3.149E+02 -3.142E+02 -3.103E+02 -3.019E+02 -2.868E+02 -2.566E+02 -1.945E+02 2.972E+00 3.177E+00 -2.526E+01 -6.329E+00 -5.928E+01 -1.272E+02 -2.132E+02 -2.298E+02 -2.392E+02 -2.479E+02 -2.520E+02 -2.514E+02 -2.483E+02 -2.446E+02 -2.423E+02 -2.404E+02 -2.391E+02 -2.377E+02 -2.359E+02 -2.337E+02 -2.316E+02 -2.291E+02 -2.261E+02 -2.220E+02 -2.159E+02 -2.076E+02 -1.985E+02 -1.878E+02 -1.704E+02 -1.314E+02 2.786E+00 9.323E-01 1.388E+01 -6.066E+00 -7.857E+01 -1.489E+02 -2.774E+02 -2.602E+02 -2.682E+02 -2.773E+02 -2.828E+02 -2.840E+02 -2.835E+02 -2.827E+02 -2.828E+02 -2.833E+02 -2.837E+02 -2.842E+02 -2.852E+02 -2.863E+02 -2.865E+02 -2.853E+02 -2.833E+02 -2.808E+02 -2.773E+02 -2.709E+02 -2.602E+02 -2.447E+02 -2.201E+02 -1.675E+02 2.397E+00 + 60.0700 7.000E+00 4.312E+01 0.000E+00 0.000E+00 0.000E+00 7.882E+02 8.126E+00 1.788E-17 2.771E+01 8.454E+01 2.079E+02 3.464E+02 4.503E+02 7.600E+02 9.041E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.842E+03 1.960E+03 2.064E+03 2.161E+03 2.271E+03 2.394E+03 2.510E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.945E+02 -7.687E-17 2.145E+01 7.414E+01 1.986E+02 3.384E+02 5.284E+02 6.713E+02 8.011E+02 9.500E+02 1.104E+03 1.260E+03 1.407E+03 1.536E+03 1.645E+03 1.744E+03 1.829E+03 1.911E+03 2.008E+03 2.116E+03 2.216E+03 2.309E+03 2.406E+03 2.514E+03 2.640E+03 2.779E+03 2.892E+03 2.915E+03 2.735E+03 2.099E+03 3.803E+02 1.476E-17 4.275E+01 9.737E+01 2.320E+02 3.792E+02 6.151E+02 6.983E+02 8.317E+02 9.886E+02 1.141E+03 1.301E+03 1.455E+03 1.596E+03 1.717E+03 1.826E+03 1.923E+03 2.014E+03 2.120E+03 2.236E+03 2.348E+03 2.453E+03 2.566E+03 2.688E+03 2.834E+03 2.994E+03 3.115E+03 3.124E+03 2.907E+03 2.199E+03 3.807E+02 3.606E+00 -1.856E+01 1.770E+00 -6.840E+01 -1.340E+02 -1.946E+02 -2.797E+02 -2.886E+02 -2.987E+02 -3.026E+02 -3.042E+02 -3.040E+02 -3.037E+02 -3.047E+02 -3.062E+02 -3.077E+02 -3.092E+02 -3.110E+02 -3.130E+02 -3.141E+02 -3.144E+02 -3.146E+02 -3.147E+02 -3.141E+02 -3.101E+02 -3.017E+02 -2.867E+02 -2.565E+02 -1.944E+02 2.974E+00 3.148E+00 -2.524E+01 -6.366E+00 -5.910E+01 -1.268E+02 -2.127E+02 -2.293E+02 -2.388E+02 -2.475E+02 -2.517E+02 -2.511E+02 -2.481E+02 -2.444E+02 -2.420E+02 -2.401E+02 -2.388E+02 -2.374E+02 -2.355E+02 -2.334E+02 -2.312E+02 -2.287E+02 -2.257E+02 -2.216E+02 -2.154E+02 -2.071E+02 -1.980E+02 -1.873E+02 -1.700E+02 -1.312E+02 2.783E+00 9.349E-01 1.389E+01 -5.990E+00 -7.848E+01 -1.487E+02 -2.768E+02 -2.605E+02 -2.685E+02 -2.776E+02 -2.831E+02 -2.843E+02 -2.838E+02 -2.830E+02 -2.831E+02 -2.836E+02 -2.841E+02 -2.846E+02 -2.856E+02 -2.868E+02 -2.869E+02 -2.857E+02 -2.837E+02 -2.812E+02 -2.777E+02 -2.713E+02 -2.607E+02 -2.452E+02 -2.204E+02 -1.678E+02 2.399E+00 + 60.0800 7.000E+00 4.360E+01 0.000E+00 0.000E+00 0.000E+00 7.882E+02 8.126E+00 -8.062E-17 2.757E+01 8.454E+01 2.079E+02 3.466E+02 4.489E+02 7.600E+02 9.040E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.842E+03 1.960E+03 2.064E+03 2.161E+03 2.271E+03 2.393E+03 2.509E+03 2.621E+03 2.742E+03 2.878E+03 3.041E+03 3.217E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.946E+02 -2.856E-17 2.146E+01 7.394E+01 1.980E+02 3.374E+02 5.273E+02 6.700E+02 7.997E+02 9.486E+02 1.103E+03 1.259E+03 1.406E+03 1.535E+03 1.644E+03 1.742E+03 1.828E+03 1.909E+03 2.006E+03 2.114E+03 2.215E+03 2.307E+03 2.404E+03 2.512E+03 2.637E+03 2.777E+03 2.890E+03 2.913E+03 2.734E+03 2.098E+03 3.803E+02 5.655E-17 4.276E+01 9.735E+01 2.320E+02 3.791E+02 6.144E+02 6.988E+02 8.323E+02 9.893E+02 1.142E+03 1.302E+03 1.456E+03 1.597E+03 1.718E+03 1.828E+03 1.924E+03 2.016E+03 2.121E+03 2.238E+03 2.349E+03 2.455E+03 2.567E+03 2.690E+03 2.836E+03 2.996E+03 3.117E+03 3.126E+03 2.908E+03 2.200E+03 3.808E+02 3.624E+00 -1.883E+01 1.784E+00 -6.839E+01 -1.340E+02 -1.939E+02 -2.795E+02 -2.884E+02 -2.985E+02 -3.024E+02 -3.040E+02 -3.038E+02 -3.035E+02 -3.045E+02 -3.060E+02 -3.075E+02 -3.090E+02 -3.108E+02 -3.128E+02 -3.139E+02 -3.142E+02 -3.144E+02 -3.146E+02 -3.139E+02 -3.100E+02 -3.016E+02 -2.865E+02 -2.564E+02 -1.944E+02 2.976E+00 3.118E+00 -2.521E+01 -6.403E+00 -5.891E+01 -1.264E+02 -2.122E+02 -2.288E+02 -2.383E+02 -2.471E+02 -2.513E+02 -2.508E+02 -2.477E+02 -2.440E+02 -2.417E+02 -2.398E+02 -2.385E+02 -2.371E+02 -2.352E+02 -2.330E+02 -2.308E+02 -2.283E+02 -2.253E+02 -2.212E+02 -2.150E+02 -2.067E+02 -1.976E+02 -1.869E+02 -1.696E+02 -1.309E+02 2.780E+00 9.377E-01 1.390E+01 -5.914E+00 -7.840E+01 -1.486E+02 -2.761E+02 -2.607E+02 -2.687E+02 -2.779E+02 -2.834E+02 -2.846E+02 -2.841E+02 -2.834E+02 -2.835E+02 -2.840E+02 -2.845E+02 -2.850E+02 -2.860E+02 -2.871E+02 -2.873E+02 -2.861E+02 -2.841E+02 -2.816E+02 -2.781E+02 -2.718E+02 -2.612E+02 -2.456E+02 -2.208E+02 -1.681E+02 2.401E+00 + 60.0900 7.000E+00 4.409E+01 0.000E+00 0.000E+00 0.000E+00 7.882E+02 8.125E+00 7.231E-17 2.744E+01 8.454E+01 2.080E+02 3.468E+02 4.477E+02 7.599E+02 9.039E+02 1.073E+03 1.228E+03 1.399E+03 1.563E+03 1.713E+03 1.842E+03 1.960E+03 2.063E+03 2.161E+03 2.271E+03 2.393E+03 2.509E+03 2.621E+03 2.742E+03 2.877E+03 3.041E+03 3.216E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.947E+02 -3.398E-17 2.147E+01 7.373E+01 1.974E+02 3.364E+02 5.262E+02 6.685E+02 7.983E+02 9.472E+02 1.101E+03 1.257E+03 1.405E+03 1.533E+03 1.643E+03 1.741E+03 1.826E+03 1.908E+03 2.005E+03 2.112E+03 2.213E+03 2.305E+03 2.402E+03 2.510E+03 2.635E+03 2.774E+03 2.888E+03 2.911E+03 2.732E+03 2.097E+03 3.802E+02 -6.772E-18 4.277E+01 9.733E+01 2.319E+02 3.791E+02 6.137E+02 6.992E+02 8.328E+02 9.900E+02 1.143E+03 1.303E+03 1.457E+03 1.598E+03 1.719E+03 1.829E+03 1.925E+03 2.017E+03 2.123E+03 2.239E+03 2.351E+03 2.456E+03 2.569E+03 2.691E+03 2.838E+03 2.998E+03 3.119E+03 3.128E+03 2.910E+03 2.202E+03 3.809E+02 3.642E+00 -1.909E+01 1.797E+00 -6.839E+01 -1.341E+02 -1.932E+02 -2.794E+02 -2.882E+02 -2.983E+02 -3.023E+02 -3.038E+02 -3.036E+02 -3.034E+02 -3.043E+02 -3.058E+02 -3.073E+02 -3.088E+02 -3.106E+02 -3.126E+02 -3.137E+02 -3.140E+02 -3.143E+02 -3.144E+02 -3.138E+02 -3.098E+02 -3.014E+02 -2.864E+02 -2.563E+02 -1.943E+02 2.978E+00 3.088E+00 -2.519E+01 -6.439E+00 -5.872E+01 -1.261E+02 -2.116E+02 -2.283E+02 -2.379E+02 -2.467E+02 -2.509E+02 -2.504E+02 -2.474E+02 -2.437E+02 -2.413E+02 -2.395E+02 -2.382E+02 -2.367E+02 -2.348E+02 -2.327E+02 -2.304E+02 -2.279E+02 -2.249E+02 -2.207E+02 -2.145E+02 -2.062E+02 -1.971E+02 -1.865E+02 -1.693E+02 -1.306E+02 2.777E+00 9.406E-01 1.392E+01 -5.838E+00 -7.831E+01 -1.485E+02 -2.755E+02 -2.610E+02 -2.690E+02 -2.782E+02 -2.837E+02 -2.849E+02 -2.845E+02 -2.837E+02 -2.839E+02 -2.844E+02 -2.849E+02 -2.853E+02 -2.864E+02 -2.875E+02 -2.877E+02 -2.865E+02 -2.846E+02 -2.820E+02 -2.786E+02 -2.722E+02 -2.616E+02 -2.461E+02 -2.212E+02 -1.684E+02 2.403E+00 + 60.1000 7.000E+00 4.458E+01 0.000E+00 0.000E+00 0.000E+00 7.881E+02 8.125E+00 -2.519E-18 2.730E+01 8.453E+01 2.081E+02 3.469E+02 4.465E+02 7.598E+02 9.037E+02 1.072E+03 1.228E+03 1.398E+03 1.562E+03 1.713E+03 1.842E+03 1.960E+03 2.063E+03 2.161E+03 2.271E+03 2.393E+03 2.509E+03 2.621E+03 2.742E+03 2.877E+03 3.041E+03 3.216E+03 3.351E+03 3.364E+03 3.115E+03 2.349E+03 3.947E+02 -1.121E-17 2.148E+01 7.353E+01 1.969E+02 3.353E+02 5.250E+02 6.671E+02 7.969E+02 9.457E+02 1.100E+03 1.256E+03 1.403E+03 1.532E+03 1.641E+03 1.739E+03 1.825E+03 1.906E+03 2.003E+03 2.110E+03 2.211E+03 2.304E+03 2.400E+03 2.508E+03 2.633E+03 2.772E+03 2.886E+03 2.909E+03 2.730E+03 2.096E+03 3.802E+02 1.074E-17 4.279E+01 9.731E+01 2.318E+02 3.790E+02 6.131E+02 6.997E+02 8.334E+02 9.907E+02 1.144E+03 1.303E+03 1.458E+03 1.599E+03 1.720E+03 1.830E+03 1.927E+03 2.018E+03 2.124E+03 2.240E+03 2.352E+03 2.458E+03 2.570E+03 2.693E+03 2.840E+03 3.000E+03 3.121E+03 3.130E+03 2.912E+03 2.203E+03 3.810E+02 3.660E+00 -1.934E+01 1.810E+00 -6.838E+01 -1.341E+02 -1.926E+02 -2.792E+02 -2.881E+02 -2.982E+02 -3.021E+02 -3.036E+02 -3.034E+02 -3.032E+02 -3.041E+02 -3.056E+02 -3.071E+02 -3.086E+02 -3.104E+02 -3.124E+02 -3.136E+02 -3.139E+02 -3.141E+02 -3.142E+02 -3.136E+02 -3.096E+02 -3.013E+02 -2.862E+02 -2.562E+02 -1.942E+02 2.980E+00 3.058E+00 -2.516E+01 -6.476E+00 -5.853E+01 -1.257E+02 -2.110E+02 -2.277E+02 -2.374E+02 -2.462E+02 -2.505E+02 -2.501E+02 -2.471E+02 -2.434E+02 -2.410E+02 -2.391E+02 -2.378E+02 -2.364E+02 -2.345E+02 -2.322E+02 -2.300E+02 -2.275E+02 -2.244E+02 -2.203E+02 -2.140E+02 -2.057E+02 -1.967E+02 -1.860E+02 -1.689E+02 -1.303E+02 2.775E+00 9.437E-01 1.393E+01 -5.763E+00 -7.823E+01 -1.483E+02 -2.748E+02 -2.613E+02 -2.693E+02 -2.785E+02 -2.839E+02 -2.852E+02 -2.848E+02 -2.840E+02 -2.842E+02 -2.847E+02 -2.853E+02 -2.857E+02 -2.868E+02 -2.879E+02 -2.881E+02 -2.869E+02 -2.850E+02 -2.824E+02 -2.790E+02 -2.726E+02 -2.621E+02 -2.465E+02 -2.216E+02 -1.686E+02 2.405E+00 diff --git a/test/openfast_helper_tests.jl b/test/openfast_helper_tests.jl new file mode 100644 index 00000000..fee261fc --- /dev/null +++ b/test/openfast_helper_tests.jl @@ -0,0 +1,83 @@ +module OpenFASTHelperTests + +using AcousticAnalogies +using Statistics: mean +using Test + +@testset "OpenFAST reader test" begin + + @testset "default" begin + fname = joinpath(@__DIR__, "gen_test_data", "openfast_data", "IEA-3.4-130-RWT-small.out") + + data = read_openfast_file(fname) + num_times = length(data.time) + num_blades = size(data.pitch, 2) + num_radial = size(data.axial_loading, 2) + @test size(data.time) == (num_times,) + @test size(data.v) == (num_times,) + @test size(data.azimuth) == (num_times,) + @test size(data.omega) == (num_times,) + @test size(data.pitch) == (num_times, num_blades) + @test size(data.axial_loading) == (num_times, num_radial, num_blades) + @test size(data.circum_loading) == (num_times, num_radial, num_blades) + + @test all(data.time .≈ (60.0:0.01:60.1)) + @test all(data.v .≈ 7) + @test all(data.pitch .≈ 0) + # Just some coarse tests. + @test mean(data.omega) ≈ 8.126818181818182 + @test mean(data.axial_loading) ≈ 1632.1274949494953 + @test mean(data.circum_loading) ≈ -217.45748949494939 + end + + @testset "different time column name" begin + fname = joinpath(@__DIR__, "gen_test_data", "openfast_data", "IEA-3.4-130-RWT-small-FooTime.out") + + data = read_openfast_file(fname; header_keyword="FooTime") + num_times = length(data.time) + num_blades = size(data.pitch, 2) + num_radial = size(data.axial_loading, 2) + @test size(data.time) == (num_times,) + @test size(data.v) == (num_times,) + @test size(data.azimuth) == (num_times,) + @test size(data.omega) == (num_times,) + @test size(data.pitch) == (num_times, num_blades) + @test size(data.axial_loading) == (num_times, num_radial, num_blades) + @test size(data.circum_loading) == (num_times, num_radial, num_blades) + + @test all(data.time .≈ (60.0:0.01:60.1)) + @test all(data.v .≈ 7) + @test all(data.pitch .≈ 0) + # Just some coarse tests. + @test mean(data.omega) ≈ 8.126818181818182 + @test mean(data.axial_loading) ≈ 1632.1274949494953 + @test mean(data.circum_loading) ≈ -217.45748949494939 + end + + @testset "nu units header" begin + fname = joinpath(@__DIR__, "gen_test_data", "openfast_data", "IEA-3.4-130-RWT-small-no_units.out") + + data = read_openfast_file(fname; has_units_header=false) + num_times = length(data.time) + num_blades = size(data.pitch, 2) + num_radial = size(data.axial_loading, 2) + @test size(data.time) == (num_times,) + @test size(data.v) == (num_times,) + @test size(data.azimuth) == (num_times,) + @test size(data.omega) == (num_times,) + @test size(data.pitch) == (num_times, num_blades) + @test size(data.axial_loading) == (num_times, num_radial, num_blades) + @test size(data.circum_loading) == (num_times, num_radial, num_blades) + + @test all(data.time .≈ (60.0:0.01:60.1)) + @test all(data.v .≈ 7) + @test all(data.pitch .≈ 0) + # Just some coarse tests. + @test mean(data.omega) ≈ 8.126818181818182 + @test mean(data.axial_loading) ≈ 1632.1274949494953 + @test mean(data.circum_loading) ≈ -217.45748949494939 + end + +end + +end diff --git a/test/runtests.jl b/test/runtests.jl index d1506a19..27737ff9 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -7,6 +7,7 @@ include("ccblade_helper_tests.jl") include("anopp2_comparison.jl") include("forwarddiff_test.jl") include("writevtk_tests.jl") -include("iea3p4.jl") +include("openfast_helper_tests.jl") +# include("iea3p4.jl") end # module