From 04f057804ceabca0423d1dc83e30e06fc8bc1556 Mon Sep 17 00:00:00 2001 From: Daniel Ingraham Date: Wed, 7 Aug 2024 15:55:25 -0400 Subject: [PATCH 1/2] Bpm (#15) Add BPM/Brooks & Burley broadband noise model --- .github/workflows/test.yaml | 14 +- Project.toml | 16 +- docs/Project.toml | 4 + docs/make.jl | 12 +- docs/src/bpm_tests1.md | 517 +++ docs/src/bpm_tests2.md | 471 +++ docs/src/bpm_tests3.md | 1894 +++++++++++ docs/src/ccblade_example.md | 11 +- docs/src/guided_example.md | 20 +- docs/src/itr_tests1.md | 1011 ++++++ docs/src/itr_tests2.md | 901 ++++++ docs/src/sqa.md | 18 +- docs/src/writevtk_support.md | 5 +- src/AcousticAnalogies.jl | 66 +- src/abstract_broadband.jl | 321 ++ src/abstract_source_elements.jl | 36 + src/advance_time.jl | 47 + src/boundary_layers.jl | 233 ++ src/bpm_test_utils.jl | 320 ++ src/ccblade_helpers.jl | 895 +++++- src/combined_broadband.jl | 728 +++++ src/deprecated.jl | 7 + src/{core.jl => f1a.jl} | 228 +- src/lbl_vs.jl | 332 ++ src/observers.jl | 52 + src/tbl_te.jl | 654 ++++ src/teb_vs.jl | 393 +++ src/tip_vortex.jl | 338 ++ src/writevtk.jl | 272 +- test/.gitignore | 2 + test/Project.toml | 2 + test/adv_time_tests.jl | 2 +- test/anopp2_run.jl | 13 +- test/boundary_layer_tests.jl | 402 +++ ...90016302-figure06-bl_thickness-tripped.csv | 95 + ...016302-figure06-bl_thickness-untripped.csv | 121 + ...016302-figure06-disp_thickness-tripped.csv | 108 + ...6302-figure06-disp_thickness-untripped.csv | 118 + ...02-figure07-bl_thickness-pressure_side.csv | 74 + ...302-figure07-bl_thickness-suction_side.csv | 58 + .../19890016302-figure07-pressure_side.csv | 89 + .../19890016302-figure07-suction_side.csv | 67 + ...02-figure08-bl_thickness-pressure_side.csv | 97 + ...302-figure08-bl_thickness-suction_side.csv | 62 + .../19890016302-figure08-pressure_side.csv | 89 + .../19890016302-figure08-suction_side.csv | 89 + .../19890016302-figure11-a-TBL-TE-suction.csv | 20 + .../19890016302-figure11-b-TBL-TE-suction.csv | 21 + .../19890016302-figure11-c-TBL-TE-suction.csv | 21 + .../19890016302-figure11-d-TBL-TE-suction.csv | 19 + ...0016302-figure12-U71.3-TBL-TE-pressure.csv | 21 + ...90016302-figure12-U71.3-TBL-TE-suction.csv | 20 + .../19890016302-figure12-U71.3-separation.csv | 10 + ...19890016302-figure12-b-TBL-TE-pressure.csv | 21 + ...890016302-figure12-b-TBL-TE-separation.csv | 12 + .../19890016302-figure12-b-TBL-TE-suction.csv | 21 + .../19890016302-figure26-a-TBL-TE-suction.csv | 19 + .../19890016302-figure26-b-TBL-TE-suction.csv | 20 + .../19890016302-figure26-c-TBL-TE-suction.csv | 19 + .../19890016302-figure26-d-TBL-TE-suction.csv | 16 + ...19890016302-figure28-a-TBL-TE-pressure.csv | 8 + .../19890016302-figure28-a-TBL-TE-suction.csv | 16 + .../19890016302-figure28-a-separation.csv | 10 + ...19890016302-figure28-b-TBL-TE-pressure.csv | 14 + .../19890016302-figure28-b-TBL-TE-suction.csv | 16 + .../19890016302-figure28-b-separation.csv | 11 + ...19890016302-figure28-c-TBL-TE-pressure.csv | 14 + .../19890016302-figure28-c-TBL-TE-suction.csv | 15 + .../19890016302-figure28-c-separation.csv | 10 + ...19890016302-figure28-d-TBL-TE-pressure.csv | 10 + .../19890016302-figure28-d-TBL-TE-suction.csv | 13 + .../19890016302-figure28-d-separation.csv | 9 + .../19890016302-figure38-d-TBL-TE-suction.csv | 12 + ...19890016302-figure39-d-TBL-TE-pressure.csv | 9 + .../19890016302-figure39-d-TBL-TE-suction.csv | 13 + .../19890016302-figure39-d-separation.csv | 7 + .../19890016302-figure45-a-LBL-VS.csv | 3 + ...19890016302-figure45-a-TBL-TE-pressure.csv | 17 + .../19890016302-figure45-a-TBL-TE-suction.csv | 20 + .../19890016302-figure45-a-separation.csv | 8 + .../19890016302-figure48-c-LBL-VS.csv | 9 + .../19890016302-figure54-a-LBL-VS.csv | 12 + .../19890016302-figure59-c-LBL-VS.csv | 11 + .../19890016302-figure60-c-LBL-VS.csv | 13 + .../19890016302-figure60-d-LBL-VS.csv | 13 + .../19890016302-figure65-d-LBL-VS.csv | 13 + .../19890016302-figure66-b-LBL-VS.csv | 3 + .../19890016302-figure69-a-separation.csv | 15 + .../19890016302-figure69-b-separation.csv | 11 + .../19890016302-figure77.csv | 14 + .../19890016302-figure78-A_max.csv | 157 + .../19890016302-figure78-A_min.csv | 157 + .../19890016302-figure78-B_max.csv | 153 + .../19890016302-figure78-B_min.csv | 132 + .../19890016302-figure80-M0.093.csv | 158 + .../19890016302-figure80-M0.209.csv | 166 + .../19890016302-figure82-M0.093.csv | 163 + .../19890016302-figure82-M0.116.csv | 180 ++ .../19890016302-figure82-M0.163.csv | 190 ++ .../19890016302-figure82-M0.209.csv | 170 + .../19890016302-figure85-G1.csv | 125 + .../19890016302-figure86-St_1_prime.csv | 160 + .../19890016302-figure87.csv | 62 + .../19890016302-figure88-G2-alpha0.csv | 140 + .../19890016302-figure88-G2-alpha6.csv | 90 + .../19890016302-figure89.csv | 129 + .../19890016302-figure91-tip.csv | 13 + .../19890016302-figure95-0Psi.csv | 152 + .../19890016302-figure95-14Psi.csv | 153 + .../19890016302-figure96-0Psi.csv | 124 + .../19890016302-figure96-14Psi.csv | 108 + ...302-figure97-Psi0-h_over_deltastar0p25.csv | 112 + ...302-figure97-Psi0-h_over_deltastar0p43.csv | 107 + ...302-figure97-Psi0-h_over_deltastar0p50.csv | 103 + ...302-figure97-Psi0-h_over_deltastar0p54.csv | 103 + ...302-figure97-Psi0-h_over_deltastar1p20.csv | 95 + ...02-figure97-Psi14-h_over_deltastar0p25.csv | 119 + ...02-figure97-Psi14-h_over_deltastar0p43.csv | 124 + ...02-figure97-Psi14-h_over_deltastar0p50.csv | 118 + ...02-figure97-Psi14-h_over_deltastar0p54.csv | 104 + ...02-figure97-Psi14-h_over_deltastar0p62.csv | 104 + ...02-figure97-Psi14-h_over_deltastar1p20.csv | 93 + .../19890016302-figure98-a-TBL-TE-suction.csv | 19 + .../19890016302-figure98-b-bluntness.csv | 14 + .../19890016302-figure98-c-bluntness.csv | 12 + .../19890016302-figure98-d-bluntness.csv | 9 + .../19890016302-figure99-b-TBL-TE-suction.csv | 17 + .../19890016302-figure99-b-bluntness.csv | 11 + .../19890016302-figure99-c-bluntness.csv | 11 + .../19890016302-figure99-d-bluntness.csv | 10 + .../figure21a-loading.csv | 32 + .../figure21a-thickness.csv | 33 + .../figure22b-BVS.csv | 8 + .../figure22b-LBLVS.csv | 9 + .../figure22b-TBL-TE-pressure-2.csv | 13 + .../figure22b-TBL-TE-pressure.csv | 23 + .../figure22b-TBL-TE-suction-2.csv | 15 + .../figure22b-TBL-TE-suction.csv | 23 + .../figure22b-separation-2.csv | 17 + .../figure22b-separation.csv | 25 + .../figure22b-tip_vortex_shedding.csv | 9 + .../figure23c-BVS.csv | 7 + .../figure23c-LBLVS.csv | 11 + .../figure23c-TBL-TE-pressure.csv | 13 + .../figure23c-TBL-TE-suction.csv | 16 + .../figure23c-separation.csv | 21 + .../figure23c-tip_vortex_shedding.csv | 9 + .../figure24b-BVS.csv | 6 + .../figure24b-LBLVS.csv | 20 + .../figure24b-TBL-TE-pressure.csv | 12 + .../figure24b-TBL-TE-suction.csv | 14 + .../figure24b-separation.csv | 19 + .../figure24b-tip_vortex_shedding.csv | 8 + .../figure25b-BVS.csv | 5 + .../figure25b-LBLVS.csv | 6 + .../figure25b-TBL-TE-pressure.csv | 12 + .../figure25b-TBL-TE-suction.csv | 14 + .../figure25b-separation.csv | 17 + test/bpm_itr_tests.jl | 35 + test/bpm_shape_function_tests.jl | 514 +++ test/bpm_writevtk_test.jl | 305 ++ test/broadband_source_element_tests.jl | 2764 +++++++++++++++++ test/ccblade_helper_tests.jl | 94 - test/combine_tests.jl | 14 +- test/compact_f1a_constructor_tests.jl | 182 ++ test/doppler_tests.jl | 184 ++ test/f1a_tests.jl | 6 +- test/forwarddiff_test.jl | 4 +- test/gen_bpmjl_data/Project.toml | 7 + test/gen_bpmjl_data/airfoils/README.md | 1 + .../airfoils/xf-n0012-il-500000.dat | 147 + test/gen_bpmjl_data/figure22b.jld2 | Bin 0 -> 7094 bytes test/gen_bpmjl_data/figure23c.jld2 | Bin 0 -> 12167 bytes test/gen_bpmjl_data/figure24b.jld2 | Bin 0 -> 7094 bytes test/gen_bpmjl_data/itr_with_bpmjl.jl | 983 ++++++ .../gen_ccblade_data/GenCCBladeData.jl | 23 +- .../gen_ccblade_data/Project.toml | 2 + .../ccblade_omega01-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega01.csv | 30 - .../ccblade_omega02-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega02.csv | 30 - .../ccblade_omega03-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega03.csv | 30 - .../ccblade_omega04-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega04.csv | 30 - .../ccblade_omega05-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega05.csv | 30 - .../ccblade_omega06-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega06.csv | 30 - .../ccblade_omega07-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega07.csv | 30 - .../ccblade_omega08-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega08.csv | 30 - .../ccblade_omega09-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega09.csv | 30 - .../ccblade_omega10-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega10.csv | 30 - .../ccblade_omega11-outputs.jld2 | Bin 0 -> 5564 bytes .../gen_ccblade_data/ccblade_omega11.csv | 30 - test/itr_figure22b_barc.jl | 234 ++ test/itr_figure22b_bpmjl.jl | 292 ++ test/itr_figure23c_barc.jl | 261 ++ test/itr_figure23c_bpmjl.jl | 312 ++ test/itr_figure24b_barc.jl | 233 ++ test/itr_figure24b_bpmjl.jl | 290 ++ test/runtests.jl | 7 +- .../cf1a_mb_with_observers-00000001.vtm | 9 + .../cf1a_mb_with_observers-00000002.vtm | 9 + .../cf1a_mb_with_observers-00000003.vtm | 9 + .../cf1a_mb_with_observers-00000004.vtm | 9 + .../cf1a_mb_with_observers-00000005.vtm | 9 + .../cf1a_mb_with_observers-00000006.vtm | 9 + .../cf1a_mb_with_observers-00000007.vtm | 9 + .../cf1a_mb_with_observers-00000008.vtm | 9 + .../cf1a_mb_with_observers-00000009.vtm | 9 + .../cf1a_mb_with_observers-00000010.vtm | 9 + .../cf1a_mb_with_observers-00000011.vtm | 9 + .../cf1a_mb_with_observers-00000012.vtm | 9 + .../cf1a_mb_with_observers-00000013.vtm | 9 + .../cf1a_mb_with_observers-00000014.vtm | 9 + .../cf1a_mb_with_observers-00000015.vtm | 9 + .../cf1a_mb_with_observers-00000016.vtm | 9 + .../cf1a_mb_with_observers-00000017.vtm | 9 + .../cf1a_mb_with_observers-00000018.vtm | 9 + .../cf1a_mb_with_observers-00000019.vtm | 9 + .../cf1a_mb_with_observers-00000020.vtm | 9 + .../cf1a_mb_with_observers-00000021.vtm | 9 + .../cf1a_mb_with_observers-00000022.vtm | 9 + .../cf1a_mb_with_observers-00000023.vtm | 9 + .../cf1a_mb_with_observers-00000024.vtm | 9 + .../cf1a_mb_with_observers-00000025.vtm | 9 + .../cf1a_mb_with_observers-00000026.vtm | 9 + .../cf1a_mb_with_observers-00000027.vtm | 9 + .../cf1a_mb_with_observers-00000028.vtm | 9 + .../cf1a_mb_with_observers-00000029.vtm | 9 + .../cf1a_mb_with_observers-00000030.vtm | 9 + .../cf1a_mb_with_observers-00000031.vtm | 9 + .../cf1a_mb_with_observers-00000032.vtm | 9 + .../cf1a_mb_with_observers-00000033.vtm | 9 + .../cf1a_mb_with_observers-00000034.vtm | 9 + .../cf1a_mb_with_observers-00000035.vtm | 9 + .../cf1a_mb_with_observers-00000036.vtm | 9 + .../cf1a_mb_with_observers-00000037.vtm | 9 + .../cf1a_mb_with_observers-00000038.vtm | 9 + .../cf1a_mb_with_observers-00000039.vtm | 9 + .../cf1a_mb_with_observers-00000040.vtm | 9 + .../cf1a_mb_with_observers-00000041.vtm | 9 + .../cf1a_mb_with_observers-00000042.vtm | 9 + .../cf1a_mb_with_observers-00000043.vtm | 9 + .../cf1a_mb_with_observers-00000044.vtm | 9 + .../cf1a_mb_with_observers-00000045.vtm | 9 + .../cf1a_mb_with_observers-00000046.vtm | 9 + .../cf1a_mb_with_observers-00000047.vtm | 9 + .../cf1a_mb_with_observers-00000048.vtm | 9 + .../cf1a_mb_with_observers-00000049.vtm | 9 + .../cf1a_mb_with_observers-00000050.vtm | 9 + .../cf1a_mb_with_observers-00000051.vtm | 9 + .../cf1a_mb_with_observers-00000052.vtm | 9 + .../cf1a_mb_with_observers-00000053.vtm | 9 + .../cf1a_mb_with_observers-00000054.vtm | 9 + .../cf1a_mb_with_observers-00000055.vtm | 9 + .../cf1a_mb_with_observers-00000056.vtm | 9 + .../cf1a_mb_with_observers-00000057.vtm | 9 + .../cf1a_mb_with_observers-00000058.vtm | 9 + .../cf1a_mb_with_observers-00000059.vtm | 9 + .../cf1a_mb_with_observers-00000060.vtm | 9 + .../cf1a_mb_with_observers-00000061.vtm | 9 + .../cf1a_mb_with_observers-00000062.vtm | 9 + .../cf1a_mb_with_observers-00000063.vtm | 9 + .../cf1a_mb_with_observers-00000064.vtm | 9 + ...cf1a_mb_with_observers-block1-00000001.vtp | Bin 0 -> 4640 bytes ...cf1a_mb_with_observers-block1-00000002.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000003.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000004.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000005.vtp | Bin 0 -> 6364 bytes ...cf1a_mb_with_observers-block1-00000006.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000007.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block1-00000008.vtp | Bin 0 -> 6355 bytes ...cf1a_mb_with_observers-block1-00000009.vtp | Bin 0 -> 5207 bytes ...cf1a_mb_with_observers-block1-00000010.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block1-00000011.vtp | Bin 0 -> 6365 bytes ...cf1a_mb_with_observers-block1-00000012.vtp | Bin 0 -> 6354 bytes ...cf1a_mb_with_observers-block1-00000013.vtp | Bin 0 -> 6365 bytes ...cf1a_mb_with_observers-block1-00000014.vtp | Bin 0 -> 6361 bytes ...cf1a_mb_with_observers-block1-00000015.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000016.vtp | Bin 0 -> 6359 bytes ...cf1a_mb_with_observers-block1-00000017.vtp | Bin 0 -> 6528 bytes ...cf1a_mb_with_observers-block1-00000018.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000019.vtp | Bin 0 -> 6361 bytes ...cf1a_mb_with_observers-block1-00000020.vtp | Bin 0 -> 6366 bytes ...cf1a_mb_with_observers-block1-00000021.vtp | Bin 0 -> 6359 bytes ...cf1a_mb_with_observers-block1-00000022.vtp | Bin 0 -> 6362 bytes ...cf1a_mb_with_observers-block1-00000023.vtp | Bin 0 -> 6358 bytes ...cf1a_mb_with_observers-block1-00000024.vtp | Bin 0 -> 6357 bytes ...cf1a_mb_with_observers-block1-00000025.vtp | Bin 0 -> 5195 bytes ...cf1a_mb_with_observers-block1-00000026.vtp | Bin 0 -> 6349 bytes ...cf1a_mb_with_observers-block1-00000027.vtp | Bin 0 -> 6357 bytes ...cf1a_mb_with_observers-block1-00000028.vtp | Bin 0 -> 6354 bytes ...cf1a_mb_with_observers-block1-00000029.vtp | Bin 0 -> 6353 bytes ...cf1a_mb_with_observers-block1-00000030.vtp | Bin 0 -> 6363 bytes ...cf1a_mb_with_observers-block1-00000031.vtp | Bin 0 -> 6359 bytes ...cf1a_mb_with_observers-block1-00000032.vtp | Bin 0 -> 6358 bytes ...cf1a_mb_with_observers-block1-00000033.vtp | Bin 0 -> 6530 bytes ...cf1a_mb_with_observers-block1-00000034.vtp | Bin 0 -> 6351 bytes ...cf1a_mb_with_observers-block1-00000035.vtp | Bin 0 -> 6359 bytes ...cf1a_mb_with_observers-block1-00000036.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000037.vtp | Bin 0 -> 6357 bytes ...cf1a_mb_with_observers-block1-00000038.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block1-00000039.vtp | Bin 0 -> 6359 bytes ...cf1a_mb_with_observers-block1-00000040.vtp | Bin 0 -> 6351 bytes ...cf1a_mb_with_observers-block1-00000041.vtp | Bin 0 -> 5259 bytes ...cf1a_mb_with_observers-block1-00000042.vtp | Bin 0 -> 6355 bytes ...cf1a_mb_with_observers-block1-00000043.vtp | Bin 0 -> 6363 bytes ...cf1a_mb_with_observers-block1-00000044.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000045.vtp | Bin 0 -> 6355 bytes ...cf1a_mb_with_observers-block1-00000046.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000047.vtp | Bin 0 -> 6354 bytes ...cf1a_mb_with_observers-block1-00000048.vtp | Bin 0 -> 6358 bytes ...cf1a_mb_with_observers-block1-00000049.vtp | Bin 0 -> 6568 bytes ...cf1a_mb_with_observers-block1-00000050.vtp | Bin 0 -> 6364 bytes ...cf1a_mb_with_observers-block1-00000051.vtp | Bin 0 -> 6363 bytes ...cf1a_mb_with_observers-block1-00000052.vtp | Bin 0 -> 6368 bytes ...cf1a_mb_with_observers-block1-00000053.vtp | Bin 0 -> 6368 bytes ...cf1a_mb_with_observers-block1-00000054.vtp | Bin 0 -> 6361 bytes ...cf1a_mb_with_observers-block1-00000055.vtp | Bin 0 -> 6363 bytes ...cf1a_mb_with_observers-block1-00000056.vtp | Bin 0 -> 6347 bytes ...cf1a_mb_with_observers-block1-00000057.vtp | Bin 0 -> 5258 bytes ...cf1a_mb_with_observers-block1-00000058.vtp | Bin 0 -> 6350 bytes ...cf1a_mb_with_observers-block1-00000059.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000060.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block1-00000061.vtp | Bin 0 -> 6368 bytes ...cf1a_mb_with_observers-block1-00000062.vtp | Bin 0 -> 6362 bytes ...cf1a_mb_with_observers-block1-00000063.vtp | Bin 0 -> 6361 bytes ...cf1a_mb_with_observers-block1-00000064.vtp | Bin 0 -> 6363 bytes ...cf1a_mb_with_observers-block2-00000001.vtp | Bin 0 -> 6342 bytes ...cf1a_mb_with_observers-block2-00000002.vtp | Bin 0 -> 6358 bytes ...cf1a_mb_with_observers-block2-00000003.vtp | Bin 0 -> 6355 bytes ...cf1a_mb_with_observers-block2-00000004.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block2-00000005.vtp | Bin 0 -> 6357 bytes ...cf1a_mb_with_observers-block2-00000006.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block2-00000007.vtp | Bin 0 -> 6358 bytes ...cf1a_mb_with_observers-block2-00000008.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block2-00000009.vtp | Bin 0 -> 5265 bytes ...cf1a_mb_with_observers-block2-00000010.vtp | Bin 0 -> 6354 bytes ...cf1a_mb_with_observers-block2-00000011.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block2-00000012.vtp | Bin 0 -> 6355 bytes ...cf1a_mb_with_observers-block2-00000013.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block2-00000014.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block2-00000015.vtp | Bin 0 -> 6355 bytes ...cf1a_mb_with_observers-block2-00000016.vtp | Bin 0 -> 6355 bytes ...cf1a_mb_with_observers-block2-00000017.vtp | Bin 0 -> 6517 bytes ...cf1a_mb_with_observers-block2-00000018.vtp | Bin 0 -> 6359 bytes ...cf1a_mb_with_observers-block2-00000019.vtp | Bin 0 -> 6359 bytes ...cf1a_mb_with_observers-block2-00000020.vtp | Bin 0 -> 6370 bytes ...cf1a_mb_with_observers-block2-00000021.vtp | Bin 0 -> 6365 bytes ...cf1a_mb_with_observers-block2-00000022.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block2-00000023.vtp | Bin 0 -> 6354 bytes ...cf1a_mb_with_observers-block2-00000024.vtp | Bin 0 -> 6354 bytes ...cf1a_mb_with_observers-block2-00000025.vtp | Bin 0 -> 5259 bytes ...cf1a_mb_with_observers-block2-00000026.vtp | Bin 0 -> 6352 bytes ...cf1a_mb_with_observers-block2-00000027.vtp | Bin 0 -> 6361 bytes ...cf1a_mb_with_observers-block2-00000028.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block2-00000029.vtp | Bin 0 -> 6366 bytes ...cf1a_mb_with_observers-block2-00000030.vtp | Bin 0 -> 6362 bytes ...cf1a_mb_with_observers-block2-00000031.vtp | Bin 0 -> 6358 bytes ...cf1a_mb_with_observers-block2-00000032.vtp | Bin 0 -> 6362 bytes ...cf1a_mb_with_observers-block2-00000033.vtp | Bin 0 -> 6529 bytes ...cf1a_mb_with_observers-block2-00000034.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block2-00000035.vtp | Bin 0 -> 6361 bytes ...cf1a_mb_with_observers-block2-00000036.vtp | Bin 0 -> 6359 bytes ...cf1a_mb_with_observers-block2-00000037.vtp | Bin 0 -> 6367 bytes ...cf1a_mb_with_observers-block2-00000038.vtp | Bin 0 -> 6361 bytes ...cf1a_mb_with_observers-block2-00000039.vtp | Bin 0 -> 6355 bytes ...cf1a_mb_with_observers-block2-00000040.vtp | Bin 0 -> 6351 bytes ...cf1a_mb_with_observers-block2-00000041.vtp | Bin 0 -> 5269 bytes ...cf1a_mb_with_observers-block2-00000042.vtp | Bin 0 -> 6355 bytes ...cf1a_mb_with_observers-block2-00000043.vtp | Bin 0 -> 6361 bytes ...cf1a_mb_with_observers-block2-00000044.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block2-00000045.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block2-00000046.vtp | Bin 0 -> 6363 bytes ...cf1a_mb_with_observers-block2-00000047.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block2-00000048.vtp | Bin 0 -> 6362 bytes ...cf1a_mb_with_observers-block2-00000049.vtp | Bin 0 -> 6572 bytes ...cf1a_mb_with_observers-block2-00000050.vtp | Bin 0 -> 6358 bytes ...cf1a_mb_with_observers-block2-00000051.vtp | Bin 0 -> 6362 bytes ...cf1a_mb_with_observers-block2-00000052.vtp | Bin 0 -> 6362 bytes ...cf1a_mb_with_observers-block2-00000053.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block2-00000054.vtp | Bin 0 -> 6362 bytes ...cf1a_mb_with_observers-block2-00000055.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block2-00000056.vtp | Bin 0 -> 6346 bytes ...cf1a_mb_with_observers-block2-00000057.vtp | Bin 0 -> 5250 bytes ...cf1a_mb_with_observers-block2-00000058.vtp | Bin 0 -> 6349 bytes ...cf1a_mb_with_observers-block2-00000059.vtp | Bin 0 -> 6356 bytes ...cf1a_mb_with_observers-block2-00000060.vtp | Bin 0 -> 6357 bytes ...cf1a_mb_with_observers-block2-00000061.vtp | Bin 0 -> 6361 bytes ...cf1a_mb_with_observers-block2-00000062.vtp | Bin 0 -> 6360 bytes ...cf1a_mb_with_observers-block2-00000063.vtp | Bin 0 -> 6354 bytes ...cf1a_mb_with_observers-block2-00000064.vtp | Bin 0 -> 6357 bytes ...a_mb_with_observers-observer1-00000001.vtu | Bin 0 -> 2823 bytes ...a_mb_with_observers-observer1-00000002.vtu | Bin 0 -> 3023 bytes ...a_mb_with_observers-observer1-00000003.vtu | Bin 0 -> 3024 bytes ...a_mb_with_observers-observer1-00000004.vtu | Bin 0 -> 3023 bytes ...a_mb_with_observers-observer1-00000005.vtu | Bin 0 -> 3030 bytes ...a_mb_with_observers-observer1-00000006.vtu | Bin 0 -> 3028 bytes ...a_mb_with_observers-observer1-00000007.vtu | Bin 0 -> 3029 bytes ...a_mb_with_observers-observer1-00000008.vtu | Bin 0 -> 3021 bytes ...a_mb_with_observers-observer1-00000009.vtu | Bin 0 -> 3028 bytes ...a_mb_with_observers-observer1-00000010.vtu | Bin 0 -> 3017 bytes ...a_mb_with_observers-observer1-00000011.vtu | Bin 0 -> 3021 bytes ...a_mb_with_observers-observer1-00000012.vtu | Bin 0 -> 2995 bytes ...a_mb_with_observers-observer1-00000013.vtu | Bin 0 -> 3016 bytes ...a_mb_with_observers-observer1-00000014.vtu | Bin 0 -> 3021 bytes ...a_mb_with_observers-observer1-00000015.vtu | Bin 0 -> 3016 bytes ...a_mb_with_observers-observer1-00000016.vtu | Bin 0 -> 3014 bytes ...a_mb_with_observers-observer1-00000017.vtu | Bin 0 -> 3020 bytes ...a_mb_with_observers-observer1-00000018.vtu | Bin 0 -> 3011 bytes ...a_mb_with_observers-observer1-00000019.vtu | Bin 0 -> 3004 bytes ...a_mb_with_observers-observer1-00000020.vtu | Bin 0 -> 3017 bytes ...a_mb_with_observers-observer1-00000021.vtu | Bin 0 -> 3007 bytes ...a_mb_with_observers-observer1-00000022.vtu | Bin 0 -> 3012 bytes ...a_mb_with_observers-observer1-00000023.vtu | Bin 0 -> 2992 bytes ...a_mb_with_observers-observer1-00000024.vtu | Bin 0 -> 3013 bytes ...a_mb_with_observers-observer1-00000025.vtu | Bin 0 -> 3014 bytes ...a_mb_with_observers-observer1-00000026.vtu | Bin 0 -> 3001 bytes ...a_mb_with_observers-observer1-00000027.vtu | Bin 0 -> 3000 bytes ...a_mb_with_observers-observer1-00000028.vtu | Bin 0 -> 3008 bytes ...a_mb_with_observers-observer1-00000029.vtu | Bin 0 -> 3007 bytes ...a_mb_with_observers-observer1-00000030.vtu | Bin 0 -> 2999 bytes ...a_mb_with_observers-observer1-00000031.vtu | Bin 0 -> 3008 bytes ...a_mb_with_observers-observer1-00000032.vtu | Bin 0 -> 3008 bytes ...a_mb_with_observers-observer1-00000033.vtu | Bin 0 -> 3006 bytes ...a_mb_with_observers-observer1-00000034.vtu | Bin 0 -> 2994 bytes ...a_mb_with_observers-observer1-00000035.vtu | Bin 0 -> 3004 bytes ...a_mb_with_observers-observer1-00000036.vtu | Bin 0 -> 3007 bytes ...a_mb_with_observers-observer1-00000037.vtu | Bin 0 -> 2999 bytes ...a_mb_with_observers-observer1-00000038.vtu | Bin 0 -> 3005 bytes ...a_mb_with_observers-observer1-00000039.vtu | Bin 0 -> 3003 bytes ...a_mb_with_observers-observer1-00000040.vtu | Bin 0 -> 3003 bytes ...a_mb_with_observers-observer1-00000041.vtu | Bin 0 -> 3001 bytes ...a_mb_with_observers-observer1-00000042.vtu | Bin 0 -> 2998 bytes ...a_mb_with_observers-observer1-00000043.vtu | Bin 0 -> 2997 bytes ...a_mb_with_observers-observer1-00000044.vtu | Bin 0 -> 3004 bytes ...a_mb_with_observers-observer1-00000045.vtu | Bin 0 -> 2990 bytes ...a_mb_with_observers-observer1-00000046.vtu | Bin 0 -> 3005 bytes ...a_mb_with_observers-observer1-00000047.vtu | Bin 0 -> 3000 bytes ...a_mb_with_observers-observer1-00000048.vtu | Bin 0 -> 3004 bytes ...a_mb_with_observers-observer1-00000049.vtu | Bin 0 -> 3002 bytes ...a_mb_with_observers-observer1-00000050.vtu | Bin 0 -> 2997 bytes ...a_mb_with_observers-observer1-00000051.vtu | Bin 0 -> 2998 bytes ...a_mb_with_observers-observer1-00000052.vtu | Bin 0 -> 2999 bytes ...a_mb_with_observers-observer1-00000053.vtu | Bin 0 -> 2990 bytes ...a_mb_with_observers-observer1-00000054.vtu | Bin 0 -> 2991 bytes ...a_mb_with_observers-observer1-00000055.vtu | Bin 0 -> 2994 bytes ...a_mb_with_observers-observer1-00000056.vtu | Bin 0 -> 2991 bytes ...a_mb_with_observers-observer1-00000057.vtu | Bin 0 -> 2992 bytes ...a_mb_with_observers-observer1-00000058.vtu | Bin 0 -> 2997 bytes ...a_mb_with_observers-observer1-00000059.vtu | Bin 0 -> 3000 bytes ...a_mb_with_observers-observer1-00000060.vtu | Bin 0 -> 2986 bytes ...a_mb_with_observers-observer1-00000061.vtu | Bin 0 -> 2983 bytes ...a_mb_with_observers-observer1-00000062.vtu | Bin 0 -> 2985 bytes ...a_mb_with_observers-observer1-00000063.vtu | Bin 0 -> 2987 bytes ...a_mb_with_observers-observer1-00000064.vtu | Bin 0 -> 2980 bytes ...a_mb_with_observers-observer2-00000001.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000002.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000003.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000004.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000005.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000006.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000007.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000008.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000009.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000010.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000011.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000012.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000013.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000014.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000015.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000016.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000017.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000018.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000019.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000020.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000021.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000022.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000023.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000024.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000025.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000026.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000027.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000028.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000029.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000030.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000031.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000032.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000033.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000034.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000035.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000036.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000037.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000038.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000039.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000040.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000041.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000042.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000043.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000044.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000045.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000046.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000047.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000048.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000049.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000050.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000051.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000052.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000053.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000054.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000055.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000056.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000057.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000058.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000059.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000060.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000061.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000062.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000063.vtu | Bin 0 -> 2824 bytes ...a_mb_with_observers-observer2-00000064.vtu | Bin 0 -> 2824 bytes test/writevtk/cf1a_mb_with_observers.pvd | 69 + .../writevtk/cf1a_with_observers-00000001.vtm | 8 + .../writevtk/cf1a_with_observers-00000002.vtm | 8 + .../writevtk/cf1a_with_observers-00000003.vtm | 8 + .../writevtk/cf1a_with_observers-00000004.vtm | 8 + .../writevtk/cf1a_with_observers-00000005.vtm | 8 + .../writevtk/cf1a_with_observers-00000006.vtm | 8 + .../writevtk/cf1a_with_observers-00000007.vtm | 8 + .../writevtk/cf1a_with_observers-00000008.vtm | 8 + .../writevtk/cf1a_with_observers-00000009.vtm | 8 + .../writevtk/cf1a_with_observers-00000010.vtm | 8 + .../writevtk/cf1a_with_observers-00000011.vtm | 8 + .../writevtk/cf1a_with_observers-00000012.vtm | 8 + .../writevtk/cf1a_with_observers-00000013.vtm | 8 + .../writevtk/cf1a_with_observers-00000014.vtm | 8 + .../writevtk/cf1a_with_observers-00000015.vtm | 8 + .../writevtk/cf1a_with_observers-00000016.vtm | 8 + .../writevtk/cf1a_with_observers-00000017.vtm | 8 + .../writevtk/cf1a_with_observers-00000018.vtm | 8 + .../writevtk/cf1a_with_observers-00000019.vtm | 8 + .../writevtk/cf1a_with_observers-00000020.vtm | 8 + .../writevtk/cf1a_with_observers-00000021.vtm | 8 + .../writevtk/cf1a_with_observers-00000022.vtm | 8 + .../writevtk/cf1a_with_observers-00000023.vtm | 8 + .../writevtk/cf1a_with_observers-00000024.vtm | 8 + .../writevtk/cf1a_with_observers-00000025.vtm | 8 + .../writevtk/cf1a_with_observers-00000026.vtm | 8 + .../writevtk/cf1a_with_observers-00000027.vtm | 8 + .../writevtk/cf1a_with_observers-00000028.vtm | 8 + .../writevtk/cf1a_with_observers-00000029.vtm | 8 + .../writevtk/cf1a_with_observers-00000030.vtm | 8 + .../writevtk/cf1a_with_observers-00000031.vtm | 8 + .../writevtk/cf1a_with_observers-00000032.vtm | 8 + .../writevtk/cf1a_with_observers-00000033.vtm | 8 + .../writevtk/cf1a_with_observers-00000034.vtm | 8 + .../writevtk/cf1a_with_observers-00000035.vtm | 8 + .../writevtk/cf1a_with_observers-00000036.vtm | 8 + .../writevtk/cf1a_with_observers-00000037.vtm | 8 + .../writevtk/cf1a_with_observers-00000038.vtm | 8 + .../writevtk/cf1a_with_observers-00000039.vtm | 8 + .../writevtk/cf1a_with_observers-00000040.vtm | 8 + .../writevtk/cf1a_with_observers-00000041.vtm | 8 + .../writevtk/cf1a_with_observers-00000042.vtm | 8 + .../writevtk/cf1a_with_observers-00000043.vtm | 8 + .../writevtk/cf1a_with_observers-00000044.vtm | 8 + .../writevtk/cf1a_with_observers-00000045.vtm | 8 + .../writevtk/cf1a_with_observers-00000046.vtm | 8 + .../writevtk/cf1a_with_observers-00000047.vtm | 8 + .../writevtk/cf1a_with_observers-00000048.vtm | 8 + .../writevtk/cf1a_with_observers-00000049.vtm | 8 + .../writevtk/cf1a_with_observers-00000050.vtm | 8 + .../writevtk/cf1a_with_observers-00000051.vtm | 8 + .../writevtk/cf1a_with_observers-00000052.vtm | 8 + .../writevtk/cf1a_with_observers-00000053.vtm | 8 + .../writevtk/cf1a_with_observers-00000054.vtm | 8 + .../writevtk/cf1a_with_observers-00000055.vtm | 8 + .../writevtk/cf1a_with_observers-00000056.vtm | 8 + .../writevtk/cf1a_with_observers-00000057.vtm | 8 + .../writevtk/cf1a_with_observers-00000058.vtm | 8 + .../writevtk/cf1a_with_observers-00000059.vtm | 8 + .../writevtk/cf1a_with_observers-00000060.vtm | 8 + .../writevtk/cf1a_with_observers-00000061.vtm | 8 + .../writevtk/cf1a_with_observers-00000062.vtm | 8 + .../writevtk/cf1a_with_observers-00000063.vtm | 8 + .../writevtk/cf1a_with_observers-00000064.vtm | 8 + .../cf1a_with_observers-block1-00000001.vtp | Bin 0 -> 7325 bytes .../cf1a_with_observers-block1-00000002.vtp | Bin 0 -> 7943 bytes .../cf1a_with_observers-block1-00000003.vtp | Bin 0 -> 7975 bytes .../cf1a_with_observers-block1-00000004.vtp | Bin 0 -> 7956 bytes .../cf1a_with_observers-block1-00000005.vtp | Bin 0 -> 7972 bytes .../cf1a_with_observers-block1-00000006.vtp | Bin 0 -> 7995 bytes .../cf1a_with_observers-block1-00000007.vtp | Bin 0 -> 8047 bytes .../cf1a_with_observers-block1-00000008.vtp | Bin 0 -> 8097 bytes .../cf1a_with_observers-block1-00000009.vtp | Bin 0 -> 6796 bytes .../cf1a_with_observers-block1-00000010.vtp | Bin 0 -> 8082 bytes .../cf1a_with_observers-block1-00000011.vtp | Bin 0 -> 8030 bytes .../cf1a_with_observers-block1-00000012.vtp | Bin 0 -> 7999 bytes .../cf1a_with_observers-block1-00000013.vtp | Bin 0 -> 7961 bytes .../cf1a_with_observers-block1-00000014.vtp | Bin 0 -> 7943 bytes .../cf1a_with_observers-block1-00000015.vtp | Bin 0 -> 7943 bytes .../cf1a_with_observers-block1-00000016.vtp | Bin 0 -> 7939 bytes .../cf1a_with_observers-block1-00000017.vtp | Bin 0 -> 9211 bytes .../cf1a_with_observers-block1-00000018.vtp | Bin 0 -> 7934 bytes .../cf1a_with_observers-block1-00000019.vtp | Bin 0 -> 7962 bytes .../cf1a_with_observers-block1-00000020.vtp | Bin 0 -> 7958 bytes .../cf1a_with_observers-block1-00000021.vtp | Bin 0 -> 7944 bytes .../cf1a_with_observers-block1-00000022.vtp | Bin 0 -> 7997 bytes .../cf1a_with_observers-block1-00000023.vtp | Bin 0 -> 8042 bytes .../cf1a_with_observers-block1-00000024.vtp | Bin 0 -> 8088 bytes .../cf1a_with_observers-block1-00000025.vtp | Bin 0 -> 6813 bytes .../cf1a_with_observers-block1-00000026.vtp | Bin 0 -> 8097 bytes .../cf1a_with_observers-block1-00000027.vtp | Bin 0 -> 8041 bytes .../cf1a_with_observers-block1-00000028.vtp | Bin 0 -> 7981 bytes .../cf1a_with_observers-block1-00000029.vtp | Bin 0 -> 7958 bytes .../cf1a_with_observers-block1-00000030.vtp | Bin 0 -> 7964 bytes .../cf1a_with_observers-block1-00000031.vtp | Bin 0 -> 7966 bytes .../cf1a_with_observers-block1-00000032.vtp | Bin 0 -> 7959 bytes .../cf1a_with_observers-block1-00000033.vtp | Bin 0 -> 8544 bytes .../cf1a_with_observers-block1-00000034.vtp | Bin 0 -> 7972 bytes .../cf1a_with_observers-block1-00000035.vtp | Bin 0 -> 7958 bytes .../cf1a_with_observers-block1-00000036.vtp | Bin 0 -> 7966 bytes .../cf1a_with_observers-block1-00000037.vtp | Bin 0 -> 7966 bytes .../cf1a_with_observers-block1-00000038.vtp | Bin 0 -> 7989 bytes .../cf1a_with_observers-block1-00000039.vtp | Bin 0 -> 8042 bytes .../cf1a_with_observers-block1-00000040.vtp | Bin 0 -> 8108 bytes .../cf1a_with_observers-block1-00000041.vtp | Bin 0 -> 6860 bytes .../cf1a_with_observers-block1-00000042.vtp | Bin 0 -> 8094 bytes .../cf1a_with_observers-block1-00000043.vtp | Bin 0 -> 8038 bytes .../cf1a_with_observers-block1-00000044.vtp | Bin 0 -> 8001 bytes .../cf1a_with_observers-block1-00000045.vtp | Bin 0 -> 7953 bytes .../cf1a_with_observers-block1-00000046.vtp | Bin 0 -> 7963 bytes .../cf1a_with_observers-block1-00000047.vtp | Bin 0 -> 7936 bytes .../cf1a_with_observers-block1-00000048.vtp | Bin 0 -> 7954 bytes .../cf1a_with_observers-block1-00000049.vtp | Bin 0 -> 9310 bytes .../cf1a_with_observers-block1-00000050.vtp | Bin 0 -> 7936 bytes .../cf1a_with_observers-block1-00000051.vtp | Bin 0 -> 7935 bytes .../cf1a_with_observers-block1-00000052.vtp | Bin 0 -> 7958 bytes .../cf1a_with_observers-block1-00000053.vtp | Bin 0 -> 7969 bytes .../cf1a_with_observers-block1-00000054.vtp | Bin 0 -> 7984 bytes .../cf1a_with_observers-block1-00000055.vtp | Bin 0 -> 8055 bytes .../cf1a_with_observers-block1-00000056.vtp | Bin 0 -> 8075 bytes .../cf1a_with_observers-block1-00000057.vtp | Bin 0 -> 6868 bytes .../cf1a_with_observers-block1-00000058.vtp | Bin 0 -> 8095 bytes .../cf1a_with_observers-block1-00000059.vtp | Bin 0 -> 8043 bytes .../cf1a_with_observers-block1-00000060.vtp | Bin 0 -> 7994 bytes .../cf1a_with_observers-block1-00000061.vtp | Bin 0 -> 7964 bytes .../cf1a_with_observers-block1-00000062.vtp | Bin 0 -> 7956 bytes .../cf1a_with_observers-block1-00000063.vtp | Bin 0 -> 7960 bytes .../cf1a_with_observers-block1-00000064.vtp | Bin 0 -> 7951 bytes ...cf1a_with_observers-observer1-00000001.vtu | Bin 0 -> 2823 bytes ...cf1a_with_observers-observer1-00000002.vtu | Bin 0 -> 3023 bytes ...cf1a_with_observers-observer1-00000003.vtu | Bin 0 -> 3024 bytes ...cf1a_with_observers-observer1-00000004.vtu | Bin 0 -> 3023 bytes ...cf1a_with_observers-observer1-00000005.vtu | Bin 0 -> 3030 bytes ...cf1a_with_observers-observer1-00000006.vtu | Bin 0 -> 3028 bytes ...cf1a_with_observers-observer1-00000007.vtu | Bin 0 -> 3029 bytes ...cf1a_with_observers-observer1-00000008.vtu | Bin 0 -> 3021 bytes ...cf1a_with_observers-observer1-00000009.vtu | Bin 0 -> 3028 bytes ...cf1a_with_observers-observer1-00000010.vtu | Bin 0 -> 3017 bytes ...cf1a_with_observers-observer1-00000011.vtu | Bin 0 -> 3021 bytes ...cf1a_with_observers-observer1-00000012.vtu | Bin 0 -> 2995 bytes ...cf1a_with_observers-observer1-00000013.vtu | Bin 0 -> 3016 bytes ...cf1a_with_observers-observer1-00000014.vtu | Bin 0 -> 3021 bytes ...cf1a_with_observers-observer1-00000015.vtu | Bin 0 -> 3016 bytes ...cf1a_with_observers-observer1-00000016.vtu | Bin 0 -> 3014 bytes ...cf1a_with_observers-observer1-00000017.vtu | Bin 0 -> 3020 bytes ...cf1a_with_observers-observer1-00000018.vtu | Bin 0 -> 3011 bytes ...cf1a_with_observers-observer1-00000019.vtu | Bin 0 -> 3004 bytes ...cf1a_with_observers-observer1-00000020.vtu | Bin 0 -> 3017 bytes ...cf1a_with_observers-observer1-00000021.vtu | Bin 0 -> 3007 bytes ...cf1a_with_observers-observer1-00000022.vtu | Bin 0 -> 3012 bytes ...cf1a_with_observers-observer1-00000023.vtu | Bin 0 -> 2992 bytes ...cf1a_with_observers-observer1-00000024.vtu | Bin 0 -> 3013 bytes ...cf1a_with_observers-observer1-00000025.vtu | Bin 0 -> 3014 bytes ...cf1a_with_observers-observer1-00000026.vtu | Bin 0 -> 3001 bytes ...cf1a_with_observers-observer1-00000027.vtu | Bin 0 -> 3000 bytes ...cf1a_with_observers-observer1-00000028.vtu | Bin 0 -> 3008 bytes ...cf1a_with_observers-observer1-00000029.vtu | Bin 0 -> 3007 bytes ...cf1a_with_observers-observer1-00000030.vtu | Bin 0 -> 2999 bytes ...cf1a_with_observers-observer1-00000031.vtu | Bin 0 -> 3008 bytes ...cf1a_with_observers-observer1-00000032.vtu | Bin 0 -> 3008 bytes ...cf1a_with_observers-observer1-00000033.vtu | Bin 0 -> 3006 bytes ...cf1a_with_observers-observer1-00000034.vtu | Bin 0 -> 2994 bytes ...cf1a_with_observers-observer1-00000035.vtu | Bin 0 -> 3004 bytes ...cf1a_with_observers-observer1-00000036.vtu | Bin 0 -> 3007 bytes ...cf1a_with_observers-observer1-00000037.vtu | Bin 0 -> 2999 bytes ...cf1a_with_observers-observer1-00000038.vtu | Bin 0 -> 3005 bytes ...cf1a_with_observers-observer1-00000039.vtu | Bin 0 -> 3003 bytes ...cf1a_with_observers-observer1-00000040.vtu | Bin 0 -> 3003 bytes ...cf1a_with_observers-observer1-00000041.vtu | Bin 0 -> 3001 bytes ...cf1a_with_observers-observer1-00000042.vtu | Bin 0 -> 2998 bytes ...cf1a_with_observers-observer1-00000043.vtu | Bin 0 -> 2997 bytes ...cf1a_with_observers-observer1-00000044.vtu | Bin 0 -> 3004 bytes ...cf1a_with_observers-observer1-00000045.vtu | Bin 0 -> 2990 bytes ...cf1a_with_observers-observer1-00000046.vtu | Bin 0 -> 3005 bytes ...cf1a_with_observers-observer1-00000047.vtu | Bin 0 -> 3000 bytes ...cf1a_with_observers-observer1-00000048.vtu | Bin 0 -> 3004 bytes ...cf1a_with_observers-observer1-00000049.vtu | Bin 0 -> 3002 bytes ...cf1a_with_observers-observer1-00000050.vtu | Bin 0 -> 2997 bytes ...cf1a_with_observers-observer1-00000051.vtu | Bin 0 -> 2998 bytes ...cf1a_with_observers-observer1-00000052.vtu | Bin 0 -> 2999 bytes ...cf1a_with_observers-observer1-00000053.vtu | Bin 0 -> 2990 bytes ...cf1a_with_observers-observer1-00000054.vtu | Bin 0 -> 2991 bytes ...cf1a_with_observers-observer1-00000055.vtu | Bin 0 -> 2994 bytes ...cf1a_with_observers-observer1-00000056.vtu | Bin 0 -> 2991 bytes ...cf1a_with_observers-observer1-00000057.vtu | Bin 0 -> 2992 bytes ...cf1a_with_observers-observer1-00000058.vtu | Bin 0 -> 2997 bytes ...cf1a_with_observers-observer1-00000059.vtu | Bin 0 -> 3000 bytes ...cf1a_with_observers-observer1-00000060.vtu | Bin 0 -> 2986 bytes ...cf1a_with_observers-observer1-00000061.vtu | Bin 0 -> 2983 bytes ...cf1a_with_observers-observer1-00000062.vtu | Bin 0 -> 2985 bytes ...cf1a_with_observers-observer1-00000063.vtu | Bin 0 -> 2987 bytes ...cf1a_with_observers-observer1-00000064.vtu | Bin 0 -> 2980 bytes ...cf1a_with_observers-observer2-00000001.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000002.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000003.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000004.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000005.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000006.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000007.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000008.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000009.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000010.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000011.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000012.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000013.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000014.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000015.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000016.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000017.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000018.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000019.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000020.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000021.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000022.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000023.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000024.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000025.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000026.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000027.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000028.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000029.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000030.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000031.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000032.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000033.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000034.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000035.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000036.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000037.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000038.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000039.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000040.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000041.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000042.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000043.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000044.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000045.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000046.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000047.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000048.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000049.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000050.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000051.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000052.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000053.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000054.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000055.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000056.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000057.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000058.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000059.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000060.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000061.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000062.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000063.vtu | Bin 0 -> 2824 bytes ...cf1a_with_observers-observer2-00000064.vtu | Bin 0 -> 2824 bytes test/writevtk/cf1a_with_observers.pvd | 69 + test/writevtk_tests.jl | 114 +- 785 files changed, 24333 insertions(+), 728 deletions(-) create mode 100644 docs/src/bpm_tests1.md create mode 100644 docs/src/bpm_tests2.md create mode 100644 docs/src/bpm_tests3.md create mode 100644 docs/src/itr_tests1.md create mode 100644 docs/src/itr_tests2.md create mode 100644 src/abstract_broadband.jl create mode 100644 src/abstract_source_elements.jl create mode 100644 src/advance_time.jl create mode 100644 src/boundary_layers.jl create mode 100644 src/bpm_test_utils.jl create mode 100644 src/combined_broadband.jl create mode 100644 src/deprecated.jl rename src/{core.jl => f1a.jl} (61%) create mode 100644 src/lbl_vs.jl create mode 100644 src/observers.jl create mode 100644 src/tbl_te.jl create mode 100644 src/teb_vs.jl create mode 100644 src/tip_vortex.jl create mode 100644 test/boundary_layer_tests.jl create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-bl_thickness-tripped.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-bl_thickness-untripped.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-disp_thickness-tripped.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-disp_thickness-untripped.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-bl_thickness-pressure_side.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-bl_thickness-suction_side.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-pressure_side.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-suction_side.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-bl_thickness-pressure_side.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-bl_thickness-suction_side.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-pressure_side.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-suction_side.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-a-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-b-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-c-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-d-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-TBL-TE-pressure.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-pressure.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-a-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-b-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-c-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-d-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-TBL-TE-pressure.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-TBL-TE-pressure.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-TBL-TE-pressure.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-TBL-TE-pressure.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure38-d-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-TBL-TE-pressure.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-LBL-VS.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-TBL-TE-pressure.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure48-c-LBL-VS.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure54-a-LBL-VS.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure59-c-LBL-VS.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure60-c-LBL-VS.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure60-d-LBL-VS.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure65-d-LBL-VS.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure66-b-LBL-VS.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure69-a-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure69-b-separation.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure77.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-A_max.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-A_min.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-B_max.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-B_min.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure80-M0.093.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure80-M0.209.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.093.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.116.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.163.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.209.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure85-G1.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure86-St_1_prime.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure87.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure88-G2-alpha0.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure88-G2-alpha6.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure89.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure91-tip.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure95-0Psi.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure95-14Psi.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure96-0Psi.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure96-14Psi.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p25.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p43.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p50.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p54.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar1p20.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p25.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p43.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p50.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p54.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p62.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar1p20.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-a-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-b-bluntness.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-c-bluntness.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-d-bluntness.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-b-TBL-TE-suction.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-b-bluntness.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-c-bluntness.csv create mode 100644 test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-d-bluntness.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure21a-loading.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure21a-thickness.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-BVS.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-LBLVS.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-pressure-2.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-pressure.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-suction-2.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-suction.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-separation-2.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-separation.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-tip_vortex_shedding.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-BVS.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-LBLVS.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-TBL-TE-pressure.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-TBL-TE-suction.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-separation.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-tip_vortex_shedding.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-BVS.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-LBLVS.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-TBL-TE-pressure.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-TBL-TE-suction.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-separation.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-tip_vortex_shedding.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-BVS.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-LBLVS.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-TBL-TE-pressure.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-TBL-TE-suction.csv create mode 100644 test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-separation.csv create mode 100644 test/bpm_itr_tests.jl create mode 100644 test/bpm_shape_function_tests.jl create mode 100644 test/bpm_writevtk_test.jl create mode 100644 test/broadband_source_element_tests.jl delete mode 100644 test/ccblade_helper_tests.jl create mode 100644 test/compact_f1a_constructor_tests.jl create mode 100644 test/doppler_tests.jl create mode 100644 test/gen_bpmjl_data/Project.toml create mode 100644 test/gen_bpmjl_data/airfoils/README.md create mode 100644 test/gen_bpmjl_data/airfoils/xf-n0012-il-500000.dat create mode 100644 test/gen_bpmjl_data/figure22b.jld2 create mode 100644 test/gen_bpmjl_data/figure23c.jld2 create mode 100644 test/gen_bpmjl_data/figure24b.jld2 create mode 100644 test/gen_bpmjl_data/itr_with_bpmjl.jl create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega01-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega01.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega02-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega02.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega03-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega03.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega04-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega04.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega05-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega05.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega06-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega06.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega07-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega07.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega08-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega08.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega09-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega09.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega10-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega10.csv create mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega11-outputs.jld2 delete mode 100644 test/gen_test_data/gen_ccblade_data/ccblade_omega11.csv create mode 100644 test/itr_figure22b_barc.jl create mode 100644 test/itr_figure22b_bpmjl.jl create mode 100644 test/itr_figure23c_barc.jl create mode 100644 test/itr_figure23c_bpmjl.jl create mode 100644 test/itr_figure24b_barc.jl create mode 100644 test/itr_figure24b_bpmjl.jl create mode 100755 test/writevtk/cf1a_mb_with_observers-00000001.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000002.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000003.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000004.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000005.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000006.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000007.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000008.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000009.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000010.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000011.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000012.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000013.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000014.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000015.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000016.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000017.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000018.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000019.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000020.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000021.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000022.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000023.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000024.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000025.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000026.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000027.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000028.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000029.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000030.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000031.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000032.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000033.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000034.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000035.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000036.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000037.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000038.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000039.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000040.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000041.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000042.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000043.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000044.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000045.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000046.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000047.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000048.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000049.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000050.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000051.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000052.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000053.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000054.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000055.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000056.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000057.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000058.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000059.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000060.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000061.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000062.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000063.vtm create mode 100755 test/writevtk/cf1a_mb_with_observers-00000064.vtm create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000001.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000002.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000003.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000004.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000005.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000006.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000007.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000008.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000009.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000010.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000011.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000012.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000013.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000014.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000015.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000016.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000017.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000018.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000019.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000020.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000021.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000022.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000023.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000024.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000025.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000026.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000027.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000028.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000029.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000030.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000031.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000032.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000033.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000034.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000035.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000036.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000037.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000038.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000039.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000040.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000041.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000042.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000043.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000044.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000045.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000046.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000047.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000048.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000049.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000050.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000051.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000052.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000053.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000054.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000055.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000056.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000057.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000058.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000059.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000060.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000061.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000062.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000063.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block1-00000064.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000001.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000002.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000003.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000004.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000005.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000006.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000007.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000008.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000009.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000010.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000011.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000012.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000013.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000014.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000015.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000016.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000017.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000018.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000019.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000020.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000021.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000022.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000023.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000024.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000025.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000026.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000027.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000028.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000029.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000030.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000031.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000032.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000033.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000034.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000035.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000036.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000037.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000038.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000039.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000040.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000041.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000042.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000043.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000044.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000045.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000046.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000047.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000048.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000049.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000050.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000051.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000052.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000053.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000054.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000055.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000056.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000057.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000058.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000059.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000060.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000061.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000062.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000063.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-block2-00000064.vtp create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000001.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000002.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000003.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000004.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000005.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000006.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000007.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000008.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000009.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000010.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000011.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000012.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000013.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000014.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000015.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000016.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000017.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000018.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000019.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000020.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000021.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000022.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000023.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000024.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000025.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000026.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000027.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000028.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000029.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000030.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000031.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000032.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000033.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000034.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000035.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000036.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000037.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000038.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000039.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000040.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000041.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000042.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000043.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000044.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000045.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000046.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000047.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000048.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000049.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000050.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000051.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000052.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000053.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000054.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000055.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000056.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000057.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000058.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000059.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000060.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000061.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000062.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000063.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer1-00000064.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000001.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000002.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000003.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000004.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000005.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000006.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000007.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000008.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000009.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000010.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000011.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000012.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000013.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000014.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000015.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000016.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000017.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000018.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000019.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000020.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000021.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000022.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000023.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000024.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000025.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000026.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000027.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000028.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000029.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000030.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000031.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000032.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000033.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000034.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000035.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000036.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000037.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000038.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000039.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000040.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000041.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000042.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000043.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000044.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000045.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000046.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000047.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000048.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000049.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000050.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000051.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000052.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000053.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000054.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000055.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000056.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000057.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000058.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000059.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000060.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000061.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000062.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000063.vtu create mode 100644 test/writevtk/cf1a_mb_with_observers-observer2-00000064.vtu create mode 100755 test/writevtk/cf1a_mb_with_observers.pvd create mode 100755 test/writevtk/cf1a_with_observers-00000001.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000002.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000003.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000004.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000005.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000006.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000007.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000008.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000009.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000010.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000011.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000012.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000013.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000014.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000015.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000016.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000017.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000018.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000019.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000020.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000021.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000022.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000023.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000024.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000025.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000026.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000027.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000028.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000029.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000030.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000031.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000032.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000033.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000034.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000035.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000036.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000037.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000038.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000039.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000040.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000041.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000042.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000043.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000044.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000045.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000046.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000047.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000048.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000049.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000050.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000051.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000052.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000053.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000054.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000055.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000056.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000057.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000058.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000059.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000060.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000061.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000062.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000063.vtm create mode 100755 test/writevtk/cf1a_with_observers-00000064.vtm create mode 100644 test/writevtk/cf1a_with_observers-block1-00000001.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000002.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000003.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000004.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000005.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000006.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000007.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000008.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000009.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000010.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000011.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000012.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000013.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000014.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000015.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000016.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000017.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000018.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000019.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000020.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000021.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000022.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000023.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000024.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000025.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000026.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000027.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000028.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000029.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000030.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000031.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000032.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000033.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000034.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000035.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000036.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000037.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000038.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000039.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000040.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000041.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000042.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000043.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000044.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000045.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000046.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000047.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000048.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000049.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000050.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000051.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000052.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000053.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000054.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000055.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000056.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000057.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000058.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000059.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000060.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000061.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000062.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000063.vtp create mode 100644 test/writevtk/cf1a_with_observers-block1-00000064.vtp create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000001.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000002.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000003.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000004.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000005.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000006.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000007.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000008.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000009.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000010.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000011.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000012.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000013.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000014.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000015.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000016.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000017.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000018.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000019.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000020.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000021.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000022.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000023.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000024.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000025.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000026.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000027.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000028.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000029.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000030.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000031.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000032.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000033.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000034.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000035.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000036.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000037.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000038.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000039.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000040.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000041.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000042.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000043.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000044.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000045.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000046.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000047.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000048.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000049.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000050.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000051.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000052.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000053.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000054.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000055.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000056.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000057.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000058.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000059.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000060.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000061.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000062.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000063.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer1-00000064.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000001.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000002.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000003.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000004.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000005.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000006.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000007.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000008.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000009.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000010.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000011.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000012.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000013.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000014.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000015.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000016.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000017.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000018.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000019.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000020.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000021.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000022.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000023.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000024.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000025.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000026.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000027.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000028.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000029.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000030.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000031.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000032.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000033.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000034.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000035.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000036.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000037.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000038.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000039.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000040.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000041.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000042.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000043.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000044.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000045.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000046.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000047.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000048.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000049.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000050.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000051.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000052.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000053.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000054.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000055.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000056.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000057.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000058.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000059.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000060.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000061.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000062.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000063.vtu create mode 100644 test/writevtk/cf1a_with_observers-observer2-00000064.vtu create mode 100755 test/writevtk/cf1a_with_observers.pvd diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index b39cfde0..9b5ad7b8 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -17,23 +17,19 @@ jobs: matrix: version: - '1' # Leave this line unchanged. '1' will automatically expand to the latest stable 1.x release of Julia. + #- 'nightly' os: - ubuntu-latest + - macOS-latest + - windows-latest arch: - x64 steps: - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@v1 + - uses: julia-actions/setup-julia@latest with: version: ${{ matrix.version }} arch: ${{ matrix.arch }} - - name: Add General - shell: julia --color=yes {0} - run: | - using Pkg - Pkg.Registry.add(RegistrySpec(url="https://github.com/JuliaRegistries/General")) - env: - JULIA_PKG_USE_CLI_GIT: 'true' - - uses: julia-actions/julia-runtest@v1 + - uses: julia-actions/julia-runtest@latest env: JULIA_PKG_USE_CLI_GIT: 'true' diff --git a/Project.toml b/Project.toml index 107b28f3..b2ca1fb9 100644 --- a/Project.toml +++ b/Project.toml @@ -1,30 +1,32 @@ name = "AcousticAnalogies" uuid = "e71b3392-1e0c-4536-b366-2bd1fce6fba0" -authors = ["Ingraham, Daniel James (GRC-LTV0) "] -version = "0.7.2" +authors = ["Ingraham, Daniel James (GRC-LTV0) and contributors"] +version = "0.8.0" [deps] AcousticMetrics = "046f749b-9c1e-43ca-86bc-6902340f753e" CCBlade = "e1828068-15df-11e9-03e4-ef195ea46fa4" -ConcreteStructs = "2569d6c7-a4a2-43d3-a901-331e8e4be471" FLOWMath = "6cb5d3fb-0fe8-4cc2-bd89-9fe0b19a99d3" +FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" FlexiMaps = "6394faf6-06db-4fa8-b750-35ccc60383f7" -Formatting = "59287772-0a20-5a39-b81b-1366585eb4c0" +Format = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" JuliennedArrays = "5cadff95-7770-533d-a838-a1bf817ee6e0" KinematicCoordinateTransformations = "730d3219-0a85-48f9-b699-9f31f8913d09" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Meshes = "eacbb407-ea5a-433e-ab97-5258b1ca43fa" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" WriteVTK = "64499a7a-5c06-52f2-abe2-ccb03c286192" [compat] -AcousticMetrics = "0.6.0" +AcousticMetrics = "0.7.0" CCBlade = "0.2.4" -ConcreteStructs = "0.2.3" FLOWMath = "0.3.3" +FillArrays = "1.11.0" FlexiMaps = "0.1.18" -Formatting = "0.4.2" +Format = "1.3.7" JuliennedArrays = "0.4.0" KinematicCoordinateTransformations = "0.4.1" +Meshes = "0.46.0" StaticArrays = "1.5.19" WriteVTK = "1.17.1" julia = "1.9.1" diff --git a/docs/Project.toml b/docs/Project.toml index e557a725..751c8aed 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -2,9 +2,13 @@ AcousticAnalogies = "e71b3392-1e0c-4536-b366-2bd1fce6fba0" AcousticMetrics = "046f749b-9c1e-43ca-86bc-6902340f753e" CCBlade = "e1828068-15df-11e9-03e4-ef195ea46fa4" +ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" FLOWMath = "6cb5d3fb-0fe8-4cc2-bd89-9fe0b19a99d3" +FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" +JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" 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..bae653ac 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, @@ -11,7 +11,13 @@ function main() "CCBlade.jl Example"=>"ccblade_example.md", "WriteVTK.jl Support"=>"writevtk_support.md", "API Reference"=>"api.md", - "Software Quality Assurance"=>"sqa.md"]) + "Software Quality Assurance"=>"sqa.md", + "BPM Airfoil Self-Noise Tests"=>"bpm_tests1.md", + "BPM Airfoil Self-Noise Tests, Cont."=>"bpm_tests2.md", + "BPM Airfoil Self-Noise Tests, Cont."=>"bpm_tests3.md", + "Ideally Twisted Rotor Tests"=>"itr_tests1.md", + "Ideally Twisted Rotor Tests, Cont."=>"itr_tests2.md", + ]) if IN_CI deploydocs(repo="github.com/OpenMDAO/AcousticAnalogies.jl.git", devbranch="main") @@ -20,7 +26,7 @@ function main() end if !isinteractive() - main() + doit() end end # module diff --git a/docs/src/bpm_tests1.md b/docs/src/bpm_tests1.md new file mode 100644 index 00000000..0c3a834a --- /dev/null +++ b/docs/src/bpm_tests1.md @@ -0,0 +1,517 @@ +```@meta +CurrentModule = AADocs +``` +# Software Quality Assurance, Cont. + +## Brooks, Pope, and Marcolini Airfoil Self-Noise Tests +The [Brooks, Pope, and Marcolini (BPM) report on airfoil self-noise](https://ntrs.nasa.gov/citations/19890016302) forms the basis of the [Brooks and Burley broadband noise modeling approach](https://doi.org/10.2514/6.2001-2210) that is implemented in AcousticAnalogies.jl. + +### Boundary Layer Tests + +```@example bpm_bl_thickness +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +# using FLOWMath: linear +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Re_c/10^6", ylabel="δ_0/c", + xscale=log10, yscale=log10, + xminorticksvisible=true, yminorticksvisible=true, + xminorticks=IntervalsBetween(9), yminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), yticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure06-bl_thickness-tripped.csv") +bpm_tripped = DelimitedFiles.readdlm(fname, ',') +Re_c_1e6 = bpm_tripped[:, 1] +deltastar0_c = bpm_tripped[:, 2] +scatter!(ax1, Re_c_1e6, deltastar0_c, markersize=4, label="tripped, BPM report", color=colors[1]) + +Re_c_1e6_jl = range(minimum(Re_c_1e6), maximum(Re_c_1e6); length=50) +deltastar0_c_jl = AcousticAnalogies.bl_thickness_0.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), Re_c_1e6_jl.*1e6) +lines!(ax1, Re_c_1e6_jl, deltastar0_c_jl, label="tripped, Julia", color=colors[1]) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure06-bl_thickness-untripped.csv") +bpm_untripped = DelimitedFiles.readdlm(fname, ',') +Re_c_1e6 = bpm_untripped[:, 1] +deltastar0_c = bpm_untripped[:, 2] +scatter!(ax1, Re_c_1e6, deltastar0_c, markersize=4, label="untripped, BPM report", color=colors[2]) + +Re_c_1e6_jl = range(minimum(Re_c_1e6), maximum(Re_c_1e6); length=50) +deltastar0_c_jl = AcousticAnalogies.bl_thickness_0.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), Re_c_1e6_jl.*1e6) +lines!(ax1, Re_c_1e6_jl, deltastar0_c_jl, label="untripped, Julia", color=colors[2]) + +xlims!(ax1, 0.04, 3) +ylims!(ax1, 0.01, 0.2) +axislegend(ax1) +save("19890016302-figure06-bl_thickness.png", fig) +``` +![](19890016302-figure06-bl_thickness.png) + +```@example bpm_disp_thickness +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Re_c/10^6", ylabel="δ_0^*/c", + xscale=log10, yscale=log10, + xminorticksvisible=true, yminorticksvisible=true, + xminorticks=IntervalsBetween(9), yminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), yticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure06-disp_thickness-tripped.csv") +bpm_tripped = DelimitedFiles.readdlm(fname, ',') +Re_c_1e6 = bpm_tripped[:, 1] +deltastar0_c = bpm_tripped[:, 2] +scatter!(ax1, Re_c_1e6, deltastar0_c, markersize=4, label="tripped, BPM report", color=colors[1]) + +Re_c_1e6_jl = range(minimum(Re_c_1e6), maximum(Re_c_1e6); length=50) +deltastar0_c_jl = AcousticAnalogies.disp_thickness_0.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), Re_c_1e6_jl.*1e6) +lines!(ax1, Re_c_1e6_jl, deltastar0_c_jl, label="tripped, Julia", color=colors[1]) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure06-disp_thickness-untripped.csv") +bpm_untripped = DelimitedFiles.readdlm(fname, ',') +Re_c_1e6 = bpm_untripped[:, 1] +deltastar0_c = bpm_untripped[:, 2] +scatter!(ax1, Re_c_1e6, deltastar0_c, markersize=4, label="untripped, BPM report", color=colors[2]) + +Re_c_1e6_jl = range(minimum(Re_c_1e6), maximum(Re_c_1e6); length=50) +deltastar0_c_jl = AcousticAnalogies.disp_thickness_0.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), Re_c_1e6_jl.*1e6) +lines!(ax1, Re_c_1e6_jl, deltastar0_c_jl, label="untripped, Julia", color=colors[2]) + +xlims!(ax1, 0.04, 3) +ylims!(ax1, 0.001, 0.03) +axislegend(ax1) +save("19890016302-figure06-disp_thickness.png", fig) +``` +![](19890016302-figure06-disp_thickness.png) + +```@example bpm_bl_thickness_tripped +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="alpha, deg.", ylabel="δ/δ_0", + yscale=log10, + yminorticksvisible=true, + yminorticks=IntervalsBetween(9), + yticks=LogTicks(IntegerTicks()) + ) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure07-bl_thickness-pressure_side.csv") +bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm_pressure_side[:, 1] +delta_bpm = bpm_pressure_side[:, 2] +scatter!(ax1, alpha_deg, delta_bpm, color=colors[1], markersize=4, label="pressure side, BPM report") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +delta_jl = AcousticAnalogies._bl_thickness_p.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, delta_jl; color=colors[1], label="pressure side, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure07-bl_thickness-suction_side.csv") +bpm_suction_side = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm_suction_side[:, 1] +delta_bpm = bpm_suction_side[:, 2] +scatter!(ax1, alpha_deg, delta_bpm, markersize=4, color=colors[2], label="suction side, BPM report") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +delta_jl = AcousticAnalogies._bl_thickness_s.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, delta_jl; color=colors[2], label="suction side, Julia") + +xlims!(ax1, 0, 25) +ylims!(ax1, 0.2, 20) +axislegend(ax1, position=:lt) +save("19890016302-figure07-bl_thickness.png", fig) +``` +![](19890016302-figure07-bl_thickness.png) + +```@example bpm_disp_thickness_star_tripped +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="alpha, deg.", ylabel="δ^*/δ_0^*", + yscale=log10, + yminorticksvisible=true, + yminorticks=IntervalsBetween(9), + yticks=LogTicks(IntegerTicks()) + ) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure07-pressure_side.csv") +bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm_pressure_side[:, 1] +deltastar_bpm = bpm_pressure_side[:, 2] +scatter!(ax1, alpha_deg, deltastar_bpm, color=colors[1], markersize=4, label="pressure side, BPM report") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +deltastar_jl = AcousticAnalogies._disp_thickness_p.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, deltastar_jl; color=colors[1], label="pressure side, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure07-suction_side.csv") +bpm_suction_side = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm_suction_side[:, 1] +deltastar_bpm = bpm_suction_side[:, 2] +scatter!(ax1, alpha_deg, deltastar_bpm, markersize=4, color=colors[2], label="suction side, BPM report") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +deltastar_jl = AcousticAnalogies._disp_thickness_s.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, deltastar_jl; color=colors[2], label="suction side, Julia") + +xlims!(ax1, 0, 25) +ylims!(ax1, 0.2, 200) +axislegend(ax1, position=:lt) +save("19890016302-figure07.png", fig) +``` +![](19890016302-figure07.png) + +```@example bpm_bl_thickness_untripped +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="alpha, deg.", ylabel="δ/δ_0", + yscale=log10, + yminorticksvisible=true, + yminorticks=IntervalsBetween(9), + yticks=LogTicks(IntegerTicks()) + ) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure08-bl_thickness-pressure_side.csv") +bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm_pressure_side[:, 1] +deltastar_bpm = bpm_pressure_side[:, 2] +scatter!(ax1, alpha_deg, deltastar_bpm, color=colors[1], markersize=4, label="pressure side, BPM report") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +deltastar_jl = AcousticAnalogies._bl_thickness_p.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, deltastar_jl; color=colors[1], label="pressure side, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure08-bl_thickness-suction_side.csv") +bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm_pressure_side[:, 1] +deltastar_bpm = bpm_pressure_side[:, 2] +scatter!(ax1, alpha_deg, deltastar_bpm, color=colors[2], markersize=4, label="suction side, BPM report") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +deltastar_jl = AcousticAnalogies._bl_thickness_s.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, deltastar_jl; color=colors[2], label="suction side, Julia") + +xlims!(ax1, 0, 25) +ylims!(ax1, 0.2, 40) +axislegend(ax1, position=:lt) +save("19890016302-figure08-bl_thickness.png", fig) +``` +![](19890016302-figure08-bl_thickness.png) + +```@example bpm_disp_thickness_star_untripped +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="alpha, deg.", ylabel="δ^*/δ_0^*", + yscale=log10, + yminorticksvisible=true, + yminorticks=IntervalsBetween(9), + yticks=LogTicks(IntegerTicks()) + ) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure08-pressure_side.csv") +bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm_pressure_side[:, 1] +deltastar_bpm = bpm_pressure_side[:, 2] +scatter!(ax1, alpha_deg, deltastar_bpm, color=colors[1], markersize=4, label="pressure side, BPM report") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +deltastar_jl = AcousticAnalogies._disp_thickness_p.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, deltastar_jl; color=colors[1], label="pressure side, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure08-suction_side.csv") +bpm_suction_side = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm_suction_side[:, 1] +deltastar_bpm = bpm_suction_side[:, 2] +scatter!(ax1, alpha_deg, deltastar_bpm, markersize=4, color=colors[2], label="suction side, BPM report") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +deltastar_jl = AcousticAnalogies._disp_thickness_s.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, deltastar_jl; color=colors[2], label="suction side, Julia") + +xlims!(ax1, 0, 25) +ylims!(ax1, 0.2, 200) +axislegend(ax1, position=:lt) +save("19890016302-figure08.png", fig) +``` +![](19890016302-figure08.png) + +### Turbulent Boundary Layer-Trailing Edge Shape Function Tests + +```@example bpm_K_1 +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Re_c", ylabel="Peak scaled SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure77.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +Re_c_bpm = bpm[:, 1] +K_1_bpm = bpm[:, 2] +scatter!(ax1, Re_c_bpm, K_1_bpm, color=colors[1], markersize=8, label="BPM report") + +Re_c_jl = range(minimum(Re_c_bpm), maximum(Re_c_bpm); length=50) +K_1_jl = AcousticAnalogies.K_1.(Re_c_jl) +lines!(ax1, Re_c_jl, K_1_jl, color=colors[1], label="Julia") + +xlims!(ax1, 10^4, 10^7) +ylims!(ax1, 110.0, 150.0) +axislegend(ax1, position=:lt) +save("19890016302-figure77.png", fig) +``` +![](19890016302-figure77.png) + +```@example bpm_A +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Strouhal number ratio, St/St_peak", ylabel="Function A level, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure78-A_min.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_St_peak_bpm = bpm[:, 1] +A = bpm[:, 2] +scatter!(ax1, St_St_peak_bpm, A, color=colors[1], markersize=8, label="A_min, BPM report") + +St_St_peak_jl = range(minimum(St_St_peak_bpm), maximum(St_St_peak_bpm); length=50) +A_jl = AcousticAnalogies.A.(St_St_peak_jl, 9.5e4) +lines!(ax1, St_St_peak_jl, A_jl, color=colors[1], label="A_min, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure78-A_max.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_St_peak_bpm = bpm[:, 1] +A = bpm[:, 2] +scatter!(ax1, St_St_peak_bpm, A, color=colors[2], markersize=8, label="A_max, BPM report") + +St_St_peak_jl = range(minimum(St_St_peak_bpm), maximum(St_St_peak_bpm); length=50) +A_jl = AcousticAnalogies.A.(St_St_peak_jl, 8.58e5) +lines!(ax1, St_St_peak_jl, A_jl, color=colors[2], label="A_max, Julia") + +xlims!(ax1, 0.1, 20) +ylims!(ax1, -20.0, 0.0) +axislegend(ax1, position=:lt) +save("19890016302-figure78-A.png", fig) +``` +![](19890016302-figure78-A.png) + +```@example bpm_B +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Strouhal number ratio, St/St_peak", ylabel="Function B level, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure78-B_min.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_St_peak_bpm = bpm[:, 1] +B = bpm[:, 2] +scatter!(ax1, St_St_peak_bpm, B, color=colors[1], markersize=8, label="B_min, BPM report") + +St_St_peak_jl = range(0.5, 2; length=50) +B_jl = AcousticAnalogies.B.(St_St_peak_jl, 9.5e4) +lines!(ax1, St_St_peak_jl, B_jl, color=colors[1], label="B_min, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure78-B_max.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_St_peak_bpm = bpm[:, 1] +B = bpm[:, 2] +scatter!(ax1, St_St_peak_bpm, B, color=colors[2], markersize=8, label="B_max, BPM report") + +St_St_peak_jl = range(0.2, 4; length=50) +B_jl = AcousticAnalogies.B.(St_St_peak_jl, 8.58e5) +lines!(ax1, St_St_peak_jl, B_jl, color=colors[2], label="B_max, Julia") + +xlims!(ax1, 0.1, 20) +ylims!(ax1, -20.0, 0.0) +axislegend(ax1, position=:lt) +save("19890016302-figure78-B.png", fig) +``` +![](19890016302-figure78-B.png) + +```@example bpm_St_2 +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Angle of attack α^*, deg", ylabel="Peak Strouhal number, St_peak", + yscale=log10, + yminorticksvisible=true, + yminorticks=IntervalsBetween(9), + yticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure80-M0.093.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm[:, 1] +St_2 = bpm[:, 2] +scatter!(ax1, alpha_deg, St_2, color=colors[1], markersize=8, label="St_2 for M = 0.093, BPM") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +St_2_jl = AcousticAnalogies.St_2.(AcousticAnalogies.St_1(0.093), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, St_2_jl, color=colors[1], label="St_2 for M = 0.093, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure80-M0.209.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm[:, 1] +St_2 = bpm[:, 2] +scatter!(ax1, alpha_deg, St_2, color=colors[2], markersize=8, label="St_2 for M = 0.209, BPM") + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) +St_2_jl = AcousticAnalogies.St_2.(AcousticAnalogies.St_1(0.209), alpha_deg_jl.*pi/180) +lines!(ax1, alpha_deg_jl, St_2_jl, color=colors[2], label="St_2 for M = 0.209, Julia") + +xlims!(ax1, 0.0, 25.0) +ylims!(ax1, 0.01, 1) +axislegend(ax1, position=:lt) +save("19890016302-figure80.png", fig) +``` +![](19890016302-figure80.png) + +```@example bpm_K_2_K_1 +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Angle of attack α_*, deg", ylabel="Extracted scaled levels minus K_1, dB") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure82-M0.093.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm[:, 1] +K_2_K_1 = bpm[:, 2] +scatter!(ax1, alpha_deg, K_2_K_1, color=colors[1], markersize=8, label="M = 0.093, BPM", marker='o') + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=200) +K_2_K_1_jl = AcousticAnalogies.K_2.(1e6, 0.093, alpha_deg_jl.*pi/180) .- AcousticAnalogies.K_1(1e6) +lines!(ax1, alpha_deg_jl, K_2_K_1_jl, color=colors[1], label="M = 0.093, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure82-M0.116.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm[:, 1] +K_2_K_1 = bpm[:, 2] +scatter!(ax1, alpha_deg, K_2_K_1, color=colors[2], markersize=8, label="M = 0.116, BPM", marker='o') + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=200) +K_2_K_1_jl = AcousticAnalogies.K_2.(1e6, 0.116, alpha_deg_jl.*pi/180) .- AcousticAnalogies.K_1(1e6) +lines!(ax1, alpha_deg_jl, K_2_K_1_jl, color=colors[2], label="M = 0.116, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure82-M0.163.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm[:, 1] +K_2_K_1 = bpm[:, 2] +scatter!(ax1, alpha_deg, K_2_K_1, color=colors[3], markersize=8, label="M = 0.163, BPM", marker='o') + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=200) +K_2_K_1_jl = AcousticAnalogies.K_2.(1e6, 0.163, alpha_deg_jl.*pi/180) .- AcousticAnalogies.K_1(1e6) +lines!(ax1, alpha_deg_jl, K_2_K_1_jl, color=colors[3], label="M = 0.163, Julia") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure82-M0.209.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +alpha_deg = bpm[:, 1] +K_2_K_1 = bpm[:, 2] +scatter!(ax1, alpha_deg, K_2_K_1, color=colors[4], markersize=8, label="M = 0.209, BPM", marker='o') + +alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=200) +K_2_K_1_jl = AcousticAnalogies.K_2.(1e6, 0.209, alpha_deg_jl.*pi/180) .- AcousticAnalogies.K_1(1e6) +lines!(ax1, alpha_deg_jl, K_2_K_1_jl, color=colors[4], label="M = 0.209, Julia") + +xlims!(ax1, 0.0, 25.0) +ylims!(ax1, -20, 20) +axislegend(ax1, position=:lt) +save("19890016302-figure82.png", fig) +``` +![](19890016302-figure82.png) diff --git a/docs/src/bpm_tests2.md b/docs/src/bpm_tests2.md new file mode 100644 index 00000000..02c8e50a --- /dev/null +++ b/docs/src/bpm_tests2.md @@ -0,0 +1,471 @@ +```@meta +CurrentModule = AADocs +``` +# Software Quality Assurance, Cont. + +## Brooks, Pope, and Marcolini Airfoil Self-Noise Tests, Cont. + +### Laminar Boundary Layer-Vortex Shedding Tests + +```@example bpm_St_1_prime +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +# using FLOWMath: linear +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Re_c", ylabel="Peak Strouhal number, St'_peak", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + yscale=log10, + yminorticksvisible=true, + yminorticks=IntervalsBetween(9), + yticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure86-St_1_prime.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +Re_c_bpm = bpm[:, 1] +St_1_prime_bpm = bpm[:, 2] +scatter!(ax1, Re_c_bpm, St_1_prime_bpm, color=colors[1], markersize=4, label="BPM") + +Re_c_jl = 10.0.^(range(4, 7; length=100)) +St_1_prime_jl = AcousticAnalogies.St_1_prime.(Re_c_jl) +lines!(ax1, Re_c_jl, St_1_prime_jl, color=colors[1], label="Julia") + +xlims!(ax1, 1e4, 1e7) +ylims!(ax1, 0.01, 1) +axislegend(ax1, position=:lt) +save("19890016302-figure86.png", fig) +``` +![](19890016302-figure86.png) + +```@example bpm_lbl_vs_G1 +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +# using FLOWMath: linear +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="St'/St'_peak", ylabel="Function G_1 level, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure85-G1.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +e_bpm = bpm[:, 1] +G1_bpm = bpm[:, 2] +scatter!(ax1, e_bpm, G1_bpm, color=colors[1], markersize=4, label="BPM") + +e_jl = 10.0.^(range(-1, 1; length=101)) +G1_jl = AcousticAnalogies.G1.(e_jl) + +lines!(ax1, e_jl, G1_jl, color=colors[1], label="Julia") + +xlims!(ax1, 0.1, 10) +ylims!(ax1, -30, 0) +axislegend(ax1, position=:lt) +save("19890016302-figure85.png", fig) +``` +![](19890016302-figure85.png) + +```@example bpm_lbl_vs_St_peak_prime_alphastar +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +# using FLOWMath: linear +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="alpha^*, deg", ylabel="St'_peak/St'_1", + yscale=log10, + yminorticksvisible=true, + yminorticks=IntervalsBetween(9), + yticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure87.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +alphastar_bpm = bpm[:, 1] +St_peak_ratio_bpm = bpm[:, 2] +scatter!(ax1, alphastar_bpm, St_peak_ratio_bpm, color=colors[1], markersize=4, label="BPM") + +St_1_prime = 0.25 # Just make up a value, since we're multiplying and then dividing by it anyway. +alphastar_jl = range(0.0*pi/180, 7.0*pi/180; length=21) +St_peak_ratio_jl = AcousticAnalogies.St_peak_prime.(St_1_prime, alphastar_jl)./St_1_prime +lines!(ax1, alphastar_jl.*180/pi, St_peak_ratio_jl, color=colors[1], label="Julia") + +xlims!(ax1, 0, 7) +ylims!(ax1, 0.5, 2) +axislegend(ax1, position=:lt) +save("19890016302-figure87.png", fig) +``` +![](19890016302-figure87.png) + +```@example bpm_lbl_vs_G2_alphastar +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +# using FLOWMath: linear +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Re_c/Re_c0", ylabel="G2 + G3", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure88-G2-alpha0.csv") +alphastar = 0.0*pi/180 +bpm = DelimitedFiles.readdlm(fname, ',') +Re_c_bpm = bpm[:, 1] +G2_bpm = bpm[:, 2] +scatter!(ax1, Re_c_bpm, G2_bpm, color=colors[1], markersize=4, label="BPM - α^* = $(alphastar*180/pi)°") + +Re_c_jl = 10.0.^range(log10(first(Re_c_bpm)), log10(last(Re_c_bpm)), length=51) +Re_c0 = AcousticAnalogies.Re_c0(alphastar) +Re_ratio_jl = Re_c_jl./Re_c0 +# G2_jl = AcousticAnalogies.G2.(Re_ratio_jl) .+ 171.04 .- 3.03*(alphastar*180/pi) +G2_jl = AcousticAnalogies.G2.(Re_ratio_jl) .+ AcousticAnalogies.G3.(alphastar) +lines!(ax1, Re_c_jl, G2_jl, color=colors[1], label="Julia - α^* = $(alphastar*180/pi)°") + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure88-G2-alpha6.csv") +alphastar = 6.0*pi/180 +bpm = DelimitedFiles.readdlm(fname, ',') +Re_c_bpm = bpm[:, 1] +G2_bpm = bpm[:, 2] +scatter!(ax1, Re_c_bpm, G2_bpm, color=colors[2], markersize=4, label="BPM - α^* = $(alphastar*180/pi)°") + +Re_c_jl = 10.0.^range(log10(first(Re_c_bpm)), log10(last(Re_c_bpm)), length=51) +Re_c0 = AcousticAnalogies.Re_c0(alphastar) +Re_ratio_jl = Re_c_jl./Re_c0 +# G2_jl = AcousticAnalogies.G2.(Re_ratio_jl) .+ 171.04 .- 3.03*(alphastar*180/pi) +G2_jl = AcousticAnalogies.G2.(Re_ratio_jl) .+ AcousticAnalogies.G3.(alphastar) +lines!(ax1, Re_c_jl, G2_jl, color=colors[2], label="Julia - α^* = $(alphastar*180/pi)°") + +xlims!(ax1, 10^4, 10^7) +ylims!(ax1, 125, 175) +axislegend(ax1, position=:lt) +save("19890016302-figure88.png", fig) +``` +![](19890016302-figure88.png) + +```@example bpm_lbl_vs_G2 +using AcousticAnalogies: AcousticAnalogies +using ColorSchemes: colorschemes +using DelimitedFiles: DelimitedFiles +# using FLOWMath: linear +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +colors = colorschemes[:tab10] +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Re_c/Re_c0", ylabel="G2", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks())) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure89.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +Re_ratio_bpm = bpm[:, 1] +G2_bpm = bpm[:, 2] +scatter!(ax1, Re_ratio_bpm, G2_bpm, color=colors[1], markersize=4, label="BPM") + +Re_ratio_jl = 10.0.^range(-1, 1, length=51) +G2_jl = AcousticAnalogies.G2.(Re_ratio_jl) +lines!(ax1, Re_ratio_jl, G2_jl, color=colors[1], label="Julia") + +xlims!(ax1, 0.1, 100) +ylims!(ax1, -45, 5) +axislegend(ax1, position=:lt) +save("19890016302-figure89.png", fig) +``` +![](19890016302-figure89.png) + +### Trailing Edge Bluntness-Vortex Shedding Tests + +```@example bpm_figure95 +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure95-0Psi.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +h_over_deltastar_0Psi = bpm[:, 1] +St_3prime_peak_0Psi = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure95-14Psi.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +h_over_deltastar_14Psi = bpm[:, 1] +St_3prime_peak_14Psi = bpm[:, 2] + +h_over_deltastar_jl = 10.0.^(range(-1, 1; length=51)) +St_3prime_peak_0Psi_jl = AcousticAnalogies.St_3prime_peak.(h_over_deltastar_jl, 0.0*pi/180) +St_3prime_peak_14Psi_jl = AcousticAnalogies.St_3prime_peak.(h_over_deltastar_jl, 14.0*pi/180) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Thickness ratio, h/δ^*", ylabel="Peak Strouhal number, St'''_peak", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + yscale=log10, + yminorticksvisible=true, + yminorticks=IntervalsBetween(9), + yticks=LogTicks(IntegerTicks()), + title="Figure 95") + +scatter!(ax1, h_over_deltastar_0Psi, St_3prime_peak_0Psi; marker='o', label="Ψ = 0°, BPM") +lines!(ax1, h_over_deltastar_jl, St_3prime_peak_0Psi_jl; label="Ψ = 0°, Julia") + +scatter!(ax1, h_over_deltastar_14Psi, St_3prime_peak_14Psi; marker='o', label="Ψ = 14°, BPM") +lines!(ax1, h_over_deltastar_jl, St_3prime_peak_14Psi_jl; label="Ψ = 14°, Julia") + +xlims!(ax1, 0.2, 10.0) +ylims!(ax1, 0.05, 0.3) +axislegend(ax1, position=:rt) +save("19890016302-figure95.png", fig) +``` +![](19890016302-figure95.png) + +```@example bpm_figure96 +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure96-0Psi.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +h_over_deltastar_0Psi = bpm[:, 1] +G4_0Psi = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure96-14Psi.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +h_over_deltastar_14Psi = bpm[:, 1] +G4_14Psi = bpm[:, 2] + +h_over_deltastar_jl = 10.0.^(range(-1, 1; length=51)) +G4_0Psi_jl = AcousticAnalogies.G4.(h_over_deltastar_jl, 0.0*pi/180) +G4_14Psi_jl = AcousticAnalogies.G4.(h_over_deltastar_jl, 14.0*pi/180) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Thickness ratio, h/δ^*", ylabel="Scaled peak SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 96") + +scatter!(ax1, h_over_deltastar_0Psi, G4_0Psi; marker='o', label="Ψ = 0°, BPM") +lines!(ax1, h_over_deltastar_jl, G4_0Psi_jl; label="Ψ = 0°, Julia") + +scatter!(ax1, h_over_deltastar_14Psi, G4_14Psi; marker='o', label="Ψ = 14°, BPM") +lines!(ax1, h_over_deltastar_jl, G4_14Psi_jl; label="Ψ = 14°, Julia") + +xlims!(ax1, 0.1, 10.0) +ylims!(ax1, 110, 180) +axislegend(ax1, position=:lt) +save("19890016302-figure96.png", fig) +``` +![](19890016302-figure96.png) + +```@example bpm_figure97a +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p25.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_0p25 = bpm[:, 1] +G5_14Psi_h_over_deltastar_avg0p25 = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p43.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_0p43 = bpm[:, 1] +G5_14Psi_h_over_deltastar_avg0p43 = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p50.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_0p50 = bpm[:, 1] +G5_14Psi_h_over_deltastar_avg0p50 = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p54.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_0p54 = bpm[:, 1] +G5_14Psi_h_over_deltastar_avg0p54 = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p62.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_0p62 = bpm[:, 1] +G5_14Psi_h_over_deltastar_avg0p62 = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar1p20.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_1p20 = bpm[:, 1] +G5_14Psi_h_over_deltastar_avg1p20 = bpm[:, 2] + +St_3prime_over_St_3prime_peak_jl = 10.0.^(range(-1, 10; length=1001)) +G5_14Psi_h_over_deltastar_avg0p25_jl = AcousticAnalogies.G5_Psi14.(0.25, St_3prime_over_St_3prime_peak_jl) +G5_14Psi_h_over_deltastar_avg0p43_jl = AcousticAnalogies.G5_Psi14.(0.43, St_3prime_over_St_3prime_peak_jl) +G5_14Psi_h_over_deltastar_avg0p50_jl = AcousticAnalogies.G5_Psi14.(0.50, St_3prime_over_St_3prime_peak_jl) +G5_14Psi_h_over_deltastar_avg0p54_jl = AcousticAnalogies.G5_Psi14.(0.54, St_3prime_over_St_3prime_peak_jl) +G5_14Psi_h_over_deltastar_avg0p62_jl = AcousticAnalogies.G5_Psi14.(0.62, St_3prime_over_St_3prime_peak_jl) +G5_14Psi_h_over_deltastar_avg1p20_jl = AcousticAnalogies.G5_Psi14.(1.20, St_3prime_over_St_3prime_peak_jl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Strouhal ratio, St'''/St'''_peak", ylabel="G_5, Ψ=14°", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 97a") + +scatter!(ax1, St_3prime_over_St_3prime_peak_0p25, G5_14Psi_h_over_deltastar_avg0p25; label="h/δ^* = 0.25, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p25_jl; label="h/δ^* = 0.25, Julia") + +scatter!(ax1, St_3prime_over_St_3prime_peak_0p43, G5_14Psi_h_over_deltastar_avg0p43; label="h/δ^* = 0.43, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p43_jl; label="h/δ^* = 0.43, Julia") + +scatter!(ax1, St_3prime_over_St_3prime_peak_0p50, G5_14Psi_h_over_deltastar_avg0p50; label="h/δ^* = 0.50, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p50_jl; label="h/δ^* = 0.50, Julia") + +scatter!(ax1, St_3prime_over_St_3prime_peak_0p54, G5_14Psi_h_over_deltastar_avg0p54; label="h/δ^* = 0.54, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p54_jl; label="h/δ^* = 0.54, Julia") + +scatter!(ax1, St_3prime_over_St_3prime_peak_0p62, G5_14Psi_h_over_deltastar_avg0p62; label="h/δ^* = 0.62, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p62_jl; label="h/δ^* = 0.62, Julia") + +scatter!(ax1, St_3prime_over_St_3prime_peak_1p20, G5_14Psi_h_over_deltastar_avg1p20; label="h/δ^* = 1.20, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg1p20_jl; label="h/δ^* = 1.20, Julia") + +xlims!(ax1, 0.1, 10.0) +ylims!(ax1, -30, 10) +axislegend(ax1, position=:rt) +save("19890016302-figure97a.png", fig) +``` +![](19890016302-figure97a.png) + +```@example bpm_figure97b +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p25.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_0p25 = bpm[:, 1] +G5_0Psi_h_over_deltastar_avg0p25 = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p43.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_0p43 = bpm[:, 1] +G5_0Psi_h_over_deltastar_avg0p43 = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p50.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_0p50 = bpm[:, 1] +G5_0Psi_h_over_deltastar_avg0p50 = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p54.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_0p54 = bpm[:, 1] +G5_0Psi_h_over_deltastar_avg0p54 = bpm[:, 2] + +# fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p62.csv") +# bpm = DelimitedFiles.readdlm(fname, ',') +# St_3prime_over_St_3prime_peak_0p62 = bpm[:, 1] +# G5_0Psi_h_over_deltastar_avg0p62 = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar1p20.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +St_3prime_over_St_3prime_peak_1p20 = bpm[:, 1] +G5_0Psi_h_over_deltastar_avg1p20 = bpm[:, 2] + +St_3prime_over_St_3prime_peak_jl = 10.0.^(range(-1, 10; length=1001)) +G5_0Psi_h_over_deltastar_avg0p25_jl = AcousticAnalogies.G5_Psi0.(0.25, St_3prime_over_St_3prime_peak_jl) +G5_0Psi_h_over_deltastar_avg0p43_jl = AcousticAnalogies.G5_Psi0.(0.43, St_3prime_over_St_3prime_peak_jl) +G5_0Psi_h_over_deltastar_avg0p50_jl = AcousticAnalogies.G5_Psi0.(0.50, St_3prime_over_St_3prime_peak_jl) +G5_0Psi_h_over_deltastar_avg0p54_jl = AcousticAnalogies.G5_Psi0.(0.54, St_3prime_over_St_3prime_peak_jl) +# G5_0Psi_h_over_deltastar_avg0p62_jl = AcousticAnalogies.G5_Psi0.(0.62, St_3prime_over_St_3prime_peak_jl) +G5_0Psi_h_over_deltastar_avg1p20_jl = AcousticAnalogies.G5_Psi0.(1.20, St_3prime_over_St_3prime_peak_jl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="Strouhal ratio, St'''/St'''_peak", ylabel="G_5, Ψ=0°", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 97b") + +scatter!(ax1, St_3prime_over_St_3prime_peak_0p25, G5_0Psi_h_over_deltastar_avg0p25; label="h/δ^* = 0.25, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p25_jl; label="h/δ^* = 0.25, Julia") + +scatter!(ax1, St_3prime_over_St_3prime_peak_0p43, G5_0Psi_h_over_deltastar_avg0p43; label="h/δ^* = 0.43, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p43_jl; label="h/δ^* = 0.43, Julia") + +scatter!(ax1, St_3prime_over_St_3prime_peak_0p50, G5_0Psi_h_over_deltastar_avg0p50; label="h/δ^* = 0.50, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p50_jl; label="h/δ^* = 0.50, Julia") + +scatter!(ax1, St_3prime_over_St_3prime_peak_0p54, G5_0Psi_h_over_deltastar_avg0p54; label="h/δ^* = 0.54, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p54_jl; label="h/δ^* = 0.54, Julia") + +# scatter!(ax1, St_3prime_over_St_3prime_peak_0p62, G5_0Psi_h_over_deltastar_avg0p62; label="h/δ^* = 0.62, BPM", marker='o') +# lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p62_jl; label="h/δ^* = 0.62, Julia") + +scatter!(ax1, St_3prime_over_St_3prime_peak_1p20, G5_0Psi_h_over_deltastar_avg1p20; label="h/δ^* = 1.20, BPM", marker='o') +lines!(ax1, St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg1p20_jl; label="h/δ^* = 1.20, Julia") + +xlims!(ax1, 0.1, 10.0) +ylims!(ax1, -30, 10) +axislegend(ax1, position=:rt) +save("19890016302-figure97b.png", fig) +``` +![](19890016302-figure97b.png) + diff --git a/docs/src/bpm_tests3.md b/docs/src/bpm_tests3.md new file mode 100644 index 00000000..36ef6354 --- /dev/null +++ b/docs/src/bpm_tests3.md @@ -0,0 +1,1894 @@ +```@meta +CurrentModule = AADocs +``` +# Software Quality Assurance, Cont. + +## Brooks, Pope, and Marcolini Airfoil Self-Noise Tests, Cont. + +### Airfoil Self-Noise Predictions + +```@example bpm_figure11_a +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure11-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# At zero angle of attack the pressure and suction side predictions are the same. +f_p = f_s +SPL_p = SPL_s + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 30.48e-2 # chord in meters +U = 71.3 # freestream velocity in m/s +M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0 +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 11 (a) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure11-a.png", fig) +``` +![](19890016302-figure11-a.png) + +```@example bpm_figure11_b +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure11-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# At zero angle of attack the pressure and suction side predictions are the same. +f_p = f_s +SPL_p = SPL_s + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 30.48e-2 # chord in meters +U = 55.5 # freestream velocity in m/s +# M = 0.163 # Mach number, corresponds to U = 55.5 m/s in BPM report +M = U/340.46 +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +D_h = AcousticAnalogies.Dbar_h(θ_e, Φ_e, M, M_c) +alphastar = 0.0 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 11 (b) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 30, 70) +axislegend(ax1, position=:rt) +save("19890016302-figure11-b.png", fig) +``` +![](19890016302-figure11-b.png) + +```@example bpm_figure11_c +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure11-c-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# At zero angle of attack the pressure and suction side predictions are the same. +f_p = f_s +SPL_p = SPL_s + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 30.48e-2 # chord in meters +U = 39.6 # freestream velocity in m/s +# M = 0.116 # Mach number, corresponds to U = 36.6 m/s in BPM report +M = U/340.46 +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +D_h = AcousticAnalogies.Dbar_h(θ_e, Φ_e, M, M_c) +alphastar = 0.0 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 11 (c) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 20, 60) +axislegend(ax1, position=:rt) +save("19890016302-figure11-c.png", fig) +``` +![](19890016302-figure11-c.png) + +```@example bpm_figure11_d +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure11-d-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# At zero angle of attack the pressure and suction side predictions are the same. +f_p = f_s +SPL_p = SPL_s + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 30.48e-2 # chord in meters +U = 31.7 # freestream velocity in m/s +M = 0.093 # Mach number, corresponds to U = 31.7 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +D_h = AcousticAnalogies.Dbar_h(θ_e, Φ_e, M, M_c) +alphastar = 0.0 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 11 (d) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 20, 60) +axislegend(ax1, position=:rt) +save("19890016302-figure11-d.png", fig) +``` +![](19890016302-figure11-d.png) + +```@example bpm_figure12_a +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure12-U71.3-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure12-U71.3-TBL-TE-pressure.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure12-U71.3-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 30.48e-2 # chord in meters +U = 71.3 # freestream velocity in m/s +M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 1.5*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 12 (a) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure12-a.png", fig) +``` +![](19890016302-figure12-a.png) + +```@example bpm_figure12_b +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure12-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure12-b-TBL-TE-pressure.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure12-b-TBL-TE-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 30.48e-2 # chord in meters +U = 39.6 # freestream velocity in m/s +M = 0.116 # Mach number, corresponds to U = 36.6 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 1.5*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 12 (b) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 20, 60) +axislegend(ax1, position=:rt) +save("19890016302-figure12-b.png", fig) +``` +![](19890016302-figure12-b.png) + +```@example bpm_figure26_a +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure26-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Pressure and suction sides are the same for zero angle of attack. +f_p = f_s +SPL_p = SPL_s + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 71.3 # freestream velocity in m/s +M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 26 (a) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +# scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure26-a.png", fig) +``` +![](19890016302-figure26-a.png) + +```@example bpm_figure26_b +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure26-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Pressure and suction sides are the same for zero angle of attack. +f_p = f_s +SPL_p = SPL_s + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 55.5 # freestream velocity in m/s +M = 0.163 # Mach number, corresponds to U = 55.5 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 26 (b) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +# scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 30, 70) +axislegend(ax1, position=:rt) +save("19890016302-figure26-b.png", fig) +``` +![](19890016302-figure26-b.png) + +```@example bpm_figure26_c +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure26-c-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Pressure and suction sides are the same for zero angle of attack. +f_p = f_s +SPL_p = SPL_s + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 39.6 # freestream velocity in m/s +M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 26 (c) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 20, 60) +axislegend(ax1, position=:rt) +save("19890016302-figure26-c.png", fig) +``` +![](19890016302-figure26-c.png) + +```@example bpm_figure26_d +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure26-d-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Pressure and suction sides are the same for zero angle of attack. +f_p = f_s +SPL_p = SPL_s + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 31.7 # freestream velocity in m/s +M = 0.093 # Mach number, corresponds to U = 31.7 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 26 (d) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +# scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 20, 60) +axislegend(ax1, position=:rt) +save("19890016302-figure26-d.png", fig) +``` +![](19890016302-figure26-d.png) + +```@example bpm_figure28_a +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-a-TBL-TE-pressure.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-a-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 71.3 # freestream velocity in m/s +M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 6.7*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 28 (a) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure28-a.png", fig) +``` +![](19890016302-figure28-a.png) + +```@example bpm_figure28_b +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-b-TBL-TE-pressure.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-b-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 55.5 # freestream velocity in m/s +M = 0.163 # Mach number, corresponds to U = 55.5 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 6.7*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 28 (b) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 30, 70) +axislegend(ax1, position=:rt) +save("19890016302-figure28-b.png", fig) +``` +![](19890016302-figure28-b.png) + +```@example bpm_figure28_c +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-c-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-c-TBL-TE-pressure.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-c-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 39.6 # freestream velocity in m/s +M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 6.7*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 28 (c) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 30, 70) +axislegend(ax1, position=:rt) +save("19890016302-figure28-c.png", fig) +``` +![](19890016302-figure28-c.png) + +```@example bpm_figure28_d +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-d-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-d-TBL-TE-pressure.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-d-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 31.7 # freestream velocity in m/s +M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 6.7*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="figure 28 (d) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 30, 70) +axislegend(ax1, position=:rt) +save("19890016302-figure28-d.png", fig) +``` +![](19890016302-figure28-d.png) + +```@example bpm_figure38_d +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure38-d-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure38-d-TBL-TE-pressure.csv") +# bpm = DelimitedFiles.readdlm(fname, ',') +# f_p = bpm[:, 1] +# SPL_p = bpm[:, 2] +# +# fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure38-d-separation.csv") +# bpm = DelimitedFiles.readdlm(fname, ',') +# f_alpha = bpm[:, 1] +# SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 2.54e-2 # chord in meters +U = 31.7 # freestream velocity in m/s +M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="figure 38 (d) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +# scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +# lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") +# +# scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +# lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 20, 60) +axislegend(ax1, position=:rt) +save("19890016302-figure38-d.png", fig) +``` +![](19890016302-figure38-d.png) + +```@example bpm_figure39_d +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure39-d-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure39-d-TBL-TE-pressure.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure39-d-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 2.54e-2 # chord in meters +U = 31.7 # freestream velocity in m/s +M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 4.8*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="figure 39 (d) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 20, 60) +axislegend(ax1, position=:rt) +save("19890016302-figure39-d.png", fig) +``` +![](19890016302-figure39-d.png) + +```@example bpm_figure45_a +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure45-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure45-a-TBL-TE-pressure.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure45-a-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure45-a-LBL-VS.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_lbl_vs = bpm[:, 1] +SPL_lbl_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 30.48e-2 # chord in meters +U = 71.3 # freestream velocity in m/s +M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +alphastar = 1.5*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_lblvs=true) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 45 (a) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +scatter!(ax1, f_lbl_vs, SPL_lbl_vs; marker='◇', label="LBL-VS, BPM") +scatterlines!(ax1, f_jl./1e3, SPL_lbl_vs_jl; marker='◇', label="LBL-VS, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure45-a.png", fig) +``` +![](19890016302-figure45-a.png) + +```@example bpm_figure48_c +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure48-c-LBL-VS.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_lbl_vs = bpm[:, 1] +SPL_lbl_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 22.86e-2 # chord in meters +U = 39.6 # freestream velocity in m/s +M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_lblvs=true) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 48 (c) - U = $U m/s") + +scatter!(ax1, f_lbl_vs, SPL_lbl_vs; marker=:diamond, label="LBL-VS, BPM") +lines!(ax1, f_jl./1e3, SPL_lbl_vs_jl; label="LBL-VS, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 20, 60) +axislegend(ax1, position=:rt) +save("19890016302-figure48-c.png", fig) +``` +![](19890016302-figure48-c.png) + +```@example bpm_figure54_a +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure54-a-LBL-VS.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_lbl_vs = bpm[:, 1] +SPL_lbl_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 15.24e-2 # chord in meters +U = 71.3 # freestream velocity in m/s +M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +alphastar = 2.7*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_lblvs=true) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 54 (a) - U = $U m/s") + +scatter!(ax1, f_lbl_vs, SPL_lbl_vs; marker=:diamond, label="LBL-VS, BPM") +lines!(ax1, f_jl./1e3, SPL_lbl_vs_jl; label="LBL-VS, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 50, 90) +axislegend(ax1, position=:rt) +save("19890016302-figure54-a.png", fig) +``` +![](19890016302-figure54-a.png) + +```@example bpm_figure59_c +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure59-c-LBL-VS.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_lbl_vs = bpm[:, 1] +SPL_lbl_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 39.6 # freestream velocity in m/s +M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_lblvs=true) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 59 (c) - U = $U m/s") + +scatter!(ax1, f_lbl_vs, SPL_lbl_vs; marker=:diamond, label="LBL-VS, BPM") +lines!(ax1, f_jl./1e3, SPL_lbl_vs_jl; label="LBL-VS, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure59-c.png", fig) +``` +![](19890016302-figure59-c.png) + +```@example bpm_figure60_c +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure60-c-LBL-VS.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_lbl_vs = bpm[:, 1] +SPL_lbl_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 39.6 # freestream velocity in m/s +M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +alphastar = 3.3*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_lblvs=true) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 60 (c) - U = $U m/s") + +scatter!(ax1, f_lbl_vs, SPL_lbl_vs; marker=:diamond, label="LBL-VS, BPM") +lines!(ax1, f_jl./1e3, SPL_lbl_vs_jl; label="LBL-VS, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure60-c.png", fig) +``` +![](19890016302-figure60-c.png) + +```@example bpm_figure60_d +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure60-d-LBL-VS.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_lbl_vs = bpm[:, 1] +SPL_lbl_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 10.16e-2 # chord in meters +U = 31.7 # freestream velocity in m/s +M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +alphastar = 3.3*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_lblvs=true) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 60 (d) - U = $U m/s") + +scatter!(ax1, f_lbl_vs, SPL_lbl_vs; marker=:diamond, label="LBL-VS, BPM") +lines!(ax1, f_jl./1e3, SPL_lbl_vs_jl; label="LBL-VS, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure60-d.png", fig) +``` +![](19890016302-figure60-d.png) + +```@example bpm_figure65_d +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure65-d-LBL-VS.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_lbl_vs = bpm[:, 1] +SPL_lbl_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 5.08e-2 # chord in meters +U = 31.7 # freestream velocity in m/s +M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_lblvs=true) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 65 (d) - U = $U m/s") + +scatter!(ax1, f_lbl_vs, SPL_lbl_vs; marker=:diamond, label="LBL-VS, BPM") +lines!(ax1, f_jl./1e3, SPL_lbl_vs_jl; label="LBL-VS, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 50, 90) +axislegend(ax1, position=:rt) +save("19890016302-figure65-d.png", fig) +``` +![](19890016302-figure65-d.png) + +```@example bpm_figure66_b +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure66-b-LBL-VS.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_lbl_vs = bpm[:, 1] +SPL_lbl_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 5.08e-2 # chord in meters +U = 39.6 # freestream velocity in m/s +M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +alphastar = 4.2*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_lblvs=true) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 66 (b) - U = $U m/s") + +scatter!(ax1, f_lbl_vs, SPL_lbl_vs; marker=:diamond, label="LBL-VS, BPM") +scatterlines!(ax1, f_jl./1e3, SPL_lbl_vs_jl; label="LBL-VS, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 30, 70) +axislegend(ax1, position=:rt) +save("19890016302-figure66-b.png", fig) +``` +![](19890016302-figure66-b.png) + +```@example bpm_figure69_a +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure69-a-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 5.08e-2 # chord in meters +U = 71.3 # freestream velocity in m/s +M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 15.4*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 69 (a) - U = $U m/s") +# scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +# scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 60, 100) +axislegend(ax1, position=:rt) +save("19890016302-figure69-a.png", fig) +``` +![](19890016302-figure69-a.png) + +```@example bpm_figure69_b +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +# TBL-TE suction and pressure aren't significant sources for this case (deep stall). + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure69-b-separation.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_alpha = bpm[:, 1] +SPL_alpha = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 5.08e-2 # chord in meters +U = 39.6 # freestream velocity in m/s +M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 15.4*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 69 (b) - U = $U m/s") +# scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +# scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_alpha, SPL_alpha; marker='△', label="separation, BPM") +lines!(ax1, f_jl./1e3, SPL_alpha_jl; label="separation, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure69-b.png", fig) +``` +![](19890016302-figure69-b.png) + +```@example bpm_figure91 +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure91-tip.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_tip = bpm[:, 1] +SPL_tip = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 30.48e-2 # span in meters +chord = 15.24e-2 # chord in meters +speedofsound = 340.46 +U = 71.3 # freestream velocity in m/s +# M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report +M = U/speedofsound +M_c = 0.8*M +# speedofsound = U/M +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +alphastar = 10.8*pi/180 + +bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() +blade_tip = AcousticAnalogies.RoundedTip(AcousticAnalogies.BPMTipAlphaCorrection(), 0.0) +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_tip_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_tip_vortex=true, blade_tip=blade_tip) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 91") +scatter!(ax1, f_tip, SPL_tip; marker='o', label="Tip, BPM") +lines!(ax1, f_jl./1e3, SPL_tip_jl; label="Tip, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 90) +axislegend(ax1, position=:rt) +save("19890016302-figure91.png", fig) +``` +![](19890016302-figure91.png) + +```@example bpm_figure98_b +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +# Figures 98 a-d only differ in trailing edge bluntness, so the other sources are all the same. +# And TBL-TE is the only significant source, other than bluntness. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Suction and pressure are the same for zero angle of attack. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-b-bluntness.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_teb_vs = bpm[:, 1] +SPL_teb_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 60.96e-2 # chord in meters +U = 69.5 # freestream velocity in m/s +M = U/340.46 +h = 1.1e-3 # trailing edge bluntness in meters +Psi = 14*pi/180 # bluntness angle in radians +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_tebvs=true, h=h, Psi=Psi) + + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 98 (b) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_teb_vs, SPL_teb_vs; marker='◺', label="Bluntness, BPM") +lines!(ax1, f_jl./1e3, SPL_teb_vs_jl; label="Bluntness, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:rt) +save("19890016302-figure98-b.png", fig) +``` +![](19890016302-figure98-b.png) + +```@example bpm_figure98_c +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +# Figures 98 a-d only differ in trailing edge bluntness, so the other sources are all the same. +# And TBL-TE is the only significant source, other than bluntness. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Suction and pressure are the same for zero angle of attack. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-c-bluntness.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_teb_vs = bpm[:, 1] +SPL_teb_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 60.96e-2 # chord in meters +U = 69.5 # freestream velocity in m/s +M = U/340.46 +h = 1.9e-3 # trailing edge bluntness in meters +Psi = 14*pi/180 # bluntness angle in radians +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_tebvs=true, h=h, Psi=Psi) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 98 (c) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_teb_vs, SPL_teb_vs; marker='◺', label="Bluntness, BPM") +lines!(ax1, f_jl./1e3, SPL_teb_vs_jl; label="Bluntness, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:lt) +save("19890016302-figure98-c.png", fig) +``` +![](19890016302-figure98-c.png) + +```@example bpm_figure98_d +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +# Figures 98 a-d only differ in trailing edge bluntness, so the other sources are all the same. +# And TBL-TE is the only significant source, other than bluntness. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Suction and pressure are the same for zero angle of attack. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-d-bluntness.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_teb_vs = bpm[:, 1] +SPL_teb_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 60.96e-2 # chord in meters +U = 69.5 # freestream velocity in m/s +M = U/340.46 +h = 2.5e-3 # trailing edge bluntness in meters +Psi = 14*pi/180 # bluntness angle in radians +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_tebvs=true, h=h, Psi=Psi) + + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 98 (d) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_teb_vs, SPL_teb_vs; marker='◺', label="Bluntness, BPM") +lines!(ax1, f_jl./1e3, SPL_teb_vs_jl; label="Bluntness, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 40, 80) +axislegend(ax1, position=:lt) +save("19890016302-figure98-d.png", fig) +``` +![](19890016302-figure98-d.png) + +```@example bpm_figure99_b +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +# Figures 99 a-d only differ in trailing edge bluntness, so the other sources are all the same. +# And TBL-TE is the only significant source, other than bluntness. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Suction and pressure are the same for zero angle of attack. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-bluntness.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_teb_vs = bpm[:, 1] +SPL_teb_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 60.96e-2 # chord in meters +U = 38.6 # freestream velocity in m/s +M = U/340.46 +h = 1.1e-3 # trailing edge bluntness in meters +Psi = 14*pi/180 # bluntness angle in radians +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_tebvs=true, h=h, Psi=Psi) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 99 (b) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_teb_vs, SPL_teb_vs; marker='◺', label="Bluntness, BPM") +lines!(ax1, f_jl./1e3, SPL_teb_vs_jl; label="Bluntness, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 30, 70) +axislegend(ax1, position=:rt) +save("19890016302-figure99-b.png", fig) +``` +![](19890016302-figure99-b.png) + +```@example bpm_figure99_c +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +# Figures 99 a-d only differ in trailing edge bluntness, so the other sources are all the same. +# And TBL-TE is the only significant source, other than bluntness. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Suction and pressure are the same for zero angle of attack. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-c-bluntness.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_teb_vs = bpm[:, 1] +SPL_teb_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 60.96e-2 # chord in meters +U = 38.6 # freestream velocity in m/s +M = U/340.46 +h = 1.9e-3 # trailing edge bluntness in meters +Psi = 14*pi/180 # bluntness angle in radians +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_tebvs=true, h=h, Psi=Psi) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 99 (c) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_teb_vs, SPL_teb_vs; marker='◺', label="Bluntness, BPM") +lines!(ax1, f_jl./1e3, SPL_teb_vs_jl; label="Bluntness, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 30, 70) +axislegend(ax1, position=:rt) +save("19890016302-figure99-c.png", fig) +``` +![](19890016302-figure99-c.png) + +```@example bpm_figure99_d +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: ExactThirdOctaveCenterBands +using DelimitedFiles: DelimitedFiles +using GLMakie + +# https://docs.makie.org/stable/examples/blocks/axis/index.html#logticks +struct IntegerTicks end +Makie.get_tickvalues(::IntegerTicks, vmin, vmax) = ceil(Int, vmin) : floor(Int, vmax) + +# Figures 99 a-d only differ in trailing edge bluntness, so the other sources are all the same. +# And TBL-TE is the only significant source, other than bluntness. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_s = bpm[:, 1] +SPL_s = bpm[:, 2] + +# Suction and pressure are the same for zero angle of attack. +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_p = bpm[:, 1] +SPL_p = bpm[:, 2] + +fname = joinpath(@__DIR__, "..", "..", "test", "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-d-bluntness.csv") +bpm = DelimitedFiles.readdlm(fname, ',') +f_teb_vs = bpm[:, 1] +SPL_teb_vs = bpm[:, 2] + +nu = 1.4529e-5 # kinematic viscosity, m^2/s +L = 45.72e-2 # span in meters +chord = 60.96e-2 # chord in meters +U = 38.6 # freestream velocity in m/s +M = U/340.46 +h = 2.5e-3 # trailing edge bluntness in meters +Psi = 14*pi/180 # bluntness angle in radians +r_e = 1.22 # radiation distance in meters +θ_e = 90*pi/180 +Φ_e = 90*pi/180 +M_c = 0.8*M +alphastar = 0.0*pi/180 + +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +f_jl, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = AcousticAnalogies.calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_tebvs=true, h=h, Psi=Psi) + +fig = Figure() +ax1 = fig[1, 1] = Axis(fig; xlabel="frequency, kHz", ylabel="SPL_1/3, dB", + xscale=log10, + xminorticksvisible=true, + xminorticks=IntervalsBetween(9), + xticks=LogTicks(IntegerTicks()), + title="Figure 99 (d) - U = $U m/s") +scatter!(ax1, f_s, SPL_s; marker='o', label="TBL-TE suction side, BPM") +lines!(ax1, f_jl./1e3, SPL_s_jl; label="TBL-TE suction side, Julia") + +scatter!(ax1, f_p, SPL_p; marker='□', label="TBL-TE pressure side, BPM") +lines!(ax1, f_jl./1e3, SPL_p_jl; label="TBL-TE pressure side, Julia") + +scatter!(ax1, f_teb_vs, SPL_teb_vs; marker='◺', label="Bluntness, BPM") +lines!(ax1, f_jl./1e3, SPL_teb_vs_jl; label="Bluntness, Julia") + +xlims!(ax1, 0.2, 20.0) +ylims!(ax1, 30, 70) +axislegend(ax1, position=:rt) +save("19890016302-figure99-d.png", fig) +``` +![](19890016302-figure99-d.png) diff --git a/docs/src/ccblade_example.md b/docs/src/ccblade_example.md index 8d2b1a82..98a97826 100644 --- a/docs/src/ccblade_example.md +++ b/docs/src/ccblade_example.md @@ -113,15 +113,16 @@ nothing # hide ![](ccblade_example-ccblade_loads.png) Now we can use the CCBlade.jl `structs` to create AcousticAnalogies.jl source -elements. The key function is [`source_elements_ccblade`](@ref): +elements. The key function is [`f1a_source_elements_ccblade`](@ref): ```@docs -source_elements_ccblade +f1a_source_elements_ccblade ``` So let's try that: ```@example first_example -using AcousticAnalogies: source_elements_ccblade, ConstVelocityAcousticObserver, f1a, combine, pressure_monopole, pressure_dipole +using AcousticAnalogies: f1a_source_elements_ccblade, ConstVelocityAcousticObserver, noise, combine, pressure_monopole, pressure_dipole bpp = 2*pi/omega/num_blades # blade passing period -ses = source_elements_ccblade(rotor, sections, ops, outs, [area_over_chord_squared], 4*bpp, 64) +positive_x_rotation = true +ses = f1a_source_elements_ccblade(rotor, sections, ops, outs, [area_over_chord_squared], 4*bpp, 64, positive_x_rotation) nothing # hide ``` @@ -134,7 +135,7 @@ using AcousticMetrics x_obs = [0.0, 2.3033, 2.6842] v_obs = [v, 0.0, 0.0] obs = ConstVelocityAcousticObserver(0.0, x_obs, v_obs) -apth = f1a.(ses, Ref(obs)) +apth = noise.(ses, Ref(obs)) apth_total = combine(apth, 2*bpp, 64) nothing # hide ``` diff --git a/docs/src/guided_example.md b/docs/src/guided_example.md index 2062aa24..5367736f 100644 --- a/docs/src/guided_example.md +++ b/docs/src/guided_example.md @@ -164,8 +164,8 @@ a rate of `omega` and moving forward at a speed of `v` defined above. Let's do that. We want one source element for each radial station along the blade at each `src_time` and each of the `num_blades` blades. Sounds kind of complicated, but luckily Julia's broadcasting makes this easy. What we'd like is an array `ses` -of `CompactSourceElement` types that has `size` `(num_src_times, num_radial, -num_blades)`, where `ses[i, j, k]` holds the `CompactSourceElement` at +of `CompactF1ASourceElement` types that has `size` `(num_src_times, num_radial, +num_blades)`, where `ses[i, j, k]` holds the `CompactF1ASourceElement` at `src_time[i]`, `radii[j]`, and blade number `k`. So let's reshape the input arrays to make that happen. @@ -184,7 +184,7 @@ Now, the last thing we need to think about is the coordinate system we're defining these quantities in. Again, right now we are in the blade-fixed frame, which means the coordinate system is rotating with the blades at a rate of `omega` and translating with a velocity `v` in the positive x direction. The -`CompactSourceElement` constructor we'll use allows us to specify each source +`CompactF1ASourceElement` constructor we'll use allows us to specify each source element's location in terms of `r` and `θ`, where `r` is the distance from the origin and `θ` is the polar angle from the positive y axis, rotating toward the positive `z` axis. So the `radii` and `θs` arrays are set up correctly. @@ -207,19 +207,19 @@ the `fc` array. So let's create all the source elements: ```@example first_example -ses = CompactSourceElement.(rho, c0, radii, θs, dradii, cs_area, -fn, 0.0, fc, src_times) +ses = CompactF1ASourceElement.(rho, c0, radii, θs, dradii, cs_area, -fn, 0.0, fc, src_times) size(ses) ``` The size of the source element array ended up like we wanted: `(num_src_times, num_radial, num_blades)`. ### The Global Reference Frame -At this point we have an array of `CompactSourceElement` that describes the what +At this point we have an array of `CompactF1ASourceElement` that describes the what each blade element "source" is doing from the perspective of the blade-fixed reference frame. But in order to perform the F1A calculation, we need to move the sources from the blade-fixed frame to the global reference frame, i.e., the one for which the fluid medium (air) appears to be stationary. This involves -just setting the position and loading components of each `CompactSourceElement` +just setting the position and loading components of each `CompactF1ASourceElement` to the correct values (`y0dot` through `y3dot` and `f0dot` and `f1dot`). This could be done manually, but it's easier to use the [KinematicCoordinateTransformations.jl](https://github.com/OpenMDAO/KinematicCoordinateTransformations.jl) @@ -280,7 +280,7 @@ the global reference frame. We could have created the source elements and transformed them all in one line, too, which is pretty slick: ```@example first_example -ses = AcousticAnalogies.CompactSourceElement.(rho, c0, radii, θs, dradii, cs_area, -fn, 0.0, fc, src_times) .|> trans +ses = AcousticAnalogies.CompactF1ASourceElement.(rho, c0, radii, θs, dradii, cs_area, -fn, 0.0, fc, src_times) .|> trans nothing # hide ``` @@ -321,11 +321,11 @@ nothing # hide We're finally ready to do the compact F1A calculation! ```@example first_example -apth = f1a.(ses, Ref(obs), obs_time) +apth = noise.(ses, Ref(obs), obs_time) nothing # hide ``` -When called this way (notice the `.` after `f1a`), the `f1a` routine returns an +When called this way (notice the `.` after `noise`), the `noise` routine returns an array of `F1AOutput` `struct`s, the same size as `ses` and `obs_time`. Each `F1AOutput` `struct` has three components: the observer time `t`, the thickness/monopole part of the acoustic pressure `p_m`, and the @@ -389,7 +389,7 @@ with the `F1AAcousticPressure` returned by `combine`: using AcousticMetrics # Calculate the overall sound pressure level from the acoustic pressure time history. oaspl_from_apth = AcousticMetrics.OASPL(apth_total) -# Calculate the narrowband spectrum. +# Calculate the narrowband spectrum of mean-squared pressure. nbs = AcousticMetrics.MSPSpectrumAmplitude(apth_total) # Calculate the OASPL from the NBS. oaspl_from_nbs = AcousticMetrics.OASPL(nbs) diff --git a/docs/src/itr_tests1.md b/docs/src/itr_tests1.md new file mode 100644 index 00000000..2b55f031 --- /dev/null +++ b/docs/src/itr_tests1.md @@ -0,0 +1,1011 @@ +```@meta +CurrentModule = AADocs +``` +# Software Quality Assurance, Cont. + +## BPM.jl Comparisons for the Pettingill et al. Ideally Twisted Rotor +See [here](http://dx.doi.org/10.2514/6.2021-1928) or [here](https://ntrs.nasa.gov/citations/20205003328) for details on the Ideally Twisted Rotor. + +### Figure 22b +```@example figure22b +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using GLMakie +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, SteadyRotYTransformation, SteadyRotZTransformation, ConstantVelocityTransformation +using FileIO: load +using FLOWMath: Akima +using StaticArrays: @SVector + +# Copied from BPM.jl (would like to add BPM.jl as a dependency if it's registered in General some day). +# tip vortex noise correction data based on "Airfoil Tip Vortex Formation Noise" +const bm_tip_alpha_aspect_data = [2.0,2.67,4.0,6.0,12.0,24.0] +const bm_tip_alpha_aratio_data = [0.54,0.62,0.71,0.79,0.89,0.95] +const bm_tip_alpha_aspect_ratio_correction = Akima(bm_tip_alpha_aspect_data, bm_tip_alpha_aratio_data) + +function bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + # compute tip lift curve slope + if aspect_ratio < 2.0 + aratio = 0.5*one(aspect_ratio) + elseif 2.0 <= aspect_ratio <= 24.0 + aratio = bm_tip_alpha_aspect_ratio_correction(aspect_ratio) + elseif aspect_ratio > 24.0 + aratio = 1.0*one(aspect_ratio) + end + + return aratio +end + +struct BMTipAlphaCorrection{TCorrection} <: AbstractTipAlphaCorrection + correction::TCorrection + + function BMTipAlphaCorrection(aspect_ratio) + # correction = BPM._tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + correction = bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + return new{typeof(correction)}(correction) + end +end + +function AcousticAnalogies.tip_vortex_alpha_correction(blade_tip::AbstractBladeTip{<:BMTipAlphaCorrection}, alphatip) + a0l = AcousticAnalogies.alpha_zerolift(blade_tip) + correction_factor = AcousticAnalogies.tip_alpha_correction(blade_tip).correction + return correction_factor * (alphatip - a0l) + a0l +end + +# Pettingill et al., "Acoustic And Performance Characteristics of an Ideally Twisted Rotor in Hover", 2021 +# Parameters from Table 1 +B = 4 # number of blades +Rtip = 0.1588 # meters +chord = 0.2*Rtip + +# Standard day: +Tamb = 15 + 273.15 # 15°C in Kelvin +pamb = 101325.0 # Pa +R = 287.052874 # J/(kg*K) +rho = pamb/(R*Tamb) +asound = sqrt(1.4*R*Tamb) +# Dynamic and kinematic viscosity +mu = rho*1.4502e-5 +nu = mu/rho + +# This is a hover case, so the freestream velocity should be zero. +# CCBlade.jl will run with a zero freestream, but I've found that it compares a bit better with experiment if I give it a small non-zero value. +Vinf = 0.001*asound + +# Figure 22 caption says Ω_c = 5465 RPM. +rpm = 5465.0 +omega = rpm * (2*pi/60) + +# Get "cell-centered" radial locations, and also the radial spacing. +num_radial = 50 +r_Rtip_ = range(0.2, 1.0; length=num_radial+1) +r_Rtip = 0.5 .* (r_Rtip_[2:end] .+ r_Rtip_[1:end-1]) +radii = r_Rtip .* Rtip +dradii = (r_Rtip_[2:end] .- r_Rtip_[1:end-1]) .* Rtip +Rhub = r_Rtip_[1]*Rtip + +# From Pettingill Equation (1), and value for Θ_tip in Table 1. +Θ_tip = 6.9 * pi/180 +twist = Θ_tip ./ (r_Rtip) + +# Need some aerodynamic quantities. +# Got these using CCBlade.jl: see `AcousticAnalogies.jl/test/gen_bpmjl_data/itr_with_bpmjl.jl`. +data_bpmjl = load(joinpath(@__DIR__, "..", "..", "test", "gen_bpmjl_data", "figure22b.jld2")) +# Angle of attack at each radial station, radians. +alpha = data_bpmjl["alpha"] +# Flow speed normal to span at each radial station, m/s. +U = data_bpmjl["U"] + +# In the Figure 22 caption, "for these predictions, bluntness thickness H was set to 0.8 mm and trailing edge angle Ψ was set to 16 degrees." +h = 0.8e-3 # meters +Psi = 16*pi/180 # radians + +# We'll run for 1 blade pass, 20 time steps per blade pass. +num_blade_pass = 1 +num_src_times_blade_pass = 20 +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# BPM.jl uses a different tip alpha correction which appears to require the blade aspect ratio. +# Need to find the blade aspect ratio of the ITR to apply the tip vortex angle of attack correction. +# The aspect ratio is defined as the blade tip radius divided by the average chord, but the chord is constant for this case. +aspect_ratio = Rtip / chord + +# Now we can create the tip object. +alpha0lift = 0.0 +blade_tip = AcousticAnalogies.FlatTip(BMTipAlphaCorrection(aspect_ratio), alpha0lift) + +# Start with a rotation about the negative x axis. +positive_x_rotation = false +rot_trans = SteadyRotXTransformation(t0, omega*ifelse(positive_x_rotation, 1, -1), 0) + +# Then translate along the positive x axis. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Then a 90° rotation about the negative z axis. +trans_z90deg = SteadyRotZTransformation(0.0, 0.0, -0.5*pi) + +# Then a 90° rotation about the negative y axis. +trans_y90deg = SteadyRotYTransformation(0.0, 0.0, -0.5*pi) + +# Put them all together: +trans = compose.(src_times, Ref(trans_y90deg), + compose.(src_times, Ref(trans_z90deg), + compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)))) + +# Use the M_c = 0.8*M that BPM report and BPM.jl use. +U = @. 0.8*sqrt(Vinf^2 + (omega*radii)^2) + +# In the text describing Figure 22, "For these predictions, the trip flag was set to “tripped”, due to the rough surface quality of the blade." +# So we'll use a tripped boundary layer for all radial stations along the blade. +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + +# Need to do the LBLVS with the untripped boundary layer to match what BPM.jl is doing. +# BPM.jl uses the untripped boundary layer properties for the laminar boundary layer-vortex shedding noise source, so do that here too. +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +# Paper doesn't specify the microphone used for Figure 22, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: +# > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). +# So I'll just assume that holds for Figure 22. +# The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane. +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# So, the docstring for BPM.jl says that `V` argument is the wind velocity in the y direction. +# So I guess we should assume that the blades are rotating about the y axis. +# And if the freestream velocity is in the positive y axis, then, from the perspective of the fluid, the blades are translating in the negative y direction. +# And I want the observer to be downstream/behind the blades, so that would mean they would have a positive y position. +# So I want to rotate the observer around the positive x axis, so I'm going to switch the sign on `theta_obs`. +t0_obs = 0.0 +x0_obs = @SVector [0.0, r_obs*sin(-theta_obs), r_obs*cos(-theta_obs)] +# The observer is moving in the same direction as the blades, which is the negative y axis. +v_obs = @SVector [0.0, -Vinf, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) .* ifelse(positive_x_rotation, 1, -1) + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +# chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +# hs_rs = reshape(hs, 1, :, 1) +# Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +# bls_rs = reshape(bls, 1, :, 1) +# bls_untripped_rs = reshape(bls_untripped, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +# chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +# hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] +# Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +# bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +# chord_rs_with_tip = @view chord_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +# hs_rs_with_tip = @view hs_rs[:, end:end, :] +# Psis_rs_with_tip = @view Psis_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +# bls_rs_with_tip = @view bls_rs[:, end:end, :] + +direct = AcousticAnalogies.BPMDirectivity +use_UInduction = false +use_Doppler = false +mach_correction = AcousticAnalogies.NoMachCorrection +ses_no_tip = CombinedNoTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord, twist_rs_no_tip, h, Psi, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, Ref(bl), positive_x_rotation) .|> trans + +ses_with_tip = CombinedWithTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord, twist_rs_with_tip, h, Psi, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, Ref(bl), Ref(blade_tip), positive_x_rotation) .|> trans + +# Put the source elements together: +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Need to do the LBLVS with the untripped boundary layer to match what BPM.jl is doing. +lblvs_ses = AcousticAnalogies.LBLVSSourceElement{direct,use_UInduction,use_Doppler}.(asound, nu, radii_rs, θs_rs, dradii_rs, chord, twist_rs, Us_rs, alphas_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# Define the frequencies we'd like to evaluate. +# BPM.jl uses the approximate 1/3rd-octave bands. +freqs_obs = AcousticMetrics.ApproximateThirdOctaveCenterBands(100.0, 40000.0) +freqs_src = freqs_obs + +# Now do the noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(lblvs_ses, Ref(obs), Ref(freqs_src)) + +# Separate out each source. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Combine each noise prediction. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 22b is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# (Dividing the MSP by Δf_pbs aka the 1/3 octave spacing is like getting a power-spectral density, then multiplying by the narrowband spacing Δf_nb gives us the MSP associated with the narrowband.) +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs +nb_lblvs_untripped = pbs_lblvs .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) +spl_lblvs_untripped = 10 .* log10.(nb_lblvs_untripped./(pref^2)) + +# Finally, let's get the BPM.jl predictions for this case, which we've run and saved previously in a JLD2/HDF5 file. +freq_bpmjl = data_bpmjl["freqs"] +spl_pressure_bpmjl = data_bpmjl["spl_nb_pressure"] +spl_suction_bpmjl = data_bpmjl["spl_nb_suction"] +spl_separation_bpmjl = data_bpmjl["spl_nb_separation"] +spl_lblvs_bpmjl = data_bpmjl["spl_nb_lblvs"] +spl_blunt_bpmjl = data_bpmjl["spl_nb_blunt"] +spl_tip_bpmjl = data_bpmjl["spl_nb_tip"] + +# Now let's plot. +fig = Figure() +ax1 = fig[2, 1] = Axis(fig, xlabel="frequency, Hz", ylabel="SPL (dB Ref: 20 μPa), Δf = 20 Hz", xscale=log10, xticks=[10^3, 10^4], xminorticksvisible=true, xminorgridvisible=true, xminorticks=IntervalsBetween(9), yticks=10:10:70)#, aspect=3) + +s_pressure = scatter!(ax1, freq_bpmjl, spl_pressure_bpmjl, color=:blue, marker=:rtriangle) +s_suction = scatter!(ax1, freq_bpmjl, spl_suction_bpmjl, color=:red, marker=:ltriangle) +s_separation = scatter!(ax1, freq_bpmjl, spl_separation_bpmjl, color=:yellow, marker=:diamond) +s_lblvs = scatter!(ax1, freq_bpmjl, spl_lblvs_bpmjl, color=:purple, marker=:rect) +s_blunt = scatter!(ax1, freq_bpmjl, spl_blunt_bpmjl, color=:green, marker=:star6) +s_tip = scatter!(ax1, freq_bpmjl, spl_tip_bpmjl, color=:cyan, marker=:circle) + +l_pressure = lines!(ax1, freqs_obs, spl_pressure, color=:blue) +l_suction = lines!(ax1, freqs_obs, spl_suction, color=:red) +l_alpha = lines!(ax1, freqs_obs, spl_alpha, color=:yellow) +l_lblvs = lines!(ax1, freqs_obs, spl_lblvs_untripped, color=:purple) +l_teb = lines!(ax1, freqs_obs, spl_teb, color=:green) +l_tip = lines!(ax1, freqs_obs, spl_tip, color=:cyan) + +xlims!(ax1, 2e2, 6e4) +ylims!(ax1, 10.0, 70.0) + +leg = Legend(fig[1, 1], [ + [s_pressure, l_pressure], + [s_suction, l_suction], + [s_separation, l_alpha], + [s_lblvs, l_lblvs], + [s_blunt, l_teb], + [s_tip, l_tip], + ], + [ + "TBLTE-Pressure", + "TBLTE-Suction", + "Separation", + "LBLVS", + "BVS", + "Tip", + ]; orientation=:horizontal, tellwidth=false, tellheight=true, nbanks=2) + +text!(ax1, 210, 62; text="markers: CCBlade.jl+BPM.jl\nlines: CCBlade.jl+AcousticAnalogies.jl") + +save("figure22b-spl-bpmjl.png", fig) +``` +![](figure22b-spl-bpmjl.png) + +### Figure 23c +```@example figure23c +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using GLMakie +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, SteadyRotYTransformation, SteadyRotZTransformation, ConstantVelocityTransformation +using FileIO: load +using FLOWMath: Akima +using StaticArrays: @SVector + +# Copied from BPM.jl (would like to add BPM.jl as a dependency if it's registered in General some day). +# tip vortex noise correction data based on "Airfoil Tip Vortex Formation Noise" +const bm_tip_alpha_aspect_data = [2.0,2.67,4.0,6.0,12.0,24.0] +const bm_tip_alpha_aratio_data = [0.54,0.62,0.71,0.79,0.89,0.95] +const bm_tip_alpha_aspect_ratio_correction = Akima(bm_tip_alpha_aspect_data, bm_tip_alpha_aratio_data) + +function bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + # compute tip lift curve slope + if aspect_ratio < 2.0 + aratio = 0.5*one(aspect_ratio) + elseif 2.0 <= aspect_ratio <= 24.0 + aratio = bm_tip_alpha_aspect_ratio_correction(aspect_ratio) + elseif aspect_ratio > 24.0 + aratio = 1.0*one(aspect_ratio) + end + + return aratio +end + +struct BMTipAlphaCorrection{TCorrection} <: AbstractTipAlphaCorrection + correction::TCorrection + + function BMTipAlphaCorrection(aspect_ratio) + # correction = BPM._tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + correction = bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + return new{typeof(correction)}(correction) + end +end + +function AcousticAnalogies.tip_vortex_alpha_correction(blade_tip::AbstractBladeTip{<:BMTipAlphaCorrection}, alphatip) + a0l = AcousticAnalogies.alpha_zerolift(blade_tip) + correction_factor = AcousticAnalogies.tip_alpha_correction(blade_tip).correction + return correction_factor * (alphatip - a0l) + a0l +end + +# Pettingill et al., "Acoustic And Performance Characteristics of an Ideally Twisted Rotor in Hover", 2021 +# Parameters from Table 1 +B = 4 # number of blades +Rtip = 0.1588 # meters +chord = 0.2*Rtip + +# Standard day: +Tamb = 15 + 273.15 # 15°C in Kelvin +pamb = 101325.0 # Pa +R = 287.052874 # J/(kg*K) +rho = pamb/(R*Tamb) +asound = sqrt(1.4*R*Tamb) +# Dynamic and kinematic viscosity +mu = rho*1.4502e-5 +nu = mu/rho + +# This is a hover case, so the freestream velocity should be zero. +# CCBlade.jl will run with a zero freestream, but I've found that it compares a bit better with experiment if I give it a small non-zero value. +Vinf = 0.001*asound + +# Figure 23 caption says Ω_c = 5510 RPM. +rpm = 5510.0 +omega = rpm * (2*pi/60) + +# Get "cell-centered" radial locations, and also the radial spacing. +num_radial = 50 +r_Rtip_ = range(0.2, 1.0; length=num_radial+1) +r_Rtip = 0.5 .* (r_Rtip_[2:end] .+ r_Rtip_[1:end-1]) +radii = r_Rtip .* Rtip +dradii = (r_Rtip_[2:end] .- r_Rtip_[1:end-1]) .* Rtip +Rhub = r_Rtip_[1]*Rtip + +# From Pettingill Equation (1), and value for Θ_tip in Table 1. +Θ_tip = 6.9 * pi/180 +twist = Θ_tip ./ (r_Rtip) + +# Need some aerodynamic quantities. +# Got these using CCBlade.jl: see `AcousticAnalogies.jl/test/gen_bpmjl_data/itr_with_bpmjl.jl`. +data_bpmjl = load(joinpath(@__DIR__, "..", "..", "test", "gen_bpmjl_data", "figure23c.jld2")) +# Angle of attack at each radial station, radians. +alpha = data_bpmjl["alpha"] +# Flow speed normal to span at each radial station, m/s. +U = data_bpmjl["U"] + +# In the Figure 23 caption, "for these predictions, bluntness thickness H was set to 0.5 mm and trailing edge angle Ψ was set to 14 degrees." +h = 0.5e-3 # meters +Psi = 14*pi/180 # radians + +# We'll run for 1 blade pass, 20 time steps per blade pass. +num_blade_pass = 1 +num_src_times_blade_pass = 20 +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# BPM.jl uses a different tip alpha correction which appears to require the blade aspect ratio. +# Need to find the blade aspect ratio of the ITR to apply the tip vortex angle of attack correction. +# The aspect ratio is defined as the blade tip radius divided by the average chord, but the chord is constant for this case. +aspect_ratio = Rtip / chord + +# Now we can create the tip object. +alpha0lift = 0.0 +blade_tip = AcousticAnalogies.FlatTip(BMTipAlphaCorrection(aspect_ratio), alpha0lift) + +# Start with a rotation about the negative x axis. +positive_x_rotation = false +rot_trans = SteadyRotXTransformation(t0, omega*ifelse(positive_x_rotation, 1, -1), 0) + +# Then translate along the positive x axis. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Then a 90° rotation about the negative z axis. +trans_z90deg = SteadyRotZTransformation(0.0, 0.0, -0.5*pi) + +# Then a 90° rotation about the negative y axis. +trans_y90deg = SteadyRotYTransformation(0.0, 0.0, -0.5*pi) + +# Put them all together: +trans = compose.(src_times, Ref(trans_y90deg), + compose.(src_times, Ref(trans_z90deg), + compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)))) + +# Use the M_c = 0.8*M that BPM report and BPM.jl use. +U = @. 0.8*sqrt(Vinf^2 + (omega*radii)^2) + +# For the boundary layer we want to use untripped for the 95% of the blade from the hub to almost tip, and then tripped for the last 5% of the blade at the tip. +# First figure out how many of each we'll actually have with the `num_radial = 50` radial stations. +num_untripped = Int(round(0.95*num_radial)) +num_tripped = num_radial - num_untripped +# Now create a length-`num_radial` vector of untripped and then tripped boundary layer objects. +bls = vcat(fill(AcousticAnalogies.UntrippedN0012BoundaryLayer(), num_untripped), fill(AcousticAnalogies.TrippedN0012BoundaryLayer(), num_tripped)) + +# Now, the other trick: for this case, we're only going to include the LBLVS source where the local Reynolds number (with the chord as the length scale) is < 160000. +low_Re_c = 160000.0 +# So we need the Reynolds number for each section. +Re_c = U .* chord / nu +# Now we'll get a length-`num_radial` vector of Bools indicating if that criteria is satisfied or not. +lblvs_flags = Re_c .< low_Re_c + +# Also we'll always be using the untripped boundary layer for LBLVS, like BPM.jl does. +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +# Paper doesn't specify the microphone used for Figure 23, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: +# > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). +# So I'll just assume that holds for Figure 23. +# The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane. +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# So, the docstring for BPM.jl says that `V` argument is the wind velocity in the y direction. +# So I guess we should assume that the blades are rotating about the y axis. +# And if the freestream velocity is in the positive y axis, then, from the perspective of the fluid, the blades are translating in the negative y direction. +# And I want the observer to be downstream/behind the blades, so that would mean they would have a positive y position. +# So I want to rotate the observer around the positive x axis, so I'm going to switch the sign on `theta_obs`. +t0_obs = 0.0 +x0_obs = @SVector [0.0, r_obs*sin(-theta_obs), r_obs*cos(-theta_obs)] +# The observer is moving in the same direction as the blades, which is the negative y axis. +v_obs = @SVector [0.0, -Vinf, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) .* ifelse(positive_x_rotation, 1, -1) + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +# chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +# hs_rs = reshape(hs, 1, :, 1) +# Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +bls_rs = reshape(bls, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +bls_rs_with_tip = @view bls_rs[:, end:end, :] + +direct = AcousticAnalogies.BPMDirectivity +use_UInduction = false +use_Doppler = false +mach_correction = AcousticAnalogies.NoMachCorrection +ses_no_tip = CombinedNoTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord, twist_rs_no_tip, h, Psi, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans + +ses_with_tip = CombinedWithTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord, twist_rs_with_tip, h, Psi, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + +# Put the source elements together: +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Need to do the LBLVS with the untripped boundary layer to match what BPM.jl is doing, and only where `lblvs_flags` is true. +# So extract the radial locations where that's true. +radii_lblvs = @view radii[lblvs_flags] +dradii_lblvs = @view dradii[lblvs_flags] +twist_lblvs = @view twist[lblvs_flags] +Us_lblvs = @view U[lblvs_flags] +alphas_lblvs = @view alpha[lblvs_flags] + +# Now do the usual reshaping. +radii_lblvs_rs = reshape(radii_lblvs, 1, :, 1) +dradii_lblvs_rs = reshape(dradii_lblvs, 1, :, 1) +twist_lblvs_rs = reshape(twist_lblvs, 1, :, 1) +Us_lblvs_rs = reshape(Us_lblvs, 1, :, 1) +alphas_lblvs_rs = reshape(alphas_lblvs, 1, :, 1) + +# Now we can construct the lblvs source elements. +lblvs_ses = AcousticAnalogies.LBLVSSourceElement{direct,use_UInduction,use_Doppler}.(asound, nu, radii_lblvs_rs, θs_rs, dradii_lblvs_rs, chord, twist_lblvs_rs, Us_lblvs_rs, alphas_lblvs_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# Define the frequencies we'd like to evaluate. +# BPM.jl uses the approximate 1/3rd-octave bands. +freqs_obs = AcousticMetrics.ApproximateThirdOctaveCenterBands(100.0, 40000.0) +freqs_src = freqs_obs + +# Now do the noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(lblvs_ses, Ref(obs), Ref(freqs_src)) + +# Separate out each source. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Combine each noise prediction. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 23c is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# (Dividing the MSP by Δf_pbs aka the 1/3 octave spacing is like getting a power-spectral density, then multiplying by the narrowband spacing Δf_nb gives us the MSP associated with the narrowband.) +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs +nb_lblvs_untripped = pbs_lblvs .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) +spl_lblvs_untripped = 10 .* log10.(nb_lblvs_untripped./(pref^2)) + +# Finally, let's get the BPM.jl predictions for this case, which we've run and saved previously in a JLD2/HDF5 file. +freq_bpmjl = data_bpmjl["freqs"] +spl_pressure_bpmjl = data_bpmjl["spl_nb_pressure"] +spl_suction_bpmjl = data_bpmjl["spl_nb_suction"] +spl_separation_bpmjl = data_bpmjl["spl_nb_separation"] +spl_lblvs_bpmjl = data_bpmjl["spl_nb_lblvs"] +spl_blunt_bpmjl = data_bpmjl["spl_nb_blunt"] +spl_tip_bpmjl = data_bpmjl["spl_nb_tip"] + +# Now let's plot. +fig = Figure() +ax1 = fig[2, 1] = Axis(fig, xlabel="frequency, Hz", ylabel="SPL (dB Ref: 20 μPa), Δf = 20 Hz", xscale=log10, xticks=[10^3, 10^4], xminorticksvisible=true, xminorgridvisible=true, xminorticks=IntervalsBetween(9), yticks=10:10:70)#, aspect=3) + +s_pressure = scatter!(ax1, freq_bpmjl, spl_pressure_bpmjl, color=:blue, marker=:rtriangle) +s_suction = scatter!(ax1, freq_bpmjl, spl_suction_bpmjl, color=:red, marker=:ltriangle) +s_separation = scatter!(ax1, freq_bpmjl, spl_separation_bpmjl, color=:yellow, marker=:diamond) +s_lblvs = scatter!(ax1, freq_bpmjl, spl_lblvs_bpmjl, color=:purple, marker=:rect) +s_blunt = scatter!(ax1, freq_bpmjl, spl_blunt_bpmjl, color=:green, marker=:star6) +s_tip = scatter!(ax1, freq_bpmjl, spl_tip_bpmjl, color=:cyan, marker=:circle) + +l_pressure = lines!(ax1, freqs_obs, spl_pressure, color=:blue) +l_suction = lines!(ax1, freqs_obs, spl_suction, color=:red) +l_alpha = lines!(ax1, freqs_obs, spl_alpha, color=:yellow) +l_lblvs = lines!(ax1, freqs_obs, spl_lblvs_untripped, color=:purple) +l_teb = lines!(ax1, freqs_obs, spl_teb, color=:green) +l_tip = lines!(ax1, freqs_obs, spl_tip, color=:cyan) + +xlims!(ax1, 2e2, 6e4) +ylims!(ax1, 10.0, 70.0) + +leg = Legend(fig[1, 1], [ + [s_pressure, l_pressure], + [s_suction, l_suction], + [s_separation, l_alpha], + [s_lblvs, l_lblvs], + [s_blunt, l_teb], + [s_tip, l_tip], + ], + [ + "TBLTE-Pressure", + "TBLTE-Suction", + "Separation", + "LBLVS", + "BVS", + "Tip", + ]; orientation=:horizontal, tellwidth=false, tellheight=true, nbanks=2) + +text!(ax1, 210, 62; text="markers: CCBlade.jl+BPM.jl\nlines: CCBlade.jl+AcousticAnalogies.jl") + +save("figure23c-spl-bpmjl.png", fig) +``` +![](figure23c-spl-bpmjl.png) + +### Figure 24b +```@example figure24b +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using GLMakie +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, SteadyRotYTransformation, SteadyRotZTransformation, ConstantVelocityTransformation +using FileIO: load +using FLOWMath: Akima +using StaticArrays: @SVector + +# Copied from BPM.jl (would like to add BPM.jl as a dependency if it's registered in General some day). +# tip vortex noise correction data based on "Airfoil Tip Vortex Formation Noise" +const bm_tip_alpha_aspect_data = [2.0,2.67,4.0,6.0,12.0,24.0] +const bm_tip_alpha_aratio_data = [0.54,0.62,0.71,0.79,0.89,0.95] +const bm_tip_alpha_aspect_ratio_correction = Akima(bm_tip_alpha_aspect_data, bm_tip_alpha_aratio_data) + +function bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + # compute tip lift curve slope + if aspect_ratio < 2.0 + aratio = 0.5*one(aspect_ratio) + elseif 2.0 <= aspect_ratio <= 24.0 + aratio = bm_tip_alpha_aspect_ratio_correction(aspect_ratio) + elseif aspect_ratio > 24.0 + aratio = 1.0*one(aspect_ratio) + end + + return aratio +end + +struct BMTipAlphaCorrection{TCorrection} <: AbstractTipAlphaCorrection + correction::TCorrection + + function BMTipAlphaCorrection(aspect_ratio) + # correction = BPM._tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + correction = bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + return new{typeof(correction)}(correction) + end +end + +function AcousticAnalogies.tip_vortex_alpha_correction(blade_tip::AbstractBladeTip{<:BMTipAlphaCorrection}, alphatip) + a0l = AcousticAnalogies.alpha_zerolift(blade_tip) + correction_factor = AcousticAnalogies.tip_alpha_correction(blade_tip).correction + return correction_factor * (alphatip - a0l) + a0l +end + +# Pettingill et al., "Acoustic And Performance Characteristics of an Ideally Twisted Rotor in Hover", 2021 +# Parameters from Table 1 +B = 4 # number of blades +Rtip = 0.1588 # meters +chord = 0.2*Rtip + +# Standard day: +Tamb = 15 + 273.15 # 15°C in Kelvin +pamb = 101325.0 # Pa +R = 287.052874 # J/(kg*K) +rho = pamb/(R*Tamb) +asound = sqrt(1.4*R*Tamb) +# Dynamic and kinematic viscosity +mu = rho*1.4502e-5 +nu = mu/rho + +# This is a hover case, so the freestream velocity should be zero. +# CCBlade.jl will run with a zero freestream, but I've found that it compares a bit better with experiment if I give it a small non-zero value. +Vinf = 0.001*asound + +# Figure 24 caption says Ω_c = 2938 RPM. +rpm = 2938.0 +omega = rpm * (2*pi/60) + +# Get "cell-centered" radial locations, and also the radial spacing. +num_radial = 50 +r_Rtip_ = range(0.2, 1.0; length=num_radial+1) +r_Rtip = 0.5 .* (r_Rtip_[2:end] .+ r_Rtip_[1:end-1]) +radii = r_Rtip .* Rtip +dradii = (r_Rtip_[2:end] .- r_Rtip_[1:end-1]) .* Rtip +Rhub = r_Rtip_[1]*Rtip + +# From Pettingill Equation (1), and value for Θ_tip in Table 1. +Θ_tip = 6.9 * pi/180 +twist = Θ_tip ./ (r_Rtip) + +# Need some aerodynamic quantities. +# Got these using CCBlade.jl: see `AcousticAnalogies.jl/test/gen_bpmjl_data/itr_with_bpmjl.jl`. +data_bpmjl = load(joinpath(@__DIR__, "..", "..", "test", "gen_bpmjl_data", "figure24b.jld2")) +# Angle of attack at each radial station, radians. +alpha = data_bpmjl["alpha"] +# Flow speed normal to span at each radial station, m/s. +U = data_bpmjl["U"] + +# In the Figure 24 caption, "for these predictions, bluntness thickness H was set to 0.5 mm and trailing edge angle Ψ was set to 14 degrees." +h = 0.5e-3 # meters +Psi = 14*pi/180 # radians + +# We'll run for 1 blade pass, 20 time steps per blade pass. +num_blade_pass = 1 +num_src_times_blade_pass = 20 + +# Get the time levels we'll run. +# First, get the blade passing period. +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) + +# Now we can get the total period of source time we'll run over. +period_src = num_blade_pass*bpp +# And th number of source times. +num_src_times = num_src_times_blade_pass * num_blade_pass + +# We know the total time period and number of source times, so we can get the time step. +dt = period_src/num_src_times + +# We'll arbitrarily start at time 0.0 seconds. +t0 = 0.0 + +# And now we can finally get each source time. +src_times = t0 .+ (0:num_src_times-1).*dt + +# BPM.jl uses a different tip alpha correction which appears to require the blade aspect ratio. +# Need to find the blade aspect ratio of the ITR to apply the tip vortex angle of attack correction. +# The aspect ratio is defined as the blade tip radius divided by the average chord, but the chord is constant for this case. +aspect_ratio = Rtip / chord + +# Now we can create the tip object. +alpha0lift = 0.0 +blade_tip = AcousticAnalogies.FlatTip(BMTipAlphaCorrection(aspect_ratio), alpha0lift) + +# Start with a rotation about the negative x axis. +positive_x_rotation = false +rot_trans = SteadyRotXTransformation(t0, omega*ifelse(positive_x_rotation, 1, -1), 0) + +# Then translate along the positive x axis. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Then a 90° rotation about the negative z axis. +trans_z90deg = SteadyRotZTransformation(0.0, 0.0, -0.5*pi) + +# Then a 90° rotation about the negative y axis. +trans_y90deg = SteadyRotYTransformation(0.0, 0.0, -0.5*pi) + +# Put them all together: +trans = compose.(src_times, Ref(trans_y90deg), + compose.(src_times, Ref(trans_z90deg), + compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)))) + +# Use the M_c = 0.8*M that BPM report and BPM.jl use. +U = @. 0.8*sqrt(Vinf^2 + (omega*radii)^2) + +# For the boundary layer we want to use untripped for the 95% of the blade from the hub to almost tip, and then tripped for the last 5% of the blade at the tip. +# First figure out how many of each we'll actually have with the `num_radial = 50` radial stations. +num_untripped = Int(round(0.95*num_radial)) +num_tripped = num_radial - num_untripped +# Now create a length-`num_radial` vector of untripped and then tripped boundary layer objects. +bls = vcat(fill(AcousticAnalogies.UntrippedN0012BoundaryLayer(), num_untripped), fill(AcousticAnalogies.TrippedN0012BoundaryLayer(), num_tripped)) + +# Also we'll always be using the untripped boundary layer for LBLVS, like BPM.jl does. +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +# Paper doesn't specify the microphone used for Figure 24, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: +# > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). +# So I'll just assume that holds for Figure 23. +# The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane. +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# So, the docstring for BPM.jl says that `V` argument is the wind velocity in the y direction. +# So I guess we should assume that the blades are rotating about the y axis. +# And if the freestream velocity is in the positive y axis, then, from the perspective of the fluid, the blades are translating in the negative y direction. +# And I want the observer to be downstream/behind the blades, so that would mean they would have a positive y position. +# So I want to rotate the observer around the positive x axis, so I'm going to switch the sign on `theta_obs`. +t0_obs = 0.0 +x0_obs = @SVector [0.0, r_obs*sin(-theta_obs), r_obs*cos(-theta_obs)] +# The observer is moving in the same direction as the blades, which is the negative y axis. +v_obs = @SVector [0.0, -Vinf, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) .* ifelse(positive_x_rotation, 1, -1) + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +# chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +# hs_rs = reshape(hs, 1, :, 1) +# Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +bls_rs = reshape(bls, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +bls_rs_with_tip = @view bls_rs[:, end:end, :] + +# Use the directivity functions from the BPM report. +direct = AcousticAnalogies.BPMDirectivity + +# Don't include induction for the velocity scale U. +use_UInduction = false + +# Don't doppler-shift the source frequencies and source time steps to get observer frequencies & timesteps. +use_Doppler = false + +# Don't use the Prandtl-Glauret Mach number correction that Brooks & Burley recommend. +mach_correction = AcousticAnalogies.NoMachCorrection + +ses_no_tip = CombinedNoTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord, twist_rs_no_tip, h, Psi, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans + +ses_with_tip = CombinedWithTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord, twist_rs_with_tip, h, Psi, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + +# Put the source elements together: +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Need to do the LBLVS with the untripped boundary layer to match what BPM.jl is doing. +lblvs_ses = AcousticAnalogies.LBLVSSourceElement{direct,use_UInduction,use_Doppler}.(asound, nu, radii_rs, θs_rs, dradii_rs, chord, twist_rs, Us_rs, alphas_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# Define the frequencies we'd like to evaluate. +# BPM.jl uses the approximate 1/3rd-octave bands. +freqs_obs = AcousticMetrics.ApproximateThirdOctaveCenterBands(100.0, 40000.0) +freqs_src = freqs_obs + +# Now do the noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(lblvs_ses, Ref(obs), Ref(freqs_src)) + +# Separate out each source. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Combine each noise prediction. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 24b is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# (Dividing the MSP by Δf_pbs aka the 1/3 octave spacing is like getting a power-spectral density, then multiplying by the narrowband spacing Δf_nb gives us the MSP associated with the narrowband.) +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs +nb_lblvs_untripped = pbs_lblvs .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) +spl_lblvs_untripped = 10 .* log10.(nb_lblvs_untripped./(pref^2)) + +# Finally, let's get the BPM.jl predictions for this case, which we've run and saved previously in a JLD2/HDF5 file. +freq_bpmjl = data_bpmjl["freqs"] +spl_pressure_bpmjl = data_bpmjl["spl_nb_pressure"] +spl_suction_bpmjl = data_bpmjl["spl_nb_suction"] +spl_separation_bpmjl = data_bpmjl["spl_nb_separation"] +spl_lblvs_bpmjl = data_bpmjl["spl_nb_lblvs"] +spl_blunt_bpmjl = data_bpmjl["spl_nb_blunt"] +spl_tip_bpmjl = data_bpmjl["spl_nb_tip"] + +# Now let's plot. +fig = Figure() +ax1 = fig[2, 1] = Axis(fig, xlabel="frequency, Hz", ylabel="SPL (dB Ref: 20 μPa), Δf = 20 Hz", xscale=log10, xticks=[10^3, 10^4], xminorticksvisible=true, xminorgridvisible=true, xminorticks=IntervalsBetween(9), yticks=10:10:70)#, aspect=3) + +s_pressure = scatter!(ax1, freq_bpmjl, spl_pressure_bpmjl, color=:blue, marker=:rtriangle) +s_suction = scatter!(ax1, freq_bpmjl, spl_suction_bpmjl, color=:red, marker=:ltriangle) +s_separation = scatter!(ax1, freq_bpmjl, spl_separation_bpmjl, color=:yellow, marker=:diamond) +s_lblvs = scatter!(ax1, freq_bpmjl, spl_lblvs_bpmjl, color=:purple, marker=:rect) +s_blunt = scatter!(ax1, freq_bpmjl, spl_blunt_bpmjl, color=:green, marker=:star6) +s_tip = scatter!(ax1, freq_bpmjl, spl_tip_bpmjl, color=:cyan, marker=:circle) + +l_pressure = lines!(ax1, freqs_obs, spl_pressure, color=:blue) +l_suction = lines!(ax1, freqs_obs, spl_suction, color=:red) +l_alpha = lines!(ax1, freqs_obs, spl_alpha, color=:yellow) +l_lblvs = lines!(ax1, freqs_obs, spl_lblvs_untripped, color=:purple) +l_teb = lines!(ax1, freqs_obs, spl_teb, color=:green) +l_tip = lines!(ax1, freqs_obs, spl_tip, color=:cyan) + +xlims!(ax1, 2e2, 6e4) +ylims!(ax1, 0.0, 50.0) + +leg = Legend(fig[1, 1], [ + [s_pressure, l_pressure], + [s_suction, l_suction], + [s_separation, l_alpha], + [s_lblvs, l_lblvs], + [s_blunt, l_teb], + [s_tip, l_tip], + ], + [ + "TBLTE-Pressure", + "TBLTE-Suction", + "Separation", + "LBLVS", + "BVS", + "Tip", + ]; orientation=:horizontal, tellwidth=false, tellheight=true, nbanks=2) + +text!(ax1, 210, 44; text="markers: CCBlade.jl+BPM.jl\nlines: CCBlade.jl+AcousticAnalogies.jl") + +save("figure24b-spl-bpmjl.png", fig) +``` +![](figure24b-spl-bpmjl.png) diff --git a/docs/src/itr_tests2.md b/docs/src/itr_tests2.md new file mode 100644 index 00000000..45f3c2b8 --- /dev/null +++ b/docs/src/itr_tests2.md @@ -0,0 +1,901 @@ +```@meta +CurrentModule = AADocs +``` +# Software Quality Assurance, Cont. + +## PAS/ROTONET/BARC Comparisons for the Pettingill et al. Ideally Twisted Rotor +See [here](http://dx.doi.org/10.2514/6.2021-1928) or [here](https://ntrs.nasa.gov/citations/20205003328) for details on the Ideally Twisted Rotor. + +### Figure 22b +```@example figure22b +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using DelimitedFiles: readdlm +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, ConstantVelocityTransformation +using FileIO: load +using GLMakie +using StaticArrays: @SVector + +# Pettingill et al., "Acoustic And Performance Characteristics of an Ideally Twisted Rotor in Hover", 2021 +# Parameters from Table 1 +B = 4 # number of blades +Rtip = 0.1588 # meters +chord = 0.2*Rtip + +# Standard day: +Tamb = 15 + 273.15 # 15°C in Kelvin +pamb = 101325.0 # Pa +R = 287.052874 # J/(kg*K) +rho = pamb/(R*Tamb) +asound = sqrt(1.4*R*Tamb) +# Dynamic and kinematic viscosity +mu = rho*1.4502e-5 +nu = mu/rho + +# This is a hover case, so the freestream velocity should be zero. +# CCBlade.jl will run with a zero freestream, but I've found that it compares a bit better with experiment if I give it a small non-zero value. +Vinf = 0.001*asound + +# Figure 22 caption says Ω_c = 5465 RPM. +rpm = 5465.0 +omega = rpm * (2*pi/60) + +# Get "cell-centered" radial locations, and also the radial spacing. +num_radial = 50 +r_Rtip_ = range(0.2, 1.0; length=num_radial+1) +r_Rtip = 0.5 .* (r_Rtip_[2:end] .+ r_Rtip_[1:end-1]) +radii = r_Rtip .* Rtip +dradii = (r_Rtip_[2:end] .- r_Rtip_[1:end-1]) .* Rtip +Rhub = r_Rtip_[1]*Rtip + +# From Pettingill Equation (1), and value for Θ_tip in Table 1. +Θ_tip = 6.9 * pi/180 +twist = Θ_tip ./ (r_Rtip) + +# Need some aerodynamic quantities. +# Got these using CCBlade.jl: see `AcousticAnalogies.jl/test/gen_bpmjl_data/itr_with_bpmjl.jl`. +data_ccblade = load(joinpath(@__DIR__, "..", "..", "test", "gen_bpmjl_data", "figure22b.jld2")) +# Angle of attack at each radial station, radians. +alpha = data_ccblade["alpha"] +# Flow speed normal to span at each radial station, m/s. +U = data_ccblade["U"] + +# In the text describing Figure 22, "For these predictions, the trip flag was set to “tripped”, due to the rough surface quality of the blade." +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + +# But we're going to use the untripped boundary layer for the LBL-VS noise. +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +# In the Figure 22 caption, "for these predictions, bluntness thickness H was set to 0.8 mm and trailing edge angle Ψ was set to 16 degrees." +h = 0.8e-3 # meters +Psi = 16*pi/180 # radians + +# We'll run for 1 blade pass, 20 time steps per blade pass. +num_blade_pass = 1 +num_src_times_blade_pass = 20 +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# I don't see any discussion for what type of tip was used for the tip vortex noise. +# The flat tip seems to match the PAS+ROTONET+BARC predictions well. +blade_tip = AcousticAnalogies.FlatTip() + +# Now let's define the coordinate system. +# I'm going to do my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# And the blades will be rotating about the positive x axis at a rate of `omega`. +rot_trans = SteadyRotXTransformation(t0, omega, 0.0) + +# The hub/rotation axis of the blades will start at the origin at time `t0`, and translate in the positive x direction at a speed of `Vinf`. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] # m/s +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Now I can put the two transformations together: +trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) + +# Paper doesn't specify the microphone used for Figure 22, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: +# > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). +# So I'll just assume that holds for Figure 22. +# For the coordinate system, I'm doing my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane, so this should be good. +# But it will of course be moving with the same freestream in the positive x direction. +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# The observer is moving in the positive x direction at Vinf, at the origin at time t0. +t0_obs = 0.0 +x0_obs = @SVector [r_obs*sin(theta_obs), r_obs*cos(theta_obs), 0.0] +v_obs = @SVector [Vinf, 0.0, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +# chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +# hs_rs = reshape(hs, 1, :, 1) +# Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +# bls_rs = reshape(bls, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +# chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +# hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] +# Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +# chord_rs_with_tip = @view chord_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +# hs_rs_with_tip = @view hs_rs[:, end:end, :] +# Psis_rs_with_tip = @view Psis_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] + +positive_x_rotation = true +ses_no_tip = CombinedNoTipBroadbandSourceElement.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord, twist_rs_no_tip, h, Psi, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, Ref(bl), positive_x_rotation) .|> trans +ses_with_tip = CombinedWithTipBroadbandSourceElement.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord, twist_rs_with_tip, h, Psi, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, Ref(bl), Ref(blade_tip), positive_x_rotation) .|> trans + +# It's more convinient to cat all the sources together. +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Do the LBLVS prediction with the untripped boundary layer. +ses_lblvs = LBLVSSourceElement.(asound, nu, radii_rs, θs_rs, dradii_rs, chord, twist_rs, Us_rs, alphas_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# The predictions in Figure 22b appear to be on 1/3 octave, ranging from about 200 Hz to 60,000 Hz. +# But let's expand the range of source frequencies to account for Doppler shifting. +freqs_src = AcousticMetrics.ExactProportionalBands{3, :center}(10.0, 200000.0) +freqs_obs = AcousticMetrics.ExactProportionalBands{3, :center}(200.0, 60000.0) + +# Now we can do a noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(ses_lblvs, Ref(obs), Ref(freqs_src)) + +# This seperates out the noise prediction for each source-observer combination into the different sources. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +# pbs_lblvss = AcousticAnalogies.pbs_lblvs.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Now, need to combine each broadband noise prediction. +# The time axis the axis over which the time varies for each source. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 22b is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l + +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_lblvs = pbs_lblvs .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_lblvs = 10 .* log10.(nb_lblvs./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) + +# Now I should be able to compare to the BARC data. +# Need to read it in first. +data_pressure_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-TBL-TE-pressure-2.csv"), ',') +freq_pressure_barc = data_pressure_barc[:, 1] +spl_pressure_barc = data_pressure_barc[:, 2] + +data_suction_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-TBL-TE-suction-2.csv"), ',') +freq_suction_barc = data_suction_barc[:, 1] +spl_suction_barc = data_suction_barc[:, 2] + +data_separation_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-separation-2.csv"), ',') +freq_separation_barc = data_separation_barc[:, 1] +spl_separation_barc = data_separation_barc[:, 2] + +# data_lblvs_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-LBLVS.csv"), ',') +# freq_lblvs_barc = data_lblvs_barc[:, 1] +# spl_lblvs_barc = data_lblvs_barc[:, 2] + +data_teb_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-BVS.csv"), ',') +freq_teb_barc = data_teb_barc[:, 1] +spl_teb_barc = data_teb_barc[:, 2] + +data_tip_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-tip_vortex_shedding.csv"), ',') +freq_tip_barc = data_tip_barc[:, 1] +spl_tip_barc = data_tip_barc[:, 2] + +# Now let's plot. +fig = Figure() +ax1 = fig[2, 1] = Axis(fig, xlabel="frequency, Hz", ylabel="SPL (dB Ref: 20 μPa), Δf = 20 Hz", xscale=log10, xticks=[10^3, 10^4], xminorticksvisible=true, xminorgridvisible=true, xminorticks=IntervalsBetween(9), yticks=10:10:70)#, aspect=3) + +s_pressure = scatter!(ax1, freq_pressure_barc, spl_pressure_barc, color=:blue, marker=:rtriangle) +s_suction = scatter!(ax1, freq_suction_barc, spl_suction_barc, color=:red, marker=:ltriangle) +s_separation = scatter!(ax1, freq_separation_barc, spl_separation_barc, color=:yellow, marker=:diamond) +# s_lblvs = scatter!(ax1, freq_lblvs_barc, spl_lblvs_barc, color=:purple, marker=:rect) +s_blunt = scatter!(ax1, freq_teb_barc, spl_teb_barc, color=:green, marker=:star6) +s_tip = scatter!(ax1, freq_tip_barc, spl_tip_barc, color=:cyan, marker=:circle) + +l_pressure = lines!(ax1, freqs_obs, spl_pressure, color=:blue) +l_suction = lines!(ax1, freqs_obs, spl_suction, color=:red) +l_alpha = lines!(ax1, freqs_obs, spl_alpha, color=:yellow) +# l_lblvs = lines!(ax1, freqs_obs, spl_lblvs, color=:purple) +l_teb = lines!(ax1, freqs_obs, spl_teb, color=:green) +l_tip = lines!(ax1, freqs_obs, spl_tip, color=:cyan) + +xlims!(ax1, 2e2, 6e4) +ylims!(ax1, 10.0, 70.0) + +leg = Legend(fig[1, 1], [ + [s_pressure, l_pressure], + [s_suction, l_suction], + [s_separation, l_alpha], + # [s_lblvs, l_lblvs], + [s_blunt, l_teb], + [s_tip, l_tip], + ], + [ + "TBLTE-Pressure", + "TBLTE-Suction", + "Separation", + # "LBLVS", + "BVS", + "Tip", + ]; orientation=:horizontal, tellwidth=false, tellheight=true, nbanks=2) + +text!(ax1, 210, 62; text="markers: CCBlade.jl+BPM.jl\nlines: CCBlade.jl+AcousticAnalogies.jl") + +save("figure22b-spl-barc.png", fig) +``` +![](figure22b-spl-barc.png) + +### Figure 23c +```@example figure23c +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using DelimitedFiles: readdlm +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, ConstantVelocityTransformation +using FileIO: load +using GLMakie +using StaticArrays: @SVector + +# Pettingill et al., "Acoustic And Performance Characteristics of an Ideally Twisted Rotor in Hover", 2021 +# Parameters from Table 1 +B = 4 # number of blades +Rtip = 0.1588 # meters +chord = 0.2*Rtip + +# Standard day: +Tamb = 15 + 273.15 # 15°C in Kelvin +pamb = 101325.0 # Pa +R = 287.052874 # J/(kg*K) +rho = pamb/(R*Tamb) +asound = sqrt(1.4*R*Tamb) +# Dynamic and kinematic viscosity +mu = rho*1.4502e-5 +nu = mu/rho + +# This is a hover case, so the freestream velocity should be zero. +# CCBlade.jl will run with a zero freestream, but I've found that it compares a bit better with experiment if I give it a small non-zero value. +Vinf = 0.001*asound + +# Figure 23 caption says Ω_c = 5510 RPM. +rpm = 5510.0 +omega = rpm * (2*pi/60) + +# Get "cell-centered" radial locations, and also the radial spacing. +num_radial = 50 +r_Rtip_ = range(0.2, 1.0; length=num_radial+1) +r_Rtip = 0.5 .* (r_Rtip_[2:end] .+ r_Rtip_[1:end-1]) +radii = r_Rtip .* Rtip +dradii = (r_Rtip_[2:end] .- r_Rtip_[1:end-1]) .* Rtip +Rhub = r_Rtip_[1]*Rtip + +# From Pettingill Equation (1), and value for Θ_tip in Table 1. +Θ_tip = 6.9 * pi/180 +twist = Θ_tip ./ (r_Rtip) + +# Need some aerodynamic quantities. +# Got these using CCBlade.jl: see `AcousticAnalogies.jl/test/gen_bpmjl_data/itr_with_bpmjl.jl`. +data_ccblade = load(joinpath(@__DIR__, "..", "..", "test", "gen_bpmjl_data", "figure23c.jld2")) +# Angle of attack at each radial station, radians. +alpha = data_ccblade["alpha"] +# Flow speed normal to span at each radial station, m/s. +U = data_ccblade["U"] + +# So, for the boundary layer, we want to use untripped for the 95% of the blade from the hub to almost tip, and then tripped for the last 5% of the blade at the tip. +num_untripped = Int(round(0.95*num_radial)) +num_tripped = num_radial - num_untripped +bls_untripped = fill(AcousticAnalogies.UntrippedN0012BoundaryLayer(), num_untripped) +bls_tripped = fill(AcousticAnalogies.TrippedN0012BoundaryLayer(), num_tripped) +bls = vcat(bls_untripped, bls_tripped) + +# Now, the other trick: need to only include LBLVS noise for elements where the Reynolds number is < 160000. +# So, we need the Reynolds number for each section. +Re_c = @. U * chord / nu +# So now we want to extract the radial stations that meet that < 160000 condition. +low_Re_c = 160000 +mask_low_Re_c = Re_c .< low_Re_c + +# And we're also going to use the untripped boundary layer for the LBLVS source. +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +# In the Figure 23 caption, "for these predictions, bluntness thickness H was set to 0.5 mm and trailing edge angle Ψ was set to 14 degrees." +h = 0.5e-3 # meters +Psi = 14*pi/180 # radians + +# We'll run for 1 blade pass, 20 time steps per blade pass. +num_blade_pass = 1 +num_src_times_blade_pass = 20 +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# I don't see any discussion for what type of tip was used for the tip vortex noise. +# The flat tip seems to match the PAS+ROTONET+BARC predictions well. +blade_tip = AcousticAnalogies.FlatTip() + +# Now let's define the coordinate system. +# I'm going to do my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# And the blades will be rotating about the positive x axis at a rate of `omega`. +rot_trans = SteadyRotXTransformation(t0, omega, 0.0) + +# The hub/rotation axis of the blades will start at the origin at time `t0`, and translate in the positive x direction at a speed of `Vinf`. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] # m/s +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Now I can put the two transformations together: +trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) + +# Paper doesn't specify the microphone used for Figure 22, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: +# > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). +# So I'll just assume that holds for Figure 22. +# For the coordinate system, I'm doing my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane, so this should be good. +# But it will of course be moving with the same freestream in the positive x direction. +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# The observer is moving in the positive x direction at Vinf, at the origin at time t0. +t0_obs = 0.0 +x0_obs = @SVector [r_obs*sin(theta_obs), r_obs*cos(theta_obs), 0.0] +v_obs = @SVector [Vinf, 0.0, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +# chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +# hs_rs = reshape(hs, 1, :, 1) +# Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +bls_rs = reshape(bls, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +# chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +# hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] +# Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +# chord_rs_with_tip = @view chord_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +# hs_rs_with_tip = @view hs_rs[:, end:end, :] +# Psis_rs_with_tip = @view Psis_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +bls_rs_with_tip = @view bls_rs[:, end:end, :] + +positive_x_rotation = true +ses_no_tip = CombinedNoTipBroadbandSourceElement.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord, twist_rs_no_tip, h, Psi, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans +ses_with_tip = CombinedWithTipBroadbandSourceElement.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord, twist_rs_with_tip, h, Psi, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + +# It's more convinient to cat all the sources together. +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Need to do the LBLVS stuff separately. +# Grab the parts of the inputs that correspond to the low Reynolds number stations. +radii_lblvs = @view radii[mask_low_Re_c] +dradii_lblvs = @view dradii[mask_low_Re_c] +# chord_lblvs = @view chord[mask_low_Re_c] +twist_lblvs = @view twist[mask_low_Re_c] +# hs_lblvs = @view hs[mask_low_Re_c] +# Psis_lblvs = @view Psis[mask_low_Re_c] +Us_lblvs = @view U[mask_low_Re_c] +alphas_lblvs = @view alpha[mask_low_Re_c] + +# And do the reshaping. +radii_lblvs_rs = reshape(radii_lblvs, 1, :, 1) +dradii_lblvs_rs = reshape(dradii_lblvs, 1, :, 1) +# chord_lblvs_rs = reshape(chord_lblvs, 1, :, 1) +twist_lblvs_rs = reshape(twist_lblvs, 1, :, 1) +# hs_lblvs_rs = reshape(hs_lblvs, 1, :, 1) +# Psis_lblvs_rs = reshape(Psis_lblvs, 1, :, 1) +Us_lblvs_rs = reshape(Us_lblvs, 1, :, 1) +alphas_lblvs_rs = reshape(alphas_lblvs, 1, :, 1) + +# Now we can create the source elements. +ses_lblvs = LBLVSSourceElement.(asound, nu, radii_lblvs_rs, θs_rs, dradii_lblvs_rs, chord, twist_lblvs_rs, Us_lblvs_rs, alphas_lblvs_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# Now we can create the source elements. +ses_lblvs = LBLVSSourceElement.(asound, nu, radii_lblvs_rs, θs_rs, dradii_lblvs_rs, chord, twist_lblvs_rs, Us_lblvs_rs, alphas_lblvs_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# The predictions in Figure 23c appear to be on 1/3 octave, ranging from about 200 Hz to 60,000 Hz. +# But let's expand the range of source frequencies to account for Doppler shifting. +freqs_src = AcousticMetrics.ExactProportionalBands{3, :center}(10.0, 200000.0) +freqs_obs = AcousticMetrics.ExactProportionalBands{3, :center}(200.0, 60000.0) + +# Now we can do a noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(ses_lblvs, Ref(obs), Ref(freqs_src)) + +# This seperates out the noise prediction for each source-observer combination into the different sources. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Now, need to combine each broadband noise prediction. +# The time axis the axis over which the time varies for each source. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 23c is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l + +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_lblvs = pbs_lblvs .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_lblvs = 10 .* log10.(nb_lblvs./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) + +# Now I should be able to compare to the BARC data. +# Need to read it in first. +data_pressure_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-TBL-TE-pressure.csv"), ',') +freq_pressure_barc = data_pressure_barc[:, 1] +spl_pressure_barc = data_pressure_barc[:, 2] + +data_suction_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-TBL-TE-suction.csv"), ',') +freq_suction_barc = data_suction_barc[:, 1] +spl_suction_barc = data_suction_barc[:, 2] + +data_separation_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-separation.csv"), ',') +freq_separation_barc = data_separation_barc[:, 1] +spl_separation_barc = data_separation_barc[:, 2] + +data_lblvs_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-LBLVS.csv"), ',') +freq_lblvs_barc = data_lblvs_barc[:, 1] +spl_lblvs_barc = data_lblvs_barc[:, 2] + +data_teb_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-BVS.csv"), ',') +freq_teb_barc = data_teb_barc[:, 1] +spl_teb_barc = data_teb_barc[:, 2] + +data_tip_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-tip_vortex_shedding.csv"), ',') +freq_tip_barc = data_tip_barc[:, 1] +spl_tip_barc = data_tip_barc[:, 2] + +# Now let's plot. +fig = Figure() +ax1 = fig[2, 1] = Axis(fig, xlabel="frequency, Hz", ylabel="SPL (dB Ref: 20 μPa), Δf = 20 Hz", xscale=log10, xticks=[10^3, 10^4], xminorticksvisible=true, xminorgridvisible=true, xminorticks=IntervalsBetween(9), yticks=10:10:70)#, aspect=3) + +s_pressure = scatter!(ax1, freq_pressure_barc, spl_pressure_barc, color=:blue, marker=:rtriangle) +s_suction = scatter!(ax1, freq_suction_barc, spl_suction_barc, color=:red, marker=:ltriangle) +s_separation = scatter!(ax1, freq_separation_barc, spl_separation_barc, color=:yellow, marker=:diamond) +s_lblvs = scatter!(ax1, freq_lblvs_barc, spl_lblvs_barc, color=:purple, marker=:rect) +s_blunt = scatter!(ax1, freq_teb_barc, spl_teb_barc, color=:green, marker=:star6) +s_tip = scatter!(ax1, freq_tip_barc, spl_tip_barc, color=:cyan, marker=:circle) + +l_pressure = lines!(ax1, freqs_obs, spl_pressure, color=:blue) +l_suction = lines!(ax1, freqs_obs, spl_suction, color=:red) +l_alpha = lines!(ax1, freqs_obs, spl_alpha, color=:yellow) +l_lblvs = lines!(ax1, freqs_obs, spl_lblvs, color=:purple) +l_teb = lines!(ax1, freqs_obs, spl_teb, color=:green) +l_tip = lines!(ax1, freqs_obs, spl_tip, color=:cyan) + +xlims!(ax1, 2e2, 6e4) +ylims!(ax1, 10.0, 70.0) + +leg = Legend(fig[1, 1], [ + [s_pressure, l_pressure], + [s_suction, l_suction], + [s_separation, l_alpha], + [s_lblvs, l_lblvs], + [s_blunt, l_teb], + [s_tip, l_tip], + ], + [ + "TBLTE-Pressure", + "TBLTE-Suction", + "Separation", + "LBLVS", + "BVS", + "Tip", + ]; orientation=:horizontal, tellwidth=false, tellheight=true, nbanks=2) + +text!(ax1, 210, 62; text="markers: CCBlade.jl+BPM.jl\nlines: CCBlade.jl+AcousticAnalogies.jl") + +save("figure23c-spl-barc.png", fig) +``` +![](figure23c-spl-barc.png) + + +### Figure 24b +```@example figure24b +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using DelimitedFiles: readdlm +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, ConstantVelocityTransformation +using FileIO: load +using GLMakie +using StaticArrays: @SVector + +# Pettingill et al., "Acoustic And Performance Characteristics of an Ideally Twisted Rotor in Hover", 2021 +# Parameters from Table 1 +B = 4 # number of blades +Rtip = 0.1588 # meters +chord = 0.2*Rtip + +# Standard day: +Tamb = 15 + 273.15 # 15°C in Kelvin +pamb = 101325.0 # Pa +R = 287.052874 # J/(kg*K) +rho = pamb/(R*Tamb) +asound = sqrt(1.4*R*Tamb) +# Dynamic and kinematic viscosity +mu = rho*1.4502e-5 +nu = mu/rho + +# This is a hover case, so the freestream velocity should be zero. +# CCBlade.jl will run with a zero freestream, but I've found that it compares a bit better with experiment if I give it a small non-zero value. +Vinf = 0.001*asound + +# Figure 24 caption says Ω_c = 2938 RPM. +rpm = 2938.0 +omega = rpm * (2*pi/60) + +# Get "cell-centered" radial locations, and also the radial spacing. +num_radial = 50 +r_Rtip_ = range(0.2, 1.0; length=num_radial+1) +r_Rtip = 0.5 .* (r_Rtip_[2:end] .+ r_Rtip_[1:end-1]) +radii = r_Rtip .* Rtip +dradii = (r_Rtip_[2:end] .- r_Rtip_[1:end-1]) .* Rtip +Rhub = r_Rtip_[1]*Rtip + +# From Pettingill Equation (1), and value for Θ_tip in Table 1. +Θ_tip = 6.9 * pi/180 +twist = Θ_tip ./ (r_Rtip) + +# Need some aerodynamic quantities. +# Got these using CCBlade.jl: see `AcousticAnalogies.jl/test/gen_bpmjl_data/itr_with_bpmjl.jl`. +data_ccblade = load(joinpath(@__DIR__, "..", "..", "test", "gen_bpmjl_data", "figure24b.jld2")) +# Angle of attack at each radial station, radians. +alpha = data_ccblade["alpha"] +# Flow speed normal to span at each radial station, m/s. +U = data_ccblade["U"] + +# In the Figure 24 caption, "for these predictions, bluntness thickness H was set to 0.5 mm and trailing edge angle Ψ was set to 14 degrees." +h = 0.5e-3 # meters +Psi = 14*pi/180 # radians + +# We'll run for 1 blade pass, 20 time steps per blade pass. +num_blade_pass = 1 +num_src_times_blade_pass = 20 + +# Get the time levels we'll run. +# First, get the blade passing period. +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) + +# Now we can get the total period of source time we'll run over. +period_src = num_blade_pass*bpp + +# And the number of source times. +num_src_times = num_src_times_blade_pass * num_blade_pass + +# We know the total time period and number of source times, so we can get the time step. +dt = period_src/num_src_times + +# We'll arbitrarily start at time 0.0 seconds. +t0 = 0.0 + +# And now we can finally get each source time. +src_times = t0 .+ (0:num_src_times-1).*dt + +# Now let's define the coordinate system. +# I'm going to do my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# And the blades will be rotating about the positive x axis at a rate of `omega`. +rot_trans = SteadyRotXTransformation(t0, omega, 0.0) + +# The hub/rotation axis of the blades will start at the origin at time `t0`, and translate in the positive x direction at a speed of `Vinf`. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] # m/s +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Now I can put the two transformations together: +trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) + +# For the boundary layer we want to use untripped for the 95% of the blade from the hub to almost tip, and then tripped for the last 5% of the blade at the tip. +# First figure out how many of each we'll actually have with the `num_radial = 50` radial stations. +num_untripped = Int(round(0.95*num_radial)) +num_tripped = num_radial - num_untripped +# Now create a length-`num_radial` vector of untripped and then tripped boundary layer objects. +bls = vcat(fill(AcousticAnalogies.UntrippedN0012BoundaryLayer(), num_untripped), fill(AcousticAnalogies.TrippedN0012BoundaryLayer(), num_tripped)) + +# But we'll always use the untripped boundary layer with LBLVS. +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +# I don't see any discussion for what type of tip was used for the tip vortex noise. +# The flat tip seems to match the PAS+ROTONET+BARC predictions well. +blade_tip = AcousticAnalogies.FlatTip() + +# Paper doesn't specify the microphone used for Figure 24, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: +# > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). +# So I'll just assume that holds for Figure 24. +# For the coordinate system, I'm doing my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane, so this should be good. +# But it will of course be moving with the same freestream in the positive x direction. +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# The observer is moving in the positive x direction at Vinf, at the origin at time t0. +t0_obs = 0.0 +x0_obs = @SVector [r_obs*sin(theta_obs), r_obs*cos(theta_obs), 0.0] +v_obs = @SVector [Vinf, 0.0, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +# chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +# hs_rs = reshape(hs, 1, :, 1) +# Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +bls_rs = reshape(bls, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +bls_rs_with_tip = @view bls_rs[:, end:end, :] + +positive_x_rotation = true +ses_no_tip = CombinedNoTipBroadbandSourceElement.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord, twist_rs_no_tip, h, Psi, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans +ses_with_tip = CombinedWithTipBroadbandSourceElement.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord, twist_rs_with_tip, h, Psi, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + +# Put the source elements together: +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Need to do the LBLVS with the untripped boundary layer. +ses_lblvs = AcousticAnalogies.LBLVSSourceElement.(asound, nu, radii_rs, θs_rs, dradii_rs, chord, twist_rs, Us_rs, alphas_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# The predictions in Figure 24b appear to be on 1/3 octave, ranging from about 200 Hz to 60,000 Hz. +# But let's expand the range of source frequencies to account for Doppler shifting. +freqs_src = AcousticMetrics.ExactProportionalBands{3, :center}(10.0, 200000.0) +freqs_obs = AcousticMetrics.ExactProportionalBands{3, :center}(200.0, 60000.0) + +# Now we can do a noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(ses_lblvs, Ref(obs), Ref(freqs_src)) + +# This seperates out the noise prediction for each source-observer combination into the different sources. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Now, need to combine each broadband noise prediction. +# The time axis the axis over which the time varies for each source. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 24b is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l + +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_lblvs = pbs_lblvs .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_lblvs = 10 .* log10.(nb_lblvs./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) + +# Now I should be able to compare to the BARC data. +# Need to read it in first. +data_pressure_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-TBL-TE-pressure.csv"), ',') +freq_pressure_barc = data_pressure_barc[:, 1] +spl_pressure_barc = data_pressure_barc[:, 2] + +data_suction_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-TBL-TE-suction.csv"), ',') +freq_suction_barc = data_suction_barc[:, 1] +spl_suction_barc = data_suction_barc[:, 2] + +data_separation_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-separation.csv"), ',') +freq_separation_barc = data_separation_barc[:, 1] +spl_separation_barc = data_separation_barc[:, 2] + +data_lblvs_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-LBLVS.csv"), ',') +freq_lblvs_barc = data_lblvs_barc[:, 1] +spl_lblvs_barc = data_lblvs_barc[:, 2] + +data_teb_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-BVS.csv"), ',') +freq_teb_barc = data_teb_barc[:, 1] +spl_teb_barc = data_teb_barc[:, 2] + +data_tip_barc = readdlm(joinpath(@__DIR__, "..", "..", "test", "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-tip_vortex_shedding.csv"), ',') +freq_tip_barc = data_tip_barc[:, 1] +spl_tip_barc = data_tip_barc[:, 2] + +# Now let's plot. +fig = Figure() +ax1 = fig[2, 1] = Axis(fig, xlabel="frequency, Hz", ylabel="SPL (dB Ref: 20 μPa), Δf = 20 Hz", xscale=log10, xticks=[10^3, 10^4], xminorticksvisible=true, xminorgridvisible=true, xminorticks=IntervalsBetween(9), yticks=10:10:70)#, aspect=3) + +s_pressure = scatter!(ax1, freq_pressure_barc, spl_pressure_barc, color=:blue, marker=:rtriangle) +s_suction = scatter!(ax1, freq_suction_barc, spl_suction_barc, color=:red, marker=:ltriangle) +s_separation = scatter!(ax1, freq_separation_barc, spl_separation_barc, color=:yellow, marker=:diamond) +s_lblvs = scatter!(ax1, freq_lblvs_barc, spl_lblvs_barc, color=:purple, marker=:rect) +s_blunt = scatter!(ax1, freq_teb_barc, spl_teb_barc, color=:green, marker=:star6) +s_tip = scatter!(ax1, freq_tip_barc, spl_tip_barc, color=:cyan, marker=:circle) + +l_pressure = lines!(ax1, freqs_obs, spl_pressure, color=:blue) +l_suction = lines!(ax1, freqs_obs, spl_suction, color=:red) +l_alpha = lines!(ax1, freqs_obs, spl_alpha, color=:yellow) +l_lblvs = lines!(ax1, freqs_obs, spl_lblvs, color=:purple) +l_teb = lines!(ax1, freqs_obs, spl_teb, color=:green) +l_tip = lines!(ax1, freqs_obs, spl_tip, color=:cyan) + +xlims!(ax1, 2e2, 6e4) +ylims!(ax1, 0.0, 50.0) + + +leg = Legend(fig[1, 1], [ + [s_pressure, l_pressure], + [s_suction, l_suction], + [s_separation, l_alpha], + [s_lblvs, l_lblvs], + [s_blunt, l_teb], + [s_tip, l_tip], + ], + [ + "TBLTE-Pressure", + "TBLTE-Suction", + "Separation", + "LBLVS", + "BVS", + "Tip", + ]; orientation=:horizontal, tellwidth=false, tellheight=true, nbanks=2) + +text!(ax1, 210, 44; text="markers: CCBlade.jl+BPM.jl\nlines: CCBlade.jl+AcousticAnalogies.jl") + +save("figure24b-spl-barc.png", fig) +``` +![](figure24b-spl-barc.png) + diff --git a/docs/src/sqa.md b/docs/src/sqa.md index 83c6b13b..9a811a82 100644 --- a/docs/src/sqa.md +++ b/docs/src/sqa.md @@ -21,7 +21,7 @@ F1A tests | 2 2 5.9s Test Summary: | Pass Total Time CCBlade private utils tests | 1 1 0.3s Test Summary: | Pass Total Time -CCBlade CompactSourceElement test | 12 12 3.4s +CCBlade CompactF1ASourceElement test | 12 12 3.4s Test Summary: | Pass Total Time ANOPP2 Comparison | 176 176 5.9s Test Summary: | Time @@ -48,7 +48,7 @@ Mathematically, we need to solve the equation R(t) = t - \left( \tau + \frac{|\vec{x}(t) - \vec{y}(τ)|}{c_0} \right) = 0 ``` -whereon +where * ``τ`` is the time the source has emitted an acoustic disturbance * ``t`` is the time the observer encounters the acoustic disturbance @@ -84,7 +84,7 @@ y = @SVector [-4.0, 3.0, 6.0] c0 = 2.0 dummy0 = 1.0 dummy3 = @SVector [0.0, 0.0, 0.0] -se = AcousticAnalogies.CompactSourceElement(dummy0, c0, dummy0, dummy0, y, dummy3, dummy3, dummy3, dummy3, dummy3, τ, dummy3) +se = AcousticAnalogies.CompactF1ASourceElement(dummy0, c0, dummy0, dummy0, y, dummy3, dummy3, dummy3, dummy3, dummy3, τ, dummy3) # Define a function that solves the advanced time equation using `nlsolve. function adv_time_nlsolve(se, obs) @@ -123,11 +123,11 @@ println("constant velocity observer, exact: $(t_exact), nlsorve: $(t_nlsolve), d Almost identical results, so things are good! ### Combine `F1AOutput` Tests -The function `f1a(se::CompactSourceElement, obs::AcousticObserver)` uses Farassat's formulation 1A to perform a prediction of the noise experienced by one observer `obs` due to one acoustic source `se`. +The function `noise(se::CompactF1ASourceElement, obs::AcousticObserver)` uses Farassat's formulation 1A to perform a prediction of the noise experienced by one observer `obs` due to one acoustic source `se`. Typically we will not have just one source, however. For example, the [guided example in the docs](@ref guided_example) uses 30 "source elements" to model each propeller blade. But we're interested in the acoustics experienced by `obs` due to **all** of the source elements, not just one. -So, we need to combine the output of `f1a` for one observer and all of the source elements. +So, we need to combine the output of `noise` for one observer and all of the source elements. In AcousticAnalogies.jl, this is done by interpolating the time history of each source element's acoustics (the "pressure time history") onto a common chunk of time, and then adding them up. No big deal. @@ -338,14 +338,14 @@ function doit() f0dot(τ) = [-fn, -sin(omega*τ)*fc, cos(omega*τ)*fc] f1dot(τ) = [0, -omega*cos(omega*τ)*fc, -omega*sin(omega*τ)*fc] u(τ) = y0dot(τ)./radii - sef1 = CompactSourceElement(rho, c0, dradii, Λ, y0dot, y1dot, nothing, nothing, f0dot, nothing, 0.0, u) + sef1 = CompactF1ASourceElement(rho, c0, dradii, Λ, y0dot, y1dot, nothing, nothing, f0dot, nothing, 0.0, u) t = 0.0 dt = period*0.5^4 τ0, pmi0, pdiff0, pdinf0 = f1_integrand(sef1, obs, t) - sef1a = CompactSourceElement(rho, c0, dradii, Λ, y0dot(τ0), y1dot(τ0), y2dot(τ0), y3dot(τ0), f0dot(τ0), f1dot(τ0), τ0, u(τ0)) - apth = f1a(sef1a, obs) + sef1a = CompactF1ASourceElement(rho, c0, dradii, Λ, y0dot(τ0), y1dot(τ0), y2dot(τ0), y3dot(τ0), f0dot(τ0), f1dot(τ0), τ0, u(τ0)) + apth = noise(sef1a, obs) err_prev_pm = nothing err_prev_pd = nothing @@ -443,6 +443,8 @@ save("anopp2_comparison.png", fig) The difference between the two codes' predictions is very small (less than 1% error). +### Brooks, Pope & Marcolini Tests + ## Signed Commits The AcousticAnalogies.jl GitHub repository requires all commits to the `main` branch to be signed. See the [GitHub docs on signing commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification) for more information. diff --git a/docs/src/writevtk_support.md b/docs/src/writevtk_support.md index ffec45bc..8b8b01de 100644 --- a/docs/src/writevtk_support.md +++ b/docs/src/writevtk_support.md @@ -240,7 +240,7 @@ function af_xrotor(alpha, Re, Mach, config::XROTORAirfoilConfig) end ``` -AcousticAnalogies.jl can write out [`CompactSourceElement`](@ref) `structs` to VTK +AcousticAnalogies.jl can write out [`CompactF1ASourceElement`](@ref) `structs` to VTK files, allowing us to easily visualize the state and motion of the acoustic sources in popular visualization tools (e.g. [ParaView](https://www.paraview.org/)). This is very useful for checking that @@ -305,7 +305,8 @@ outs = solve.(Ref(rotor), sections, ops) bpp = 60/(rpm*B) period = 2*bpp num_source_times = 64 -ses = source_elements_ccblade(rotor, sections, ops, outs, fill(cs_area_over_chord_squared, length(radii)), period, num_source_times) +positive_x_rotation = true +ses = f1a_source_elements_ccblade(rotor, sections, ops, outs, fill(cs_area_over_chord_squared, length(radii)), period, num_source_times, positive_x_rotation) @show size(ses) ``` `ses` is an array of source elements of shape `(num_source_times, num_radial, diff --git a/src/AcousticAnalogies.jl b/src/AcousticAnalogies.jl index aba0ef7f..805650ff 100644 --- a/src/AcousticAnalogies.jl +++ b/src/AcousticAnalogies.jl @@ -1,32 +1,68 @@ module AcousticAnalogies -using AcousticMetrics -using CCBlade -using ConcreteStructs: @concrete -using FLOWMath: akima, linear, ksmax, dot_cs_safe, norm_cs_safe -using Formatting: format +using AcousticMetrics: AcousticMetrics +# using BPM: BPM +using CCBlade: CCBlade +using FillArrays: Fill +using FLOWMath: akima, linear, ksmax, norm_cs_safe, dot_cs_safe, atan_cs_safe, abs_cs_safe +using FlexiMaps: mapview +using Format: format, FormatExpr using JuliennedArrays: JuliennedArrays -using KinematicCoordinateTransformations +using KinematicCoordinateTransformations: KinematicTransformation, SteadyRotXTransformation, ConstantVelocityTransformation, compose using LinearAlgebra: cross, norm, mul! -using FlexiMaps: mapview -using StaticArrays -using WriteVTK +using Meshes: Meshes +using StaticArrays: @SVector +using WriteVTK: WriteVTK include("utils.jl") export get_dradii -include("core.jl") -export CompactSourceElement -export AcousticObserver, StationaryAcousticObserver, ConstVelocityAcousticObserver -export F1AOutput, F1APressureTimeHistory +include("abstract_source_elements.jl") +export AbstractCompactSourceElement + +include("observers.jl") +export AbstractAcousticObserver, StationaryAcousticObserver, ConstVelocityAcousticObserver + +include("advance_time.jl") export adv_time -export f1a + +include("boundary_layers.jl") +export AbstractBoundaryLayer, TrippedN0012BoundaryLayer, UntrippedN0012BoundaryLayer + +include("f1a.jl") +export CompactF1ASourceElement +export F1AOutput, F1APressureTimeHistory +export noise export common_obs_time export combine!, combine +include("abstract_broadband.jl") + +include("tbl_te.jl") +export TBLTESourceElement + +include("lbl_vs.jl") +export LBLVSSourceElement + +include("tip_vortex.jl") +export AbstractTipAlphaCorrection, NoTipAlphaCorrection, BPMTipAlphaCorrection, BMTipAlphaCorrection, SmoothBMTipAlphaCorrection +export AbstractBladeTip, RoundedTip, FlatTip +export TipVortexSourceElement + +include("teb_vs.jl") +export TEBVSSourceElement + +include("combined_broadband.jl") +export CombinedNoTipBroadbandSourceElement, CombinedWithTipBroadbandSourceElement +export pbs_suction, pbs_pressure, pbs_alpha, pbs_teb, pbs_tip + include("ccblade_helpers.jl") -export source_elements_ccblade +export f1a_source_elements_ccblade, tblte_source_elements_ccblade, lblvs_source_elements_ccblade, tebvs_source_elements_ccblade, tip_vortex_source_elements_ccblade, combined_broadband_source_elements_ccblade + +include("bpm_test_utils.jl") include("writevtk.jl") +include("deprecated.jl") + end # module diff --git a/src/abstract_broadband.jl b/src/abstract_broadband.jl new file mode 100644 index 00000000..ff318f48 --- /dev/null +++ b/src/abstract_broadband.jl @@ -0,0 +1,321 @@ +abstract type AbstractDirectivity end +struct BPMDirectivity <: AbstractDirectivity end +struct BrooksBurleyDirectivity <: AbstractDirectivity end + +abstract type AbstractBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler} <: AbstractCompactSourceElement end + +""" + doppler_factor(se::AbstractBroadbandSourceElement, obs::AbstractAcousticObserver, t_obs) + +Calculate the Doppler shift factor for noise emitted by source element `se` and recieved by observer `obs` at time `t_obs`, i.e. the ratio between an observer frequency `f` and emitted frequency `f_0`. + +The correct value for `t_obs` can be found using [`adv_time`](@ref). +""" +function doppler_factor(se::AbstractBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,true}, obs::AbstractAcousticObserver, t_obs) where {TDirect,TUInduction,TMachCorrection} + # Location of the observer at the observer time. + x_obs = obs(t_obs) + + # Also need the speed of sound. + c = speed_of_sound(se) + + # Get a unit vector pointing from the source position at the source time to the observer position at the observer time. + rv = x_obs .- position(se) + r = norm_cs_safe(rv) + rhat = rv/r + + # So, now, if I dot the source velocity with `rhat`, that would give me the component of velocity of the source in the direction of the observer, positive if moving toward it, negative if moving away. + v_src = dot_cs_safe(velocity(se), rhat) + + # And, if I dot the observer velocity `rhat`, that will give me the component of velocity of the observer in the direction of the source, positive if moving *away* from it, negative if moving toward. + v_obs = dot_cs_safe(velocity(t_obs, obs), rhat) + + # Now we can get the factor. + factor = (1 - v_obs/c) / (1 - v_src/c) + + return factor +end + +function doppler_factor(se::AbstractBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,false}, obs::AbstractAcousticObserver, t_obs) where {TDirect,TUInduction,TMachCorrection} + return 1 +end + +""" + doppler_factor(se::AbstractBroadbandSourceElement, obs::AbstractAcousticObserver) + +Calculate the Doppler shift factor for noise emitted by source element `se` and recieved by observer `obs`, i.e. the ratio between an observer frequency `f` and emitted frequency `f_0`. + +The correct value for `t_obs` will be found using [`adv_time`](@ref) internally. +""" +function doppler_factor(se::AbstractBroadbandSourceElement, obs::AbstractAcousticObserver) + # Do the advanced time calculation. + t_obs = adv_time(se, obs) + + return doppler_factor(se, obs, t_obs) +end + +function directivity(se::AbstractBroadbandSourceElement{BrooksBurleyDirectivity}, x_obs, top_is_suction) + # Position vector from source to observer. + rv = x_obs .- se.y0dot + + # Distance from source to observer. + r_er = norm_cs_safe(rv) + + # Unit vector normal to both the span and chord directions. + # Does the order matter? + # Doesn't look like it, since we're only using it to find z_er, which we square. + # But let's do it right, anyway! + # if se.chord_cross_span_to_get_top_uvec + # # But, if the angle of attack is negative, then the "top" of the airfoil (which is normally the suction side) is actually the suction side. + # if top_is_suction + # z_uvec_tmp = cross(se.chord_uvec, se.span_uvec) + # else + # z_uvec_tmp = cross(se.span_uvec, se.chord_uvec) + # end + # else + # if top_is_suction + # z_uvec_tmp = cross(se.span_uvec, se.chord_uvec) + # else + # z_uvec_tmp = cross(se.chord_uvec, se.span_uvec) + # end + # end + z_uvec_tmp = cross(se.chord_uvec, se.span_uvec)*ifelse(se.chord_cross_span_to_get_top_uvec, 1, -1)*ifelse(top_is_suction, 1, -1) + z_uvec = z_uvec_tmp / norm_cs_safe(z_uvec_tmp) + + # Component of rv along the chord line (see Figure 11 in Brooks and Burley AIAA 2001-2210). + x_er = dot_cs_safe(rv, se.chord_uvec) + + # Component of rv along the span line (see Figure 11 in Brooks and Burley AIAA 2001-2210). + y_er = dot_cs_safe(rv, se.span_uvec) + + # Component of rv in the direction normal to both span and chord (see Figure 11 in Brooks and Burley AIAA 2001-2210). + z_er = dot_cs_safe(rv, z_uvec) + + # Need to find sin(Θ_er)^2, where Θ_er = acos(x_er/r_er), equation (21) from Brooks and Burley AIAA 2001-2210. + # But sin(acos(x_er/r_er)) = sqrt(r_er^2 - x_er^2)/r_er, and so sin(Θ_er)^2 = (r_er^2 - x_er^2)/r_er^2 + sin2Θer = (r_er^2 - x_er^2)/r_er^2 + + # Need to find sin(Φ_er)^2, where Φ_er = acos(y_er/sqrt(y_er^2 + z_er^2)), equation (21) from Brooks and Burley AIAA 2001-2210. + # But sin(acos(y_er/sqrt(y_er^2 + z_er^2))) = z_er/sqrt(y_er^2 + z_er^2), and so sin(Φ_er)^2 = z_er^2/(y_er_^2 + z_er^2). + sin2Φer = (z_er^2)/(y_er^2 + z_er^2) + + # Need to find 2*sin(0.5*Θ_er)^2, where Θ_er = acos(x_er/r_er), equation (21) from Brooks and Burley AIAA 2001-2210. + # But there is a half-angle identity that says sin(θ/2)^2 = 0.5*(1 - cos(θ)). + # So I actually want 2*sin(0.5*Θ_er)^2 = 2*0.5*(1 - cos(Θ_er)) = (1 - cos(Θ_er)). + # But I can substitute in Θ_er = acos(x_er/r_er) and get 2*sin(0.5*Θ_er)^2 = 1 - x_er/r_er. + twosin2halfΘer = 1 - x_er/r_er + + # Now just need the denominator: (1 - M_tot*cos(ξR))^4. + # M_tot is the "total" velocity from... hmm... what perspective? + # Let's see... it looks like it's suppose to be from the fluid, aka the global frame. + # The definition is Brooks and Burley AIAA 2001-2210, equation (14): + # + # V_tot = V - V_wt - V_ind + # + # where + # + # * V is the velocity due to the rotation of the blade element + # * V_wt is the wind tunnel velocity, which is positive when it goes against the motion of the blade element. + # * V_ind is "the induced velocity due to the near and far wake of the rotor," and appears to be positive in roughly the thrust direction. + # + # So if I calculate V - V_wt, that's the "actual" velocity of the blade element, i.e., the velocity of the blade element relative to the fluid far away from the blade element, since it doesn't include the induced velocity. + # That's what I usually think of as the "actual" velocity, since it's what a stationary observer would observe on a calm day. + # But when we add in the induced velocity, I think what we're finding is the velocity of the blade element relative to the nearfield velocity. + # Cool. + # But does that mean I add or subtract `se.y1dot_fluid` from `se.y1dot`? + # Well, let's think about that. + # First, let's say I start with stuff in the blade-fixed frame. + # And let's say I'm imagining that, from the global frame, I'm assuming the + # blade element is moving in the positive x direction, initially aligned + # with the y axis + # So I think all I need to do is just use se.y1dot_fluid + se.y1dot. + # Now, cos(ξ_r) is defined by equation (18) in Brooks and Burley AIAA 2001-2210, which is the angle between the radiation vector (rv here) and the total velocity (se.y1dot here). + # But I can simplify that by just finding the unit radiation vector, then dotting that with the velocity vector, and dividing by c0. + + # Unit radiation vector. + r_uvec = rv./r_er + # Equation 14 from Brooks and Burley AIAA 2001-2210. + Vtotal = se.y1dot - se.y1dot_fluid + # Mach number vectory in the direction of the radiation vector. + Mtotcosξr = dot_cs_safe(Vtotal, r_uvec)/se.c0 + + # Convective amplification factor for the two directivity functions. + conv_amp = 1/(1 - Mtotcosξr)^4 + + # Now I can finally find the directivity function! + # Equation (19) from Brooks and Burley AIAA 2001-2210. + # Dl = (sin2Θer*sin2Φer)/(1 - Mtotcosξr)^4 + Dl = (sin2Θer*sin2Φer)*conv_amp + + # Now I can finally find the directivity function! + # Equation (20) from Brooks and Burley AIAA 2001-2210. + # Dh = (twosin2halfΘer*sin2Φer)/(1 - Mtotcosξr)^4 + Dh = (twosin2halfΘer*sin2Φer)*conv_amp + + return r_er, Dl, Dh +end + +function directivity(se::AbstractBroadbandSourceElement{BPMDirectivity}, x_obs, top_is_suction) + # Position vector from source to observer. + rv = x_obs .- se.y0dot + + # Distance from source to observer. + r_er = norm_cs_safe(rv) + + # So, the BPM report uses the local flow velocity, not the chord line, to define the x direction. + # So, I want to get a unit vector in that direction. + # Should it include induction? + # It won't matter for comparing to the data in the BPM report, since the flow including and excluding induction would be in the same direction. + # In the BPM report Appendix B, the x direction is defined as the opposite of the motion of the source element/flat plate, so I guess I won't use induction. + # But I want the velocity to be normal to the span direction, so let's remove_that. + # So, want the x direction to be opposite the velocity of the source element. + x_vec_tmp1 = -se.y1dot + # Then we want to remove any part of the velocity in the direction of the span. + x_vec_tmp2 = x_vec_tmp1 - dot_cs_safe(x_vec_tmp1, se.span_uvec)*x_vec_tmp1 + # Now make it a unit vector: + x_uvec = x_vec_tmp2 / norm_cs_safe(x_vec_tmp2) + + # Unit vector normal to both the span and chord directions. + # Does the order matter? + # Doesn't look like it, since we're only using it to find z_er, which we square. + # But it's supposed to be pointing from the pressure to the suction side, which we can figure out, so let's do it the right way. + # if se.chord_cross_span_to_get_top_uvec + # if top_is_suction + # z_uvec_tmp = cross(x_uvec, se.span_uvec) + # else + # z_uvec_tmp = cross(se.span_uvec, x_uvec) + # end + # else + # if top_is_suction + # z_uvec_tmp = cross(se.span_uvec, x_uvec) + # else + # z_uvec_tmp = cross(x_uvec, se.span_uvec) + # end + # end + z_uvec_tmp = cross(x_uvec, se.span_uvec)*ifelse(se.chord_cross_span_to_get_top_uvec, 1, -1)*ifelse(top_is_suction, 1, -1) + z_uvec = z_uvec_tmp / norm_cs_safe(z_uvec_tmp) + + # Component of rv along the chord line (see Figure B3 in the BPM report). + x_er = dot_cs_safe(rv, x_uvec) + + # Component of rv along the span line (see Figure B3 the BPM report). + y_er = dot_cs_safe(rv, se.span_uvec) + + # Component of rv in the direction normal to both span and chord (see Figure 11 in Brooks and Burley AIAA 2001-2210). + z_er = dot_cs_safe(rv, z_uvec) + + # Need to find sin(Θ_er)^2, where Θ_er = acos(x_er/r_er), equation (21) from Brooks and Burley AIAA 2001-2210. + # But sin(acos(x_er/r_er)) = sqrt(r_er^2 - x_er^2)/r_er, and so sin(Θ_er)^2 = (r_er^2 - x_er^2)/r_er^2 + sin2Θer = (r_er^2 - x_er^2)/r_er^2 + + # Need to find sin(Φ_er)^2, where Φ_er = acos(y_er/sqrt(y_er^2 + z_er^2)), equation (21) from Brooks and Burley AIAA 2001-2210. + # But sin(acos(y_er/sqrt(y_er^2 + z_er^2))) = z_er/sqrt(y_er^2 + z_er^2), and so sin(Φ_er)^2 = z_er^2/(y_er_^2 + z_er^2). + sin2Φer = (z_er^2)/(y_er^2 + z_er^2) + + # Need to find 2*sin(0.5*Θ_er)^2, where Θ_er = acos(x_er/r_er), equation (21) from Brooks and Burley AIAA 2001-2210. + # But there is a half-angle identity that says sin(θ/2)^2 = 0.5*(1 - cos(θ)). + # So I actually want 2*sin(0.5*Θ_er)^2 = 2*0.5*(1 - cos(Θ_er)) = (1 - cos(Θ_er)). + # But I can substitute in Θ_er = acos(x_er/r_er) and get 2*sin(0.5*Θ_er)^2 = 1 - x_er/r_er. + twosin2halfΘer = 1 - x_er/r_er + + # Now just need the denominator: (1 - M_tot*cos(ξR))^4. + # M_tot is the "total" velocity from... hmm... what perspective? + # Let's see... it looks like it's suppose to be from the fluid, aka the global frame. + # The definition is Brooks and Burley AIAA 2001-2210, equation (14): + # + # V_tot = V - V_wt - V_ind + # + # where + # + # * V is the velocity due to the rotation of the blade element + # * V_wt is the wind tunnel velocity, which is positive when it goes against the motion of the blade element. + # * V_ind is "the induced velocity due to the near and far wake of the rotor," and appears to be positive in roughly the thrust direction. + # + # So if I calculate V - V_wt, that's the "actual" velocity of the blade element, i.e., the velocity of the blade element relative to the fluid far away from the blade element, since it doesn't include the induced velocity. + # That's what I usually think of as the "actual" velocity, since it's what a stationary observer would observe on a calm day. + # But when we add in the induced velocity, I think what we're finding is the velocity of the blade element relative to the nearfield velocity. + # Cool. + # But does that mean I add or subtract `se.y1dot_fluid` from `se.y1dot`? + # Well, let's think about that. + # First, let's say I start with stuff in the blade-fixed frame. + # And let's say I'm imagining that, from the global frame, I'm assuming the + # blade element is moving in the positive x direction, initially aligned + # with the y axis + # So I think all I need to do is just use se.y1dot_fluid + se.y1dot. + # Now, cos(ξ_r) is defined by equation (18) in Brooks and Burley AIAA 2001-2210, which is the angle between the radiation vector (rv here) and the total velocity (se.y1dot here). + # But I can simplify that by just finding the unit radiation vector, then dotting that with the velocity vector, and dividing by c0. + + # Unit radiation vector. + r_uvec = rv./r_er + # For the BPM directivity function, the velocity/Mach number doesn't include induction. + Vtotal = se.y1dot + # Mach number vectory in the direction of the radiation vector. + Mtotcosξr = dot_cs_safe(Vtotal, r_uvec)/se.c0 + + # Convective amplification factor for the low-freqency directivity function. + conv_amp_l = 1/(1 - Mtotcosξr)^4 + + # The BPM high-frequency convective amplification factor is a bit different. + # It has a factor (M - M_c)*cos(Θ_er), which, in the more general coordinate system of Brooks & Burley would be -(M - M_c)*cos(ξ_r). + # So, the `M` is the speed of the blade element without induction, and `M_c` is the velocity of the blade element including induction. + # So `M_c = se.y1dot - se.y1dot_fluid` and then `M - M_c = se.y1dot - (se.y1dot - se.y1dot_fluid) = se.y1dot_fluid. + # And so what we'd want to do is this: + M_minus_M_ccosξr = dot_cs_safe(se.y1dot_fluid, r_uvec)/se.c0 + conv_amp_h = 1/((1 - Mtotcosξr)*(1 - M_minus_M_ccosξr)^2) + + # Now I can finally find the directivity function! + # Equation (B2) from the BPM report. + Dl = (sin2Θer*sin2Φer)*conv_amp_l + + # Now I can finally find the directivity function! + # Equation (B1) from the BPM report. + Dh = (twosin2halfΘer*sin2Φer)*conv_amp_h + + return r_er, Dl, Dh +end + +function angle_of_attack(se::AbstractBroadbandSourceElement) + # Find the total velocity of the fluid from the perspective of the blade element, which is just the total velocity of the blade element from the perspective of the fluid with the sign switched. + # Vtotal = -(se.y1dot - se.y1dot_fluid) + Vtotal = se.y1dot_fluid - se.y1dot + + # To get the angle of attack, I need to find the components of the velocity in the chordwise direction, and the direction normal to both the chord and span. + # So, first need to get a vector normal to both the chord and span, pointing from pressure side to suction side. + normal_uvec_tmp = ifelse(se.chord_cross_span_to_get_top_uvec, + cross(se.chord_uvec, se.span_uvec), + cross(se.span_uvec, se.chord_uvec)) + normal_uvec = normal_uvec_tmp ./ norm_cs_safe(normal_uvec_tmp) + + # Now get the component of velocity in the chord_uvec and normal_uvec directions. + V_chordwise = dot_cs_safe(Vtotal, se.chord_uvec) + V_normal = dot_cs_safe(Vtotal, normal_uvec) + + # Now we can find the angle of attack. + alphastar = atan_cs_safe(V_normal, V_chordwise) + # alphastar = atan(V_normal, V_chordwise) + + return alphastar +end + +function speed_normal_to_span(se::AbstractBroadbandSourceElement{TDirect,true}) where {TDirect} + # Find the total velocity of the fluid including induction, from the perspective of the blade element, which is just the total velocity of the blade element from the perspective of the fluid with the sign switched. + Vtotal = se.y1dot_fluid - se.y1dot + # Find the component of the velocity in the direction of the span. + Vspan = dot_cs_safe(Vtotal, se.span_uvec)*se.span_uvec + # Subtract that from the total velocity to get the velocity normal to the span, then get the norm for the speed normal to span. + return norm_cs_safe(Vtotal - Vspan) +end + +function speed_normal_to_span(se::AbstractBroadbandSourceElement{TDirect,false}) where {TDirect} + # Find the total velocity of the fluid, not including induction, from the perspective of the blade element, which is just the total velocity of the blade element from the perspective of the fluid with the sign switched. + Vtotal = -se.y1dot + # Find the component of the velocity in the direction of the span. + Vspan = dot_cs_safe(Vtotal, se.span_uvec)*se.span_uvec + # Subtract that from the total velocity to get the velocity normal to the span, then get the norm for the speed normal to span. + return norm_cs_safe(Vtotal - Vspan) +end + +function noise(se::AbstractBroadbandSourceElement, obs::AbstractAcousticObserver, freqs::AcousticMetrics.AbstractProportionalBands{3, :center}) + t_obs = adv_time(se, obs) + return noise(se, obs, t_obs, freqs) +end + diff --git a/src/abstract_source_elements.jl b/src/abstract_source_elements.jl new file mode 100644 index 00000000..35dbddd9 --- /dev/null +++ b/src/abstract_source_elements.jl @@ -0,0 +1,36 @@ +abstract type AbstractCompactSourceElement end + +""" + velocity(se::AbstractCompactSourceElement) + +Return the current velocity of `se`. +""" +@inline velocity(se::AbstractCompactSourceElement) = se.y1dot + +""" + source_time(se::AbstractCompactSourceElement) + +Return the source time of `se`. +""" +@inline source_time(se::AbstractCompactSourceElement) = se.τ + +""" + orientation(se::AbstractCompactSourceElement) + +Return a length-3 unit vector indicating the spanwise orientation of `se`. +""" +@inline orientation(se::AbstractCompactSourceElement) = se.span_uvec + +""" + position(se::AbstractCompactSourceElement) + +Return a length-3 vector indicating the position of `se`. +""" +@inline position(se::AbstractCompactSourceElement) = se.y0dot + +""" + speed_of_sound(se::AbstractCompactSourceElement) + +Return the ambient speed of sound associated with `se`. +""" +@inline speed_of_sound(se) = se.c0 diff --git a/src/advance_time.jl b/src/advance_time.jl new file mode 100644 index 00000000..c085d3be --- /dev/null +++ b/src/advance_time.jl @@ -0,0 +1,47 @@ +""" + adv_time(se::AbstractCompactSourceElement, obs::AbstractAcousticObserver) + +Calculate the time an acoustic wave emmited by source `se` at time `se.τ` is +recieved by observer `obs`. +""" +adv_time(se::AbstractCompactSourceElement, obs::AbstractAcousticObserver) + +function adv_time(se::AbstractCompactSourceElement, obs::StationaryAcousticObserver) + τ = source_time(se) + rv = obs(τ) .- position(se) + r = norm_cs_safe(rv) + t = τ + r/speed_of_sound(se) + return t +end + +function adv_time(se::AbstractCompactSourceElement, obs::ConstVelocityAcousticObserver) + # Source time of the source element. + τ = source_time(se) + + # Ambient speed of sound of the source element. + c0 = speed_of_sound(se) + + # Location of the observer at the source time. + x = obs(τ) + + # Vector from the source to the observer at the source time. + rv = x .- position(se) + + # Distance from the source to the observer at the source time. + r = norm_cs_safe(rv) + + # Speed of the observer divided by speed of sound. + Mo = norm_cs_safe(obs.v)/c0 + + # Unit vector pointing from the source to the observer. + rhat = rv/r + + # Velocity of observer dotted with rhat at the source time. + Mor = dot_cs_safe(obs.v, rhat)/c0 + + # Now get the observer time. + t = τ + r/c0*((Mor + sqrt(Mor^2 + 1 - Mo^2))/(1 - Mo^2)) + + return t +end + diff --git a/src/boundary_layers.jl b/src/boundary_layers.jl new file mode 100644 index 00000000..4eb7dede --- /dev/null +++ b/src/boundary_layers.jl @@ -0,0 +1,233 @@ +abstract type AbstractBoundaryLayer end + +struct TrippedN0012BoundaryLayer{TAlphaStall} <: AbstractBoundaryLayer + alphastar0::TAlphaStall +end + +TrippedN0012BoundaryLayer() = TrippedN0012BoundaryLayer(12.5*pi/180) + +struct UntrippedN0012BoundaryLayer{TAlphaStall} <: AbstractBoundaryLayer + alphastar0::TAlphaStall +end + +UntrippedN0012BoundaryLayer() = UntrippedN0012BoundaryLayer(12.5*pi/180) + +struct ITrip1N0012BoundaryLayer{TAlphaStall} <: AbstractBoundaryLayer + alphastar0::TAlphaStall +end + +ITrip1N0012BoundaryLayer() = ITrip1N0012BoundaryLayer(12.5*pi/180) + +struct ITrip2N0012BoundaryLayer{TAlphaStall} <: AbstractBoundaryLayer + alphastar0::TAlphaStall +end + +ITrip2N0012BoundaryLayer() = ITrip2N0012BoundaryLayer(12.5*pi/180) + +struct ITrip3N0012BoundaryLayer{TAlphaStall} <: AbstractBoundaryLayer + alphastar0::TAlphaStall +end + +ITrip3N0012BoundaryLayer() = ITrip3N0012BoundaryLayer(12.5*pi/180) + +alpha_stall(bl::AbstractBoundaryLayer, Re_c) = bl.alphastar0 +alpha_zerolift(bl::AbstractBoundaryLayer) = zero(bl.alphastar0) +is_top_suction(bl::AbstractBoundaryLayer, alphastar) = alphastar >= alpha_zerolift(bl) + +function bl_thickness_0(::TrippedN0012BoundaryLayer, Re_c) + # Equation 2 from the BPM report. + logRe_c = log10(Re_c) + return 10^(1.892 - 0.9045*logRe_c + 0.0596*logRe_c^2) +end + +function disp_thickness_0(::Union{TrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer}, Re_c) + # Equation 3 from the BPM report. + if Re_c ≤ 0.3e6 + return 0.0601*Re_c^(-0.114) + else + logRe_c = log10(Re_c) + return 10^(3.411 - 1.5397*logRe_c + 0.1059*logRe_c^2) + end +end + +function disp_thickness_0(::ITrip2N0012BoundaryLayer, Re_c) + # Equation 3 from the BPM report, multiplied by 0.6 as is done in the code listing in the BPM report appendix. + if Re_c ≤ 0.3e6 + return 0.6*0.0601*Re_c^(-0.114) + else + logRe_c = log10(Re_c) + return 0.6*10^(3.411 - 1.5397*logRe_c + 0.1059*logRe_c^2) + end +end + +function bl_thickness_0(::Union{UntrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer,ITrip3N0012BoundaryLayer}, Re_c) + # Equation 5 from the BPM report. + logRe_c = log10(Re_c) + return 10^(1.6569 - 0.9045*logRe_c + 0.0596*logRe_c^2) +end + +function bl_thickness_0(::ITrip2N0012BoundaryLayer, Re_c) + # Equation 5 from the BPM report, multiplied by 0.6 as is done in the code listing in the BPM report appendix. + logRe_c = log10(Re_c) + return 0.6*10^(1.6569 - 0.9045*logRe_c + 0.0596*logRe_c^2) +end + +function disp_thickness_0(::Union{UntrippedN0012BoundaryLayer,ITrip3N0012BoundaryLayer}, Re_c) + # Equation 6 from the BPM report. + logRe_c = log10(Re_c) + return 10^(3.0187 - 1.5397*logRe_c + 0.1059*logRe_c^2) +end + +function _bl_thickness_p(::Union{TrippedN0012BoundaryLayer,UntrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer,ITrip2N0012BoundaryLayer,ITrip3N0012BoundaryLayer}, alphastar) + # Equation 8 from the BPM report. + alphastar_deg = alphastar*180/pi + return 10^(-0.04175*alphastar_deg + 0.00106*alphastar_deg^2) +end + +function _disp_thickness_p(::Union{TrippedN0012BoundaryLayer,UntrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer,ITrip2N0012BoundaryLayer}, alphastar) + # Equation 9 from the BPM report. + alphastar_deg = alphastar*180/pi + return 10^(-0.0432*alphastar_deg + 0.00113*alphastar_deg^2) +end + +function _disp_thickness_p(::ITrip3N0012BoundaryLayer, alphastar) + # Equation 9 from the BPM report, multiplied by 1.48 as is done in the BPM report appendix. + alphastar_deg = alphastar*180/pi + return 1.48*10^(-0.0432*alphastar_deg + 0.00113*alphastar_deg^2) +end + +function _bl_thickness_s(::TrippedN0012BoundaryLayer, alphastar) + T = typeof(alphastar) + # Equation 11 from the BPM report. + # The report defines the suction-side boundary layer parameters for alphastar values from 0° to 25°. + # But what about negative angles of attack? + # The NACA0012 airfoil is symmetric, but if the angle of attack goes negative, I guess the pressure and suction sides would switch. + # So I'll check that the angle of attack is always positive here. + alphastar_deg = alphastar*180/pi + if alphastar_deg < 0 + return T(NaN) + elseif alphastar_deg ≤ 5 + return 10^(0.0311*alphastar_deg) + elseif alphastar_deg ≤ 12.5 + return 0.3468*10^(0.1231*alphastar_deg) + elseif alphastar_deg ≤ 25 + return 5.718*10^(0.0258*alphastar_deg) + else + # What should I do for angles of attack greater than 25°? + # Maybe just keep the same thickness? + return 5.718*10^(0.0258*25*pi/180)*one(T) + end +end + +function _disp_thickness_s(::Union{TrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer}, alphastar) + T = typeof(alphastar) + # Equation 12 from the BPM report. + alphastar_deg = alphastar*180/pi + if alphastar_deg < 0 + # throw(DomainError(alphastar, "negative alphastar argument invalid")) + return T(NaN) + elseif alphastar_deg ≤ 5 + return 10^(0.0679*alphastar_deg) + elseif alphastar_deg ≤ 12.5 + return 0.381*10^(0.1516*alphastar_deg) + elseif alphastar_deg ≤ 25 + return 14.296*10^(0.0258*alphastar_deg) + else + # What should I do for angles of attack greater than 25°? + # Maybe just keep the same thickness? + return 14.296*10^(0.0258*25)*one(T) + end +end + +function _bl_thickness_s(::Union{UntrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer,ITrip2N0012BoundaryLayer,ITrip3N0012BoundaryLayer}, alphastar) + T = typeof(alphastar) + # Equation 14 from the BPM report. + alphastar_deg = alphastar*180/pi + if alphastar_deg < 0 + # throw(DomainError(alphastar, "negative alphastar argument invalid")) + return T(NaN) + elseif alphastar_deg ≤ 7.5 + return 10^(0.03114*alphastar_deg) + elseif alphastar_deg ≤ 12.5 + return 0.0303*10^(0.2336*alphastar_deg) + elseif alphastar_deg ≤ 25 + return 12*10^(0.0258*alphastar_deg) + else + # What should I do for angles of attack greater than 25°? + # Maybe just keep the same thickness? + return 12*10^(0.0258*25*pi/180)*one(T) + end +end + +function _disp_thickness_s(::Union{UntrippedN0012BoundaryLayer,ITrip2N0012BoundaryLayer,ITrip3N0012BoundaryLayer}, alphastar) + T = typeof(alphastar) + # Equation 15 from the BPM report. + alphastar_deg = alphastar*180/pi + if alphastar_deg < 0 + # throw(DomainError(alphastar, "negative alphastar argument invalid")) + return T(NaN) + elseif alphastar_deg ≤ 7.5 + return 10^(0.0679*alphastar_deg) + elseif alphastar_deg ≤ 12.5 + return 0.0162*10^(0.3066*alphastar_deg) + elseif alphastar_deg ≤ 25 + return 52.42*10^(0.0258*alphastar_deg) + else + # What should I do for angles of attack greater than 25°? + # Maybe just keep the same thickness? + return 52.42*10^(0.0258*25)*one(T) + end +end + +function _disp_thickness_top(bl::Union{TrippedN0012BoundaryLayer,UntrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer,ITrip2N0012BoundaryLayer,ITrip3N0012BoundaryLayer}, alphastar) + # Switch sign on alphastar and call the "opposite" `disp_thickness_*` routine if the top surface isn't the suction surface. + return ifelse(is_top_suction(bl, alphastar), _disp_thickness_s(bl, alphastar), _disp_thickness_p(bl, -alphastar)) +end + +function _disp_thickness_bot(bl::Union{TrippedN0012BoundaryLayer,UntrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer,ITrip2N0012BoundaryLayer,ITrip3N0012BoundaryLayer}, alphastar) + return ifelse(is_top_suction(bl, alphastar), _disp_thickness_p(bl, alphastar), _disp_thickness_s(bl, -alphastar)) +end + +function _bl_thickness_top(bl::Union{TrippedN0012BoundaryLayer,UntrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer,ITrip2N0012BoundaryLayer,ITrip3N0012BoundaryLayer}, alphastar) + # Switch sign on alphastar and call the "opposite" `disp_thickness_*` routine if the top surface isn't the suction surface. + return ifelse(is_top_suction(bl, alphastar), _bl_thickness_s(bl, alphastar), _bl_thickness_p(bl, -alphastar)) +end + +function _bl_thickness_bot(bl::Union{TrippedN0012BoundaryLayer,UntrippedN0012BoundaryLayer,ITrip1N0012BoundaryLayer,ITrip2N0012BoundaryLayer,ITrip3N0012BoundaryLayer}, alphastar) + return ifelse(is_top_suction(bl, alphastar), _bl_thickness_p(bl, alphastar), _bl_thickness_s(bl, -alphastar)) +end + +function disp_thickness_bot(bl::AbstractBoundaryLayer, Re_c, alphastar) + # (δ^*_p/δ^*_0)*(δ^*_0/c) + return _disp_thickness_bot(bl, alphastar)*disp_thickness_0(bl, Re_c) +end + +function disp_thickness_top(bl::AbstractBoundaryLayer, Re_c, alphastar) + return _disp_thickness_top(bl, alphastar)*disp_thickness_0(bl, Re_c) +end + +function disp_thickness_s(bl::AbstractBoundaryLayer, Re_c, alphastar) + return ifelse(is_top_suction(bl, alphastar), disp_thickness_top(bl, Re_c, alphastar), disp_thickness_bot(bl, Re_c, alphastar)) +end + +function disp_thickness_p(bl::AbstractBoundaryLayer, Re_c, alphastar) + return ifelse(is_top_suction(bl, alphastar), disp_thickness_bot(bl, Re_c, alphastar), disp_thickness_top(bl, Re_c, alphastar)) +end + +function bl_thickness_bot(bl::AbstractBoundaryLayer, Re_c, alphastar) + # (δ_p/δ_0)*(δ_0/c) + return _bl_thickness_bot(bl, alphastar)*bl_thickness_0(bl, Re_c) +end + +function bl_thickness_top(bl::AbstractBoundaryLayer, Re_c, alphastar) + return _bl_thickness_top(bl, alphastar)*bl_thickness_0(bl, Re_c) +end + +function bl_thickness_s(bl::AbstractBoundaryLayer, Re_c, alphastar) + return ifelse(is_top_suction(bl, alphastar), bl_thickness_top(bl, Re_c, alphastar), bl_thickness_bot(bl, Re_c, alphastar)) +end + +function bl_thickness_p(bl::AbstractBoundaryLayer, Re_c, alphastar) + return ifelse(is_top_suction(bl, alphastar), bl_thickness_bot(bl, Re_c, alphastar), bl_thickness_top(bl, Re_c, alphastar)) +end + diff --git a/src/bpm_test_utils.jl b/src/bpm_test_utils.jl new file mode 100644 index 00000000..99fce5b8 --- /dev/null +++ b/src/bpm_test_utils.jl @@ -0,0 +1,320 @@ +function calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, alphastar, bl; do_lblvs=false, do_tip_vortex=false, blade_tip=nothing, do_tebvs=false, h=nothing, Psi=nothing, use_Ualpha=false) + if do_tebvs + if do_tip_vortex + combined_calc = :with_tip + else + combined_calc = :no_tip + end + else + combined_calc = :none + end + + M_c = 0.8*M + # How we're going to set this up: + # + # * Source starts at the origin, moving in the -x direction with velocity U. + # + c0 = U/M + # Hmm... how about the location stuff? + # I want the source element at the origin, so I guess that's r = 0, and θ doesn't matter. + r = 0.0 + θ = 0.0 + # Hmm... what about the twist? + # I want the chord line to be at an angle `alphastar` with the negative-x axis. + # But how does it work "by default"? + # Let's look at the doc strings. + # OK, so, if `twist_about_positive_y` is true, then initially the unit vector pointing from leading edge to trailing edge will be pointed in the negative z direction, then rotated about the positive y axis by an amount φ. + # I want the blade to be aligned with the x axis, with the chord unit vector in the positive x axis direction. + twist_about_positive_y = true + # So then I think I want to rotate it by this much: + ϕ = 3*pi/2 + alphastar + # ϕ = 3*pi/2 + # OK, so now, how about the velocities? + # Well, we're starting out in the blade fixed-frame, so the velocity should include everything, including induction. + # So, from the perspective of the source element, the total velocity is `M_c*c0` in the positive x direction. + # No velocity in the other directions. + vn = M_c*c0 + vr = 0.0 + vc = 0.0 + # Ah, now I've decided that's not right. + # I want the chord line to be aligned with the x axis, so I'll need to rotate the velocity to take into account the angle of attack. + # So that means the normal velocity would be + # vn = M_c*c0*cos(alphastar) + # vr = 0.0 + # vc = M_c*c0*sin(alphastar) + # We're starting at τ = 0, and the time step doesn't matter yet. + τ = 0.0 + Δτ = 1.0 + if use_Ualpha + se_tblte = AcousticAnalogies.TBLTESourceElement{AcousticAnalogies.BPMDirectivity,false,AcousticAnalogies.NoMachCorrection,true}(c0, nu, r, θ, L, chord, ϕ, M_c*c0, alphastar, τ, Δτ, bl, twist_about_positive_y) + if do_lblvs + se_lblvs = AcousticAnalogies.LBLVSSourceElement{AcousticAnalogies.BPMDirectivity,false,true}(c0, nu, r, θ, L, chord, ϕ, M_c*c0, alphastar, τ, Δτ, bl, twist_about_positive_y) + end + if do_tip_vortex + se_tip = AcousticAnalogies.TipVortexSourceElement{AcousticAnalogies.BPMDirectivity,false,true}(c0, r, θ, L, chord, ϕ, M_c*c0, alphastar, τ, Δτ, bl, blade_tip, twist_about_positive_y) + end + if do_tebvs + se_tebvs = AcousticAnalogies.TEBVSSourceElement{AcousticAnalogies.BPMDirectivity,false,true}(c0, nu, r, θ, L, chord, ϕ, h, Psi, M_c*c0, alphastar, τ, Δτ, bl, twist_about_positive_y) + end + + if combined_calc == :no_tip + se_combined = AcousticAnalogies.CombinedNoTipBroadbandSourceElement{AcousticAnalogies.BPMDirectivity,false,AcousticAnalogies.NoMachCorrection,true}(c0, nu, r, θ, L, chord, ϕ, h, Psi, M_c*c0, alphastar, τ, Δτ, bl, twist_about_positive_y) + elseif combined_calc == :with_tip + se_combined = AcousticAnalogies.CombinedWithTipBroadbandSourceElement{AcousticAnalogies.BPMDirectivity,false,AcousticAnalogies.NoMachCorrection,true}(c0, nu, r, θ, L, chord, ϕ, h, Psi, M_c*c0, alphastar, τ, Δτ, bl, blade_tip, twist_about_positive_y) + end + else + se_tblte = AcousticAnalogies.TBLTESourceElement{AcousticAnalogies.BPMDirectivity,false,AcousticAnalogies.NoMachCorrection,true}(c0, nu, r, θ, L, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + if do_lblvs + se_lblvs = AcousticAnalogies.LBLVSSourceElement{AcousticAnalogies.BPMDirectivity,false,true}(c0, nu, r, θ, L, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + end + if do_tip_vortex + se_tip = AcousticAnalogies.TipVortexSourceElement{AcousticAnalogies.BPMDirectivity,false,true}(c0, r, θ, L, chord, ϕ, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + end + if do_tebvs + se_tebvs = AcousticAnalogies.TEBVSSourceElement{AcousticAnalogies.BPMDirectivity,false,true}(c0, nu, r, θ, L, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + end + + if combined_calc == :no_tip + se_combined = AcousticAnalogies.CombinedNoTipBroadbandSourceElement{AcousticAnalogies.BPMDirectivity,false,AcousticAnalogies.NoMachCorrection,true}(c0, nu, r, θ, L, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + elseif combined_calc == :with_tip + se_combined = AcousticAnalogies.CombinedWithTipBroadbandSourceElement{AcousticAnalogies.BPMDirectivity,false,AcousticAnalogies.NoMachCorrection,true}(c0, nu, r, θ, L, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + end + end + + # Let's check that things are what we expect. + @assert se_tblte.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_tblte.y1dot ≈ [0.0, 0.0, 0.0] + @assert se_tblte.y1dot_fluid ≈ [M_c*c0, 0.0, 0.0] + # @assert se_tblte.y1dot_fluid ≈ [M_c*c0*cos(alphastar), 0.0, M_c*c0*sin(alphastar)] + @assert se_tblte.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_tblte.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_tblte.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_tblte), alphastar; atol=1e-12) + + if do_lblvs + # Let's check that things are what we expect. + @assert se_lblvs.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_lblvs.y1dot ≈ [0.0, 0.0, 0.0] + @assert se_lblvs.y1dot_fluid ≈ [M_c*c0, 0.0, 0.0] + # @assert se_lblvs.y1dot_fluid ≈ [M_c*c0*cos(alphastar), 0.0, M_c*c0*sin(alphastar)] + @assert se_lblvs.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_lblvs.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_lblvs.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_lblvs), alphastar; atol=1e-12) + end + + if do_tip_vortex + # Let's check that things are what we expect. + @assert se_tip.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_tip.y1dot ≈ [0.0, 0.0, 0.0] + @assert se_tip.y1dot_fluid ≈ [M_c*c0, 0.0, 0.0] + # @assert se_tip.y1dot_fluid ≈ [M_c*c0*cos(alphastar), 0.0, M_c*c0*sin(alphastar)] + @assert se_tip.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_tip.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_tip.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_tip), alphastar; atol=1e-12) + end + + if do_tebvs + # Let's check that things are what we expect. + @assert se_tebvs.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_tebvs.y1dot ≈ [0.0, 0.0, 0.0] + @assert se_tebvs.y1dot_fluid ≈ [M_c*c0, 0.0, 0.0] + # @assert se_tebvs.y1dot_fluid ≈ [M_c*c0*cos(alphastar), 0.0, M_c*c0*sin(alphastar)] + @assert se_tebvs.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_tebvs.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_tebvs.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_tebvs), alphastar; atol=1e-12) + end + + if combined_calc != :none + # Let's check that things are what we expect. + @assert se_combined.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_combined.y1dot ≈ [0.0, 0.0, 0.0] + @assert se_combined.y1dot_fluid ≈ [M_c*c0, 0.0, 0.0] + # @assert se_combined.y1dot_fluid ≈ [M_c*c0*cos(alphastar), 0.0, M_c*c0*sin(alphastar)] + @assert se_combined.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_combined.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_combined.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_combined), alphastar; atol=1e-12) + end + + # Now we want to transform the source element into the global frame, which just means we make it move with speed `U` in the negative x direction. + trans = ConstantVelocityTransformation(τ, [0.0, 0.0, 0.0], [-U, 0.0, 0.0]) + # No, that's not right, I want it to move in the direction of the velocity, which isn't aligned with the x axis any more. + # trans = ConstantVelocityTransformation(τ, [0.0, 0.0, 0.0], [-U*cos(alphastar), 0.0, -U*sin(alphastar)]) + se_tblte_global = trans(se_tblte) + if do_lblvs + se_lblvs_global = trans(se_lblvs) + end + if do_tip_vortex + se_tip_global = trans(se_tip) + end + if do_tebvs + se_tebvs_global = trans(se_tebvs) + end + if combined_calc != :none + se_combined_global = trans(se_combined) + end + + # Will that change the angle of attack? + # Originally the total velocity was `Vtotal = se_tblte.y1dot_fluid - se_tblte.y1dot = [M_c*c0, 0, 0]`, and now it will be `[M_c*c0 - U, 0, 0] - [-U, 0, 0] = [M_c*c0, 0, 0]`. + # So nope, which is good. :-) + # Oh, and I'm only changing the magnitude of the velocity, not the direction. + @assert se_tblte_global.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_tblte_global.y1dot ≈ [-U, 0.0, 0.0] + # @assert se_tblte_global.y1dot ≈ [-U*cos(alphastar), 0.0, -U*sin(alphastar)] + @assert se_tblte_global.y1dot_fluid ≈ [M_c*c0 - U, 0.0, 0.0] + # @assert se_tblte_global.y1dot_fluid ≈ [(M_c*c0 - U)*cos(alphastar), 0.0, (M_c*c0 - U)*sin(alphastar)] + @assert se_tblte_global.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_tblte_global.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_tblte_global.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_tblte_global), alphastar; atol=1e-12) + + if do_lblvs + @assert se_lblvs_global.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_lblvs_global.y1dot ≈ [-U, 0.0, 0.0] + # @assert se_lblvs_global.y1dot ≈ [-U*cos(alphastar), 0.0, -U*sin(alphastar)] + @assert se_lblvs_global.y1dot_fluid ≈ [M_c*c0 - U, 0.0, 0.0] + # @assert se_lblvs_global.y1dot_fluid ≈ [(M_c*c0 - U)*cos(alphastar), 0.0, (M_c*c0 - U)*sin(alphastar)] + @assert se_lblvs_global.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_lblvs_global.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_lblvs_global.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_lblvs_global), alphastar; atol=1e-12) + end + + if do_tip_vortex + @assert se_tip_global.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_tip_global.y1dot ≈ [-U, 0.0, 0.0] + # @assert se_tip_global.y1dot ≈ [-U*cos(alphastar), 0.0, -U*sin(alphastar)] + @assert se_tip_global.y1dot_fluid ≈ [M_c*c0 - U, 0.0, 0.0] + # @assert se_tip_global.y1dot_fluid ≈ [(M_c*c0 - U)*cos(alphastar), 0.0, (M_c*c0 - U)*sin(alphastar)] + @assert se_tip_global.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_tip_global.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_tip_global.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_tip_global), alphastar; atol=1e-12) + end + + if do_tebvs + @assert se_tebvs_global.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_tebvs_global.y1dot ≈ [-U, 0.0, 0.0] + # @assert se_tebvs_global.y1dot ≈ [-U*cos(alphastar), 0.0, -U*sin(alphastar)] + @assert se_tebvs_global.y1dot_fluid ≈ [M_c*c0 - U, 0.0, 0.0] + # @assert se_tebvs_global.y1dot_fluid ≈ [(M_c*c0 - U)*cos(alphastar), 0.0, (M_c*c0 - U)*sin(alphastar)] + @assert se_tebvs_global.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_tebvs_global.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_tebvs_global.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_tebvs_global), alphastar; atol=1e-12) + end + + if combined_calc != :none + @assert se_combined_global.y0dot ≈ [0.0, 0.0, 0.0] + @assert se_combined_global.y1dot ≈ [-U, 0.0, 0.0] + # @assert se_combined_global.y1dot ≈ [-U*cos(alphastar), 0.0, -U*sin(alphastar)] + @assert se_combined_global.y1dot_fluid ≈ [M_c*c0 - U, 0.0, 0.0] + # @assert se_combined_global.y1dot_fluid ≈ [(M_c*c0 - U)*cos(alphastar), 0.0, (M_c*c0 - U)*sin(alphastar)] + @assert se_combined_global.span_uvec ≈ [0.0, 1.0, 0.0] + @assert se_combined_global.chord_uvec ≈ [cos(alphastar), 0.0, -sin(alphastar)] + # @assert se_combined_global.chord_uvec ≈ [1.0, 0.0, 0.0] + @assert isapprox(AcousticAnalogies.angle_of_attack(se_combined_global), alphastar; atol=1e-12) + end + + # If the angle of attack is negative, then the pressure and suction sides of the airfoil section switch, and so the coordinate system does too. + if (alphastar - AcousticAnalogies.alpha_zerolift(bl)) < 0 + Φ_e *= -1 + end + + # What about the observer? + # That's the tricky part. + # We know the final position of the observer is this. + x_obs_final = [r_e*cos(θ_e), r_e*sin(θ_e)*cos(Φ_e), r_e*sin(θ_e)*sin(Φ_e)] + # This polar coordinate system is actually defined from the perspective of the fluid velocity, not the source element chord direction. + # So need to take into acount that. + # x_obs_final = [r_e*cos(θ_e)*cos(alphastar), r_e*sin(θ_e)*cos(Φ_e), r_e*sin(θ_e)*sin(Φ_e)*sin(alphastar)] + + # And we can use the distance from the initial position of the source to the final position of the observer to get the distance the acoustic wave travels, and then the final time. + t_final = τ + norm(x_obs_final - se_tblte_global.y0dot)/c0 + + # And then we can use that to get the initial position of the observer, which is moving with the same velocity as the source. + x_obs_initial = x_obs_final - se_tblte_global.y1dot*(t_final - τ) + + # So now I should be able to create the observer object thingy. + obs = AcousticAnalogies.ConstVelocityAcousticObserver(τ, x_obs_initial, se_tblte_global.y1dot) + + # And now I should check if I get the expected final time. + @assert AcousticAnalogies.adv_time(se_tblte_global, obs) ≈ t_final + if do_lblvs + @assert AcousticAnalogies.adv_time(se_lblvs_global, obs) ≈ t_final + end + if do_tip_vortex + @assert AcousticAnalogies.adv_time(se_tip_global, obs) ≈ t_final + end + if do_tebvs + @assert AcousticAnalogies.adv_time(se_tebvs_global, obs) ≈ t_final + end + if combined_calc != :none + @assert AcousticAnalogies.adv_time(se_combined_global, obs) ≈ t_final + end + + # So now I should be able to do a noise prediction. + freqs = AcousticMetrics.ExactThirdOctaveCenterBands(0.2, 20e3) + tblte_out = AcousticAnalogies.noise(se_tblte_global, obs, freqs) + tblte_s_out = AcousticAnalogies.pbs_suction(tblte_out) + tblte_p_out = AcousticAnalogies.pbs_pressure(tblte_out) + tblte_alpha_out = AcousticAnalogies.pbs_alpha(tblte_out) + SPL_s_jl = 10.0 .* log10.(tblte_s_out./((20e-6)^2)) + SPL_p_jl = 10.0 .* log10.(tblte_p_out./((20e-6)^2)) + SPL_alpha_jl = 10.0 .* log10.(tblte_alpha_out./((20e-6)^2)) + if do_lblvs + lblvs_out = AcousticAnalogies.noise(se_lblvs_global, obs, freqs) + SPL_lbl_vs = 10.0 .* log10.(lblvs_out./((20e-6)^2)) + end + if do_tip_vortex + tip_out = AcousticAnalogies.noise(se_tip_global, obs, freqs) + SPL_tip = 10.0 .* log10.(tip_out./((20e-6)^2)) + end + if do_tebvs + tebvs_out = AcousticAnalogies.noise(se_tebvs_global, obs, freqs) + SPL_teb = 10.0 .* log10.(tebvs_out./((20e-6)^2)) + end + if combined_calc != :none + combined_out = AcousticAnalogies.noise(se_combined_global, obs, freqs) + end + + @assert AcousticAnalogies.doppler(tblte_out) ≈ 1 + if do_lblvs + @assert AcousticAnalogies.doppler(lblvs_out) ≈ 1 + end + if do_tip_vortex + @assert AcousticAnalogies.doppler(tip_out) ≈ 1 + end + if do_tebvs + @assert AcousticAnalogies.doppler(tebvs_out) ≈ 1 + end + if combined_calc != :none + @assert AcousticAnalogies.doppler(combined_out) ≈ 1 + end + + if combined_calc in (:no_tip, :with_tip) + @assert all(pbs_suction(combined_out) .≈ tblte_s_out) + @assert all(pbs_pressure(combined_out) .≈ tblte_p_out) + @assert all(pbs_alpha(combined_out) .≈ tblte_alpha_out) + @assert all(pbs_teb(combined_out) .≈ tebvs_out) + end + if combined_calc in (:with_tip,) + @assert all(pbs_tip(combined_out) .≈ tip_out) + end + + res = (freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl) + if do_lblvs + res = (res..., SPL_lbl_vs) + end + if do_tip_vortex + res = (res..., SPL_tip) + end + if do_tebvs + res = (res..., SPL_teb) + end + return res +end + diff --git a/src/ccblade_helpers.jl b/src/ccblade_helpers.jl index 1588077f..6e204e46 100644 --- a/src/ccblade_helpers.jl +++ b/src/ccblade_helpers.jl @@ -1,5 +1,77 @@ +import FillArrays: getindex_value + +# Normal implementation is this from FillArrays.jl: +# +# @inline getindex_value(F::Fill) = F.value +# +# But that breaks with CCBlade. +# Why? +# Because, since a FillArrays.Fill <: AbstractArray, it calls this: +# +# function Base.getproperty(obj::AbstractVector{<:Section}, sym::Symbol) +# return getfield.(obj, sym) +# end +# +# which eventually calls FillArrays.getindex_value again, leading to recursion and a stack overflow. +# +# This is type piracy :-(. +# But it may also be type piracy to extend Base.getproperty in CCBlade.jl, since CCBlade.jl doesn't own Base.getproperty or AbstractVector. +@inline getindex_value(F::Fill{<:Union{CCBlade.Section,CCBlade.OperatingPoint,CCBlade.Outputs}}) = getfield(F, :value) + +# Normal implementation is this from FillArrays.jl: +# +# @inline axes(F::Fill) = F.axes +# +# But that hits +# +# function Base.getproperty(obj::AbstractVector{<:Section}, sym::Symbol) +# return getfield.(obj, sym) +# end +# +# from CCBlade. +# This is type piracy :-(. +# But it may also be type piracy to extend Base.getproperty in CCBlade.jl, since CCBlade.jl doesn't own Base.getproperty or AbstractVector. +@inline Base.axes(F::Fill{<:Union{CCBlade.Section,CCBlade.OperatingPoint,CCBlade.Outputs}}) = getfield(F, :axes) + +function _standard_ccblade_transform(rotor::CCBlade.Rotor, sections::AbstractVector{<:CCBlade.Section}, ops::AbstractVector{<:CCBlade.OperatingPoint}, period, num_src_times, positive_x_rotation) + # Assume the rotor is traveling in the positive x direction, with the first + # blade aligned with the positive y axis. Rotor hub is initially at the origin. + rot_axis = @SVector [1.0, 0.0, 0.0] + blade_axis = @SVector [0.0, 1.0, 0.0] + y0_hub = @SVector [0.0, 0.0, 0.0] # m + t0 = 0.0 + + # Get the time of each time step. + dt = period/num_src_times + src_times = t0 .+ (0:num_src_times-1).*dt + + # Get transformations for each blade element. + cos_precone = cos(rotor.precone) + # r = SingleFieldStructArray(sections, Val{:r}) + # Vx = SingleFieldStructArray(ops, Val{:Vx}) + # Vy = SingleFieldStructArray(ops, Val{:Vy}) + r = mapview(:r, sections) + Vx = mapview(:Vx, ops) + Vy = mapview(:Vy, ops) + if positive_x_rotation + rot_trans = SteadyRotXTransformation.(t0, Vy./(r.*cos_precone), 0.0) # size (num_radial,) + else + rot_trans = SteadyRotXTransformation.(t0, -Vy./(r.*cos_precone), 0.0) # size (num_radial,) + end + const_vel_trans = ConstantVelocityTransformation.(t0, Ref(y0_hub), Ref(rot_axis).*Vx./cos_precone) # size (num_radial,) + + # Reshape things to get broadcasting to work. + rot_trans_rs = reshape(rot_trans, 1, :) + const_vel_trans_rs = reshape(const_vel_trans, 1, :) + + # Now get all the transformations. + trans = compose.(src_times, const_vel_trans_rs, rot_trans_rs) # size (num_times, num_radial) + + return src_times, dt, trans +end + """ - CompactSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, area_per_chord2, τ) + CompactF1ASourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, area_per_chord2, τ, positive_x_rotation=true) Construct a source element to be used with the compact form of Farassat's formulation 1A from CCBlade objects. @@ -20,8 +92,9 @@ where `y0dot` is the position of the source element. - `Δr`: length of the element. - `area_per_chord2`: cross-sectional area divided by the chord squared of the element. - `τ`: source time of the element. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. """ -function CompactSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, area_per_chord2, τ) +function CompactF1ASourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, area_per_chord2, τ, positive_x_rotation) ρ0 = op.rho c0 = op.asound r = section.r @@ -67,9 +140,22 @@ function CompactSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op # the blade would be pointed in the negative z direction. So that means the # load on the fluid would be in the positive z direction, and we don't need # to switch the sign. + + # So after all that, the takeaway is that we'll start out with a loading + # vector [-Np, 0, Tp], then rotate it about the positive z-axis by an amount + # `-precone`, then rotate it about the x axis by an amount `θ`. + + # But, what if I decide the blade is rotating around the negative x-axis? + # The normal loading will still be in the same direction. + # The precone and theta stuff can still work the same way. + # I think the only thing that would switch is the circumferential loading. fn = -Np*cpc fr = Np*spc - fc = Tp + if positive_x_rotation + fc = Tp + else + fc = -Tp + end f0dot = @SVector [fn, cθ*fr - sθ*fc, sθ*fr + cθ*fc] T = eltype(f0dot) @@ -77,25 +163,26 @@ function CompactSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op u = @SVector [spc, cpc*cθ, cpc*sθ] - return CompactSourceElement(ρ0, c0, Δr, Λ, y0dot, y1dot, y2dot, y3dot, f0dot, f1dot, τ, u) + return CompactF1ASourceElement(ρ0, c0, Δr, Λ, y0dot, y1dot, y2dot, y3dot, f0dot, f1dot, τ, u) end """ - source_elements_ccblade(rotor::CCBlade.Rotor, sections::Vector{CCBlade.Section}, ops::Vector{CCBlade.OperatingPoint}, outputs::Vector{CCBlade.Outputs}, area_per_chord2::Vector{AbstractFloat}, period, num_src_times) + f1a_source_elements_ccblade(rotor::CCBlade.Rotor, sections::Vector{CCBlade.Section}, ops::Vector{CCBlade.OperatingPoint}, outputs::Vector{CCBlade.Outputs}, area_per_chord2::Vector{AbstractFloat}, period, num_src_times, positive_x_rotation) -Construct and return an array of CompactSourceElement objects from CCBlade structs. +Construct and return an array of CompactF1ASourceElement objects from CCBlade structs. # Arguments -- `rotor`: CCBlade rotor object.precone). +- `rotor`: CCBlade rotor object. - `sections`: `Vector` of CCBlade section object. - `ops`: `Vector` of CCBlade operating point. - `outputs`::`Vector` of CCBlade output objects. - `area_per_chord2`: cross-sectional area divided by the chord squared of the element at each CCBlade.section. Should be a Vector{AbstractFloat}, same length as `sections`, `ops`, `outputs`. - `period`: length of the source time over which the returned source elements will evaluated. - `num_src_times`: number of source times. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. """ -function source_elements_ccblade(rotor, sections, ops, outputs, area_per_chord2, period, num_src_times) +function f1a_source_elements_ccblade(rotor, sections, ops, outputs, area_per_chord2, period, num_src_times, positive_x_rotation) # Need to know the radial spacing. (CCBlade doesn't use this—when # integrating stuff [loading to get torque and thrust] it uses the # trapezoidal rule and passes in the radial locations, and assumes that @@ -104,54 +191,782 @@ function source_elements_ccblade(rotor, sections, ops, outputs, area_per_chord2, # Ah, no, I don't know the length at compile time. dradii = get_ccblade_dradii(rotor, sections) - # Assume the rotor is traveling in the positive x direction, with the first - # blade aligned with the positive y axis. Rotor hub is initially at the origin. - rot_axis = @SVector [1.0, 0.0, 0.0] - blade_axis = @SVector [0.0, 1.0, 0.0] - y0_hub = @SVector [0.0, 0.0, 0.0] # m - t0 = 0.0 + # Get the transformation that will put the source elements in the "standard" CCBlade.jl reference frame (moving axially in the positive x axis direction, rotating about the positive x axis or negative x axis, first blade initially aligned with the positive y axis). + src_times, dt, trans = _standard_ccblade_transform(rotor, sections, ops, period, num_src_times, positive_x_rotation) + + # This is just an array of the angular offsets of each blade. First blade is + # aligned with the y axis, next one is offset 2*pi/B radians, etc.. + num_blades = rotor.B + θs = 2*pi/num_blades.*(0:(num_blades-1)) .* ifelse(positive_x_rotation, 1, -1) - # Get the time of each time step. - dt = period/num_src_times - src_times = t0 .+ (0:num_src_times-1).*dt + # Reshape for broadcasting. Goal is to make everything work for a size of (num_times, + # num_radial, num_blades). + # trans_rs = reshape(trans, size(trans)..., 1) + θs_rs = reshape(θs, 1, 1, :) + sections_rs = reshape(sections, 1, :, 1) + ops_rs = reshape(ops, 1, :, 1) + outputs_rs = reshape(outputs, 1, :, 1) + dradii_rs = reshape(dradii, 1, :, 1) + area_per_chord2_rs = reshape(area_per_chord2, 1, :, 1) + # src_times = reshape(src_times, :, 1, 1) # This one isn't necessary. - # Get transformations for each blade element. - cos_precone = cos(rotor.precone) - r = mapview(:r, sections) - Vx = mapview(:Vx, ops) - Vy = mapview(:Vy, ops) - rot_trans = SteadyRotXTransformation.(t0, Vy./(r.*cos_precone), 0.0) # size (num_radial,) - const_vel_trans = ConstantVelocityTransformation.(t0, Ref(y0_hub), Ref(rot_axis).*Vx./cos_precone) # size (num_radial,) + # Construct and transform the source elements. + ses = CompactF1ASourceElement.(Ref(rotor), sections_rs, ops_rs, outputs_rs, θs_rs, dradii_rs, area_per_chord2_rs, src_times, positive_x_rotation) .|> trans - # Reshape things to get broadcasting to work. - rot_trans = reshape(rot_trans, 1, :) - const_vel_trans = reshape(const_vel_trans, 1, :) + return ses +end + +function _get_position_velocity_span_uvec_chord_uvec(theta, precone, pitch, r, θ, W, phi, positive_x_rotation) + sθ, cθ = sincos(θ) + spc, cpc = sincos(precone) + stwist, ctwist = sincos(theta + pitch) + + # The way this will work: + # + # * We're going to assume that the rotor blade is moving axially in the positive x direction, and rotating about the x axis. + # * The "first" blade is initially aligned with the positive y axis. + # * Then we'll rotate the element about the positive z-axis by an amount `-precone` to acount for the precone. + # * Then we'll rotate the element about the positive x-axis by an amount `θ`. + # + # Those transformations will be applied to the blade element position, but also other vectors associated with the element. + # In matrix form the precone transformation would be + # + # [ cos(-precone), -sin(-precone), 0 ] + # [ sin(-precone), cos(-precone), 0 ] + # [ 0, 0, 1 ] + # + # or equivalently + # + # [ cos(precone), sin(precone), 0 ] + # [-sin(precone), cos(precone), 0 ] + # [ 0, 0, 1 ] + # + # And the θ rotation about the x axis would be + # + # [ 1, 0 , 0 ] + # [ 0, cos(θ), -sin(θ) ] + # [ 0, sin(θ), cos(θ) ] + # + # So, to get the position, we start out with a vector + # + # [0] + # [r] + # [0] + # + # And then multiply that by the precone rotation matrix and θ rotation matrix. + # + # [ cos(precone), sin(precone), 0 ] [0] [ r*sin(precone) ] + # [-sin(precone), cos(precone), 0 ] [r] = [ r*cos(precone) ] + # [ 0, 0, 1 ] [0] [ 0 ] + # + # [ 1, 0 , 0 ] [ r*sin(precone) ] [ r*sin(precone) ] + # [ 0, cos(θ), -sin(θ) ] [ r*cos(precone) ] = [ r*cos(precone)*cos(θ) ] + # [ 0, sin(θ), cos(θ) ] [ 0 ] [ r*cos(precone)*sin(θ) ] + y0dot = @SVector [r*spc, r*cpc*cθ, r*cpc*sθ] + + # In the blade-fixed frame, the source isn't moving, since the blade-fixed reference frame is moving with the source. + y1dot = @SVector zeros(eltype(y0dot), 3) + + # Vx = op.Vx + # u = out.u + # Vy = op.Vy + # v = out.v + sphi, cphi = sincos(phi) + Vx_plus_u = W*sphi + Vy_minus_v = W*cphi + + # The `span_uvec` is a unit vector pointing from the hub to the tip, along the blade element's radial length. + # So that's just the same as the position vector, but without the r factor. + span_uvec = @SVector [spc, cpc*cθ, cpc*sθ] + + if positive_x_rotation + # Now, what is the velocity of the fluid in the blade-fixed frame? + # In our coordinate system, the rotor is rotating about the x axis, moving in the x axis direction. + # So that means it appears that the axial freestream velocity Vx is in the negative x axis direction. + # And the induced velocity `u` has the same sign convention as Vx. + # So the total axial velocity of the fluid is `(-Vx - u)`. + # + # For the tangential velocity, we're imagining the blade is initially aligned with the y axis, rotating about the positive x axis. + # So that means the blade is moving toward the z axis. + # So, from the perspective of the blade, the `Vy` velocity is in the negative z axis direction. + # But the sign convention for the induced tangential velocity `v` is that + # it's positive when it opposes `Vy`, so the total tangential velocity of the fluid is `(-Vy + v)`. + # + # So, finally, the fluid velocity vector we need to rotate is + # + # [-Vx - u ] + # [ 0 ] + # [-Vy + v ] + # + # and when I do all that I get + # + # [ (-Vx - u)*cos(precone) ] + # [ (Vx + u)*sin(precone)*cos(θ) - (-Vy + v)*sin(θ) ] + # [ (Vx + u)*sin(precone)*sin(θ) + (-Vy + v)*cos(θ) ] + # y1dot_fluid = @SVector [(-Vx - u)*cpc, (Vx + u)*spc*cθ - (-Vy + v)*sθ, (Vx + u)*spc*sθ + (-Vy + v)*cθ] + y1dot_fluid = @SVector [-Vx_plus_u*cpc, Vx_plus_u*spc*cθ - (-Vy_minus_v)*sθ, Vx_plus_u*spc*sθ + (-Vy_minus_v)*cθ] + + # Finally the `chord_uvec` is a unit vector pointing from the leading edge to the trailing edge. + # In our initial coordinate system (i.e., not accounting for the precone or + # θ rotations) we're imagining the blade is rotating about the x axis, + # aligned with the y axis, and so is moving in the direction of the z axis. + # So that means if the twist is zero, then the leading edge is headed in the + # z axis direction, and a vector pointing from leading edge to trailing edge + # would be in the negative z axis direction. Then, to account for the twist, + # we would rotate it about the positive y axis. And then do the usual + # precone and θ rotations. + # So, a rotation about the y axis is + # + # [ cos(twist) 0 sin(twist) ] + # [ 0 1 0 ] + # [-sin(twist) 0 cos(twist) ] + # + # So, start with + # + # [ 0 ] + # [ 0 ] + # [-1 ] + # + # then + # + # [ cos(twist) 0 sin(twist) ] [ 0 ] [-sin(twist) ] + # [ 0 1 0 ] [ 0 ] = [ 0 ] + # [-sin(twist) 0 cos(twist) ] [-1 ] [-cos(twist) ] + # + # Now do the precone transformation + # + # [ cos(precone), sin(precone), 0 ] [-sin(twist) ] [-sin(twist)*cos(precone) ] + # [-sin(precone), cos(precone), 0 ] [ 0 ] = [ sin(twist)*sin(precone) ] + # [ 0, 0, 1 ] [-cos(twist) ] [-cos(twist) ] + # + # Finally do the θ transformation + # + # [ 1, 0 , 0 ] [-sin(twist)*cos(precone) ] [-sin(twist)*cos(precone) ] + # [ 0, cos(θ), -sin(θ) ] [ sin(twist)*sin(precone) ] = [ sin(twist)*sin(precone)*cos(θ) + cos(twist)*sin(θ) ] + # [ 0, sin(θ), cos(θ) ] [-cos(twist) ] [ sin(twist)*sin(precone)*sin(θ) - cos(twist)*cos(θ) ] + chord_uvec = @SVector [-stwist*cpc, stwist*spc*cθ + ctwist*sθ, stwist*spc*sθ - ctwist*cθ] + + else + + # But, what if I want to assume that the blade is rotating in the opposite direction, i.e., about the negative x axis? + # For the velocity, the direction of the axial velocity is unchanged: we're still moving in the positive x direction, so the axial velocity from the perspective of the blade element will be in the negative x direction. + # So the total axial velocity of the fluid is `(-Vx - u)`. + # + # For the tangential velocity, we're rotating about the negative x axis now, so since the blade is initially aligned with the y axis, it is moving in the negative z direction. + # So that means the freestream tangential velocity appears to be in the opposite direction, aka the positive z direction. + # But the induced tangential velocity is in the opposite direction of the freestream tangential velocity, so the total velocity in the tangential direction is `(Vy - v)`. + # + # So the fluid velocity vector we want to rotate is + # + # [-Vx - u ] + # [ 0 ] + # [ Vy - v ] + # + # The theta and precone stuff doesn't change, so we'll do all the same stuff. + # First we do the precone: + # + # [ cos(precone), sin(precone), 0 ] [-Vx - u] [ (-Vx - u)*cos(precone) ] [ (-Vx - u)*cos(precone) ] + # [-sin(precone), cos(precone), 0 ] [ 0 ] = [ (-Vx - u)*(-sin(precone)) ] = [ ( Vx + u)*sin(precone) ] + # [ 0, 0, 1 ] [ Vy - v] [ Vy - v ] [ Vy - v ] + # + # then do the theta rotation. + # + # [ 1, 0 , 0 ] [ (-Vx - u)*cos(precone) ] [ (-Vx - u)*cos(precone) ] + # [ 0, cos(θ), -sin(θ) ] [ ( Vx + u)*sin(precone) ] = [ ( Vx + u)*sin(precone)*cos(θ) - (Vy - v)*sin(θ) ] + # [ 0, sin(θ), cos(θ) ] [ Vy - v ] [ ( Vx + u)*sin(precone)*sin(θ) + (Vy - v)*cos(θ) ] + # y1dot_fluid = @SVector [(-Vx - u)*cpc, (Vx + u)*spc*cθ - (Vy - v)*sθ, (Vx + u)*spc*sθ + (Vy - v)*cθ] + y1dot_fluid = @SVector [-Vx_plus_u*cpc, Vx_plus_u*spc*cθ - Vy_minus_v*sθ, Vx_plus_u*spc*sθ + Vy_minus_v*cθ] + # + # That should be the same thing as the opposite case, but with the sign on (Vy - v) switched. + # Yep, good. + # + # For the chord_uvec, I want to start with a unit vector pointing in the positive z axis, then do a negative-twist rotation about the positive y axis. + # So start with + # + # [ 0 ] + # [ 0 ] + # [ 1 ] + # + # then + # + # [ cos(-twist) 0 sin(-twist) ] [ 0 ] [ sin(-twist) ] + # [ 0 1 0 ] [ 0 ] = [ 0 ] + # [-sin(-twist) 0 cos(-twist) ] [ 1 ] [ cos(-twist) ] + # + # Now do the precone transformation + # + # [ cos(precone), sin(precone), 0 ] [ sin(-twist) ] [ sin(-twist)*cos(precone) ] + # [-sin(precone), cos(precone), 0 ] [ 0 ] = [-sin(-twist)*sin(precone) ] + # [ 0, 0, 1 ] [ cos(-twist) ] [ cos(-twist) ] + # + # Finally do the θ transformation + # + # [ 1, 0 , 0 ] [ sin(-twist)*cos(precone) ] [ sin(-twist)*cos(precone) ] + # [ 0, cos(θ), -sin(θ) ] [-sin(-twist)*sin(precone) ] = [-sin(-twist)*sin(precone)*cos(θ) - cos(-twist)*sin(θ) ] + # [ 0, sin(θ), cos(θ) ] [ cos(-twist) ] [-sin(-twist)*sin(precone)*sin(θ) + cos(-twist)*cos(θ) ] + # + # Now handle the `-twist`, + # + # [ sin(-twist)*cos(precone) ] [-sin(twist)*cos(precone) ] + # [-sin(-twist)*sin(precone)*cos(θ) - cos(-twist)*sin(θ) ] = [ sin(twist)*sin(precone)*cos(θ) - cos(twist)*sin(θ) ] + # [-sin(-twist)*sin(precone)*sin(θ) + cos(-twist)*cos(θ) ] [ sin(twist)*sin(precone)*sin(θ) + cos(twist)*cos(θ) ] + + chord_uvec = @SVector [-stwist*cpc, stwist*spc*cθ - ctwist*sθ, stwist*spc*sθ + ctwist*cθ] + end + + chord_cross_span_to_get_top_uvec = positive_x_rotation + return y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec +end + + +""" + TBLTESourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) + +Construct a source element to be used to predict turbulent boundary layer-trailing edge (TBLTE) noise. + +The source element's position is calculated from `section.r`, `rotor.precone`, and the `θ` argument using +```julia + sθ, cθ = sincos(θ) + spc, cpc = sincos(precone) + y0dot = [r*spc, r*cpc*cθ, r*cpc*sθ] +``` +where `y0dot` is the position of the source element. + +# Arguments +- `rotor::CCBlade.Rotor`: CCBlade rotor object, needed for the precone angle. +- `section::CCBlade.Section`: CCBlade section object, needed for the radial location and chord length of the element. +- `op::CCBlade.OperatingPoint`: CCBlade operating point, needed for atmospheric properties. +- `out::CCBlade.Outputs`: CCBlade outputs object, needed for the loading. +- `θ`: polar coordinate of the element, in radians. +- `Δr`: length of the element, in meters. +- `τ`: source time of the element, in seconds. +- `Δτ`: source time duration, in seconds. +- `bl`: `AcousticAnalogies.AbstractBoundaryLayer`, needed for boundary layer properties. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function TBLTESourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) + return TBLTESourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(rotor, section, op, out, θ, Δr, τ, Δτ, bl, positive_x_rotation) +end + +function TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) where {TDirect,TUInduction,TMachCorrection,TDoppler} + + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec( + section.theta, rotor.precone, op.pitch, section.r, θ, out.W, out.phi, positive_x_rotation) + + nu = op.mu/op.rho + + return TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(op.asound, nu, Δr, section.chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +""" + tblte_source_elements_ccblade(rotor::CCBlade.Rotor, sections::Vector{CCBlade.Section}, ops::Vector{CCBlade.OperatingPoint}, outputs::Vector{CCBlade.Outputs}, bls::Vector{AbstractBoundaryLayer}, period, num_src_times, positive_x_rotation) + +Construct and return an array of TBLTESourceElement objects from CCBlade structs. + +# Arguments +- `rotor`: CCBlade rotor object. +- `sections`: `Vector` of CCBlade section object. +- `ops`: `Vector` of CCBlade operating point. +- `outputs`: `Vector` of CCBlade output objects. +- `bls`::`Vector` of boundary layer `AbstractBoundaryLayer` `structs`. +- `period`: length of the source time over which the returned source elements will evaluated. +- `num_src_times`: number of source times. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function tblte_source_elements_ccblade(rotor, sections, ops, outputs, bls, period, num_src_times, positive_x_rotation) + return tblte_source_elements_ccblade(BrooksBurleyDirectivity, true, PrandtlGlauertMachCorrection, true, rotor, sections, ops, outputs, bls, period, num_src_times, positive_x_rotation) +end + +function tblte_source_elements_ccblade(TDirect::Type{<:AbstractDirectivity}, TUInduction::Bool, TMachCorrection::Type{<:AbstractMachCorrection}, TDoppler::Bool, rotor, sections, ops, outputs, bls, period, num_src_times, positive_x_rotation) + # Need to know the radial spacing. (CCBlade doesn't use this—when + # integrating stuff [loading to get torque and thrust] it uses the + # trapezoidal rule and passes in the radial locations, and assumes that + # integrands go to zero at the hub and tip.) Kind of lame that I have to + # calcluate it here, but whatever. Maybe I should use StaticArrays for this? + # Ah, no, I don't know the length at compile time. + dradii = get_ccblade_dradii(rotor, sections) + + # Get the transformation that will put the source elements in the "standard" CCBlade.jl reference frame (moving axially in the positive x axis direction, rotating about the positive x axis, first blade initially aligned with the positive y axis). + src_times, dt, trans = _standard_ccblade_transform(rotor, sections, ops, period, num_src_times, positive_x_rotation) + + # This is just an array of the angular offsets of each blade. First blade is + # aligned with the y axis, next one is offset 2*pi/B radians, etc.. + num_blades = rotor.B + θs = 2*pi/num_blades.*(0:(num_blades-1)) .* ifelse(positive_x_rotation, 1, -1) + + # Reshape for broadcasting. Goal is to make everything work for a size of (num_times, + # num_radial, num_blades). + # trans_rs = reshape(trans, size(trans)..., 1) + θs_rs = reshape(θs, 1, 1, :) + sections_rs = reshape(sections, 1, :, 1) + ops_rs = reshape(ops, 1, :, 1) + outputs_rs = reshape(outputs, 1, :, 1) + dradii_rs = reshape(dradii, 1, :, 1) + bls_rs = reshape(bls, 1, :, 1) + # src_times = reshape(src_times, :, 1, 1) # This one isn't necessary. + + # Construct and transform the source elements. + ses = TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}.(Ref(rotor), sections_rs, ops_rs, outputs_rs, θs_rs, dradii_rs, src_times, Ref(dt), bls_rs, positive_x_rotation) .|> trans + + return ses +end + +""" + LBLVSSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) + +Construct a source element to be used to predict laminary boundary layer-vortex shedding (LBLVS) noise. + +The source element's position is calculated from `section.r`, `rotor.precone`, and the `θ` argument using +```julia + sθ, cθ = sincos(θ) + spc, cpc = sincos(precone) + y0dot = [r*spc, r*cpc*cθ, r*cpc*sθ] +``` +where `y0dot` is the position of the source element. + +# Arguments +- `rotor::CCBlade.Rotor`: CCBlade rotor object, needed for the precone angle. +- `section::CCBlade.Section`: CCBlade section object, needed for the radial location and chord length of the element. +- `op::CCBlade.OperatingPoint`: CCBlade operating point, needed for atmospheric properties. +- `out::CCBlade.Outputs`: CCBlade outputs object, needed for the loading. +- `θ`: polar coordinate of the element, in radians. +- `Δr`: length of the element, in meters. +- `τ`: source time of the element, in seconds. +- `Δτ`: source time duration, in seconds. +- `bl`: `AcousticAnalogies.AbstractBoundaryLayer`, needed for boundary layer properties. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function LBLVSSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) + return LBLVSSourceElement{BrooksBurleyDirectivity,true,true}(rotor, section, op, out, θ, Δr, τ, Δτ, bl, positive_x_rotation) +end + +function LBLVSSourceElement{TDirect,TUInduction,TDoppler}(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) where {TDirect,TUInduction,TDoppler} + + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec( + section.theta, rotor.precone, op.pitch, section.r, θ, out.W, out.phi, positive_x_rotation) + + nu = op.mu/op.rho + + return LBLVSSourceElement{TDirect,TUInduction,TDoppler}(op.asound, nu, Δr, section.chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +""" + lblvs_source_elements_ccblade(rotor::CCBlade.Rotor, sections::Vector{CCBlade.Section}, ops::Vector{CCBlade.OperatingPoint}, outputs::Vector{CCBlade.Outputs}, bls::Vector{AbstractBoundaryLayer}, period, num_src_times, positive_x_rotation) + +Construct and return an array of LBLVSSourceElement objects from CCBlade structs. + +# Arguments +- `rotor`: CCBlade rotor object. +- `sections`: `Vector` of CCBlade section object. +- `ops`: `Vector` of CCBlade operating point. +- `outputs`: `Vector` of CCBlade output objects. +- `bls`::`Vector` of boundary layer `AbstractBoundaryLayer` `structs`. +- `period`: length of the source time over which the returned source elements will evaluated. +- `num_src_times`: number of source times. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function lblvs_source_elements_ccblade(rotor, sections, ops, outputs, bls, period, num_src_times, positive_x_rotation) + return lblvs_source_elements_ccblade(BrooksBurleyDirectivity, true, true, rotor, sections, ops, outputs, bls, period, num_src_times, positive_x_rotation) +end + +function lblvs_source_elements_ccblade(TDirect::Type{<:AbstractDirectivity}, TUInduction::Bool, TDoppler::Bool, rotor, sections, ops, outputs, bls, period, num_src_times, positive_x_rotation) + # Need to know the radial spacing. (CCBlade doesn't use this—when + # integrating stuff [loading to get torque and thrust] it uses the + # trapezoidal rule and passes in the radial locations, and assumes that + # integrands go to zero at the hub and tip.) Kind of lame that I have to + # calcluate it here, but whatever. Maybe I should use StaticArrays for this? + # Ah, no, I don't know the length at compile time. + dradii = get_ccblade_dradii(rotor, sections) + + # Get the transformation that will put the source elements in the "standard" CCBlade.jl reference frame (moving axially in the positive x axis direction, rotating about the positive x axis, first blade initially aligned with the positive y axis). + src_times, dt, trans = _standard_ccblade_transform(rotor, sections, ops, period, num_src_times, positive_x_rotation) - # Now get all the transformations. - trans = compose.(src_times, const_vel_trans, rot_trans) # size (num_times, num_radial) - # This is just an array of the angular offsets of each blade. First blade is # aligned with the y axis, next one is offset 2*pi/B radians, etc.. num_blades = rotor.B - θs = 2*pi/num_blades.*(0:(num_blades-1)) + θs = 2*pi/num_blades.*(0:(num_blades-1)) .* ifelse(positive_x_rotation, 1, -1) # Reshape for broadcasting. Goal is to make everything work for a size of (num_times, # num_radial, num_blades). - trans = reshape(trans, size(trans)..., 1) - θs = reshape(θs, 1, 1, :) - sections = reshape(sections, 1, :, 1) - ops = reshape(ops, 1, :, 1) - outputs = reshape(outputs, 1, :, 1) - dradii = reshape(dradii, 1, :, 1) - area_per_chord2 = reshape(area_per_chord2, 1, :, 1) - src_times = reshape(src_times, :, 1, 1) # This one isn't necessary. + # trans_rs = reshape(trans, size(trans)..., 1) + θs_rs = reshape(θs, 1, 1, :) + sections_rs = reshape(sections, 1, :, 1) + ops_rs = reshape(ops, 1, :, 1) + outputs_rs = reshape(outputs, 1, :, 1) + dradii_rs = reshape(dradii, 1, :, 1) + bls_rs = reshape(bls, 1, :, 1) + # src_times = reshape(src_times, :, 1, 1) # This one isn't necessary. # Construct and transform the source elements. - ses = CompactSourceElement.(Ref(rotor), sections, ops, outputs, θs, dradii, area_per_chord2, src_times) .|> trans + ses = LBLVSSourceElement{TDirect,TUInduction,TDoppler}.(Ref(rotor), sections_rs, ops_rs, outputs_rs, θs_rs, dradii_rs, src_times, Ref(dt), bls_rs, positive_x_rotation) .|> trans return ses end +""" + TipVortexSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, τ, Δτ, bl::AbstractBoundaryLayer, blade_tip::AbstractBladeTip, positive_x_rotation) + +Construct a source element to be used to predict tip vortex noise. + +The source element's position is calculated from `section.r`, `rotor.precone`, and the `θ` argument using +```julia + sθ, cθ = sincos(θ) + spc, cpc = sincos(precone) + y0dot = [r*spc, r*cpc*cθ, r*cpc*sθ] +``` +where `y0dot` is the position of the source element. + +# Arguments +- `rotor::CCBlade.Rotor`: CCBlade rotor object, needed for the precone angle. +- `section::CCBlade.Section`: CCBlade section object, needed for the radial location and chord length of the element. +- `op::CCBlade.OperatingPoint`: CCBlade operating point, needed for atmospheric properties. +- `out::CCBlade.Outputs`: CCBlade outputs object, needed for the loading. +- `θ`: polar coordinate of the element, in radians. +- `Δr`: length of the element, in meters. +- `τ`: source time of the element, in seconds. +- `Δτ`: source time duration, in seconds. +- `bl`: `AcousticAnalogies.AbstractBoundaryLayer`, needed for boundary layer properties. +- `blade_tip`: `AcousticAnalogies.AbstractBladeTip` +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function TipVortexSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, τ, Δτ, bl::AbstractBoundaryLayer, blade_tip::AbstractBladeTip, positive_x_rotation) + return TipVortexSourceElement{BrooksBurleyDirectivity,true,true}(rotor, section, op, out, θ, Δr, τ, Δτ, bl, blade_tip, positive_x_rotation) +end + +function TipVortexSourceElement{TDirect,TUInduction,TDoppler}(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, τ, Δτ, bl::AbstractBoundaryLayer, blade_tip::AbstractBladeTip, positive_x_rotation) where {TDirect,TUInduction,TDoppler} + + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec( + section.theta, rotor.precone, op.pitch, section.r, θ, out.W, out.phi, positive_x_rotation) + + return TipVortexSourceElement{TDirect,TUInduction,TDoppler}(op.asound, Δr, section.chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) +end + +""" + tip_vortex_source_elements_ccblade(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, output::CCBlade.Outputs, bl::AbstractBoundaryLayer, blade_tip::AbstractBladeTip, period, num_src_times, positive_x_rotation) + +Construct and return an array of TipVortexSourceElement objects from CCBlade structs. + +Note that unlike the other `*_source_elements_ccblade` functions, `tip_vortex_source_elements_ccblade` expects scalar arguments instead of vectors for `section`, `op`, etc. as a blade only has one tip. + +# Arguments +- `rotor`: CCBlade rotor object. +- `section`: CCBlade section object at the blade tip. +- `op`: CCBlade operating point object at the blade tip. +- `output`: CCBlade output object at the blade tip. +- `Δr`: radial spacing. +- `bl`:: Boundary layer `struct` at the blade tip. +- `blade_tip`: `AcousticAnalogies.AbstractBladeTip` +- `period`: length of the source time over which the returned source elements will evaluated. +- `num_src_times`: number of source times. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function tip_vortex_source_elements_ccblade(rotor, section, op, output, Δr, bl, blade_tip, period, num_src_times, positive_x_rotation) + return tip_vortex_source_elements_ccblade(BrooksBurleyDirectivity, true, true, rotor, section, op, output, Δr, bl, blade_tip, period, num_src_times, positive_x_rotation) +end + +function tip_vortex_source_elements_ccblade(TDirect::Type{<:AbstractDirectivity}, TUInduction::Bool, TDoppler::Bool, rotor, section, op, output, Δr, bl, blade_tip, period, num_src_times, positive_x_rotation) + # Ugh, hate doing this. + # Wish there was a way to make a allocation-free array-like thingy from a scaler. + # But I doubt it makes any difference. + # sections = [section] + # ops = [op] + # Good news! + # Learned about the FillArrays.jl package. + sections = Fill(section, 1) + ops = Fill(op, 1) + # But that breaks with CCBlade.jl. + # So back to 1D arrays. + # sections = [section] + # ops = [op] + + # Get the transformation that will put the source elements in the "standard" CCBlade.jl reference frame (moving axially in the positive x axis direction, rotating about the positive x axis, first blade initially aligned with the positive y axis). + src_times, dt, trans = _standard_ccblade_transform(rotor, sections, ops, period, num_src_times, positive_x_rotation) + + # This is just an array of the angular offsets of each blade. First blade is + # aligned with the y axis, next one is offset 2*pi/B radians, etc.. + num_blades = rotor.B + θs = 2*pi/num_blades.*(0:(num_blades-1)) .* ifelse(positive_x_rotation, 1, -1) + + # Reshape for broadcasting. Goal is to make everything work for a size of (num_times, num_radial, num_blades). + # But this will really be (num_times, 1, num_blades). + # trans_rs = reshape(trans, size(trans)..., 1) + θs_rs = reshape(θs, 1, 1, :) + # sections_rs = reshape(sections, 1, 1) + # ops_rs = reshape(ops, 1, 1) + # outputs = reshape(outputs, 1, :, 1) + # dradii = reshape(dradii, 1, :, 1) + # bls = reshape(bls, 1, :, 1) + # src_times = reshape(src_times, :, 1, 1) # This one isn't necessary. + + # Construct and transform the source elements. + # ses = TipVortexSourceElement.(Ref(rotor), sections_rs, ops_rs, Ref(output), θs_rs, Ref(Δr), src_times, Ref(dt), Ref(bl), positive_x_rotation) .|> trans_rs + # So Θs_rs has size (1, 1, num_blades), src_times has size (num_src_times,), trans has size (num_src_times, 1). + # So that should all work out. + ses = TipVortexSourceElement{TDirect,TUInduction,TDoppler}.(Ref(rotor), Ref(section), Ref(op), Ref(output), θs_rs, Ref(Δr), src_times, Ref(dt), Ref(bl), Ref(blade_tip), positive_x_rotation) .|> trans + + return ses +end + +""" + TEBVSSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, h, Psi, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) + +Construct a source element to be used to predict trailing edge bluntness-vortex shedding (TEBVS) noise. + +The source element's position is calculated from `section.r`, `rotor.precone`, and the `θ` argument using +```julia + sθ, cθ = sincos(θ) + spc, cpc = sincos(precone) + y0dot = [r*spc, r*cpc*cθ, r*cpc*sθ] +``` +where `y0dot` is the position of the source element. + +# Arguments +- `rotor::CCBlade.Rotor`: CCBlade rotor object, needed for the precone angle. +- `section::CCBlade.Section`: CCBlade section object, needed for the radial location and chord length of the element. +- `op::CCBlade.OperatingPoint`: CCBlade operating point, needed for atmospheric properties. +- `out::CCBlade.Outputs`: CCBlade outputs object, needed for the loading. +- `θ`: polar coordinate of the element, in radians. +- `Δr`: length of the element, in meters. +- `h`: trailing edge thickness (m) +- `Psi`: solid angle between the blade surfaces immediately upstream of the trailing edge (rad) +- `τ`: source time of the element, in seconds. +- `Δτ`: source time duration, in seconds. +- `bl`: `AcousticAnalogies.AbstractBoundaryLayer`, needed for boundary layer properties. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function TEBVSSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, h, Psi, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) + return TEBVSSourceElement{BrooksBurleyDirectivity,true,true}(rotor, section, op, out, θ, Δr, h, Psi, τ, Δτ, bl, positive_x_rotation) +end + +function TEBVSSourceElement{TDirect,TUInduction,TDoppler}(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, h, Psi, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) where {TDirect,TUInduction,TDoppler} + + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec( + section.theta, rotor.precone, op.pitch, section.r, θ, out.W, out.phi, positive_x_rotation) + + nu = op.mu/op.rho + + return TEBVSSourceElement{TDirect,TUInduction,TDoppler}(op.asound, nu, Δr, section.chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +""" + tebvs_source_elements_ccblade(rotor::CCBlade.Rotor, sections::Vector{CCBlade.Section}, ops::Vector{CCBlade.OperatingPoint}, outputs::Vector{CCBlade.Outputs}, hs, Psis, bls::Vector{AbstractBoundaryLayer}, period, num_src_times, positive_x_rotation) + +Construct and return an array of TEBVSSourceElement objects from CCBlade structs. + +# Arguments +- `rotor`: CCBlade rotor object. +- `sections`: `Vector` of CCBlade section object. +- `ops`: `Vector` of CCBlade operating point. +- `outputs`: `Vector` of CCBlade output objects. +- `hs`: `Vector` of trailing edge thicknesses +- `Psis`: `Vector` of solid angles between the blade surfaces immediately upstream of the trailing edge (rad) +- `bls`::`Vector` of boundary layer `AbstractBoundaryLayer` `structs`. +- `period`: length of the source time over which the returned source elements will evaluated. +- `num_src_times`: number of source times. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function tebvs_source_elements_ccblade(rotor, sections, ops, outputs, hs, Psis, bls, period, num_src_times, positive_x_rotation) + return tebvs_source_elements_ccblade(BrooksBurleyDirectivity, true, true, rotor, sections, ops, outputs, hs, Psis, bls, period, num_src_times, positive_x_rotation) +end + +function tebvs_source_elements_ccblade(TDirect::Type{<:AbstractDirectivity}, TUInduction::Bool, TDoppler::Bool, rotor, sections, ops, outputs, hs, Psis, bls, period, num_src_times, positive_x_rotation) + # Need to know the radial spacing. (CCBlade doesn't use this—when + # integrating stuff [loading to get torque and thrust] it uses the + # trapezoidal rule and passes in the radial locations, and assumes that + # integrands go to zero at the hub and tip.) Kind of lame that I have to + # calcluate it here, but whatever. Maybe I should use StaticArrays for this? + # Ah, no, I don't know the length at compile time. + dradii = get_ccblade_dradii(rotor, sections) + + # Get the transformation that will put the source elements in the "standard" CCBlade.jl reference frame (moving axially in the positive x axis direction, rotating about the positive x axis, first blade initially aligned with the positive y axis). + src_times, dt, trans = _standard_ccblade_transform(rotor, sections, ops, period, num_src_times, positive_x_rotation) + + # This is just an array of the angular offsets of each blade. First blade is + # aligned with the y axis, next one is offset 2*pi/B radians, etc.. + num_blades = rotor.B + θs = 2*pi/num_blades.*(0:(num_blades-1)) .* ifelse(positive_x_rotation, 1, -1) + + # Reshape for broadcasting. Goal is to make everything work for a size of (num_times, + # num_radial, num_blades). + # trans_rs = reshape(trans, size(trans)..., 1) + θs_rs = reshape(θs, 1, 1, :) + sections_rs = reshape(sections, 1, :, 1) + ops_rs = reshape(ops, 1, :, 1) + outputs_rs = reshape(outputs, 1, :, 1) + dradii_rs = reshape(dradii, 1, :, 1) + hs_rs = reshape(hs, 1, :, 1) + Psis_rs = reshape(Psis, 1, :, 1) + bls_rs = reshape(bls, 1, :, 1) + # src_times = reshape(src_times, :, 1, 1) # This one isn't necessary. + + # Construct and transform the source elements. + ses = TEBVSSourceElement{TDirect,TUInduction,TDoppler}.(Ref(rotor), sections_rs, ops_rs, outputs_rs, θs_rs, dradii_rs, hs_rs, Psis_rs, src_times, Ref(dt), bls_rs, positive_x_rotation) .|> trans + + return ses +end + +""" + CombinedNoTipBroadbandSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, h, Psi, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) + +Construct a source element for predicting turbulent boundary layer-trailing edge (TBLTE), laminar boundary layer-vortex shedding (LBLVS) noise, and trailing edge bluntness-vortex shedding (TEBVS) noise using the BPM/Brooks and Burley method from CCBlade structs. + +The source element's position is calculated from `section.r`, `rotor.precone`, and the `θ` argument using +```julia + sθ, cθ = sincos(θ) + spc, cpc = sincos(precone) + y0dot = [r*spc, r*cpc*cθ, r*cpc*sθ] +``` +where `y0dot` is the position of the source element. + +# Arguments +- `rotor::CCBlade.Rotor`: CCBlade rotor object, needed for the precone angle. +- `section::CCBlade.Section`: CCBlade section object, needed for the radial location and chord length of the element. +- `op::CCBlade.OperatingPoint`: CCBlade operating point, needed for atmospheric properties. +- `out::CCBlade.Outputs`: CCBlade outputs object, needed for the loading. +- `θ`: polar coordinate of the element, in radians. +- `Δr`: length of the element, in meters. +- `h`: trailing edge thickness (m) +- `Psi`: solid angle between the blade surfaces immediately upstream of the trailing edge (rad) +- `τ`: source time of the element, in seconds. +- `Δτ`: source time duration, in seconds. +- `bl`: `AcousticAnalogies.AbstractBoundaryLayer`, needed for boundary layer properties. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function CombinedNoTipBroadbandSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, h, Psi, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) + return CombinedNoTipBroadbandSourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(rotor, section, op, out, θ, Δr, h, Psi, τ, Δτ, bl, positive_x_rotation) +end + +function CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, h, Psi, τ, Δτ, bl::AbstractBoundaryLayer, positive_x_rotation) where {TDirect,TUInduction,TMachCorrection,TDoppler} + + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec( + section.theta, rotor.precone, op.pitch, section.r, θ, out.W, out.phi, positive_x_rotation) + + nu = op.mu/op.rho + + return CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(op.asound, nu, Δr, section.chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +""" + CombinedWithTipBroadbandSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, h, Psi, τ, Δτ, bl::AbstractBoundaryLayer, blade_tip::AbstractBladeTip, positive_x_rotation) + +Construct a source element for predicting turbulent boundary layer-trailing edge (TBLTE), laminar boundary layer-vortex shedding (LBLVS) noise, trailing edge bluntness-vortex shedding (TEBVS), and tip vortex noise using the BPM/Brooks and Burley method from CCBlade structs. + +The source element's position is calculated from `section.r`, `rotor.precone`, and the `θ` argument using +```julia + sθ, cθ = sincos(θ) + spc, cpc = sincos(precone) + y0dot = [r*spc, r*cpc*cθ, r*cpc*sθ] +``` +where `y0dot` is the position of the source element. + +# Arguments +- `rotor::CCBlade.Rotor`: CCBlade rotor object, needed for the precone angle. +- `section::CCBlade.Section`: CCBlade section object, needed for the radial location and chord length of the element. +- `op::CCBlade.OperatingPoint`: CCBlade operating point, needed for atmospheric properties. +- `out::CCBlade.Outputs`: CCBlade outputs object, needed for the loading. +- `θ`: polar coordinate of the element, in radians. +- `Δr`: length of the element, in meters. +- `h`: trailing edge thickness (m) +- `Psi`: solid angle between the blade surfaces immediately upstream of the trailing edge (rad) +- `τ`: source time of the element, in seconds. +- `Δτ`: source time duration, in seconds. +- `bl`: `AcousticAnalogies.AbstractBoundaryLayer`, needed for boundary layer properties. +- `blade_tip`: Blade tip struct, i.e. an AbstractBladeTip. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function CombinedWithTipBroadbandSourceElement(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, h, Psi, τ, Δτ, bl::AbstractBoundaryLayer, blade_tip::AbstractBladeTip, positive_x_rotation) + return CombinedWithTipBroadbandSourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(rotor, section, op, out, θ, Δr, h, Psi, τ, Δτ, bl, blade_tip, positive_x_rotation) +end + +function CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(rotor::CCBlade.Rotor, section::CCBlade.Section, op::CCBlade.OperatingPoint, out::CCBlade.Outputs, θ, Δr, h, Psi, τ, Δτ, bl::AbstractBoundaryLayer, blade_tip::AbstractBladeTip, positive_x_rotation) where {TDirect,TUInduction,TMachCorrection,TDoppler} + + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec( + section.theta, rotor.precone, op.pitch, section.r, θ, out.W, out.phi, positive_x_rotation) + + nu = op.mu/op.rho + + return CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(op.asound, nu, Δr, section.chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) +end + +""" + combined_broadband_source_elements_ccblade(rotor::CCBlade.Rotor, sections::Vector{CCBlade.Section}, ops::Vector{CCBlade.OperatingPoint}, outputs::Vector{CCBlade.Outputs}, hs::Vector{Float64}, Psis::Vector{Float64}, bls::Vector{AbstractBoundaryLayer}, blade_tip::AbstractBladeTip, period, num_src_times, positive_x_rotation) + +Construct and return an array of broadband prediction source element objects from CCBlade structs. + +# Arguments +- `rotor`: CCBlade rotor object. +- `sections`: `Vector` of CCBlade section object. +- `ops`: `Vector` of CCBlade operating point. +- `outputs`: `Vector` of CCBlade output objects. +- `hs`: `Vector` of trailing edge thicknesses (m) +- `Psis`: `Vector` of solid angles between the blade surfaces immediately upstream of the trailing edge (rad) +- `bls`::`Vector` of boundary layer `AbstractBoundaryLayer` `structs`. +- `blade_tip`: Blade tip struct, i.e. an AbstractBladeTip. +- `period`: length of the source time over which the returned source elements will evaluated. +- `num_src_times`: number of source times. +- `positive_x_rotation`: rotate blade around the positive-x axis if `true`, negative-x axis otherwise. +""" +function combined_broadband_source_elements_ccblade(rotor, sections, ops, outputs, hs, Psis, bls, blade_tip, period, num_src_times, positive_x_rotation) + return combined_broadband_source_elements_ccblade(BrooksBurleyDirectivity, true, PrandtlGlauertMachCorrection, true, rotor, sections, ops, outputs, hs, Psis, bls, blade_tip, period, num_src_times, positive_x_rotation) +end + +function combined_broadband_source_elements_ccblade(TDirect::Type{<:AbstractDirectivity}, TUInduction::Bool, TMachCorrection::Type{<:AbstractMachCorrection}, TDoppler::Bool, rotor, sections, ops, outputs, hs, Psis, bls::AbstractVector{<:AbstractBoundaryLayer}, blade_tip, period, num_src_times, positive_x_rotation) + # Need to know the radial spacing. (CCBlade doesn't use this—when + # integrating stuff [loading to get torque and thrust] it uses the + # trapezoidal rule and passes in the radial locations, and assumes that + # integrands go to zero at the hub and tip.) Kind of lame that I have to + # calcluate it here, but whatever. Maybe I should use StaticArrays for this? + # Ah, no, I don't know the length at compile time. + dradii = get_ccblade_dradii(rotor, sections) + + # Get the transformation that will put the source elements in the "standard" CCBlade.jl reference frame (moving axially in the positive x axis direction, rotating about the positive x axis, first blade initially aligned with the positive y axis). + # Will be size (num_times, num_radial), so we'll need to adjust for the no tip/with tip stuff. + src_times, dt, trans = _standard_ccblade_transform(rotor, sections, ops, period, num_src_times, positive_x_rotation) + + # This is just an array of the angular offsets of each blade. First blade is + # aligned with the y axis, next one is offset 2*pi/B radians, etc.. + num_blades = rotor.B + θs = 2*pi/num_blades.*(0:(num_blades-1)) .* ifelse(positive_x_rotation, 1, -1) + + # Reshape for broadcasting. Goal is to make everything work for a size of (num_times, num_radial, num_blades). + θs_rs = reshape(θs, 1, 1, :) + sections_rs = reshape(sections, 1, :, 1) + ops_rs = reshape(ops, 1, :, 1) + outputs_rs = reshape(outputs, 1, :, 1) + dradii_rs = reshape(dradii, 1, :, 1) + hs_rs = reshape(hs, 1, :, 1) + Psis_rs = reshape(Psis, 1, :, 1) + bls_rs = reshape(bls, 1, :, 1) + # src_times = reshape(src_times, :, 1, 1) # This one isn't necessary. + + # So, I want to create some structs for all the non-blade tip elements, and the blade tip elements. + # So I just need to slice things appropriately. + sections_rs_no_tip = @view sections_rs[:, begin:end-1, :] + ops_rs_no_tip = @view ops_rs[:, begin:end-1, :] + outputs_rs_no_tip = @view outputs_rs[:, begin:end-1, :] + dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] + hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] + Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] + bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + trans_no_tip = @view trans[:, begin:end-1] + + sections_rs_with_tip = @view sections_rs[:, end:end, :] + ops_rs_with_tip = @view ops_rs[:, end:end, :] + outputs_rs_with_tip = @view outputs_rs[:, end:end, :] + dradii_rs_with_tip = @view dradii_rs[:, end:end, :] + hs_rs_with_tip = @view hs_rs[:, end:end, :] + Psis_rs_with_tip = @view Psis_rs[:, end:end, :] + bls_rs_with_tip = @view bls_rs[:, end:end, :] + trans_with_tip = @view trans[:, end:end] + + # Construct and transform the source elements. + ses_no_tip = CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}.(Ref(rotor), sections_rs_no_tip, ops_rs_no_tip, outputs_rs_no_tip, θs_rs, dradii_rs_no_tip, hs_rs_no_tip, Psis_rs_no_tip, src_times, Ref(dt), bls_rs_no_tip, positive_x_rotation) .|> trans_no_tip + + ses_with_tip = CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}.(Ref(rotor), sections_rs_with_tip, ops_rs_with_tip, outputs_rs_with_tip, θs_rs, dradii_rs_with_tip, hs_rs_with_tip, Psis_rs_with_tip, src_times, Ref(dt), bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans_with_tip + + return ses_no_tip, ses_with_tip +end + """ get_ccblade_dradii(rotor::CCBlade.Rotor, sections::Vector{CCBlade.Section}) diff --git a/src/combined_broadband.jl b/src/combined_broadband.jl new file mode 100644 index 00000000..df12b1d9 --- /dev/null +++ b/src/combined_broadband.jl @@ -0,0 +1,728 @@ +struct CombinedNoTipBroadbandSourceElement{ + TDirect<:AbstractDirectivity,TUInduction,TMachCorrection,TDoppler, + Tc0,Tnu,TΔr,Tchord,Th,TPsi,Ty0dot,Ty1dot,Ty1dot_fluid,Tτ,TΔτ,Tspan_uvec,Tchord_uvec,Tbl + } <: AbstractBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler} + # Speed of sound, m/s. + c0::Tc0 + # Kinematic viscosity, m^2/s + nu::Tnu + # Radial/spanwise length of element, m. + Δr::TΔr + # chord length of element, m. + chord::Tchord + # Trailing edge thickness, m. + h::Th + # Solid angle between blade surfaces immediately upstream of the trailing edge, rad. + Psi::TPsi + # Source position, m. + y0dot::Ty0dot + # Source velocity, m/s. + y1dot::Ty1dot + # Fluid velocity, m/s. + y1dot_fluid::Ty1dot_fluid + # Source time, s. + τ::Tτ + # Time step size, i.e. the amount of time this source element "exists" at with these properties, s. + Δτ::TΔτ + # Radial/spanwise unit vector, aka unit vector aligned with the element's span direction. + span_uvec::Tspan_uvec + # Chordwise unit vector, aka unit vector aligned with the element's chord line, pointing from leading edge to trailing edge. + chord_uvec::Tchord_uvec + # Boundary layer struct, i.e. an AbstractBoundaryLayer. + bl::Tbl + # `Bool` indicating chord_uvec×span_uvec will give a vector pointing from bottom side (usually pressure side) to top side (usually suction side) if `true`, or the opposite if `false`. + chord_cross_span_to_get_top_uvec::Bool + + function CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, Δr, chord, h, Psi, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, chord_cross_span_to_get_top_uvec::Bool) where {TDirect<:AbstractDirectivity,TUInduction,TMachCorrection,TDoppler} + return new{ + TDirect,TUInduction,TMachCorrection,TDoppler, + typeof(c0), typeof(nu), typeof(Δr), typeof(chord), typeof(h), typeof(Psi), typeof(y0dot), typeof(y1dot), typeof(y1dot_fluid), typeof(τ), typeof(Δτ), typeof(span_uvec), typeof(chord_uvec), typeof(bl) + }(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) + end +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), use the Prandtl-Glauert mach number correction, and Doppler-shift. +function CombinedNoTipBroadbandSourceElement(c0, nu, Δr, chord, h, Psi, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, chord_cross_span_to_get_top_uvec) + return CombinedNoTipBroadbandSourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +""" + CombinedNoTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + +Construct a source element for predicting turbulent boundary layer-trailing edge (TBLTE), laminar boundary layer-vortex shedding (LBLVS) noise, and trailing edge bluntness-vortex shedding (TEBVS) noise using the BPM/Brooks and Burley method, using position and velocity data expressed in a cylindrical coordinate system. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +Likewise, the `vn`, `vr`, and `vc` arguments are used to define the normal, radial, and circumferential velocity of the fluid (in a reference frame moving with the element) in the same cylindrical coordinate system. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- h: trailing edge thickness (m) +- Psi: solid angle between the blade surfaces immediately upstream of the trailing edge (rad) +- vn: normal velocity of fluid (m/s) +- vr: radial velocity of fluid (m/s) +- vc: circumferential velocity of the fluid (m/s) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) where {TDirect,TUInduction,TMachCorrection,TDoppler} + sθ, cθ = sincos(θ) + sϕ, cϕ = sincos(ϕ) + y0dot = @SVector [0, r*cθ, r*sθ] + T = eltype(y0dot) + y1dot = @SVector zeros(T, 3) + y1dot_fluid = @SVector [vn, vr*cθ - vc*sθ, vr*sθ + vc*cθ] + span_uvec = @SVector [0, cθ, sθ] + if twist_about_positive_y + chord_uvec = @SVector [-sϕ, cϕ*sθ, -cϕ*cθ] + else + chord_uvec = @SVector [-sϕ, -cϕ*sθ, cϕ*cθ] + end + + chord_cross_span_to_get_top_uvec = twist_about_positive_y + return CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), use the Prandtl-Glauert mach number correction, and Doppler-shift. +function CombinedNoTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + return CombinedNoTipBroadbandSourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) +end + +""" + CombinedNoTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, twist_about_positive_y) + +Construct a source element for predicting turbulent boundary layer-trailing edge (TBLTE), laminar boundary layer-vortex shedding (LBLVS) noise, and trailing edge bluntness-vortex shedding (TEBVS) noise using the BPM/Brooks and Burley method, using the velocity magnitude `U` and angle of attack `α`. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +The `U` and `α` arguments are the velocity magnitude normal to the source element length and the angle of attack, respectively. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- h: trailing edge thickness (m) +- Psi: solid angle between the blade surfaces immediately upstream of the trailing edge (rad) +- U: velocity magnitude (m/s) +- α: angle of attack (rad) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, twist_about_positive_y) where {TDirect,TUInduction,TMachCorrection,TDoppler} + precone = 0 + pitch = 0 + phi = ϕ - α + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec(ϕ, precone, pitch, r, θ, U, phi, twist_about_positive_y) + return CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), use the PrandtlGlauertMachCorrection, and Doppler-shift. +function CombinedNoTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, twist_about_positive_y::Bool) + return CombinedNoTipBroadbandSourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, twist_about_positive_y) +end + +""" + (trans::KinematicTransformation)(se::CombinedNoTipBroadbandSourceElement) + +Transform the position and orientation of a source element according to the coordinate system transformation `trans`. +""" +function (trans::KinematicTransformation)(se::CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}) where {TDirect,TUInduction,TMachCorrection,TDoppler} + linear_only = false + y0dot, y1dot = trans(se.τ, se.y0dot, se.y1dot, linear_only) + y0dot, y1dot_fluid = trans(se.τ, se.y0dot, se.y1dot_fluid, linear_only) + linear_only = true + span_uvec = trans(se.τ, se.span_uvec, linear_only) + chord_uvec = trans(se.τ, se.chord_uvec, linear_only) + + return CombinedNoTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(se.c0, se.nu, se.Δr, se.chord, se.h, se.Psi, y0dot, y1dot, y1dot_fluid, se.τ, se.Δτ, span_uvec, chord_uvec, se.bl, se.chord_cross_span_to_get_top_uvec) +end + +""" + CombinedNoTipOutput(G_s, G_p, G_alpha, G_teb, cbands, dt, t) + +Output of the combined broadband noise calculation not including tip vortex noise: the acoustic pressure autospectrum centered at time `t` over observer duration `dt` and observer frequencies `cbands` for the TBLTE suction side `G_s`, TBLTE pressure side `G_p`, TBLTE separation noise `G_alpha`, and trailing edge bluntness noise `G_teb`. +""" +struct CombinedNoTipOutput{NO,TF,TG<:AbstractVector{TF},TFreqs<:AcousticMetrics.AbstractProportionalBands{NO,:center},TDTime,TTime} <: AcousticMetrics.AbstractProportionalBandSpectrum{NO,TF} + G_s::TG + G_p::TG + G_alpha::TG + G_lblvs::TG + G_teb::TG + cbands::TFreqs + dt::TDTime + t::TTime + + function CombinedNoTipOutput(G_s::TG, G_p::TG, G_alpha::TG, G_lblvs, G_teb::TG, cbands::AcousticMetrics.AbstractProportionalBands{NO,:center}, dt, t) where {NO,TG} + ncbands = length(cbands) + length(G_s) == ncbands || throw(ArgumentError("length(G_s) must match length(cbands)")) + length(G_p) == ncbands || throw(ArgumentError("length(G_p) must match length(cbands)")) + length(G_alpha) == ncbands || throw(ArgumentError("length(G_alpha) must match length(cbands)")) + length(G_lblvs) == ncbands || throw(ArgumentError("length(G_lblvs) must match length(cbands)")) + length(G_teb) == ncbands || throw(ArgumentError("length(G_teb) must match length(cbands)")) + dt > zero(dt) || throw(ArgumentError("dt must be positive")) + return new{NO,eltype(TG),TG,typeof(cbands),typeof(dt),typeof(t)}(G_s, G_p, G_alpha, G_lblvs, G_teb, cbands, dt, t) + end +end + +@inline function Base.getindex(pbs::CombinedNoTipOutput, i::Int) + @boundscheck checkbounds(pbs, i) + return @inbounds pbs.G_s[i] + pbs.G_p[i] + pbs.G_alpha[i] + +pbs.G_lblvs[i] + pbs.G_teb[i] +end + +@inline AcousticMetrics.has_observer_time(pbs::CombinedNoTipOutput) = true +@inline AcousticMetrics.observer_time(pbs::CombinedNoTipOutput) = pbs.t +@inline AcousticMetrics.timestep(pbs::CombinedNoTipOutput) = pbs.dt +@inline AcousticMetrics.time_scaler(pbs::CombinedNoTipOutput, period) = timestep(pbs)/period + +function noise(se::CombinedNoTipBroadbandSourceElement, obs::AbstractAcousticObserver, t_obs, freqs::AcousticMetrics.AbstractProportionalBands{3, :center}) + # Position of the observer: + x_obs = obs(t_obs) + + # Need the angle of attack. + alphastar = angle_of_attack(se) + + # Need the directivity functions. + top_is_suction = is_top_suction(se.bl, alphastar) + r_er, Dl, Dh = directivity(se, x_obs, top_is_suction) + + # Need the fluid velocity normal to the span. + # Brooks and Burley 2001 are a bit ambiguous on whether it should include induction, or just the freestream and rotation. + # + # * In the nomenclature section: `U` is "flow speed normal to span (`U_mn` with `mn` suppressed). + # So that's one point for "no induction." + # * In some discussion after equation (8), "The Mach number, `M = U/c0`, represents that component of velocity `U` normal to the span...". + # Hard to say one way or the other. + # * In equation (12), `U_mn` is the velocity without induction. + # So that's another point for "no induction." + # * Equation (14) defines `V_tot` as the velocity including the freestream, rotation, and induction. + # And then it defines `U` as the part of `V_tot` normal to the span. + # So that's a point for "yes induction." + # * In the directivity function definitions in equations (19) and (20), `M_tot` is used in the denominator, which seems to make it clear *that* velocity should include induction, since `V_tot` always includes induction. + # + # So, at the moment, the TBLTESourceElement type has a parameter TUInduction which, when true, will include induction in the flow speed normal to the span, and not otherwise. + U = speed_normal_to_span(se) + + # Reynolds number based on chord and the flow speed normal to span. + Re_c = U*se.chord/se.nu + + # Also need the displacement thicknesses for the pressure and suction sides. + deltastar_s = disp_thickness_s(se.bl, Re_c, alphastar)*se.chord + deltastar_p = disp_thickness_p(se.bl, Re_c, alphastar)*se.chord + + # Need the boundary layer thickness for the pressure side for LBL-VS noise. + delta_p = bl_thickness_p(se.bl, Re_c, alphastar)*se.chord + + # Now that we've decided on the directivity functions and the displacement thickness, and we know the correct value of `top_is_suction` we should be able to switch the sign on `alphastar` if it's negative, and reference it to the zero-lift value, as the BPM report does. + alphastar_positive = abs_cs_safe(alphastar - alpha_zerolift(se.bl)) + + # Mach number of the flow speed normal to span. + M = U/se.c0 + + # This stuff is used to decide if the blade element is stalled or not. + alphastar0 = alpha_stall(se.bl, Re_c) + gamma0_deg = gamma0(M) + deep_stall = (alphastar_positive*180/pi) > min(gamma0_deg, alphastar0*180/pi) + # if deep_stall + # println("deep_stall! M = $(M), alphastar_positive*180/pi = $(alphastar_positive*180/pi), gamma0_deg = $(gamma0_deg), alphastar0*180/pi = $(alphastar0*180/pi)") + # println("forcing deep_stall == false") + # deep_stall = false + # end + + St_peak_p = St_1(M) + St_peak_alpha = St_2(St_peak_p, alphastar_positive) + St_peak_s = 0.5*(St_peak_p + St_peak_alpha) + + Re_deltastar_p = U*deltastar_p/se.nu + k_1 = K_1(Re_c) + k_2 = K_2(Re_c, M, alphastar_positive) + Δk_1 = DeltaK_1(alphastar_positive, Re_deltastar_p) + + deltastar_s_U = deltastar_s/U + deltastar_p_U = deltastar_p/U + + # Stuff for LBLVS noise. + delta_p_U = delta_p/U + St_p_p = St_peak_prime(St_1_prime(Re_c), alphastar_positive) + Re_c_over_Re_c0 = Re_c / Re_c0(alphastar_positive) + g2 = G2(Re_c_over_Re_c0) + g3 = G3(alphastar_positive) + + # Brooks and Burley 2001 recommend a Prandtl-Glauert style Mach number correction, but only for the TBLTE noise. + # But whether or not it's included is dependent on the TMachCorrection type parameter for the source element. + m_corr = mach_correction(se, M) + + # Equation 73 from the BPM report. + deltastar_avg = 0.5*(deltastar_p + deltastar_s) + + h_over_deltastar_avg = se.h/deltastar_avg + h_U = se.h/U + St_3pp = St_3prime_peak(h_over_deltastar_avg, se.Psi) + g4 = G4(h_over_deltastar_avg, se.Psi) + + # The Brooks and Burley autospectrums appear to be scaled by the usual squared reference pressure (20 μPa)^2, but I'd like things in dimensional units, so multiply through by that. + pref2 = 4e-10 + G_s_scaler = (deltastar_s*M^5*se.Δr*Dh)/(r_er^2)*m_corr + G_s = _tble_te_s.(freqs, deltastar_s_U, Re_c, St_peak_s, k_1, G_s_scaler, deep_stall).*pref2 + + G_p_scaler = (deltastar_p*M^5*se.Δr*Dh)/(r_er^2)*m_corr + G_p = _tble_te_p.(freqs, deltastar_p_U, Re_c, St_peak_p, k_1, Δk_1, G_p_scaler, deep_stall).*pref2 + + G_alpha_scaler_l = (deltastar_s*M^5*se.Δr*Dl)/(r_er^2)*m_corr + G_alpha_scaler_h = G_s_scaler + G_alpha = _tble_te_alpha.(freqs, Re_c, deltastar_s_U, St_peak_alpha, k_2, G_alpha_scaler_l, G_alpha_scaler_h, deep_stall).*pref2 + + G_lbl_vs_scaler = (delta_p*M^5*se.Δr*Dh)/(r_er^2) + G_lbl_vs = _lbl_vs.(freqs, delta_p_U, St_p_p, g2, g3, G_lbl_vs_scaler) .* pref2 + + G_teb_vs_scaler = (se.h*(M^5.5)*se.Δr*Dh)/(r_er^2) + G_teb_vs = _teb_vs.(freqs, h_U, h_over_deltastar_avg, St_3pp, se.Psi, g4, G_teb_vs_scaler) .* pref2 + + # Also need the Doppler shift for this source-observer combination. + doppler = doppler_factor(se, obs, t_obs) + + # Get the doppler-shifted time step and proportional bands. + dt = se.Δτ/doppler + freqs_obs = AcousticMetrics.center_bands(freqs, doppler) + @assert AcousticMetrics.freq_scaler(freqs_obs) ≈ doppler + + # All done. + return CombinedNoTipOutput(G_s, G_p, G_alpha, G_lbl_vs, G_teb_vs, freqs_obs, dt, t_obs) +end + +struct CombinedWithTipBroadbandSourceElement{ + TDirect<:AbstractDirectivity,TUInduction,TMachCorrection,TDoppler, + Tc0,Tnu,TΔr,Tchord,Th,TPsi,Ty0dot,Ty1dot,Ty1dot_fluid,Tτ,TΔτ,Tspan_uvec,Tchord_uvec,Tbl,Tblade_tip + } <: AbstractBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler} + # Speed of sound, m/s. + c0::Tc0 + # Kinematic viscosity, m^2/s + nu::Tnu + # Radial/spanwise length of element, m. + Δr::TΔr + # chord length of element, m. + chord::Tchord + # Trailing edge thickness, m. + h::Th + # Solid angle between blade surfaces immediately upstream of the trailing edge, rad. + Psi::TPsi + # Source position, m. + y0dot::Ty0dot + # Source velocity, m/s. + y1dot::Ty1dot + # Fluid velocity, m/s. + y1dot_fluid::Ty1dot_fluid + # Source time, s. + τ::Tτ + # Time step size, i.e. the amount of time this source element "exists" at with these properties, s. + Δτ::TΔτ + # Radial/spanwise unit vector, aka unit vector aligned with the element's span direction. + span_uvec::Tspan_uvec + # Chordwise unit vector, aka unit vector aligned with the element's chord line, pointing from leading edge to trailing edge. + chord_uvec::Tchord_uvec + # Boundary layer struct, i.e. an AbstractBoundaryLayer. + bl::Tbl + # Blade tip struct, i.e. and AbstractBladeTip + blade_tip::Tblade_tip + # `Bool` indicating chord_uvec×span_uvec will give a vector pointing from bottom side (usually pressure side) to top side (usually suction side) if `true`, or the opposite if `false`. + chord_cross_span_to_get_top_uvec::Bool + + function CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, Δr, chord, h, Psi, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, blade_tip, chord_cross_span_to_get_top_uvec::Bool) where {TDirect<:AbstractDirectivity,TUInduction,TMachCorrection,TDoppler} + return new{ + TDirect,TUInduction,TMachCorrection,TDoppler, + typeof(c0), typeof(nu), typeof(Δr), typeof(chord), typeof(h), typeof(Psi), typeof(y0dot), typeof(y1dot), typeof(y1dot_fluid), typeof(τ), typeof(Δτ), typeof(span_uvec), typeof(chord_uvec), typeof(bl), typeof(blade_tip) + }(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) + end +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), use the Prandtl-Glauert mach number correction, and Doppler-shift. +function CombinedWithTipBroadbandSourceElement(c0, nu, Δr, chord, h, Psi, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, blade_tip, chord_cross_span_to_get_top_uvec) + return CombinedWithTipBroadbandSourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) +end + +""" + CombinedWithTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + +Construct a source element for predicting turbulent boundary layer-trailing edge (TBLTE), laminar boundary layer-vortex shedding (LBLVS) noise, trailing edge bluntness-vortex shedding (TEBVS) noise, and tip vortex noise using the BPM/Brooks and Burley method, using position and velocity data expressed in a cylindrical coordinate system. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +Likewise, the `vn`, `vr`, and `vc` arguments are used to define the normal, radial, and circumferential velocity of the fluid (in a reference frame moving with the element) in the same cylindrical coordinate system. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- h: trailing edge thickness (m) +- Psi: solid angle between the blade surfaces immediately upstream of the trailing edge (rad) +- vn: normal velocity of fluid (m/s) +- vr: radial velocity of fluid (m/s) +- vc: circumferential velocity of the fluid (m/s) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- blade_tip: Blade tip struct, i.e. an AbstractBladeTip. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) where {TDirect,TUInduction,TMachCorrection,TDoppler} + sθ, cθ = sincos(θ) + sϕ, cϕ = sincos(ϕ) + y0dot = @SVector [0, r*cθ, r*sθ] + T = eltype(y0dot) + y1dot = @SVector zeros(T, 3) + y1dot_fluid = @SVector [vn, vr*cθ - vc*sθ, vr*sθ + vc*cθ] + span_uvec = @SVector [0, cθ, sθ] + if twist_about_positive_y + chord_uvec = @SVector [-sϕ, cϕ*sθ, -cϕ*cθ] + else + chord_uvec = @SVector [-sϕ, -cϕ*sθ, cϕ*cθ] + end + + chord_cross_span_to_get_top_uvec = twist_about_positive_y + return CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), use the Prandtl-Glauert mach number correction, and Doppler-shift. +function CombinedWithTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + return CombinedWithTipBroadbandSourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) +end + +""" + CombinedWithTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, blade_tip, twist_about_positive_y) + +Construct a source element for predicting turbulent boundary layer-trailing edge (TBLTE), laminar boundary layer-vortex shedding (LBLVS) noise, trailing edge bluntness-vortex shedding (TEBVS), and tip vortex noise using the BPM/Brooks and Burley method, using the velocity magnitude `U` and angle of attack `α`. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +The `U` and `α` arguments are the velocity magnitude normal to the source element length and the angle of attack, respectively. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- h: trailing edge thickness (m) +- Psi: solid angle between the blade surfaces immediately upstream of the trailing edge (rad) +- U: velocity magnitude (m/s) +- α: angle of attack (rad) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- blade_tip: Blade tip struct, i.e. an AbstractBladeTip +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, blade_tip, twist_about_positive_y) where {TDirect,TUInduction,TMachCorrection,TDoppler} + precone = 0 + pitch = 0 + phi = ϕ - α + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec(ϕ, precone, pitch, r, θ, U, phi, twist_about_positive_y) + return CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), use the PrandtlGlauertMachCorrection, and Doppler-shift. +function CombinedWithTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, blade_tip, twist_about_positive_y::Bool) + return CombinedWithTipBroadbandSourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, blade_tip, twist_about_positive_y) +end + +""" + (trans::KinematicTransformation)(se::CombinedWithTipBroadbandSourceElement) + +Transform the position and orientation of a source element according to the coordinate system transformation `trans`. +""" +function (trans::KinematicTransformation)(se::CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}) where {TDirect,TUInduction,TMachCorrection,TDoppler} + linear_only = false + y0dot, y1dot = trans(se.τ, se.y0dot, se.y1dot, linear_only) + y0dot, y1dot_fluid = trans(se.τ, se.y0dot, se.y1dot_fluid, linear_only) + linear_only = true + span_uvec = trans(se.τ, se.span_uvec, linear_only) + chord_uvec = trans(se.τ, se.chord_uvec, linear_only) + + return CombinedWithTipBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(se.c0, se.nu, se.Δr, se.chord, se.h, se.Psi, y0dot, y1dot, y1dot_fluid, se.τ, se.Δτ, span_uvec, chord_uvec, se.bl, se.blade_tip, se.chord_cross_span_to_get_top_uvec) +end + +""" + CombinedWithTipOutput(G_s, G_p, G_alpha, G_teb, G_tip, cbands, dt, t) + +Output of the combined broadband noise calculation: the acoustic pressure autospectrum centered at time `t` over observer duration `dt` and observer frequencies `cbands` for the TBLTE suction side `G_s`, TBLTE pressure side `G_p`, TBLTE separation noise `G_alpha`, trailing edge bluntness noise `G_teb`, and tip vortex noise `G_tip`. +""" +struct CombinedWithTipOutput{NO,TF,TG<:AbstractVector{TF},TFreqs<:AcousticMetrics.AbstractProportionalBands{NO,:center},TDTime,TTime} <: AcousticMetrics.AbstractProportionalBandSpectrum{NO,TF} + G_s::TG + G_p::TG + G_alpha::TG + G_lblvs::TG + G_teb::TG + G_tip::TG + cbands::TFreqs + dt::TDTime + t::TTime + + function CombinedWithTipOutput(G_s::TG, G_p::TG, G_alpha::TG, G_lblvs, G_teb::TG, G_tip::TG, cbands::AcousticMetrics.AbstractProportionalBands{NO,:center}, dt, t) where {NO,TG} + ncbands = length(cbands) + length(G_s) == ncbands || throw(ArgumentError("length(G_s) must match length(cbands)")) + length(G_p) == ncbands || throw(ArgumentError("length(G_p) must match length(cbands)")) + length(G_alpha) == ncbands || throw(ArgumentError("length(G_alpha) must match length(cbands)")) + length(G_lblvs) == ncbands || throw(ArgumentError("length(G_lblvs) must match length(cbands)")) + length(G_teb) == ncbands || throw(ArgumentError("length(G_teb) must match length(cbands)")) + length(G_tip) == ncbands || throw(ArgumentError("length(G_tip) must match length(cbands)")) + dt > zero(dt) || throw(ArgumentError("dt must be positive")) + return new{NO,eltype(TG),TG,typeof(cbands),typeof(dt),typeof(t)}(G_s, G_p, G_alpha, G_lblvs, G_teb, G_tip, cbands, dt, t) + end +end + +@inline function Base.getindex(pbs::CombinedWithTipOutput, i::Int) + @boundscheck checkbounds(pbs, i) + return @inbounds pbs.G_s[i] + pbs.G_p[i] + pbs.G_alpha[i] + pbs.G_teb[i] + pbs.G_tip[i] +end + +@inline AcousticMetrics.has_observer_time(pbs::CombinedWithTipOutput) = true +@inline AcousticMetrics.observer_time(pbs::CombinedWithTipOutput) = pbs.t +@inline AcousticMetrics.timestep(pbs::CombinedWithTipOutput) = pbs.dt +@inline AcousticMetrics.time_scaler(pbs::CombinedWithTipOutput, period) = timestep(pbs)/period + +function noise(se::CombinedWithTipBroadbandSourceElement, obs::AbstractAcousticObserver, t_obs, freqs::AcousticMetrics.AbstractProportionalBands{3, :center}) + # Position of the observer: + x_obs = obs(t_obs) + + # Need the angle of attack. + alphastar = angle_of_attack(se) + + # Need the angle of attack, including the possible tip correction. + alphatip = tip_vortex_alpha_correction(se.blade_tip, alphastar) + + # Need the directivity functions. + # But we have two angles of attack: one that includes a tip vortex correction, one that doesn't. + # But the angle of attack is only used to determine the value of `top_is_suction`, which in turn only depends on if the angle of attack is greater or less than the zero-lift angle of attack. + # And the tip vortex alpha correction is designed to not change that. + # So no worries about which alpha to use. + top_is_suction = is_top_suction(se.bl, alphastar) + r_er, Dl, Dh = directivity(se, x_obs, top_is_suction) + + # Need the fluid velocity normal to the span. + # Brooks and Burley 2001 are a bit ambiguous on whether it should include induction, or just the freestream and rotation. + # + # * In the nomenclature section: `U` is "flow speed normal to span (`U_mn` with `mn` suppressed). + # So that's one point for "no induction." + # * In some discussion after equation (8), "The Mach number, `M = U/c0`, represents that component of velocity `U` normal to the span...". + # Hard to say one way or the other. + # * In equation (12), `U_mn` is the velocity without induction. + # So that's another point for "no induction." + # * Equation (14) defines `V_tot` as the velocity including the freestream, rotation, and induction. + # And then it defines `U` as the part of `V_tot` normal to the span. + # So that's a point for "yes induction." + # * In the directivity function definitions in equations (19) and (20), `M_tot` is used in the denominator, which seems to make it clear *that* velocity should include induction, since `V_tot` always includes induction. + # + # So, at the moment, the TBLTESourceElement type has a parameter TUInduction which, when true, will include induction in the flow speed normal to the span, and not otherwise. + U = speed_normal_to_span(se) + + # Reynolds number based on chord and the flow speed normal to span. + Re_c = U*se.chord/se.nu + + # Also need the displacement thicknesses for the pressure and suction sides. + deltastar_s = disp_thickness_s(se.bl, Re_c, alphastar)*se.chord + deltastar_p = disp_thickness_p(se.bl, Re_c, alphastar)*se.chord + + # Need the boundary layer thickness for the pressure side for LBL-VS noise. + delta_p = bl_thickness_p(se.bl, Re_c, alphastar)*se.chord + + # Now that we've decided on the directivity functions and the displacement thickness, and we know the correct value of `top_is_suction` we should be able to switch the sign on `alphastar` if it's negative, and reference it to the zero-lift value, as the BPM report does. + alphastar_positive = abs_cs_safe(alphastar - alpha_zerolift(se.bl)) + + # Now that we've decided on the directivity functions and we know the correct value of `top_is_suction` we should be able to switch the sign on `alphastar` if it's negative, and reference it to the zero-lift value, as the BPM report does. + alphatip_positive = abs_cs_safe(alphatip - alpha_zerolift(se.bl)) + + # Mach number of the flow speed normal to span. + M = U/se.c0 + + # This stuff is used to decide if the blade element is stalled or not. + alphastar0 = alpha_stall(se.bl, Re_c) + gamma0_deg = gamma0(M) + deep_stall = (alphastar_positive*180/pi) > min(gamma0_deg, alphastar0*180/pi) + # if deep_stall + # println("deep_stall! M = $(M), alphastar_positive*180/pi = $(alphastar_positive*180/pi), gamma0_deg = $(gamma0_deg), alphastar0*180/pi = $(alphastar0*180/pi)") + # println("forcing deep_stall == false") + # deep_stall = false + # end + + St_peak_p = St_1(M) + St_peak_alpha = St_2(St_peak_p, alphastar_positive) + St_peak_s = 0.5*(St_peak_p + St_peak_alpha) + + Re_deltastar_p = U*deltastar_p/se.nu + k_1 = K_1(Re_c) + k_2 = K_2(Re_c, M, alphastar_positive) + Δk_1 = DeltaK_1(alphastar_positive, Re_deltastar_p) + + deltastar_s_U = deltastar_s/U + deltastar_p_U = deltastar_p/U + + # Stuff for LBLVS noise. + delta_p_U = delta_p/U + St_p_p = St_peak_prime(St_1_prime(Re_c), alphastar_positive) + Re_c_over_Re_c0 = Re_c / Re_c0(alphastar_positive) + g2 = G2(Re_c_over_Re_c0) + g3 = G3(alphastar_positive) + + # Brooks and Burley 2001 recommend a Prandtl-Glauert style Mach number correction, but only for the TBLTE noise. + # But whether or not it's included is dependent on the TMachCorrection type parameter for the source element. + m_corr = mach_correction(se, M) + + # Equation 73 from the BPM report. + deltastar_avg = 0.5*(deltastar_p + deltastar_s) + + h_over_deltastar_avg = se.h/deltastar_avg + h_U = se.h/U + St_3pp = St_3prime_peak(h_over_deltastar_avg, se.Psi) + g4 = G4(h_over_deltastar_avg, se.Psi) + + # Need the maximum mach number near the tip vortex. + M_max = tip_vortex_max_mach_number(se.blade_tip, M, alphatip_positive) + + # Now we can find the maximum speed near the tip vortex. + U_max = M_max * se.c0 + + # Get the tip vortex size. + l = tip_vortex_size_c(se.blade_tip, alphatip_positive) * se.chord + + # The Brooks and Burley autospectrums appear to be scaled by the usual squared reference pressure (20 μPa)^2, but I'd like things in dimensional units, so multiply through by that. + pref2 = 4e-10 + G_s_scaler = (deltastar_s*M^5*se.Δr*Dh)/(r_er^2)*m_corr + G_s = _tble_te_s.(freqs, deltastar_s_U, Re_c, St_peak_s, k_1, G_s_scaler, deep_stall).*pref2 + + G_p_scaler = (deltastar_p*M^5*se.Δr*Dh)/(r_er^2)*m_corr + G_p = _tble_te_p.(freqs, deltastar_p_U, Re_c, St_peak_p, k_1, Δk_1, G_p_scaler, deep_stall).*pref2 + + G_alpha_scaler_l = (deltastar_s*M^5*se.Δr*Dl)/(r_er^2)*m_corr + G_alpha_scaler_h = G_s_scaler + G_alpha = _tble_te_alpha.(freqs, Re_c, deltastar_s_U, St_peak_alpha, k_2, G_alpha_scaler_l, G_alpha_scaler_h, deep_stall).*pref2 + + G_lbl_vs_scaler = (delta_p*M^5*se.Δr*Dh)/(r_er^2) + G_lbl_vs = _lbl_vs.(freqs, delta_p_U, St_p_p, g2, g3, G_lbl_vs_scaler) .* pref2 + + G_teb_vs_scaler = (se.h*(M^5.5)*se.Δr*Dh)/(r_er^2) + G_teb_vs = _teb_vs.(freqs, h_U, h_over_deltastar_avg, St_3pp, se.Psi, g4, G_teb_vs_scaler) .* pref2 + + l_U_max = l/U_max + G_tip_scaler = (M^2*M_max^3*l^2*Dh/r_er^2) + G_tip = _tip.(freqs, l_U_max, G_tip_scaler) .* pref2 + + # Also need the Doppler shift for this source-observer combination. + doppler = doppler_factor(se, obs, t_obs) + + # Get the doppler-shifted time step and proportional bands. + dt = se.Δτ/doppler + freqs_obs = AcousticMetrics.center_bands(freqs, doppler) + # @assert AcousticMetrics.freq_scaler(freqs_obs) ≈ doppler + + # All done. + return CombinedWithTipOutput(G_s, G_p, G_alpha, G_lbl_vs, G_teb_vs, G_tip, freqs_obs, dt, t_obs) +end + +function pbs_suction(pbs::Union{TBLTEOutput,CombinedNoTipOutput,CombinedWithTipOutput}) + t = AcousticMetrics.observer_time(pbs) + dt = AcousticMetrics.timestep(pbs) + cbands = AcousticMetrics.center_bands(pbs) + return AcousticMetrics.ProportionalBandSpectrumWithTime(pbs.G_s, cbands, dt, t) +end + +function pbs_pressure(pbs::Union{TBLTEOutput,CombinedNoTipOutput,CombinedWithTipOutput}) + t = AcousticMetrics.observer_time(pbs) + dt = AcousticMetrics.timestep(pbs) + cbands = AcousticMetrics.center_bands(pbs) + return AcousticMetrics.ProportionalBandSpectrumWithTime(pbs.G_p, cbands, dt, t) +end + +function pbs_alpha(pbs::Union{TBLTEOutput,CombinedNoTipOutput,CombinedWithTipOutput}) + t = AcousticMetrics.observer_time(pbs) + dt = AcousticMetrics.timestep(pbs) + cbands = AcousticMetrics.center_bands(pbs) + return AcousticMetrics.ProportionalBandSpectrumWithTime(pbs.G_alpha, cbands, dt, t) +end + +function pbs_lblvs(pbs::Union{TBLTEOutput,CombinedNoTipOutput,CombinedWithTipOutput}) + t = AcousticMetrics.observer_time(pbs) + dt = AcousticMetrics.timestep(pbs) + cbands = AcousticMetrics.center_bands(pbs) + return AcousticMetrics.ProportionalBandSpectrumWithTime(pbs.G_lblvs, cbands, dt, t) +end + +function pbs_teb(pbs::Union{CombinedNoTipOutput,CombinedWithTipOutput}) + t = AcousticMetrics.observer_time(pbs) + dt = AcousticMetrics.timestep(pbs) + cbands = AcousticMetrics.center_bands(pbs) + return AcousticMetrics.ProportionalBandSpectrumWithTime(pbs.G_teb, cbands, dt, t) +end + +function pbs_tip(pbs::CombinedWithTipOutput) + t = AcousticMetrics.observer_time(pbs) + dt = AcousticMetrics.timestep(pbs) + cbands = AcousticMetrics.center_bands(pbs) + return AcousticMetrics.ProportionalBandSpectrumWithTime(pbs.G_tip, cbands, dt, t) +end diff --git a/src/deprecated.jl b/src/deprecated.jl new file mode 100644 index 00000000..d36b179c --- /dev/null +++ b/src/deprecated.jl @@ -0,0 +1,7 @@ +const CompactSourceElement = CompactF1ASourceElement +Base.@deprecate CompactSourceElement CompactF1ASourceElement + +Base.@deprecate f1a(se::CompactF1ASourceElement, obs::AbstractAcousticObserver, t_obs) noise(se::CompactF1ASourceElement, obs::AbstractAcousticObserver, t_obs) +Base.@deprecate f1a(se::CompactF1ASourceElement, obs::AbstractAcousticObserver) noise(se::CompactF1ASourceElement, obs::AbstractAcousticObserver) + +Base.@deprecate source_elements_ccblade(rotor, sections, ops, outputs, area_per_chord2, period, num_src_times, positive_x_rotation) f1a_source_elements_ccblade(rotor, sections, ops, outputs, area_per_chord2, period, num_src_times, positive_x_rotation) diff --git a/src/core.jl b/src/f1a.jl similarity index 61% rename from src/core.jl rename to src/f1a.jl index 99ef237a..7a407479 100644 --- a/src/core.jl +++ b/src/f1a.jl @@ -1,33 +1,45 @@ -@concrete struct CompactSourceElement +struct CompactF1ASourceElement{ + Tρ0,Tc0,TΔr,TΛ,Ty0dot,Ty1dot,Ty2dot,Ty3dot,Tf0dot,Tf1dot,Tτ,Tspan_uvec + } <: AbstractCompactSourceElement # Density. - ρ0 + ρ0::Tρ0 # Speed of sound. - c0 + c0::Tc0 # Radial length of element. - Δr + Δr::TΔr # Cross-sectional area. - Λ + Λ::TΛ # Source position and its time derivatives. - y0dot - y1dot - y2dot - y3dot + y0dot::Ty0dot + y1dot::Ty1dot + y2dot::Ty2dot + y3dot::Ty3dot # Load *on the fluid*, and its time derivative. - f0dot - f1dot + f0dot::Tf0dot + f1dot::Tf1dot # Source time. - τ + τ::Tτ # orientation of the element. Only used for WriteVTK. - u + span_uvec::Tspan_uvec end """ - CompactSourceElement(ρ0, c0, r, θ, Δr, Λ, fn, fc, τ) + CompactF1ASourceElement(ρ0, c0, r, θ, Δr, Λ, fn, fr, fc, τ) -Construct a source element to be used with the compact form of Farassat's formulation 1A. +Construct a source element to be used with the compact form of Farassat's formulation 1A, using position and loading data expressed in a cylindrical coordinate system. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +Likewise, the `fn`, `fr`, and `fc` arguments are used to define the normal, radial, and circumferential loading per unit span *on the fluid* (in a reference frame moving with the element) in the same cylindrical coordinate system. +The cylindrical coordinate system is defined as follows: + + * The normal axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. # Arguments - ρ0: Ambient air density (kg/m^3) @@ -41,7 +53,7 @@ Construct a source element to be used with the compact form of Farassat's formul - fc: circumferential load *on the fluid* (N/m) - τ: source time (s) """ -function CompactSourceElement(ρ0, c0, r, θ, Δr, Λ, fn, fr, fc, τ) +function CompactF1ASourceElement(ρ0, c0, r, θ, Δr, Λ, fn, fr, fc, τ) s, c = sincos(θ) y0dot = @SVector [0, r*c, r*s] T = eltype(y0dot) @@ -51,125 +63,46 @@ function CompactSourceElement(ρ0, c0, r, θ, Δr, Λ, fn, fr, fc, τ) f0dot = @SVector [fn, c*fr - s*fc, s*fr + c*fc] T = eltype(f0dot) f1dot = @SVector zeros(T, 3) - u = @SVector [0, c, s] + span_uvec = @SVector [0, c, s] - return CompactSourceElement(ρ0, c0, Δr, Λ, y0dot, y1dot, y2dot, y3dot, f0dot, f1dot, τ, u) + return CompactF1ASourceElement(ρ0, c0, Δr, Λ, y0dot, y1dot, y2dot, y3dot, f0dot, f1dot, τ, span_uvec) end """ - (trans::KinematicTransformation)(se::CompactSourceElement) + (trans::KinematicTransformation)(se::CompactF1ASourceElement) Transform the position and forces of a source element according to the coordinate system transformation `trans`. """ -function (trans::KinematicTransformation)(se::CompactSourceElement) +function (trans::KinematicTransformation)(se::CompactF1ASourceElement) linear_only = false y0dot, y1dot, y2dot, y3dot = trans(se.τ, se.y0dot, se.y1dot, se.y2dot, se.y3dot, linear_only) linear_only = true f0dot, f1dot= trans(se.τ, se.f0dot, se.f1dot, linear_only) - u = trans(se.τ, se.u, linear_only) + span_uvec = trans(se.τ, se.span_uvec, linear_only) - return CompactSourceElement(se.ρ0, se.c0, se.Δr, se.Λ, y0dot, y1dot, y2dot, y3dot, f0dot, f1dot, se.τ, u) -end - -""" -Supertype for an object that recieves a noise prediction when combined with an -acoustic analogy source; computational equivalent of a microphone. - - (obs::AcousticObserver)(t) - -Calculate the position of the acoustic observer at time `t`. -""" -abstract type AcousticObserver end - -""" - StationaryAcousticObserver(x) - -Construct an acoustic observer that does not move with position `x` (m). -""" -@concrete struct StationaryAcousticObserver <: AcousticObserver - x -end - -""" - ConstVelocityAcousticObserver(t0, x0, v) - -Construct an acoustic observer moving with a constant velocity `v`, located at -`x0` at time `t0`. -""" -@concrete struct ConstVelocityAcousticObserver <: AcousticObserver - t0 - x0 - v -end - -function (obs::StationaryAcousticObserver)(t) - return obs.x -end - -function (obs::ConstVelocityAcousticObserver)(t) - return obs.x0 .+ (t - obs.t0).*obs.v -end - -""" - adv_time(se::CompactSourceElement, obs::AcousticObserver) - -Calculate the time an acoustic wave emmited by source `se` at time `se.τ` is -recieved by observer `obs`. -""" -adv_time(se::CompactSourceElement, obs::AcousticObserver) - -function adv_time(se::CompactSourceElement, obs::StationaryAcousticObserver) - rv = obs(se.τ) .- se.y0dot - r = norm_cs_safe(rv) - t = se.τ + r/se.c0 - return t -end - -function adv_time(se::CompactSourceElement, obs::ConstVelocityAcousticObserver) - # Location of the observer at the source time. - x = obs(se.τ) - - # Vector from the source to the observer at the source time. - rv = x .- se.y0dot - - # Distance from the source to the observer at the source time. - r = norm_cs_safe(rv) - - # Speed of the observer divided by speed of sound. - Mo = norm_cs_safe(obs.v)/se.c0 - - # Unit vector pointing from the source to the observer. - rhat = rv/r - - # Velocity of observer dotted with rhat at the source time. - Mor = dot_cs_safe(obs.v, rhat)/se.c0 - - # Now get the observer time. - t = se.τ + r/se.c0*((Mor + sqrt(Mor^2 + 1 - Mo^2))/(1 - Mo^2)) - - return t + return CompactF1ASourceElement(se.ρ0, se.c0, se.Δr, se.Λ, y0dot, y1dot, y2dot, y3dot, f0dot, f1dot, se.τ, span_uvec) end """ Output of the F1A calculation: the acoustic pressure value at time `t`, broken into monopole component `p_m` and dipole component `p_d`. """ -@concrete struct F1AOutput - t - p_m - p_d +struct F1AOutput{Tt,Tp_m,Tp_d} + t::Tt + p_m::Tp_m + p_d::Tp_d end """ - f1a(se::CompactSourceElement, obs::AcousticObserver, t_obs) + noise(se::CompactF1ASourceElement, obs::AbstractAcousticObserver, t_obs) Calculate the acoustic pressure emitted by source element `se` and recieved by observer `obs` at time `t_obs`, returning an [`F1AOutput`](@ref) object. The correct value for `t_obs` can be found using [`adv_time`](@ref). """ -function f1a(se::CompactSourceElement, obs::AcousticObserver, t_obs) +function noise(se::CompactF1ASourceElement, obs::AbstractAcousticObserver, t_obs) x_obs = obs(t_obs) rv = x_obs .- se.y0dot @@ -224,17 +157,16 @@ function f1a(se::CompactSourceElement, obs::AcousticObserver, t_obs) end """ - f1a(se::CompactSourceElement, obs::AcousticObserver) + noise(se::CompactF1ASourceElement, obs::AbstractAcousticObserver) Calculate the acoustic pressure emitted by source element `se` and recieved by observer `obs`, returning an [`F1AOutput`](@ref) object. """ -function f1a(se::CompactSourceElement, obs::AcousticObserver) +function noise(se::CompactF1ASourceElement, obs::AbstractAcousticObserver) t_obs = adv_time(se, obs) - return f1a(se, obs, t_obs) + return noise(se, obs, t_obs) end - """ common_obs_time(apth::AbstractArray{<:F1AOutput}, period, n, axis=1) @@ -263,24 +195,20 @@ function common_obs_time(apth, period, n, axis=1) return t_common end -struct F1APressureTimeHistory{IsEven,T_p_m,T_p_d,T_dt,T_t0} <: AcousticMetrics.AbstractPressureTimeHistory{IsEven} - p_m::T_p_m - p_d::T_p_d - dt::T_dt - t0::T_t0 - function F1APressureTimeHistory{IsEven,T_p_m,T_p_d,T_dt,T_t0}(p_m, p_d, dt, t0) where {IsEven,T_p_m,T_p_d,T_dt,T_t0} +struct F1APressureTimeHistory{IsEven,Tp_m,Tp_d,Tdt,Tt0} <: AcousticMetrics.AbstractPressureTimeHistory{IsEven} + p_m::Tp_m + p_d::Tp_d + dt::Tdt + t0::Tt0 + function F1APressureTimeHistory{IsEven}(p_m, p_d, dt, t0) where {IsEven} n_p_m = length(p_m) n_p_d = length(p_d) - n_p_m == n_p_d || throw(ArgumentError("length(p_m) = $(n_p_m) is not the same as length(p_d) = $(n_p_d)")) - iseven(n_p_m) == IsEven || throw(ArgumentError("IsEven = $(IsEven) is not consistent with length(p_m) = $n_p_m")) - return new(p_m, p_d, dt, t0) + n_p_m == n_p_d || throw(ArgumentError("length(p_m) is not the same as length(p_d)")) + iseven(n_p_m) == IsEven || throw(ArgumentError("IsEven is not consistent with length(p_m) and length(p_d)")) + return new{IsEven, typeof(p_m), typeof(p_d), typeof(dt), typeof(t0)}(p_m, p_d, dt, t0) end end -function F1APressureTimeHistory{IsEven}(p_m::T_p_m, p_d::T_p_d, dt::T_dt, t0::T_t0) where {IsEven,T_p_m,T_p_d,T_dt,T_t0} - return F1APressureTimeHistory{IsEven,T_p_m,T_p_d,T_dt,T_t0}(p_m, p_d, dt, t0) -end - function F1APressureTimeHistory(p_m, p_d, dt, t0) ie = iseven(length(p_m)) return F1APressureTimeHistory{ie}(p_m, p_d, dt, t0) @@ -335,17 +263,21 @@ end @inline pressure_monopole(ap::F1APressureTimeHistory) = ap.p_m @inline pressure_dipole(ap::F1APressureTimeHistory) = ap.p_d +apth_monopole(ap::F1APressureTimeHistory) = AcousticMetrics.PressureTimeHistory(pressure_monopole(ap), AcousticMetrics.timestep(ap), AcousticMetrics.starttime(ap)) +apth_dipole(ap::F1APressureTimeHistory) = AcousticMetrics.PressureTimeHistory(pressure_dipole(ap), AcousticMetrics.timestep(ap), AcousticMetrics.starttime(ap)) + """ - combine!(apth_out::F1APressureTimeHistory, apth::AbstractArray{<:F1AOutput}, axis; f_interp=akima) + combine!(apth_out::F1APressureTimeHistory, apth::AbstractArray{<:F1AOutput}, time_axis; f_interp=akima) Combine the acoustic pressures of multiple sources (`apth`) into a single acoustic pressure time history `apth_out`. -The input acoustic pressures `apth` are interpolated onto the time grid -returned by `time(apth_out)`. The interpolation is performed by the function `f_intep(xpt, ypt, -x)`, where `xpt` and `ytp` are the input grid and function values, respectively, -and `x` is the output grid. +The input acoustic pressures `apth` are interpolated onto the time grid returned by `time(apth_out)`. +The interpolation is performed by the function `f_intep(xpt, ypt, x)`, where `xpt` and `ytp` are the input grid and function values, respectively, and `x` is the output grid. +`time_axis` is an integer indicating the time_axis of the `apth` array along which time varies. +For example, if `time_axis == 1` and `apth` is a three-dimensional array, then `apth[:, i, j]` would be the `F1AOutput` objects of the `i`, `j` source element for all time. +But if `time_axis == 3`, then `apth[i, j, :]` would be the `F1AOutput` objects of the `i`, `j` source element for all time. """ -function combine!(apth_out, apth, axis; f_interp=akima) +function combine!(apth_out, apth, time_axis; f_interp=akima) # This makes no difference compared to passing in a cache (an object with # working arrays that I'd copy stuff to) to this function (sometimes a # speedup of <1%, sometimes a slowdown of <1%). I'm sure it'd be worse if I @@ -361,15 +293,18 @@ function combine!(apth_out, apth, axis; f_interp=akima) p_m_interp = pressure_monopole(apth_out) p_d_interp = pressure_dipole(apth_out) - dimsAPTH = [axes(t_obs)...] + # dimsAPTH = [axes(t_obs)...] + dimsAPTH = axes(t_obs) ndimsAPTH = ndims(t_obs) - alldims = [1:ndimsAPTH;] # Is this any better than `collect(1:ndimsAPTH)`? + alldims = 1:ndimsAPTH - otherdims = setdiff(alldims, axis) + otherdims = setdiff(alldims, time_axis) itershape = tuple(dimsAPTH[otherdims]...) - idx = Any[first(ind) for ind in axes(t_obs)] - idx[axis] = Colon() + # idx = Any[first(ind) for ind in axes(t_obs)] + # idx[time_axis] = Colon() + # Create an array we'll use to index pbs_in, with a `Colon()` for the time_axis position and integers of the first value for all the others. + idx = [ifelse(d==time_axis, Colon(), first(ind)) for (d, ind) in enumerate(axes(t_obs))] nidx = length(otherdims) indices = CartesianIndices(itershape) @@ -383,21 +318,28 @@ function combine!(apth_out, apth, axis; f_interp=akima) for i in 1:nidx idx[otherdims[i]] = I.I[i] end - # Now I have the current indices of the source that I want to - # interpolate. - p_m_interp .+= f_interp(t_obs[idx...], p_m[idx...], t_common) - p_d_interp .+= f_interp(t_obs[idx...], p_d[idx...], t_common) + # Now I have the current indices of the source that I want to interpolate. + # p_m_interp .+= f_interp(t_obs[idx...], p_m[idx...], t_common) + # p_d_interp .+= f_interp(t_obs[idx...], p_d[idx...], t_common) + # Let's be cool and use views. + t_obs_v = @view t_obs[idx...] + p_m_v = @view p_m[idx...] + p_d_v = @view p_d[idx...] + p_m_interp .+= f_interp(t_obs_v, p_m_v, t_common) + p_d_interp .+= f_interp(t_obs_v, p_d_v, t_common) end return apth_out end """ - combine(apth::AbstractArray{<:F1AOutput}, period::AbstractFloat, n::Integer, axis=1; f_interp=akima) + combine(apth::AbstractArray{<:F1AOutput}, period::AbstractFloat, n::Integer, time_axis=1; f_interp=akima) + +Combine the acoustic pressures of multiple sources (`apth`) into a single acoustic pressure time history on a time grid of size `n` extending over time length `period`. -Combine the acoustic pressures of multiple sources (`apth`) into a single -acoustic pressure time history on a time grid of size `n` extending over time -length `period`. +`time_axis` is an integer indicating the time_axis of the `apth` array along which time varies. +For example, if `time_axis == 1` and `apth` is a three-dimensional array, then `apth[:, i, j]` would be the `F1AOutput` objects of the `i`, `j` source element for all time. +But if `time_axis == 3`, then `apth[i, j, :]` would be the `F1AOutput` objects of the `i`, `j` source element for all time. """ function combine(apth, period, n::Integer, axis::Integer=1; f_interp=akima) # Get the common observer time. diff --git a/src/lbl_vs.jl b/src/lbl_vs.jl new file mode 100644 index 00000000..f5dfde0a --- /dev/null +++ b/src/lbl_vs.jl @@ -0,0 +1,332 @@ +function St_1_prime(Re_c) + # Equation 55 in the BPM report. + T = typeof(Re_c) + if Re_c ≤ 1.3e5 + return 0.18*one(T) + elseif Re_c ≤ 4.0e5 + return 0.001756*Re_c^(0.3931) + else + return 0.28*one(T) + end +end + +function St_peak_prime(St_1_p, alphastar) + # Equation 56 in the BPM report. + alphastar_deg = alphastar*180/pi + return St_1_p*10.0^(-0.04*alphastar_deg) +end + +function G1(St_prime_over_St_peak_prime) + # Equation 57 in the BPM report. + e = St_prime_over_St_peak_prime + if e ≤ 0.5974 + return 39.8*log10(e) - 11.12 + elseif e ≤ 0.8545 + 98.409*log10(e) + 2.0 + elseif e ≤ 1.17 + return -5.076 + sqrt(2.484 - 506.25*log10(e)^2) + elseif e ≤ 1.674 + return -98.409*log10(e) + 2.0 + else + return -39.8*log10(e) - 11.12 + end +end + +function Re_c0(alphastar) + # Equation 59 in the BPM report. + alphastar_deg = alphastar*180/pi + if alphastar_deg ≤ 3.0 + return 10.0^(0.215*alphastar_deg + 4.978) + else + return 10.0^(0.120*alphastar_deg + 5.263) + end +end + +function G2(Re_c_over_Re_c0) + # Equation 58 in the BPM report. + d = Re_c_over_Re_c0 + if d ≤ 0.3237 + return 77.852*log10(d) + 15.328 + elseif d ≤ 0.5689 + return 65.188*log10(d) + 9.125 + elseif d ≤ 1.7579 + return -114.052*log10(d)^2 + elseif d ≤ 3.0889 + return -65.188*log10(d) + 9.125 + else + return -77.852*log10(d) + 15.328 + end +end + +function G3(alphastar) + alphastar_deg = alphastar*180/pi + return 171.04 - 3.03*alphastar_deg +end + +function LBL_VS(freq, nu, L, chord, U, M, M_c, r_e, theta_e, phi_e, alphastar, bl) + Re_c = U*chord/nu + delta_p = bl_thickness_p(bl, Re_c, alphastar)*chord + # Equation (54) from the BPM report. + St_prime = freq*delta_p/U + St_p_p = St_peak_prime(St_1_prime(Re_c), alphastar) + + St_prime_over_St_peak_prime = St_prime/St_p_p + Re_c_over_Re_c0 = Re_c / Re_c0(alphastar) + # SPL = 10*log10(delta_p*M^5*L*Dbar_h(theta_e, phi_e, M, M_c)/r_e^2) + G1(St_prime_over_St_peak_prime) + G2(Re_c_over_Re_c0) + G3(alphastar) + # Brooks and Burley AIAA 2001-2210 style. + H_l = 10^(0.1*(G1(St_prime_over_St_peak_prime) + G2(Re_c_over_Re_c0) + G3(alphastar))) + G_lbl_vs = (delta_p*M^5*L*Dbar_h(theta_e, phi_e, M, M_c))/(r_e^2)*H_l + SPL = 10*log10(G_lbl_vs) + return SPL +end + +struct LBLVSSourceElement{ + TDirect<:AbstractDirectivity,TUInduction,TDoppler, + Tc0,Tnu,TΔr,Tchord,Ty0dot,Ty1dot,Ty1dot_fluid,Tτ,TΔτ,Tspan_uvec,Tchord_uvec,Tbl + } <: AbstractBroadbandSourceElement{TDirect,TUInduction,NoMachCorrection,TDoppler} + # Speed of sound, m/s. + c0::Tc0 + # Kinematic viscosity, m^2/s + nu::Tnu + # Radial/spanwise length of element, m. + Δr::TΔr + # chord length of element, m. + chord::Tchord + # Source position, m. + y0dot::Ty0dot + # Source velocity, m/s. + y1dot::Ty1dot + # Fluid velocity, m/s. + y1dot_fluid::Ty1dot_fluid + # Source time, s. + τ::Tτ + # Time step size, i.e. the amount of time this source element "exists" with these properties, s. + Δτ::TΔτ + # Radial/spanwise unit vector, aka unit vector aligned with the element's span direction. + span_uvec::Tspan_uvec + # Chordwise unit vector, aka unit vector aligned with the element's chord line, pointing from leading edge to trailing edge. + chord_uvec::Tchord_uvec + # Boundary layer struct, i.e. an AbstractBoundaryLayer. + bl::Tbl + # `Bool` indicating chord_uvec×span_uvec will give a vector pointing from bottom side (usually pressure side) to top side (usually suction side) if `true`, or the opposite if `false`. + chord_cross_span_to_get_top_uvec::Bool + + function LBLVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, Δr, chord, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, chord_cross_span_to_get_top_uvec::Bool) where {TDirect<:AbstractDirectivity,TUInduction,TDoppler} + return new{ + TDirect,TUInduction,TDoppler, + typeof(c0), typeof(nu), typeof(Δr), typeof(chord), typeof(y0dot), typeof(y1dot), typeof(y1dot_fluid), typeof(τ), typeof(Δτ), typeof(span_uvec), typeof(chord_uvec), typeof(bl) + }(c0, nu, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) + end +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), and Doppler-shift. +function LBLVSSourceElement(c0, nu, Δr, chord, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, chord_cross_span_to_get_top_uvec) + return LBLVSSourceElement{BrooksBurleyDirectivity,true,true}(c0, nu, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +""" + LBLVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + +Construct a source element for predicting laminar boundary layer-vortex shedding (LBLVS) noise using the BPM/Brooks and Burley method, using position and velocity data expressed in a cylindrical coordinate system. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +Likewise, the `vn`, `vr`, and `vc` arguments are used to define the normal, radial, and circumferential velocity of the fluid (in a reference frame moving with the element) in the same cylindrical coordinate system. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- vn: normal velocity of fluid (m/s) +- vr: radial velocity of fluid (m/s) +- vc: circumferential velocity of the fluid (m/s) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function LBLVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) where {TDirect,TUInduction,TDoppler} + sθ, cθ = sincos(θ) + sϕ, cϕ = sincos(ϕ) + y0dot = @SVector [0, r*cθ, r*sθ] + T = eltype(y0dot) + y1dot = @SVector zeros(T, 3) + y1dot_fluid = @SVector [vn, vr*cθ - vc*sθ, vr*sθ + vc*cθ] + span_uvec = @SVector [0, cθ, sθ] + if twist_about_positive_y + chord_uvec = @SVector [-sϕ, cϕ*sθ, -cϕ*cθ] + else + chord_uvec = @SVector [-sϕ, -cϕ*sθ, cϕ*cθ] + end + + chord_cross_span_to_get_top_uvec = twist_about_positive_y + return LBLVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), and Doppler-shift. +function LBLVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + return LBLVSSourceElement{BrooksBurleyDirectivity,true,true}(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) +end + +""" + LBLVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, twist_about_positive_y) + +Construct a source element for predicting laminar boundary layer-vortex shedding (LBLVS) noise using the BPM/Brooks and Burley method, using the velocity magnitude `U` and angle of attack `α`. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +The `U` and `α` arguments are the velocity magnitude normal to the source element length and the angle of attack, respectively. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- U: velocity magnitude (m/s) +- α: angle of attack (rad) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function LBLVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, twist_about_positive_y) where {TDirect,TUInduction,TDoppler} + precone = 0 + pitch = 0 + phi = ϕ - α + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec(ϕ, precone, pitch, r, θ, U, phi, twist_about_positive_y::Bool) + return LBLVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), and Doppler-shift. +function LBLVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, twist_about_positive_y) + return LBLVSSourceElement{BrooksBurleyDirectivity,true,true}(c0, nu, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, twist_about_positive_y) +end + +""" + (trans::KinematicTransformation)(se::LBLVSSourceElement) + +Transform the position and orientation of a source element according to the coordinate system transformation `trans`. +""" +function (trans::KinematicTransformation)(se::LBLVSSourceElement{TDirect,TUInduction,TDoppler}) where {TDirect,TUInduction,TDoppler} + linear_only = false + y0dot, y1dot = trans(se.τ, se.y0dot, se.y1dot, linear_only) + y0dot, y1dot_fluid = trans(se.τ, se.y0dot, se.y1dot_fluid, linear_only) + linear_only = true + span_uvec = trans(se.τ, se.span_uvec, linear_only) + chord_uvec = trans(se.τ, se.chord_uvec, linear_only) + + return LBLVSSourceElement{TDirect,TUInduction,TDoppler}(se.c0, se.nu, se.Δr, se.chord, y0dot, y1dot, y1dot_fluid, se.τ, se.Δτ, span_uvec, chord_uvec, se.bl, se.chord_cross_span_to_get_top_uvec) +end + +function _lbl_vs(freq, delta_p_U, St_p_p, g2, g3, scaler) + # St_prime = freq*deltastar_p/U + # St_prime_over_St_peak_prime = St_prime/St_p_p + # H_l = 10^(0.1*(G1(St_prime_over_St_peak_prime) + g2 + g3)) + St_prime = freq*delta_p_U + St_prime_over_St_peak_prime = St_prime/St_p_p + # return 10^(0.1*(G1(St_prime_over_St_peak_prime) + g2 + g3)) + H_l = 10^(0.1*(G1(St_prime_over_St_peak_prime) + g2 + g3)) + # G_lbl_vs = (deltastar_p*M^5*Δr*Dh)/(r_er^2)*H_l + G_lbl_vs = scaler*H_l + + # LBLVS = 10.0*log10((dpr*M^5*L*Dh)/rc^2)+G1+G2+G3 + # 10*log10((deltastar_p*M^5*Δr*Dh)/(r_er^2)*(10^(0.1*(G1(St_prime_over_St_peak_prime) + g2 + g3))) + # 10*log10((deltastar_p*M^5*Δr*Dh)/(r_er^2)) + 10*log10((10^(0.1*(G1(St_prime_over_St_peak_prime) + g2 + g3)))) + # 10*log10((deltastar_p*M^5*Δr*Dh)/(r_er^2)) + 10*(0.1*(G1(St_prime_over_St_peak_prime) + g2 + g3)) + # 10*log10((deltastar_p*M^5*Δr*Dh)/(r_er^2)) + G1(St_prime_over_St_peak_prime) + g2 + g3 + return G_lbl_vs +end + +function noise(se::LBLVSSourceElement, obs::AbstractAcousticObserver, t_obs, freqs::AcousticMetrics.AbstractProportionalBands{3, :center}) + # Position of the observer: + x_obs = obs(t_obs) + + # Need the angle of attack. + alphastar = angle_of_attack(se) + + # Need the directivity functions. + top_is_suction = is_top_suction(se.bl, alphastar) + r_er, Dl, Dh = directivity(se, x_obs, top_is_suction) + + # Need the fluid velocity normal to the span. + # Brooks and Burley 2001 are a bit ambiguous on whether it should include induction, or just the freestream and rotation. + # + # * In the nomenclature section: `U` is "flow speed normal to span (`U_mn` with `mn` suppressed). + # So that's one point for "no induction." + # * In some discussion after equation (8), "The Mach number, `M = U/c0`, represents that component of velocity `U` normal to the span...". + # Hard to say one way or the other. + # * In equation (12), `U_mn` is the velocity without induction. + # So that's another point for "no induction." + # * Equation (14) defines `V_tot` as the velocity including the freestream, rotation, and induction. + # And then it defines `U` as the part of `V_tot` normal to the span. + # So that's a point for "yes induction." + # * In the directivity function definitions in equations (19) and (20), `M_tot` is used in the denominator, which seems to make it clear *that* velocity should include induction, since `V_tot` always includes induction. + # + # So, at the moment, the TBLTESourceElement type has a parameter TUInduction which, when true, will include induction in the flow speed normal to the span, and not otherwise. + U = speed_normal_to_span(se) + + # Reynolds number based on chord and the flow speed normal to span. + Re_c = U*se.chord/se.nu + + # Need the boundary layer thickness for the pressure side for LBL-VS noise. + # deltastar_p = disp_thickness_p(se.bl, Re_c, alphastar)*se.chord + delta_p = bl_thickness_p(se.bl, Re_c, alphastar)*se.chord + + # Now that we've decided on the directivity functions and the displacement thickness, and we know the correct value of `top_is_suction` we should be able to switch the sign on `alphastar` if it's negative, and reference it to the zero-lift value, as the BPM report does. + alphastar_positive = abs_cs_safe(alphastar - alpha_zerolift(se.bl)) + + # Mach number of the flow speed normal to span. + M = U/se.c0 + + delta_p_U = delta_p/U + St_p_p = St_peak_prime(St_1_prime(Re_c), alphastar_positive) + Re_c_over_Re_c0 = Re_c / Re_c0(alphastar_positive) + g2 = G2(Re_c_over_Re_c0) + g3 = G3(alphastar_positive) + # The Brooks and Burley autospectrums appear to be scaled by the usual squared reference pressure (20 μPa)^2, but I'd like things in dimensional units, so multiply through by that. + pref2 = 4e-10 + # G = (delta_p*M^5*se.Δr*Dh)/(r_er^2) .* _Hl.(freq, delta_p_U, St_p_p, g2, g3) .* pref2 + G_lbl_vs_scaler = (delta_p*M^5*se.Δr*Dh)/(r_er^2) + G_lbl_vs = _lbl_vs.(freqs, delta_p_U, St_p_p, g2, g3, G_lbl_vs_scaler) .* pref2 + + # Also need the Doppler shift for this source-observer combination. + doppler = doppler_factor(se, obs, t_obs) + + # Get the doppler-shifted time step and proportional bands. + dt = se.Δτ/doppler + freqs_obs = AcousticMetrics.center_bands(freqs, doppler) + + # All done. + return AcousticMetrics.ProportionalBandSpectrumWithTime(G_lbl_vs, freqs_obs, dt, t_obs) +end diff --git a/src/observers.jl b/src/observers.jl new file mode 100644 index 00000000..bedfc4f1 --- /dev/null +++ b/src/observers.jl @@ -0,0 +1,52 @@ +""" +Supertype for an object that recieves a noise prediction when combined with an +acoustic analogy source; computational equivalent of a microphone. + + (obs::AbstractAcousticObserver)(t) + +Calculate the position of the acoustic observer at time `t`. +""" +abstract type AbstractAcousticObserver end + +""" + StationaryAcousticObserver(x) + +Construct an acoustic observer that does not move with position `x` (m). +""" +struct StationaryAcousticObserver{Tx} <: AbstractAcousticObserver + x::Tx +end + +""" + velocity(t_obs, obs::StationaryAcousticObserver) + +Return the velocity of `obs` at time `t_obs` (hint—will always be zero ☺) +""" +@inline velocity(t_obs, obs::StationaryAcousticObserver) = zero(obs.x) + +""" + ConstVelocityAcousticObserver(t0, x0, v) + +Construct an acoustic observer moving with a constant velocity `v`, located at +`x0` at time `t0`. +""" +struct ConstVelocityAcousticObserver{Tt0,Tx0,Tv} <: AbstractAcousticObserver + t0 ::Tt0 + x0::Tx0 + v::Tv +end + +function (obs::StationaryAcousticObserver)(t) + return obs.x +end + +function (obs::ConstVelocityAcousticObserver)(t) + return obs.x0 .+ (t - obs.t0).*obs.v +end + +""" + velocity(t_obs, obs::ConstVelocityAcousticObserver) + +Return the velocity of `obs` at time `t_obs` (hint—will always be the same) +""" +@inline velocity(t_obs, obs::ConstVelocityAcousticObserver) = obs.v diff --git a/src/tbl_te.jl b/src/tbl_te.jl new file mode 100644 index 00000000..39d046d0 --- /dev/null +++ b/src/tbl_te.jl @@ -0,0 +1,654 @@ +function K_1(Re_c) + # Equation (47) in the BPM paper. + if Re_c < 2.47e5 + return -4.31*log10(Re_c) + 156.3 + elseif Re_c < 8.0e5 + return -9.0*log10(Re_c) + 181.6 + else + return 128.5*one(Re_c) + end +end + +function DeltaK_1(alphastar, Re_deltastar_p) + # Equation (48) in the BPM report. + T = promote_type(typeof(alphastar), typeof(Re_deltastar_p)) + alphastar_deg = alphastar*180/pi + if Re_deltastar_p < 5000 + return alphastar_deg*(1.43*log10(Re_deltastar_p) - 5.29) + else + return zero(T) + end +end + +function St_1(M) + # Equation (31) from the BPM report. + return 0.02*M^(-0.6) +end + +function A_min(a) + # Equation (35) from the BPM report. + if a < 0.204 + return sqrt(67.552 - 886.788*a^2) - 8.219 + elseif a ≤ 0.244 + return -32.665*a + 3.981 + else + return -142.795*a^3 + 103.656*a^2 - 57.757*a + 6.006 + end +end + +function A_max(a) + # Equation (36) from the BPM report. + if a < 0.13 + return sqrt(67.552 - 886.788*a^2) - 8.219 + elseif a ≤ 0.321 + return -15.901*a + 1.098 + else + return -4.669*a^3 + 3.491*a^2 - 16.699*a + 1.149 + end +end + +function A(St_over_St_peak, Re_c) + # Equation (37) from the BPM report. + a = abs_cs_safe(log10(St_over_St_peak)) + + # Equation (38) from the BPM report. + if Re_c < 9.52e4 + a0 = 0.57*one(Re_c) + elseif Re_c ≤ 8.57e5 + a0 = (-9.57e-13)*(Re_c - 8.57e5)^2 + 1.13 + else + a0 = 1.13*one(Re_c) + end + + # Equation (39) from the BPM report. + A_min_a0 = A_min(a0) + A_max_a0 = A_max(a0) + A_R = (-20 - A_min_a0)/(A_max_a0 - A_min_a0) + + # Equation (40) from the BPM report. + A_min_a = A_min(a) + A_max_a = A_max(a) + return A_min_a + A_R*(A_max_a - A_min_a) +end + +function B_min(b) + # Equation (41) from the BPM report. + if b < 0.13 + return sqrt(16.888 - 886.788*b^2) - 4.109 + elseif b ≤ 0.145 + return -83.607*b + 8.138 + else + return -817.810*b^3 + 355.201*b^2 - 135.024*b + 10.619 + end +end + +function B_max(b) + # Equation (42) from the BPM report. + if b < 0.10 + return sqrt(16.888 - 886.788*b^2) - 4.109 + elseif b ≤ 0.187 + return -31.330*b + 1.854 + else + return -80.541*b^3 + 44.174*b^2 - 39.381*b + 2.344 + end +end + +function B(St_over_St_peak, Re_c) + # Equation (43) from the BPM report. + b = abs_cs_safe(log10(St_over_St_peak)) + + # Equation (44) from the BPM report. + if Re_c < 9.52e4 + b0 = 0.30*one(Re_c) + elseif Re_c ≤ 8.57e5 + b0 = (-4.48e-13)*(Re_c - 8.57e5)^2 + 0.56 + else + b0 = 0.56*one(Re_c) + end + + # Equation (45) from the BPM report. + B_min_b0 = B_min(b0) + B_max_b0 = B_max(b0) + B_R = (-20 - B_min_b0)/(B_max_b0 - B_min_b0) + + # Equation (46) from the BPM report. + B_min_b = B_min(b) + B_max_b = B_max(b) + return B_min_b + B_R*(B_max_b - B_min_b) +end + +function St_2(St_1, alphastar) + # Equation (34) from the BPM report. + T = promote_type(typeof(St_1), typeof(alphastar)) + alphastar_deg = alphastar*180/pi + if alphastar_deg < 1.333 + return St_1*one(T) + elseif alphastar_deg ≤ 12.5 + return St_1*10.0^(0.0054*(alphastar_deg - 1.333)^2) + else + return St_1*4.72*one(T) + end +end + +function gamma(M) + # Equation (50) from the BPM report. + gamma_deg = 27.094*M + 3.31 + return gamma_deg +end + +function gamma0(M) + # Equation (50) from the BPM report. + gamma0_deg = 23.43*M + 4.651 + return gamma0_deg +end + +function beta(M) + # Equation (50) from the BPM report. + beta_deg = 72.65*M + 10.74 + return beta_deg +end + +function beta0(M) + # Equation (50) from the BPM report. + beta0_deg = -34.19*M - 13.82 + return beta0_deg +end + +function K_2(Re_c, M, alphastar) + T = promote_type(typeof(Re_c), typeof(M), typeof(alphastar)) + alphastar_deg = alphastar*180/pi + + k_1 = K_1(Re_c)*one(T) + # Equation (50) from the BPM report. + # gamma_deg, gamma0_deg, beta_deg, beta0_deg = gammas_betas(M) + gamma_deg = gamma(M) + gamma0_deg = gamma0(M) + beta_deg = beta(M) + beta0_deg = beta0(M) + + # Equation (49) from the BPM report. + if alphastar_deg < gamma0_deg - gamma_deg + return k_1 - 1000 + # elseif alphastar_deg ≤ gamma0_deg + gamma_deg + elseif alphastar_deg ≤ gamma0_deg + sqrt(-(gamma_deg/beta_deg)^2*(-12 - beta0_deg)^2 + gamma_deg^2) + return k_1 + sqrt(beta_deg^2 - (beta_deg/gamma_deg)^2*(alphastar_deg - gamma0_deg)^2) + beta0_deg + else + return k_1 - 12 + end +end + +function St_1prime(Re_c) + # Equation (55) from the BPM report. + T = typeof(Re_c) + if Re_c < 1.3e5 + return 0.18*one(T) + elseif Re_c ≤ 4.0e5 + return 0.001756*Re_c^(0.3931) + else + return 0.28*one(T) + end +end + +function Dbar_h(theta_e, phi_e, M, M_c) + # Equation (B1) from the BPM report. + return (2*sin(0.5*theta_e)^2*sin(phi_e)^2)/((1 + M*cos(theta_e))*(1 + (M - M_c)*cos(theta_e))^2) +end + +function Dbar_l(theta_e, phi_e, M) + # Equation (B2) from the BPM report. + return (sin(theta_e)^2*sin(phi_e)^2)/((1 + M*cos(theta_e))^4) +end + +function TBL_TE_s(freq, nu, L, chord, U, M, M_c, r_e, theta_e, phi_e, alphastar, bl) + T = promote_type(typeof(freq), typeof(nu), typeof(L), typeof(chord), typeof(U), typeof(M), typeof(M_c), typeof(r_e), typeof(theta_e), typeof(phi_e), typeof(alphastar)) + + Re_c = U*chord/nu + alphastar0 = alpha_stall(bl, Re_c) + + gamma0_deg = gamma0(M) + if alphastar*180/pi > min(gamma0_deg, alphastar0*180/pi) + # SPL_s = -100*one(T) + G_s = 10^(0.1*(-100))*one(T) + else + D = Dbar_h(theta_e, phi_e, M, M_c) + deltastar_s = disp_thickness_top(bl, Re_c, alphastar)*chord + St_s = freq*deltastar_s/U + + St_peak_p = St_1(M) + St_peak_alpha = St_2(St_peak_p, alphastar) + St_peak_s = 0.5*(St_peak_p + St_peak_alpha) + + A_s = A(St_s/St_peak_s, Re_c) + + k_1 = K_1(Re_c) + + # SPL_s = 10*log10((deltastar_s*M^5*L*D)/(r_e^2)) + A_s + k_1 - 3 + # Brooks and Burley AIAA 2001-2210 style. + H_s = 10^(0.1*(A_s + k_1 - 3)) + G_s = (deltastar_s*M^5*L*D)/(r_e^2)*H_s + end + + SPL_s = 10*log10(G_s) + return SPL_s +end + +function TBL_TE_p(freq, nu, L, chord, U, M, M_c, r_e, theta_e, phi_e, alphastar, bl) + T = promote_type(typeof(freq), typeof(nu), typeof(L), typeof(chord), typeof(U), typeof(M), typeof(M_c), typeof(r_e), typeof(theta_e), typeof(phi_e), typeof(alphastar)) + + Re_c = U*chord/nu + alphastar0 = alpha_stall(bl, Re_c) + + gamma0_deg = gamma0(M) + + if alphastar*180/pi > min(gamma0_deg, alphastar0*180/pi) + # SPL_p = -100*one(T) + G_p = 10^(0.1*(-100))*one(T) + else + D = Dbar_h(theta_e, phi_e, M, M_c) + deltastar_p = disp_thickness_bot(bl, Re_c, alphastar)*chord + + k_1 = K_1(Re_c) + St_p = freq*deltastar_p/U + St_peak_p = St_1(M) + + A_p = A(St_p/St_peak_p, Re_c) + + Re_deltastar_p = U*deltastar_p/nu + Δk_1 = DeltaK_1(alphastar, Re_deltastar_p) + + # SPL_p = 10*log10((deltastar_p*M^5*L*D)/(r_e^2)) + A_p + k_1 - 3 + Δk_1 + # Brooks and Burley AIAA 2001-2210 style. + H_p = 10^(0.1*(A_p + k_1 - 3 + Δk_1)) + G_p = (deltastar_p*M^5*L*D)/(r_e^2)*H_p + end + + SPL_p = 10*log10(G_p) + return SPL_p +end + +function TBL_TE_alpha(freq, nu, L, chord, U, M, M_c, r_e, theta_e, phi_e, alphastar, bl) + Re_c = U*chord/nu + alphastar0 = alpha_stall(bl, Re_c) + gamma0_deg = gamma0(M) + deltastar_s = disp_thickness_top(bl, Re_c, alphastar)*chord + St_s = freq*deltastar_s/U + St_peak_p = St_1(M) + St_peak_alpha = St_2(St_peak_p, alphastar) + k2 = K_2(Re_c, M, alphastar) + + if alphastar*180/pi > min(gamma0_deg, alphastar0*180/pi) + D = Dbar_l(theta_e, phi_e, M) + A_prime = A(St_s/St_peak_alpha, 3*Re_c) + # SPL_alpha = 10*log10((deltastar_s*M^5*L*D)/(r_e^2)) + A_prime + k2 + # Brooks and Burley AIAA 2001-2210 style. + H_alpha = 10^(0.1*(A_prime + k2)) + G_alpha = (deltastar_s*M^5*L*D)/(r_e^2)*H_alpha + else + D = Dbar_h(theta_e, phi_e, M, M_c) + B_alpha = B(St_s/St_peak_alpha, Re_c) + # SPL_alpha = 10*log10((deltastar_s*M^5*L*D)/(r_e^2)) + B_alpha + k2 + # Brooks and Burley AIAA 2001-2210 style. + H_alpha = 10^(0.1*(B_alpha + k2)) + G_alpha = (deltastar_s*M^5*L*D)/(r_e^2)*H_alpha + end + + SPL_alpha = 10*log10(G_alpha) + return SPL_alpha +end + +function TBL_TE(freq, nu, L, chord, U, M, M_c, r_e, theta_e, phi_e, alphastar, bl) + SPL_s = TBL_TE_s(freq, nu, L, chord, U, M, M_c, r_e, theta_e, phi_e, alphastar, bl) + SPL_p = TBL_TE_p(freq, nu, L, chord, U, M, M_c, r_e, theta_e, phi_e, alphastar, bl) + SPL_alpha = TBL_TE_alpha(freq, nu, L, chord, U, M, M_c, r_e, theta_e, phi_e, alphastar, bl) + return SPL_s, SPL_p, SPL_alpha +end + +abstract type AbstractMachCorrection end +struct NoMachCorrection <: AbstractMachCorrection end +struct PrandtlGlauertMachCorrection <: AbstractMachCorrection end + +struct TBLTESourceElement{ + TDirect<:AbstractDirectivity,TUInduction,TMachCorrection,TDoppler, + Tc0,Tnu,TΔr,Tchord,Ty0dot,Ty1dot,Ty1dot_fluid,Tτ,TΔτ,Tspan_uvec,Tchord_uvec,Tbl + } <: AbstractBroadbandSourceElement{TDirect,TUInduction,TMachCorrection,TDoppler} + # Speed of sound, m/s. + c0::Tc0 + # Kinematic viscosity, m^2/s + nu::Tnu + # Radial/spanwise length of element, m. + Δr::TΔr + # chord length of element, m. + chord::Tchord + # Source position, m. + y0dot::Ty0dot + # Source velocity, m/s. + y1dot::Ty1dot + # Fluid velocity, m/s. + y1dot_fluid::Ty1dot_fluid + # Source time, s. + τ::Tτ + # Time step size, i.e. the amount of time this source element "exists" with these properties, s. + Δτ::TΔτ + # Radial/spanwise unit vector, aka unit vector aligned with the element's span direction. + span_uvec::Tspan_uvec + # Chordwise unit vector, aka unit vector aligned with the element's chord line, pointing from leading edge to trailing edge. + chord_uvec::Tchord_uvec + # Boundary layer struct, i.e. an AbstractBoundaryLayer. + bl::Tbl + # `Bool` indicating chord_uvec×span_uvec will give a vector pointing from bottom side (usually pressure side) to top side (usually suction side) if `true`, or the opposite if `false`. + chord_cross_span_to_get_top_uvec::Bool + + function TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, Δr, chord, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, chord_cross_span_to_get_top_uvec::Bool) where {TDirect<:AbstractDirectivity,TUInduction,TMachCorrection,TDoppler} + return new{ + TDirect,TUInduction,TMachCorrection,TDoppler, + typeof(c0), typeof(nu), typeof(Δr), typeof(chord), typeof(y0dot), typeof(y1dot), typeof(y1dot_fluid), typeof(τ), typeof(Δτ), typeof(span_uvec), typeof(chord_uvec), typeof(bl) + }(c0, nu, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) + end +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), use the PrandtlGlauertMachCorrection, and Doppler-shift. +function TBLTESourceElement(c0, nu, Δr, chord, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, chord_cross_span_to_get_top_uvec::Bool) + return TBLTESourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(c0, nu, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +""" + TBLTESourceElement(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + +Construct a source element for predicting turbulent boundary layer-trailing edge (TBLTE) noise using the BPM/Brooks and Burley method, using position and velocity data expressed in a cylindrical coordinate system. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +Likewise, the `vn`, `vr`, and `vc` arguments are used to define the normal, radial, and circumferential velocity of the fluid (in a reference frame moving with the element) in the same cylindrical coordinate system. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- vn: normal velocity of fluid (m/s) +- vr: radial velocity of fluid (m/s) +- vc: circumferential velocity of the fluid (m/s) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y::Bool) where {TDirect,TUInduction,TMachCorrection,TDoppler} + sθ, cθ = sincos(θ) + sϕ, cϕ = sincos(ϕ) + y0dot = @SVector [0, r*cθ, r*sθ] + T = eltype(y0dot) + y1dot = @SVector zeros(T, 3) + y1dot_fluid = @SVector [vn, vr*cθ - vc*sθ, vr*sθ + vc*cθ] + span_uvec = @SVector [0, cθ, sθ] + if twist_about_positive_y + chord_uvec = @SVector [-sϕ, cϕ*sθ, -cϕ*cθ] + else + chord_uvec = @SVector [-sϕ, -cϕ*sθ, cϕ*cθ] + end + + chord_cross_span_to_get_top_uvec = twist_about_positive_y + return TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec::Bool) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), use the PrandtlGlauertMachCorrection, and Doppler-shift. +function TBLTESourceElement(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y::Bool) + return TBLTESourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) +end + +""" + TBLTESourceElement(c0, nu, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, twist_about_positive_y) + +Construct a source element for predicting turbulent boundary layer-trailing edge (TBLTE) noise using the BPM/Brooks and Burley method, using the velocity magnitude `U` and angle of attack `α`. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +The `U` and `α` arguments are the velocity magnitude normal to the source element length and the angle of attack, respectively. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- U: velocity magnitude (m/s) +- α: angle of attack (rad) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, twist_about_positive_y) where {TDirect,TUInduction,TMachCorrection,TDoppler} + precone = 0 + pitch = 0 + phi = ϕ - α + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec(ϕ, precone, pitch, r, θ, U, phi, twist_about_positive_y) + return TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(c0, nu, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), use the PrandtlGlauertMachCorrection, and Doppler-shift. +function TBLTESourceElement(c0, nu, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, twist_about_positive_y::Bool) + return TBLTESourceElement{BrooksBurleyDirectivity,true,PrandtlGlauertMachCorrection,true}(c0, nu, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, twist_about_positive_y) +end + +""" + (trans::KinematicTransformation)(se::TBLTESourceElement) + +Transform the position and orientation of a source element according to the coordinate system transformation `trans`. +""" +function (trans::KinematicTransformation)(se::TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}) where {TDirect,TUInduction,TMachCorrection,TDoppler} + linear_only = false + y0dot, y1dot = trans(se.τ, se.y0dot, se.y1dot, linear_only) + y0dot, y1dot_fluid = trans(se.τ, se.y0dot, se.y1dot_fluid, linear_only) + linear_only = true + span_uvec = trans(se.τ, se.span_uvec, linear_only) + chord_uvec = trans(se.τ, se.chord_uvec, linear_only) + + return TBLTESourceElement{TDirect,TUInduction,TMachCorrection,TDoppler}(se.c0, se.nu, se.Δr, se.chord, y0dot, y1dot, y1dot_fluid, se.τ, se.Δτ, span_uvec, chord_uvec, se.bl, se.chord_cross_span_to_get_top_uvec) +end + +doppler(pbs::AcousticMetrics.AbstractProportionalBandSpectrum) = AcousticMetrics.freq_scaler(pbs) + +""" +Output of the turbulent boundary layer-trailing edge (TBL-TE) calculation: the acoustic pressure autospectrum centered at time `t` over observer duration `dt` and observer frequencies `cbands` for the suction side `G_s`, pressure side `G_p`, and the separation `G_alpha`. +""" +struct TBLTEOutput{NO,TF,TG<:AbstractVector{TF},TFreqs<:AcousticMetrics.AbstractProportionalBands{NO,:center},TDTime,TTime} <: AcousticMetrics.AbstractProportionalBandSpectrum{NO,TF} + G_s::TG + G_p::TG + G_alpha::TG + cbands::TFreqs + dt::TDTime + t::TTime + + function TBLTEOutput(G_s::TG, G_p::TG, G_alpha::TG, cbands::AcousticMetrics.AbstractProportionalBands{NO,:center}, dt, t) where {NO,TG} + ncbands = length(cbands) + length(G_s) == ncbands || throw(ArgumentError("length(G_s) must match length(cbands)")) + length(G_p) == ncbands || throw(ArgumentError("length(G_p) must match length(cbands)")) + length(G_alpha) == ncbands || throw(ArgumentError("length(G_alpha) must match length(cbands)")) + dt > zero(dt) || throw(ArgumentError("dt must be positive")) + return new{NO,eltype(TG),TG,typeof(cbands),typeof(dt),typeof(t)}(G_s, G_p, G_alpha, cbands, dt, t) + end +end + +@inline function Base.getindex(pbs::TBLTEOutput, i::Int) + @boundscheck checkbounds(pbs, i) + return @inbounds pbs.G_s[i] + pbs.G_p[i] + pbs.G_alpha[i] +end + +@inline AcousticMetrics.has_observer_time(pbs::TBLTEOutput) = true +@inline AcousticMetrics.observer_time(pbs::TBLTEOutput) = pbs.t +@inline AcousticMetrics.timestep(pbs::TBLTEOutput) = pbs.dt +@inline AcousticMetrics.time_scaler(pbs::TBLTEOutput, period) = timestep(pbs)/period + +function _tble_te_s(freq, deltastar_s_U, Re_c, St_peak_s, k_1, scaler, deep_stall) + St_s = freq*deltastar_s_U + A_s = A(St_s/St_peak_s, Re_c) + + # SPL_s = 10*log10((deltastar_s*M^5*L*Dh)/(r_er^2)) + A_s + k_1 - 3 + # Brooks and Burley AIAA 2001-2210 style. + H_s = 10^(0.1*(A_s + k_1 - 3)) + # G_s = (deltastar_s*M^5*Δr*Dh)/(r_er^2)*H_s + G_s = scaler*H_s + + return ifelse(deep_stall, 10^(0.1*(-100))*one(typeof(G_s)), G_s) +end + +function _tble_te_p(freq, deltastar_p_U, Re_c, St_peak_p, k_1, Δk_1, scaler, deep_stall) + + St_p = freq*deltastar_p_U + + A_p = A(St_p/St_peak_p, Re_c) + + # SPL_p = 10*log10((deltastar_p*M^5*L*Dh)/(r_er^2)) + A_p + k_1 - 3 + Δk_1 + # Brooks and Burley AIAA 2001-2210 style. + H_p = 10^(0.1*(A_p + k_1 - 3 + Δk_1)) + # G_p = (deltastar_p*M^5*Δr*Dh)/(r_er^2)*H_p + G_p = scaler*H_p + + return ifelse(deep_stall, 10^(0.1*(-100))*one(typeof(G_p)), G_p) +end + +function _tble_te_alpha(freq, Re_c, deltastar_s_U, St_peak_alpha, k_2, scaler_l, scaler_h, deep_stall) + # Don't know if this is really necessary. + T = promote_type(typeof(freq), typeof(Re_c), typeof(deltastar_s_U), typeof(St_peak_alpha), typeof(k_2), typeof(scaler_l), typeof(scaler_h)) + St_s = freq*deltastar_s_U + + A_prime_stall = A(St_s/St_peak_alpha, 3*Re_c) + # SPL_alpha = 10*log10((deltastar_s*M^5*L*D)/(r_er^2)) + A_prime + k_2 + # Brooks and Burley AIAA 2001-2210 style. + H_alpha_stall = 10^(0.1*(A_prime_stall + k_2)) + # G_alpha_stall = (deltastar_s*M^5*Δr*Dl)/(r_er^2)*H_alpha_stall + G_alpha_stall = scaler_l*H_alpha_stall*one(T) + + B_alpha = B(St_s/St_peak_alpha, Re_c) + # SPL_alpha = 10*log10((deltastar_s*M^5*L*Dh)/(r_er^2)) + B_alpha + k_2 + # Brooks and Burley AIAA 2001-2210 style. + H_alpha = 10^(0.1*(B_alpha + k_2)) + # G_alpha = (deltastar_s*M^5*Δr*Dh)/(r_er^2)*H_alpha + G_alpha = scaler_h*H_alpha*one(T) + + return ifelse(deep_stall, G_alpha_stall, G_alpha) +end + +# Should use traits or something for this. +function mach_correction(se::AbstractBroadbandSourceElement{TDirect,TUInduction,NoMachCorrection}, M) where {TDirect,TUInduction} + return one(typeof(M)) +end + +function mach_correction(se::AbstractBroadbandSourceElement{TDirect,TUInduction,PrandtlGlauertMachCorrection}, M) where {TDirect,TUInduction} + return 1/(1 - M^2) +end + +function noise(se::TBLTESourceElement, obs::AbstractAcousticObserver, t_obs, freqs::AcousticMetrics.AbstractProportionalBands{3, :center}) + # Position of the observer: + x_obs = obs(t_obs) + + # Need the angle of attack. + alphastar = angle_of_attack(se) + + # Need the directivity functions. + top_is_suction = is_top_suction(se.bl, alphastar) + r_er, Dl, Dh = directivity(se, x_obs, top_is_suction) + + # Need the fluid velocity normal to the span. + # Brooks and Burley 2001 are a bit ambiguous on whether it should include induction, or just the freestream and rotation. + # + # * In the nomenclature section: `U` is "flow speed normal to span (`U_mn` with `mn` suppressed). + # So that's one point for "no induction." + # * In some discussion after equation (8), "The Mach number, `M = U/c0`, represents that component of velocity `U` normal to the span...". + # Hard to say one way or the other. + # * In equation (12), `U_mn` is the velocity without induction. + # So that's another point for "no induction." + # * Equation (14) defines `V_tot` as the velocity including the freestream, rotation, and induction. + # And then it defines `U` as the part of `V_tot` normal to the span. + # So that's a point for "yes induction." + # * In the directivity function definitions in equations (19) and (20), `M_tot` is used in the denominator, which seems to make it clear *that* velocity should include induction, since `V_tot` always includes induction. + # + # So, at the moment, the TBLTESourceElement type has a parameter TUInduction which, when true, will include induction in the flow speed normal to the span, and not otherwise. + U = speed_normal_to_span(se) + + # Reynolds number based on chord and the flow speed normal to span. + Re_c = U*se.chord/se.nu + + # Also need the displacement thicknesses for the pressure and suction sides. + deltastar_s = disp_thickness_s(se.bl, Re_c, alphastar)*se.chord + deltastar_p = disp_thickness_p(se.bl, Re_c, alphastar)*se.chord + + # Now that we've decided on the directivity functions and the displacement thickness, and we know the correct value of `top_is_suction` we should be able to switch the sign on `alphastar` if it's negative, and reference it to the zero-lift value, as the BPM report does. + alphastar_positive = abs_cs_safe(alphastar - alpha_zerolift(se.bl)) + + # Mach number of the flow speed normal to span. + M = U/se.c0 + + # This stuff is used to decide if the blade element is stalled or not. + alphastar0 = alpha_stall(se.bl, Re_c) + gamma0_deg = gamma0(M) + deep_stall = (alphastar_positive*180/pi) > min(gamma0_deg, alphastar0*180/pi) + + St_peak_p = St_1(M) + St_peak_alpha = St_2(St_peak_p, alphastar_positive) + St_peak_s = 0.5*(St_peak_p + St_peak_alpha) + + Re_deltastar_p = U*deltastar_p/se.nu + k_1 = K_1(Re_c) + k_2 = K_2(Re_c, M, alphastar_positive) + Δk_1 = DeltaK_1(alphastar_positive, Re_deltastar_p) + + deltastar_s_U = deltastar_s/U + deltastar_p_U = deltastar_p/U + + # Brooks and Burley 2001 recommend a Prandtl-Glauert style Mach number correction. + # But whether or not it's included is dependent on the TMachCorrection type parameter for the source element. + m_corr = mach_correction(se, M) + + # The Brooks and Burley autospectrums appear to be scaled by the usual squared reference pressure (20 μPa)^2, but I'd like things in dimensional units, so multiply through by that. + pref2 = 4e-10 + G_s_scaler = (deltastar_s*M^5*se.Δr*Dh)/(r_er^2)*m_corr + G_s = _tble_te_s.(freqs, deltastar_s_U, Re_c, St_peak_s, k_1, G_s_scaler, deep_stall).*pref2 + + G_p_scaler = (deltastar_p*M^5*se.Δr*Dh)/(r_er^2)*m_corr + G_p = _tble_te_p.(freqs, deltastar_p_U, Re_c, St_peak_p, k_1, Δk_1, G_p_scaler, deep_stall).*pref2 + + G_alpha_scaler_l = (deltastar_s*M^5*se.Δr*Dl)/(r_er^2)*m_corr + G_alpha_scaler_h = G_s_scaler + G_alpha = _tble_te_alpha.(freqs, Re_c, deltastar_s_U, St_peak_alpha, k_2, G_alpha_scaler_l, G_alpha_scaler_h, deep_stall).*pref2 + + # Also need the Doppler shift for this source-observer combination. + doppler = doppler_factor(se, obs, t_obs) + + # Get the doppler-shifted time step and proportional bands. + dt = se.Δτ/doppler + freqs_obs = AcousticMetrics.center_bands(freqs, doppler) + + # All done. + return TBLTEOutput(G_s, G_p, G_alpha, freqs_obs, dt, t_obs) +end diff --git a/src/teb_vs.jl b/src/teb_vs.jl new file mode 100644 index 00000000..5848a2b2 --- /dev/null +++ b/src/teb_vs.jl @@ -0,0 +1,393 @@ +function St_3prime_peak(h_over_deltastar_avg, Psi) + Psi_deg = Psi*180/pi + # Equation 72 from the BPM report. + if h_over_deltastar_avg < 0.2 + return 0.1*(h_over_deltastar_avg) + 0.095 - 0.00243*Psi_deg + else + return (0.212 - 0.0045*Psi_deg)/(1 + 0.235/h_over_deltastar_avg - 0.0132/(h_over_deltastar_avg^2)) + end +end + +function G4(h_over_deltastar_avg, Psi) + Psi_deg = Psi*180/pi + # Equation 74 from the BPM report. + if h_over_deltastar_avg ≤ 5 + return 17.5*log10(h_over_deltastar_avg) + 157.5 - 1.114*Psi_deg + else + return 169.7 - 1.114*Psi_deg + end +end + +function G5_Psi14(h_over_deltastar_avg, St_3prime_over_St_3prime_peak) + # Equation 77 from the BPM report. + η = log10(St_3prime_over_St_3prime_peak) + + # Equation 78 from the BPM report. + if h_over_deltastar_avg < 0.25 + μ = 0.1211*one(h_over_deltastar_avg) + elseif h_over_deltastar_avg < 0.62 + μ = -0.2175*h_over_deltastar_avg + 0.1755 + elseif h_over_deltastar_avg < 1.15 + μ = -0.0308*h_over_deltastar_avg + 0.0596 + else + μ = 0.0242*one(h_over_deltastar_avg) + end + + # Equation 79 from the BPM report. + if h_over_deltastar_avg < 0.02 + m = zero(h_over_deltastar_avg) + elseif h_over_deltastar_avg ≤ 0.5 + m = 68.724*h_over_deltastar_avg - 1.35 + elseif h_over_deltastar_avg ≤ 0.62 + m = 308.475*h_over_deltastar_avg - 121.23 + elseif h_over_deltastar_avg < 1.15 + m = 224.811*h_over_deltastar_avg - 69.354 + elseif h_over_deltastar_avg < 1.2 + m = 1583.28*h_over_deltastar_avg - 1631.592 + else + m = 268.344*one(h_over_deltastar_avg) + end + # This is in the code listing in the BPM report appendix. + if m < 0 + m = zero(h_over_deltastar_avg) + end + + # Equation 80 from the BPM report. + η_0 = -sqrt((m^2*μ^4)/(6.25 + m^2*μ^2)) + + # Equation 81 from the BPM report. + k = 2.5*sqrt(1 - (η_0/μ)^2) - 2.5 - m*η_0 + + # Equation 76 from the BPM report. + if η < η_0 + return m*η + k + elseif η < 0 + return 2.5*sqrt(1 - (η/μ)^2) - 2.5 + elseif η < 0.03616 + return sqrt(1.5625 - 1194.99*η^2) - 1.25*one(h_over_deltastar_avg) + else + return -155.543*η + 4.375*one(h_over_deltastar_avg) + end +end + +function G5_Psi0(h_over_deltastar_avg, St_3prime_over_St_3prime_peak) + # Equation 82 from the BPM report. + h_over_deltastar_avg_prime = 6.724*h_over_deltastar_avg^2 - 4.019*h_over_deltastar_avg + 1.107 + return G5_Psi14(h_over_deltastar_avg_prime, St_3prime_over_St_3prime_peak) +end + +function G5(h_over_deltastar_avg, Psi, St_3prime_over_St_3prime_peak) + Psi_deg = 180/pi*Psi + # Equation 75 from the BPM report. + G5_0 = G5_Psi0(h_over_deltastar_avg, St_3prime_over_St_3prime_peak) + G5_14 = G5_Psi14(h_over_deltastar_avg, St_3prime_over_St_3prime_peak) + g5 = G5_0 + 0.0714*Psi_deg*(G5_14 - G5_0) + # This check is in the code listing in the BPM report appendix: + if g5 > 0 + return zero(g5) + else + return g5 + end +end + +function BLUNT(freq, nu, L, chord, h, Psi, U, M, M_c, r_e, theta_e, phi_e, alphastar, bl) + Re_c = U*chord/nu + # deltastar_s = disp_thickness_s(bl, Re_c, alphastar)*chord + # deltastar_p = disp_thickness_p(bl, Re_c, alphastar)*chord + deltastar_top = disp_thickness_top(bl, Re_c, alphastar)*chord + deltastar_bot = disp_thickness_bot(bl, Re_c, alphastar)*chord + top_is_suction = alphastar > alpha_zerolift(bl) + deltastar_s, deltastar_p = ifelse(top_is_suction, + (deltastar_top, deltastar_bot), + (deltastar_bot, deltastar_top)) + + # Equation 73 from the BPM report. + deltastar_avg = 0.5*(deltastar_p + deltastar_s) + + h_over_deltastar_avg = h/deltastar_avg + D = Dbar_h(theta_e, phi_e, M, M_c) + + # Equation 71 from the BPM report. + St_3p = freq*h/U + + St_3prime_over_St_3prime_peak = St_3p/St_3prime_peak(h_over_deltastar_avg, Psi) + + g5temp = G5(h_over_deltastar_avg, Psi, St_3prime_over_St_3prime_peak) + + # This next check is in the code listing in the BPM report appendix. + # Need to find G5 for h_over_deltastar_avg = 0.25 for the F4TEMP variable. + f4temp = G5_Psi14(0.25, St_3prime_over_St_3prime_peak) + # if g5 > f4temp + # g5 = f4temp + # end + g5 = ifelse(g5temp > f4temp, f4temp, g5temp) + + # Equation 70 from the BPM report. + # SPL_blunt = 10*log10((h*(M^5.5)*L*D)/(r_e^2)) + G4(h_over_deltastar_avg, Psi) + g5 + # Brooks and Burley AIAA 2001-2210 style. + H_b = 10^(0.1*(G4(h_over_deltastar_avg, Psi) + g5)) + G_bte = (h*(M^5.5)*L*D)/(r_e^2)*H_b + SPL_blunt = 10*log10(G_bte) + return SPL_blunt +end + +struct TEBVSSourceElement{ + TDirect<:AbstractDirectivity,TUInduction,TDoppler, + Tc0,Tnu,TΔr,Tchord,Th,TPsi,Ty0dot,Ty1dot,Ty1dot_fluid,Tτ,TΔτ,Tspan_uvec,Tchord_uvec,Tbl + } <: AbstractBroadbandSourceElement{TDirect,TUInduction,NoMachCorrection,TDoppler} + # Speed of sound, m/s. + c0::Tc0 + # Kinematic viscosity, m^2/s + nu::Tnu + # Radial/spanwise length of element, m. + Δr::TΔr + # chord length of element, m. + chord::Tchord + # Trailing edge thickness, m. + h::Th + # Solid angle between blade surfaces immediately upstream of the trailing edge, rad. + Psi::TPsi + # Source position, m. + y0dot::Ty0dot + # Source velocity, m/s. + y1dot::Ty1dot + # Fluid velocity, m/s. + y1dot_fluid::Ty1dot_fluid + # Source time, s. + τ::Tτ + # Time step size, i.e. the amount of time this source element "exists" with these properties, s. + Δτ::TΔτ + # Radial/spanwise unit vector, aka unit vector aligned with the element's span direction. + span_uvec::Tspan_uvec + # Chordwise unit vector, aka unit vector aligned with the element's chord line, pointing from leading edge to trailing edge. + chord_uvec::Tchord_uvec + # Boundary layer struct, i.e. an AbstractBoundaryLayer. + bl::Tbl + # `Bool` indicating chord_uvec×span_uvec will give a vector pointing from bottom side (usually pressure side) to top side (usually suction side) if `true`, or the opposite if `false`. + chord_cross_span_to_get_top_uvec::Bool + + function TEBVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, Δr, chord, h, Psi, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, chord_cross_span_to_get_top_uvec::Bool) where {TDirect<:AbstractDirectivity,TUInduction,TDoppler} + return new{ + TDirect,TUInduction,TDoppler, + typeof(c0), typeof(nu), typeof(Δr), typeof(chord), typeof(h), typeof(Psi), typeof(y0dot), typeof(y1dot), typeof(y1dot_fluid), typeof(τ), typeof(Δτ), typeof(span_uvec), typeof(chord_uvec), typeof(bl) + }(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) + end +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), and Doppler-shift. +function TEBVSSourceElement(c0, nu, Δr, chord, h, Psi, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, chord_cross_span_to_get_top_uvec) + return TEBVSSourceElement{BrooksBurleyDirectivity,true,true}(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +""" + TEBVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + +Construct a source element for predicting trailing edge bluntness-vortex shedding (TEBVS) noise using the BPM/Brooks and Burley method, using position and velocity data expressed in a cylindrical coordinate system. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +Likewise, the `vn`, `vr`, and `vc` arguments are used to define the normal, radial, and circumferential velocity of the fluid (in a reference frame moving with the element) in the same cylindrical coordinate system. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- h: trailing edge thickness (m) +- Psi: solid angle between the blade surfaces immediately upstream of the trailing edge (rad) +- vn: normal velocity of fluid (m/s) +- vr: radial velocity of fluid (m/s) +- vc: circumferential velocity of the fluid (m/s) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function TEBVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) where {TDirect,TUInduction,TDoppler} + sθ, cθ = sincos(θ) + sϕ, cϕ = sincos(ϕ) + y0dot = @SVector [0, r*cθ, r*sθ] + T = eltype(y0dot) + y1dot = @SVector zeros(T, 3) + y1dot_fluid = @SVector [vn, vr*cθ - vc*sθ, vr*sθ + vc*cθ] + span_uvec = @SVector [0, cθ, sθ] + if twist_about_positive_y + chord_uvec = @SVector [-sϕ, cϕ*sθ, -cϕ*cθ] + else + chord_uvec = @SVector [-sϕ, -cϕ*sθ, cϕ*cθ] + end + + chord_cross_span_to_get_top_uvec = twist_about_positive_y + return TEBVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), and Doppler-shift. +function TEBVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + return TEBVSSourceElement{BrooksBurleyDirectivity,true,true}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) +end + +""" + TEBVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, twist_about_positive_y) + +Construct a source element for predicting trailing edge bluntness-vortex shedding (TEBVS) noise using the BPM/Brooks and Burley method, using the velocity magnitude `U` and angle of attack `α`. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +The `U` and `α` arguments are the velocity magnitude normal to the source element length and the angle of attack, respectively. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- nu: Kinematic viscosity (m^2/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- h: trailing edge thickness (m) +- Psi: solid angle between the blade surfaces immediately upstream of the trailing edge (rad) +- U: velocity magnitude (m/s) +- α: angle of attack (rad) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function TEBVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, twist_about_positive_y) where {TDirect,TUInduction,TDoppler} + precone = 0 + pitch = 0 + phi = ϕ - α + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec(ϕ, precone, pitch, r, θ, U, phi, twist_about_positive_y) + return TEBVSSourceElement{TDirect,TUInduction,TDoppler}(c0, nu, Δr, chord, h, Psi, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), and Doppler-shift. +function TEBVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, twist_about_positive_y) + return TEBVSSourceElement{BrooksBurleyDirectivity,true,true}(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, α, τ, Δτ, bl, twist_about_positive_y) +end + +""" + (trans::KinematicTransformation)(se::TEBVSSourceElement) + +Transform the position and orientation of a source element according to the coordinate system transformation `trans`. +""" +function (trans::KinematicTransformation)(se::TEBVSSourceElement{TDirect,TUInduction,TDoppler}) where {TDirect,TUInduction,TDoppler} + linear_only = false + y0dot, y1dot = trans(se.τ, se.y0dot, se.y1dot, linear_only) + y0dot, y1dot_fluid = trans(se.τ, se.y0dot, se.y1dot_fluid, linear_only) + linear_only = true + span_uvec = trans(se.τ, se.span_uvec, linear_only) + chord_uvec = trans(se.τ, se.chord_uvec, linear_only) + + return TEBVSSourceElement{TDirect,TUInduction,TDoppler}(se.c0, se.nu, se.Δr, se.chord, se.h, se.Psi, y0dot, y1dot, y1dot_fluid, se.τ, se.Δτ, span_uvec, chord_uvec, se.bl, se.chord_cross_span_to_get_top_uvec) +end + +function _teb_vs(freq, h_U, h_over_deltastar_avg, St_3pp, Psi, g4, G_teb_vs_scaler) + # Equation 71 from the BPM report. + St_3p = freq*h_U + St_3prime_over_St_3prime_peak = St_3p/St_3pp + g5temp = G5(h_over_deltastar_avg, Psi, St_3prime_over_St_3prime_peak) + + # This next check is in the code listing in the BPM report appendix. + # Need to find G5 for h_over_deltastar_avg = 0.25 for the F4TEMP variable. + f4temp = G5_Psi14(0.25, St_3prime_over_St_3prime_peak) + g5 = ifelse(g5temp > f4temp, f4temp, g5temp) + + # Equation 70 from the BPM report. + # SPL_blunt = 10*log10((h*(M^5.5)*L*D)/(r_e^2)) + G4(h_over_deltastar_avg, Psi) + g5 + # Brooks and Burley AIAA 2001-2210 style. + H_b = 10^(0.1*(g4 + g5)) + G_bte = G_teb_vs_scaler*H_b + return G_bte +end + +function noise(se::TEBVSSourceElement, obs::AbstractAcousticObserver, t_obs, freqs::AcousticMetrics.AbstractProportionalBands{3, :center}) + # Position of the observer: + x_obs = obs(t_obs) + + # Need the angle of attack. + alphastar = angle_of_attack(se) + + # Need the directivity functions. + top_is_suction = is_top_suction(se.bl, alphastar) + r_er, Dl, Dh = directivity(se, x_obs, top_is_suction) + + # Need the fluid velocity normal to the span. + # Brooks and Burley 2001 are a bit ambiguous on whether it should include induction, or just the freestream and rotation. + # + # * In the nomenclature section: `U` is "flow speed normal to span (`U_mn` with `mn` suppressed). + # So that's one point for "no induction." + # * In some discussion after equation (8), "The Mach number, `M = U/c0`, represents that component of velocity `U` normal to the span...". + # Hard to say one way or the other. + # * In equation (12), `U_mn` is the velocity without induction. + # So that's another point for "no induction." + # * Equation (14) defines `V_tot` as the velocity including the freestream, rotation, and induction. + # And then it defines `U` as the part of `V_tot` normal to the span. + # So that's a point for "yes induction." + # * In the directivity function definitions in equations (19) and (20), `M_tot` is used in the denominator, which seems to make it clear *that* velocity should include induction, since `V_tot` always includes induction. + # + # So, at the moment, the TBLTESourceElement type has a parameter TUInduction which, when true, will include induction in the flow speed normal to the span, and not otherwise. + U = speed_normal_to_span(se) + + # Reynolds number based on chord and the flow speed normal to span. + Re_c = U*se.chord/se.nu + + # Also need the displacement thicknesses for the pressure and suction sides. + deltastar_s = disp_thickness_s(se.bl, Re_c, alphastar)*se.chord + deltastar_p = disp_thickness_p(se.bl, Re_c, alphastar)*se.chord + + # Now that we've decided on the directivity functions and the displacement thickness, and we know the correct value of `top_is_suction` we should be able to switch the sign on `alphastar` if it's negative, and reference it to the zero-lift value, as the BPM report does. + alphastar_positive = abs_cs_safe(alphastar - alpha_zerolift(se.bl)) + + # Mach number of the flow speed normal to span. + M = U/se.c0 + + # Equation 73 from the BPM report. + deltastar_avg = 0.5*(deltastar_p + deltastar_s) + + h_over_deltastar_avg = se.h/deltastar_avg + h_U = se.h/U + St_3pp = St_3prime_peak(h_over_deltastar_avg, se.Psi) + g4 = G4(h_over_deltastar_avg, se.Psi) + + # The Brooks and Burley autospectrums appear to be scaled by the usual squared reference pressure (20 μPa)^2, but I'd like things in dimensional units, so multiply through by that. + pref2 = 4e-10 + G_teb_vs_scaler = (se.h*(M^5.5)*se.Δr*Dh)/(r_er^2) + G_teb_vs = _teb_vs.(freqs, h_U, h_over_deltastar_avg, St_3pp, se.Psi, g4, G_teb_vs_scaler) .* pref2 + + # Also need the Doppler shift for this source-observer combination. + doppler = doppler_factor(se, obs, t_obs) + + # Get the doppler-shifted time step and proportional bands. + dt = se.Δτ/doppler + freqs_obs = AcousticMetrics.center_bands(freqs, doppler) + + # All done. + return AcousticMetrics.ProportionalBandSpectrumWithTime(G_teb_vs, freqs_obs, dt, t_obs) +end diff --git a/src/tip_vortex.jl b/src/tip_vortex.jl new file mode 100644 index 00000000..44fe71d9 --- /dev/null +++ b/src/tip_vortex.jl @@ -0,0 +1,338 @@ +abstract type AbstractTipAlphaCorrection end + +struct NoTipAlphaCorrection <: AbstractTipAlphaCorrection end +struct BPMTipAlphaCorrection <: AbstractTipAlphaCorrection end + +# struct BMTipAlphaCorrection{TCorrection} <: AbstractTipAlphaCorrection +# correction::TCorrection + +# function BMTipAlphaCorrection(aspect_ratio) +# correction = BPM._tip_vortex_alpha_correction_nonsmooth(aspect_ratio) +# return new{typeof(correction)}(correction) +# end +# end + +# struct SmoothBMTipAlphaCorrection{TCorrection} <: AbstractTipAlphaCorrection +# correction::TCorrection + +# function SmoothBMTipAlphaCorrection(aspect_ratio) +# correction = BPM._tip_vortex_alpha_correction_smooth(aspect_ratio) +# return new{typeof(correction)}(correction) +# end +# end + +abstract type AbstractBladeTip{TTipAlphaCorrection} end + +alpha_zerolift(blade_tip::AbstractBladeTip) = blade_tip.alpha0lift +tip_alpha_correction(blade_tip::AbstractBladeTip) = blade_tip.tip_alpha_correction + +struct RoundedTip{TTipAlphaCorrection,TAlpha0Lift} <: AbstractBladeTip{TTipAlphaCorrection} + tip_alpha_correction::TTipAlphaCorrection + alpha0lift::TAlpha0Lift + + function RoundedTip(tip_alpha_correction::TTipAlphaCorrection, alpha0lift::TAlpha0Lift) where {TTipAlphaCorrection<:AbstractTipAlphaCorrection,TAlpha0Lift} + return new{TTipAlphaCorrection, TAlpha0Lift}(tip_alpha_correction, alpha0lift) + end +end +RoundedTip(alpha0lift=0.0) = RoundedTip(NoTipAlphaCorrection(), alpha0lift) + +struct FlatTip{TTipAlphaCorrection,TAlpha0Lift} <: AbstractBladeTip{TTipAlphaCorrection} + tip_alpha_correction::TTipAlphaCorrection + alpha0lift::TAlpha0Lift + + function FlatTip(tip_alpha_correction::TTipAlphaCorrection, alpha0lift::TAlpha0Lift) where {TTipAlphaCorrection<:AbstractTipAlphaCorrection,TAlpha0Lift} + return new{TTipAlphaCorrection, TAlpha0Lift}(tip_alpha_correction, alpha0lift) + end +end +FlatTip(alpha0lift=0.0) = FlatTip(NoTipAlphaCorrection(), alpha0lift) + +function tip_vortex_alpha_correction(blade_tip::AbstractBladeTip{NoTipAlphaCorrection}, alphatip) + return alphatip +end + +function tip_vortex_alpha_correction(blade_tip::AbstractBladeTip{BPMTipAlphaCorrection}, alphatip) + # Referencing the tip vortex angle of attack correction to the zero-lift angle of attack ensures that the correction will never cause the angle of attack to drop below the zero-lift value, assuming the correction factor (0.71 here) is between 0 and 1. + return 0.71*(alphatip - alpha_zerolift(blade_tip)) + alpha_zerolift(blade_tip) + # return 0.71*alphatip + (1 - 0.71)*alpha_zerolift(blade_tip) +end + +# function tip_vortex_alpha_correction(blade_tip::AbstractBladeTip{<:Union{BMTipAlphaCorrection,SmoothBMTipAlphaCorrection}}, alphatip) +# return tip_alpha_correction(blade_tip).correction * (alphatip - alpha_zerolift(blade_tip)) + alpha_zerolift(blade_tip) +# end + +function tip_vortex_size_c(::RoundedTip, alphatip) + # Equation 63 in the BPM report. + alphatip_deg = alphatip*180/pi + return 0.008*alphatip_deg +end + +function tip_vortex_size_c(::FlatTip, alphatip) + alphatip_deg = alphatip*180/pi + # Equation 67 in the BPM report. + if alphatip_deg < 2 + return 0.0230 + 0.0169*alphatip_deg + else + return 0.0378 + 0.0095*alphatip_deg + end +end + +function tip_vortex_max_mach_number(::AbstractBladeTip, M, alphatip) + alphatip_deg = alphatip*180/pi + # Equation 64 in the BPM report. + M_max = (1 + 0.036*alphatip_deg)*M + return M_max +end + +function TIP(freq, chord, M, M_c, U_max, M_max, r_e, theta_e, phi_e, alphatip, blade_tip::AbstractBladeTip) + l = tip_vortex_size_c(blade_tip, alphatip) * chord + # Equation 62 in the BPM report. + St_pp = freq*l/U_max + + D = Dbar_h(theta_e, phi_e, M, M_c) + + # Equation 61 in the BPM report. + # SPL_tip = 10*log10(M^2*M_max^3*l^2*D/r_e^2) - 30.5*(log10(St_pp) + 0.3)^2 + 126 + # Brooks and Burley AIAA 2001-2210 style. + H_t = 10^(0.1*(-30.5*(log10(St_pp) + 0.3)^2 + 126)) + G_tip = (M^2*M_max^3*l^2*D/r_e^2)*H_t + SPL_tip = 10*log10(G_tip) + return SPL_tip +end + +struct TipVortexSourceElement{ + TDirect<:AbstractDirectivity,TUInduction,TDoppler, + Tc0,TΔr,Tchord,Ty0dot,Ty1dot,Ty1dot_fluid,Tτ,TΔτ,Tspan_uvec,Tchord_uvec,Tbl,Tblade_tip + } <: AbstractBroadbandSourceElement{TDirect,TUInduction,NoMachCorrection,TDoppler} + # Speed of sound, m/s. + # c0 + c0::Tc0 + # Radial/spanwise length of element, m. + Δr::TΔr + # chord length of element, m. + chord::Tchord + # Source position, m. + y0dot::Ty0dot + # Source velocity, m/s. + y1dot::Ty1dot + # Fluid velocity, m/s. + y1dot_fluid::Ty1dot_fluid + # Source time, s. + τ::Tτ + # Time step size, i.e. the amount of time this source element "exists" with these properties, s. + Δτ::TΔτ + # Radial/spanwise unit vector, aka unit vector aligned with the element's span direction. + span_uvec::Tspan_uvec + # Chordwise unit vector, aka unit vector aligned with the element's chord line, pointing from leading edge to trailing edge. + chord_uvec::Tchord_uvec + # Boundary layer struct, i.e. an AbstractBoundaryLayer. + bl::Tbl + # Blade tip struct, i.e. an AbstractBladeTip. + blade_tip::Tblade_tip + # `Bool` indicating chord_uvec×span_uvec will give a vector pointing from bottom side (usually pressure side) to top side (usually suction side) if `true`, or the opposite if `false`. + chord_cross_span_to_get_top_uvec::Bool + + function TipVortexSourceElement{TDirect,TUInduction,TDoppler}(c0, Δr, chord, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, blade_tip, chord_cross_span_to_get_top_uvec::Bool) where {TDirect<:AbstractDirectivity,TUInduction,TDoppler} + return new{ + TDirect,TUInduction,TDoppler, + typeof(c0), typeof(Δr), typeof(chord), typeof(y0dot), typeof(y1dot), typeof(y1dot_fluid), typeof(τ), typeof(Δτ), typeof(span_uvec), typeof(chord_uvec), typeof(bl), typeof(blade_tip) + }(c0, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) + end +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), and Doppler-shift. +function TipVortexSourceElement(c0, Δr, chord, y0dot::AbstractVector, y1dot::AbstractVector, y1dot_fluid::AbstractVector, τ, Δτ, span_uvec::AbstractVector, chord_uvec::AbstractVector, bl, blade_tip, chord_cross_span_to_get_top_uvec) + return TipVortexSourceElement{BrooksBurleyDirectivity,true,true}(c0, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) +end + +""" + TipVortexSourceElement(c0, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + +Construct a source element for predicting turbulent boundary layer-trailing edge (TBLTE) noise using the BPM/Brooks and Burley method, using position and velocity data expressed in a cylindrical coordinate system. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +Likewise, the `vn`, `vr`, and `vc` arguments are used to define the normal, radial, and circumferential velocity of the fluid (in a reference frame moving with the element) in the same cylindrical coordinate system. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- vn: normal velocity of fluid (m/s) +- vr: radial velocity of fluid (m/s) +- vc: circumferential velocity of the fluid (m/s) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- blade_tip: Blade tip struct, i.e. an AbstractBladeTip. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function TipVortexSourceElement{TDirect,TUInduction,TDoppler}(c0, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) where {TDirect,TUInduction,TDoppler} + sθ, cθ = sincos(θ) + sϕ, cϕ = sincos(ϕ) + y0dot = @SVector [0, r*cθ, r*sθ] + T = eltype(y0dot) + y1dot = @SVector zeros(T, 3) + y1dot_fluid = @SVector [vn, vr*cθ - vc*sθ, vr*sθ + vc*cθ] + span_uvec = @SVector [0, cθ, sθ] + if twist_about_positive_y + chord_uvec = @SVector [-sϕ, cϕ*sθ, -cϕ*cθ] + else + chord_uvec = @SVector [-sϕ, -cϕ*sθ, cϕ*cθ] + end + + chord_cross_span_to_get_top_uvec = twist_about_positive_y + return TipVortexSourceElement{TDirect,TUInduction,TDoppler}(c0, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), and Doppler-shift. +function TipVortexSourceElement(c0, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + return TipVortexSourceElement{BrooksBurleyDirectivity,true,true}(c0, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) +end + +""" + TipVortexSourceElement(c0, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, blade_tip, twist_about_positive_y) + +Construct a source element for predicting tip vortex noise using the BPM/Brooks and Burley method, using the velocity magnitude `U` and angle of attack `α`. + +The `r` and `θ` arguments are used to define the radial and circumferential position of the source element in a cylindrical coordinate system. +The `U` and `α` arguments are the velocity magnitude normal to the source element length and the angle of attack, respectively. +The cylindrical coordinate system is defined as follows: + + * The normal/axial direction is in the positive x axis + * The circumferential/azimuth angle `θ` is defined such that `θ = 0` means the radial direction is aligned with the positive y axis, and a positive `θ` indicates a right-handed rotation around the positive x axis. + +The `twist_about_positive_y` is a `Bool` controling how the `ϕ` argument is handled, which in turn controls the orientation of a unit vector defining `chord_uvec` indicating the orientation of the chord line, from leading edge to trailing edge. +If `twist_about_positive_y` is `true`, `chord_uvec` will initially be pointed in the negative-z direction, and then rotated around the positive y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the positive x axis.) +If `twist_about_positive_y` is `false`, `chord_uvec` will initially be pointed in the positive-z direction, and then rotated around the negative y axis by an amount `ϕ` before being rotated by the azimuth angle `θ`. +(This would typcially be appropriate for a source element rotating around the negative x axis.) + +Note that, for a proper noise prediction, the source element needs to be transformed into the "global" frame, aka, the reference frame of the fluid. +This can be done easily with the transformations provided by the `KinematicCoordinateTransformations` package, or manually by modifying the components of the source element struct. + +# Arguments +- c0: Ambient speed of sound (m/s) +- r: radial coordinate of the element in the blade-fixed coordinate system (m) +- θ: angular offest of the element in the blade-fixed coordinate system (rad) +- Δr: length of the element (m) +- chord: chord length of blade element (m) +- ϕ: twist of blade element (rad) +- U: velocity magnitude (m/s) +- α: angle of attack (rad) +- τ: source time (s) +- Δτ: source time duration (s) +- bl: Boundary layer struct, i.e. an AbstractBoundaryLayer. +- blade_tip: Blade tip struct, i.e. an AbstractBladeTip. +- twist_about_positive_y: if `true`, apply twist ϕ about positive y axis, negative y axis otherwise +""" +function TipVortexSourceElement{TDirect,TUInduction,TDoppler}(c0, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, blade_tip, twist_about_positive_y) where {TDirect,TUInduction,TDoppler} + precone = 0 + pitch = 0 + phi = ϕ - α + y0dot, y1dot, y1dot_fluid, span_uvec, chord_uvec, chord_cross_span_to_get_top_uvec = _get_position_velocity_span_uvec_chord_uvec(ϕ, precone, pitch, r, θ, U, phi, twist_about_positive_y) + return TipVortexSourceElement{TDirect,TUInduction,TDoppler}(c0, Δr, chord, y0dot, y1dot, y1dot_fluid, τ, Δτ, span_uvec, chord_uvec, bl, blade_tip, chord_cross_span_to_get_top_uvec) +end + +# Default to using the `BrooksBurleyDirectivity` directivity function, include induction in the flow speed normal to span (TUInduction == true), and Doppler-shift. +function TipVortexSourceElement(c0, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, blade_tip, twist_about_positive_y) + return TipVortexSourceElement{BrooksBurleyDirectivity,true,true}(c0, r, θ, Δr, chord, ϕ, U, α, τ, Δτ, bl, blade_tip, twist_about_positive_y) +end + +""" + (trans::KinematicTransformation)(se::TipVortexSourceElement) + +Transform the position and orientation of a source element according to the coordinate system transformation `trans`. +""" +function (trans::KinematicTransformation)(se::TipVortexSourceElement{TDirect,TUInduction,TDoppler}) where {TDirect,TUInduction,TDoppler} + linear_only = false + y0dot, y1dot = trans(se.τ, se.y0dot, se.y1dot, linear_only) + y0dot, y1dot_fluid = trans(se.τ, se.y0dot, se.y1dot_fluid, linear_only) + linear_only = true + span_uvec = trans(se.τ, se.span_uvec, linear_only) + chord_uvec = trans(se.τ, se.chord_uvec, linear_only) + + return TipVortexSourceElement{TDirect,TUInduction,TDoppler}(se.c0, se.Δr, se.chord, y0dot, y1dot, y1dot_fluid, se.τ, se.Δτ, span_uvec, chord_uvec, se.bl, se.blade_tip, se.chord_cross_span_to_get_top_uvec) +end + +function _tip(freq, l_U_max, scaler) + St_pp = freq*l_U_max + H_t = 10^(0.1*(-30.5*(log10(St_pp) + 0.3)^2 + 126)) + # G_tip = (M^2*M_max^3*l^2*D/r_e^2)*H_t + G_tip = scaler*H_t + return G_tip +end + +function noise(se::TipVortexSourceElement, obs::AbstractAcousticObserver, t_obs, freqs::AcousticMetrics.AbstractProportionalBands{3, :center}) + # Position of the observer: + x_obs = obs(t_obs) + + # Need the angle of attack, including the possible tip correction. + alphatip = tip_vortex_alpha_correction(se.blade_tip, angle_of_attack(se)) + + # Need the directivity functions. + top_is_suction = is_top_suction(se.bl, alphatip) + r_er, Dl, Dh = directivity(se, x_obs, top_is_suction) + + # Need the fluid velocity normal to the span. + # Brooks and Burley 2001 are a bit ambiguous on whether it should include induction, or just the freestream and rotation. + # + # * In the nomenclature section: `U` is "flow speed normal to span (`U_mn` with `mn` suppressed). + # So that's one point for "no induction." + # * In some discussion after equation (8), "The Mach number, `M = U/c0`, represents that component of velocity `U` normal to the span...". + # Hard to say one way or the other. + # * In equation (12), `U_mn` is the velocity without induction. + # So that's another point for "no induction." + # * Equation (14) defines `V_tot` as the velocity including the freestream, rotation, and induction. + # And then it defines `U` as the part of `V_tot` normal to the span. + # So that's a point for "yes induction." + # * In the directivity function definitions in equations (19) and (20), `M_tot` is used in the denominator, which seems to make it clear *that* velocity should include induction, since `V_tot` always includes induction. + # + # So, at the moment, the TBLTESourceElement type has a parameter TUInduction which, when true, will include induction in the flow speed normal to the span, and not otherwise. + U = speed_normal_to_span(se) + + # Now that we've decided on the directivity functions and we know the correct value of `top_is_suction` we should be able to switch the sign on `alphastar` if it's negative, and reference it to the zero-lift value, as the BPM report does. + alphatip_positive = abs_cs_safe(alphatip - alpha_zerolift(se.bl)) + + # Mach number of the flow speed normal to span. + M = U/se.c0 + + # Need the maximum mach number near the tip vortex. + M_max = tip_vortex_max_mach_number(se.blade_tip, M, alphatip_positive) + + # Now we can find the maximum speed near the tip vortex. + U_max = M_max * se.c0 + + # Get the tip vortex size. + l = tip_vortex_size_c(se.blade_tip, alphatip_positive) * se.chord + + # The Brooks and Burley autospectrums appear to be scaled by the usual squared reference pressure (20 μPa)^2, but I'd like things in dimensional units, so multiply through by that. + pref2 = 4e-10 + l_U_max = l/U_max + G_tip_scaler = (M^2*M_max^3*l^2*Dh/r_er^2) + G_tip = _tip.(freqs, l_U_max, G_tip_scaler) .* pref2 + + # Also need the Doppler shift for this source-observer combination. + doppler = doppler_factor(se, obs, t_obs) + + # Get the doppler-shifted time step and proportional bands. + dt = se.Δτ/doppler + freqs_obs = AcousticMetrics.center_bands(freqs, doppler) + + # All done. + return AcousticMetrics.ProportionalBandSpectrumWithTime(G_tip, freqs_obs, dt, t_obs) +end diff --git a/src/writevtk.jl b/src/writevtk.jl index c3f5251d..8f259932 100644 --- a/src/writevtk.jl +++ b/src/writevtk.jl @@ -1,22 +1,22 @@ """ - endpoints(se::CompactSourceElement) + endpoints(se::AbstractCompactSourceElement) Return the Tuple containing the endpoint locations of the compact source element `se`. """ -function endpoints(se::CompactSourceElement) - p1 = se.y0dot - 0.5*se.Δr*se.u - p2 = se.y0dot + 0.5*se.Δr*se.u +function endpoints(se::AbstractCompactSourceElement) + p1 = se.y0dot - 0.5*se.Δr*orientation(se) + p2 = se.y0dot + 0.5*se.Δr*orientation(se) # Don't like the idea of having a billion SVectors, so convert them to plain # Vectors. Maybe not necessary. return (Vector(p1), Vector(p2)) end """ - to_vtp(name::AbstractString, ses::AbstractArray{<:CompactSourceElement}) + to_vtp(name::AbstractString, ses::AbstractArray{<:AbstractCompactSourceElement}) -Construct and return a VTK polygonal (.vtp) data file object for an array of `CompactSourceElement` with name `name.vtp` (i.e., the `name` argument should not contain a file extension). +Construct and return a VTK polygonal (.vtp) data file object for an array of `AbstractCompactSourceElement` with name `name.vtp` (i.e., the `name` argument should not contain a file extension). """ -function to_vtp(name, ses::AbstractArray{<:CompactSourceElement}) +function to_vtp(name, ses::AbstractArray{<:AbstractCompactSourceElement}) # This will be an array of the same size as ses, with each entry a # length-two tuple of the endpoints. points_all = AcousticAnalogies.endpoints.(ses) @@ -49,63 +49,273 @@ function to_vtp(name, ses::AbstractArray{<:CompactSourceElement}) # (2, length(ses)). line_ids = reshape(line_ids, 2, length(ses)) # Now create the array of VTK lines. - lines = [MeshCell(PolyData.Lines(), line) for line in eachcol(line_ids)] + lines = [WriteVTK.MeshCell(WriteVTK.PolyData.Lines(), line) for line in eachcol(line_ids)] - vtkfile = vtk_grid(name, points, lines) + vtkfile = WriteVTK.vtk_grid(name, points, lines) + _write_data_to_vtk!(vtkfile, ses) + + return vtkfile +end + +function _write_data_to_vtk!(vtkfile, ses::AbstractArray{<:CompactF1ASourceElement}) + # Now need to add the cell data. I would have expected to have to flatten + # these arrays, but apparently that's not necessary. + vtkfile["Length", WriteVTK.VTKCellData()] = mapview(:Δr, ses) + vtkfile["CSArea", WriteVTK.VTKCellData()] = mapview(:Λ, ses) + vtkfile["Position", WriteVTK.VTKCellData()] = hcat(mapview(:y0dot, ses)...) + vtkfile["Velocity", WriteVTK.VTKCellData()] = hcat(mapview(:y1dot, ses)...) + vtkfile["Acceleration", WriteVTK.VTKCellData()] = hcat(mapview(:y2dot, ses)...) + vtkfile["Jerk", WriteVTK.VTKCellData()] = hcat(mapview(:y3dot, ses)...) + vtkfile["Loading", WriteVTK.VTKCellData()] = hcat(mapview(:f0dot, ses)...) + vtkfile["LoadingDot", WriteVTK.VTKCellData()] = hcat(mapview(:f1dot, ses)...) +end + +function _write_data_to_vtk!(vtkfile, ses::AbstractArray{<:Union{TBLTESourceElement,LBLVSSourceElement,TipVortexSourceElement}}) # Now need to add the cell data. I would have expected to have to flatten # these arrays, but apparently that's not necessary. - vtkfile["Length", VTKCellData()] = mapview(:Δr, ses) - vtkfile["CSArea", VTKCellData()] = mapview(:Λ, ses) - vtkfile["Position", VTKCellData()] = hcat(mapview(:y0dot, ses)...) - vtkfile["Velocity", VTKCellData()] = hcat(mapview(:y1dot, ses)...) - vtkfile["Acceleration", VTKCellData()] = hcat(mapview(:y2dot, ses)...) - vtkfile["Jerk", VTKCellData()] = hcat(mapview(:y3dot, ses)...) - vtkfile["Loading", VTKCellData()] = hcat(mapview(:f0dot, ses)...) - vtkfile["LoadingDot", VTKCellData()] = hcat(mapview(:f1dot, ses)...) + vtkfile["Length", WriteVTK.VTKCellData()] = mapview(:Δr, ses) + vtkfile["Chord", WriteVTK.VTKCellData()] = mapview(:chord, ses) + vtkfile["Position", WriteVTK.VTKCellData()] = hcat(mapview(:y0dot, ses)...) + vtkfile["Velocity", WriteVTK.VTKCellData()] = hcat(mapview(:y1dot, ses)...) + vtkfile["FluidVelocity", WriteVTK.VTKCellData()] = hcat(mapview(:y1dot_fluid, ses)...) + vtkfile["SpanUnitVector", WriteVTK.VTKCellData()] = hcat(mapview(:span_uvec, ses)...) + vtkfile["ChordUnitVector", WriteVTK.VTKCellData()] = hcat(mapview(:chord_uvec, ses)...) +end + +function _write_data_to_vtk!(vtkfile, ses::AbstractArray{<:Union{TEBVSSourceElement,CombinedNoTipBroadbandSourceElement,CombinedWithTipBroadbandSourceElement}}) + # Now need to add the cell data. I would have expected to have to flatten + # these arrays, but apparently that's not necessary. + vtkfile["Length", WriteVTK.VTKCellData()] = mapview(:Δr, ses) + vtkfile["Chord", WriteVTK.VTKCellData()] = mapview(:chord, ses) + vtkfile["TrailingEdgeThickness", WriteVTK.VTKCellData()] = mapview(:h, ses) + vtkfile["TrailingEdgeAngle", WriteVTK.VTKCellData()] = mapview(:Psi, ses) + vtkfile["Position", WriteVTK.VTKCellData()] = hcat(mapview(:y0dot, ses)...) + vtkfile["Velocity", WriteVTK.VTKCellData()] = hcat(mapview(:y1dot, ses)...) + vtkfile["FluidVelocity", WriteVTK.VTKCellData()] = hcat(mapview(:y1dot_fluid, ses)...) + vtkfile["SpanUnitVector", WriteVTK.VTKCellData()] = hcat(mapview(:span_uvec, ses)...) + vtkfile["ChordUnitVector", WriteVTK.VTKCellData()] = hcat(mapview(:chord_uvec, ses)...) +end + +function to_vtu(name, obs::AbstractAcousticObserver, t; sphere_radius=1.0, n=10) + # Get the current position of the observer. + x = obs(t) + + # Create a sphere at the observer position with the specified radius. + s = Meshes.Sphere(tuple(x...), sphere_radius) + + # Discretize the sphere. + mesh = Meshes.simplexify(Meshes.discretize(s, Meshes.RegularDiscretization(n))) + + # This gets a fancy Unitful vector of Points that represent the verticies of the discretized sphere. + verts = Meshes.vertices(mesh) + + # This gets the connectivity of the discretized sphere. + connec = Meshes.elements(Meshes.topology(mesh)) + + # This converts the fancy `verts` into a plain old Matrix{Float64}. + points = stack(p -> Meshes.ustrip.(Meshes.to(p)), verts) + + # This creates VTK cells that we can eventually write out, converting the Meshes.jl connectivity into VTK MeshCells. + cells = [WriteVTK.MeshCell(WriteVTK.VTKCellTypes.VTK_TRIANGLE, Meshes.indices(c)) for c in connec] + + # Now we can finally create a VTK file. + vtkfile = WriteVTK.vtk_grid(name, points, cells) return vtkfile end +r""" +to_paraview_collection(name::AbstractString, ses::NTuple{N, AbstractArray{<:AbstractCompactSourceElement}}; time_axes::NTuple{N, Int64}=ntuple(i->1, N), block_names=["block$(b)" for b in 1:N], observers=(), observer_names=nothing, observer_radii=nothing) + + +Construct and write out a ParaView collection data file (`.pvd`) object for a tuple of arrays of `CompactF1ASourceElement`s with name `name.pvd` (i.e., the `name` argument should not contain a file extension). + +`time_axes` is a tuple of time axis indices, one for each entry of `ses`, indicating the axis over which the source time for the source elements in `ses` vary. +`block_names` is a `Vector` of strings, one for each entry in `ses`, that will be used to name each `ses` entry in the multiblock VTK file. + +`observers` should be an iterable of `AbstractAcousticObserver` objects that will also be written out to the paraview file as discretized spheres. +`observer_names` can either be an iterable of Strings that will be used to name each VTK observer file, or `nothing`, in which case each observer will be named `observer`. +`observer_radii` can either be an iterable of Float64 representing the radius of each observer sphere, or `nothing`, in which case a suitible radius will be calculated. + +One VTK PolyData (`.vtp`) file will be written for each valid index along `time_axis` for each array in the `ses` tuple. + +Returns a list of filenames written out by [WriteVTK.jl](https://github.com/jipolanco/WriteVTK.jl). +""" +function to_paraview_collection(name, ses::NTuple{N, AbstractArray{<:AbstractCompactSourceElement}}; time_axes::NTuple{N, Int64}=ntuple(i->1, N), block_names=["block$(b)" for b in 1:N], observers=(), observer_names=nothing, observer_radii=nothing) where {N} + + # Check that the size of each array in the `ses` is the the same along the time axis. + # This will get the length of each array in `ses` along the time axis. + time_axis_lengths = size.(ses, time_axes) + # Now check if they're the same. + if !all(time_axis_lengths .== first(time_axis_lengths)) + throw(ArgumentError("length of each array in ses tuple must be the same along the time axis. Length of each: $(time_axis_lengths)")) + end + time_axis_len = first(time_axis_lengths) + + # Also check that the block names are unique. + length(unique(block_names)) == N || throw(ArgumentError("entries in block_names = $(block_names) must be unique")) + + if length(observers) > 0 + if observer_names === nothing + obs_names = ["observer$(i)" for i in 1:length(observers)] + else + # Check that the number of observers matches the number of observer names. + length(observer_names) == length(observers) || throw(ArgumentError("length of observer_names does not match length of observers")) + # Check that the observer names are unique. + length(unique(observer_names)) == length(observer_names) || throw(ArgumentError("entries in observer_names = $(observer_names) must be unique")) + + # Also should check that the observer names aren't the same as the source element block names. + all_names = vcat(block_names, observer_names) + length(unique(all_names)) == length(all_names) || throw(ArgumentError("observer_names = $(observer_names) shares entries with block_names = $(block_names)")) + + obs_names = observer_names + end + + if observer_radii === nothing + # Check out this sorcery. + # (xmin, xmax) = mapreduce(x->extrema(getindex.(getproperty.(x, :y0dot), 1)), (a, b)->(min(a[1], b[1]), max(a[2], b[2])), ses) + # (ymin, ymax) = mapreduce(x->extrema(getindex.(getproperty.(x, :y0dot), 2)), (a, b)->(min(a[1], b[1]), max(a[2], b[2])), ses) + # (zmin, zmax) = mapreduce(x->extrema(getindex.(getproperty.(x, :y0dot), 3)), (a, b)->(min(a[1], b[1]), max(a[2], b[2])), ses) + # But could I do it in one line? + # That would mean I'd need to have a function that could take in a vector, then compare it to another vector. + # ((xmin, ymin, zmin), (xmax, ymax, zmax)) = mapreduce( + # (a, b)->((min(a[1][1], b[1][1]), + # min(a[1][2], b[1][2]), + # min(a[1][3], b[1][3])), + # (max(a[2][1], b[2][1]), + # max(a[2][2], b[2][2]), + # max(a[2][3], b[2][3]))), ses) do x + # xmin, xmax = extrema(getindex.(getproperty.(x, :y0dot), 1)) + # ymin, ymax = extrema(getindex.(getproperty.(x, :y0dot), 2)) + # zmin, zmax = extrema(getindex.(getproperty.(x, :y0dot), 3)) + # return ((xmin, ymin, zmin), (xmax, ymax, zmax)) + # end + # Still kind of annoying that I have to iterate over each source element array three times. + # How to avoid that? + # It would come down to not using extrema. + # I'd need a version of extrema that iterates over each vector, keeping track of the minimum and maximum of each element. + ((xmin, ymin, zmin), (xmax, ymax, zmax)) = mapreduce( + (a, b)->((min(a[1][1], b[1][1]), + min(a[1][2], b[1][2]), + min(a[1][3], b[1][3])), + (max(a[2][1], b[2][1]), + max(a[2][2], b[2][2]), + max(a[2][3], b[2][3]))), ses) do X + + mins = (Inf, Inf, Inf) + maxs = (-Inf, -Inf, -Inf) + for x in X + y0dot = x.y0dot + mins = (min(y0dot[1], mins[1]), min(y0dot[2], mins[2]), min(y0dot[3], mins[3])) + maxs = (max(y0dot[1], maxs[1]), max(y0dot[2], maxs[2]), max(y0dot[3], maxs[3])) + end + return mins, maxs + end + + # Now find the diagonal of the boundary box. + r = sqrt((xmax - xmin)^2 + (ymax - ymin)^2 + (zmax - zmin)^2) + + # Set the observer radii to be a fraction of that boundary box diagonal + obs_radii = fill(0.02*r, length(observers)) + else + # Check that the length of observer_radii matches observers. + length(observer_radii) == length(observers) || throw(ArgumentError("length of observer_radii does not match length of observers")) + obs_radii = observer_radii + end + else + obs_names = nothing + obs_radii = nothing + end + + outfiles = WriteVTK.paraview_collection(name) do pvd + for tidx in 1:time_axis_len + # We want to check that the source times for all elements we write out for this time index `tidx` is the same. + # So get the time for the first element in the first array, and compare later. + ses_first = first(ses) + time_axis_first = first(time_axes) + axes_first = axes(ses_first) + idx_first = [d == time_axis_first ? axes_first[d][tidx] : axes_first[d][begin] for d in 1:ndims(ses_first)] + t = source_time(ses_first[idx_first...]) + + # We will create a multiblock VTK file for each time step, with one block for each array in `ses`. + name_mb = format(FormatExpr("{}-{:08d}"), name, tidx) + WriteVTK.vtk_multiblock(name_mb) do vtm + for (i, (sesi, time_axis)) in enumerate(zip(ses, time_axes)) + # This will give me each valid index allong the time axis for `sesi`. + time_indices = axes(sesi, time_axis) + + # This will give me a `:` for each dimension of `sesi` except for the dimension corresponding to `time_axis`. + idx = [d == time_axis ? time_indices[tidx] : Colon() for d in 1:ndims(sesi)] + + # Now we can grab all the source elements we want. + sesiv = @view sesi[idx...] + + # Now check if all the source times are what we expect. + all(source_time.(sesiv) .≈ t) || thow(ArgumentError("ses[$i][$(idx)] does not have all source elements with source time $(t)")) + + # Now create a VTK file for the source elements we've selected. + namei = format(FormatExpr("{}-{}-{:08d}"), name, block_names[i], tidx) + vtkfile = to_vtp(namei, sesiv) + + # And add it to the multiblock file. + WriteVTK.multiblock_add_block(vtm, vtkfile) + end + + for (obs, obs_name, obs_radius) in zip(observers, obs_names, obs_radii) + # Now also need to write out the observers. + namei = format(FormatExpr("{}-{}-{:08d}"), name, obs_name, tidx) + vtkfile = to_vtu(namei, obs, t; sphere_radius=obs_radius) + + WriteVTK.multiblock_add_block(vtm, vtkfile) + end + + # Now add the the multiblock file to the paraview collection. + pvd[t] = vtm + end + end + end + + return outfiles +end + """ - to_paraview_collection(name::AbstractString, ses::AbstractArray{<:CompactSourceElement}, axis::Integer=1) + to_paraview_collection(name::AbstractString, ses::AbstractArray{<:AbstractCompactSourceElement}; time_axis::Integer=1) -Construct and write out a ParaView collection data file (`.pvd`) object for an array of `CompactSourceElement` with name `name.pvd` (i.e., the `name` argument should not contain a file extension). +Construct and write out a ParaView collection data file (`.pvd`) object for an array of `AbstractCompactSourceElement`s with name `name.pvd` (i.e., the `name` argument should not contain a file extension). -`axis` indicates the axis of `ses` over which the source time for the source +`time_axis` indicates the time_axis of `ses` over which the source time for the source elements in `ses` vary. One VTK PolyData (`.vtp`) file will be written for each -valid index along `axis`. +valid index along `time_axis`. Returns a list of filenames written out by [WriteVTK.jl](https://github.com/jipolanco/WriteVTK.jl). """ -function to_paraview_collection(name, ses, axis=1) - # pvd = paraview_collection(name) - outfiles = paraview_collection(name) do pvd +function to_paraview_collection(name, ses::AbstractArray{<:AbstractCompactSourceElement}; time_axis=1) + outfiles = WriteVTK.paraview_collection(name) do pvd # These are the time indices, i.e., the ones we actually want to iterate # over. - indices = axes(ses, axis) + time_indices = axes(ses, time_axis) # idx is all the indicies, including the time one that we want to iterate # over, and the others that we want to grab all at once. They're all colons # right now, but the time one will be replaced with each index in `indices` # in the `for i in indices` loop below. - idx = Any[Colon() for ind in axes(ses)] + idx = [d == time_axis ? first(time_indices) : Colon() for d in 1:ndims(ses)] - for i in indices - idx[axis] = i - namei = format("{}{:08d}", name, i) + for (i, it) in enumerate(time_indices) + idx[time_axis] = it + namei = format(FormatExpr("{}{:08d}"), name, i) sesi = @view ses[idx...] vtkfile = to_vtp(namei, sesi) # Assume that all the times in sesi are the same. They should be if the - # user specified the correct axis. I suppose I could check that and + # user specified the correct time_axis. I suppose I could check that and # issue a warning. t = first(sesi).τ pvd[t] = vtkfile end - end return outfiles diff --git a/test/.gitignore b/test/.gitignore index d101e4f2..8241b57a 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,3 +1,5 @@ *.png *.vtp +*.vtu +*.vtm *.pvd diff --git a/test/Project.toml b/test/Project.toml index 91eb067b..e005f261 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -3,6 +3,7 @@ AcousticMetrics = "046f749b-9c1e-43ca-86bc-6902340f753e" CCBlade = "e1828068-15df-11e9-03e4-ef195ea46fa4" DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" FLOWMath = "6cb5d3fb-0fe8-4cc2-bd89-9fe0b19a99d3" +FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" Formatting = "59287772-0a20-5a39-b81b-1366585eb4c0" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" Interpolations = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" @@ -14,5 +15,6 @@ Polynomials = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" SHA = "ea8e919c-243c-51af-8825-aaa63cd721ce" +SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/test/adv_time_tests.jl b/test/adv_time_tests.jl index 01b4acef..5294863b 100644 --- a/test/adv_time_tests.jl +++ b/test/adv_time_tests.jl @@ -22,7 +22,7 @@ using Test c0 = 2.0 dummy0 = 1.0 dummy3 = @SVector [0.0, 0.0, 0.0] - se = CompactSourceElement(dummy0, c0, dummy0, dummy0, y, dummy3, dummy3, dummy3, dummy3, dummy3, τ, dummy3) + se = CompactF1ASourceElement(dummy0, c0, dummy0, dummy0, y, dummy3, dummy3, dummy3, dummy3, dummy3, τ, dummy3) # Define a function that takes a source element and an observer and compares # the advanced time solution to one found by NLsolve. diff --git a/test/anopp2_run.jl b/test/anopp2_run.jl index 7180283a..3c399c95 100644 --- a/test/anopp2_run.jl +++ b/test/anopp2_run.jl @@ -6,6 +6,7 @@ using StaticArrays: @SVector, SVector using KinematicCoordinateTransformations: KinematicCoordinateTransformations, compose using Printf: @sprintf using LinearAlgebra: × +using FileIO: load include(joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "constants.jl")) using .CCBladeTestCaseConstants @@ -56,10 +57,10 @@ function cf1a_noise(num_blades, v, omega, radii, dradii, cs_area, fn, fc, statio trans = compose.(src_times, Ref(const_vel_trans), compose.(src_times, Ref(global_trans), Ref(rot_trans))) # Transform the source elements. - ses = AcousticAnalogies.CompactSourceElement.(ccbc.rho, ccbc.c0, radii, θs, dradii, cs_area, -fn, 0.0, fc, src_times) .|> trans + ses = AcousticAnalogies.CompactF1ASourceElement.(ccbc.rho, ccbc.c0, radii, θs, dradii, cs_area, -fn, 0.0, fc, src_times) .|> trans # Do the acoustics. - apth = AcousticAnalogies.f1a.(ses, Ref(obs)) + apth = AcousticAnalogies.noise.(ses, Ref(obs)) # Combine all the acoustic pressure time histories into one. apth_total = AcousticAnalogies.combine(apth, obs_time_range, num_obs_times, 1; f_interp=f_interp) @@ -78,10 +79,10 @@ function get_results(; stationary_observer, theta, f_interp, rpm, irpm) omega = rpm*(2*pi/60.0) # Get the normal and circumferential loading from the CCBlade output. - fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega$(@sprintf "%02d" irpm).csv") - data = DelimitedFiles.readdlm(fname, ',') - fn = data[:, 1] - fc = data[:, 2] + fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega$(@sprintf "%02d" irpm)-outputs.jld2") + data_d = load(fname) + fn = data_d["Np"] + fc = data_d["Tp"] # Blade passing period. bpp = 2*pi/omega/ccbc.num_blades diff --git a/test/boundary_layer_tests.jl b/test/boundary_layer_tests.jl new file mode 100644 index 00000000..173ba9cf --- /dev/null +++ b/test/boundary_layer_tests.jl @@ -0,0 +1,402 @@ +module BoundaryLayerTests + +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using DelimitedFiles: DelimitedFiles +using FLOWMath: linear +using Test + +@testset "boundary layer thickness" begin + @testset "zero angle of attack" begin + @testset "untripped" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure06-bl_thickness-untripped.csv") + bpm_untripped = DelimitedFiles.readdlm(fname, ',') + Re_c_1e6 = bpm_untripped[:, 1] + delta0_c = bpm_untripped[:, 2] + + # Get the AcousticAnalogies.jl implementation. + Re_c_1e6_jl = range(minimum(Re_c_1e6), maximum(Re_c_1e6); length=50) + delta0_c_jl = AcousticAnalogies.bl_thickness_0.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), Re_c_1e6_jl.*1e6) + # Interpolate the BPM report data onto the uniform Re spacing. + delta0_c_interp = linear(Re_c_1e6, delta0_c, Re_c_1e6_jl) + + # Find the scaled error. + vmin, vmax = extrema(delta0_c) + err = abs.(delta0_c_jl .- delta0_c_interp)/(vmax - vmin) + @test maximum(err) < 0.041 + + end + + @testset "tripped" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure06-bl_thickness-tripped.csv") + bpm_tripped = DelimitedFiles.readdlm(fname, ',') + Re_c_1e6 = bpm_tripped[:, 1] + delta0_c = bpm_tripped[:, 2] + + # Get the AcousticAnalogies.jl implementation. + Re_c_1e6_jl = range(minimum(Re_c_1e6), maximum(Re_c_1e6); length=50) + delta0_c_jl = AcousticAnalogies.bl_thickness_0.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), Re_c_1e6_jl.*1e6) + # Interpolate the BPM report data onto the uniform Re spacing. + delta0_c_interp = linear(Re_c_1e6, delta0_c, Re_c_1e6_jl) + + # Find the scaled error. + vmin, vmax = extrema(delta0_c) + err = abs.(delta0_c_jl .- delta0_c_interp)/(vmax - vmin) + @test maximum(err) < 0.0086 + + end + end + + @testset "non-zero angle of attack, tripped" begin + @testset "pressure side" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure07-bl_thickness-pressure_side.csv") + bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm_pressure_side[:, 1] + delta_bpm = bpm_pressure_side[:, 2] + + # Get the AcousticAnalogies.jl implementation. + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + delta_jl = AcousticAnalogies._bl_thickness_p.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) + + # Interpolate the BPM report data onto the uniform alpha spacing. + delta_bpm_interp = linear(alpha_deg, delta_bpm, alpha_deg_jl) + + # Find the scaled error. + vmin, vmax = extrema(delta_bpm) + err = abs.(delta_jl .- delta_bpm_interp)./(vmax - vmin) + @test maximum(err) < 0.032 + end + + @testset "suction side" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure07-bl_thickness-suction_side.csv") + bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm_pressure_side[:, 1] + delta_bpm = bpm_pressure_side[:, 2] + + # Get the AcousticAnalogies.jl implementation. + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + delta_jl = AcousticAnalogies._bl_thickness_s.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) + + # Interpolate the BPM report data onto the uniform alpha spacing. + delta_bpm_interp = linear(alpha_deg, delta_bpm, alpha_deg_jl) + + # Find the scaled error. + vmin, vmax = extrema(delta_bpm) + err = abs.(delta_jl .- delta_bpm_interp)./(vmax - vmin) + @test maximum(err) < 0.023 + end + end + + @testset "non-zero angle of attack, untripped" begin + @testset "pressure side" begin + # Non-zero boundary layer thickness for the pressure side is the same for tripped and untripped, so getting the data for the tripped case. + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure07-bl_thickness-pressure_side.csv") + bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm_pressure_side[:, 1] + delta_bpm = bpm_pressure_side[:, 2] + + # Get the AcousticAnalogies.jl implementation. + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + delta_jl = AcousticAnalogies._bl_thickness_p.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) + + # Interpolate the BPM report data onto the uniform alpha spacing. + delta_bpm_interp = linear(alpha_deg, delta_bpm, alpha_deg_jl) + + # Find the scaled error. + vmin, vmax = extrema(delta_bpm) + err = abs.(delta_jl .- delta_bpm_interp)./(vmax - vmin) + @test maximum(err) < 0.032 + end + + @testset "suction side" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure08-bl_thickness-suction_side.csv") + bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm_pressure_side[:, 1] + delta_bpm = bpm_pressure_side[:, 2] + + # Get the AcousticAnalogies.jl implementation. + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + delta_jl = AcousticAnalogies._bl_thickness_s.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) + + # Interpolate the BPM report data onto the uniform alpha spacing. + delta_bpm_interp = linear(alpha_deg, delta_bpm, alpha_deg_jl) + + # Find the scaled error. + vmin, vmax = extrema(delta_bpm) + err = abs.(delta_jl .- delta_bpm_interp)./(vmax - vmin) + @test maximum(err) < 0.028 + end + end + + @testset "positive/negative angle of attack" begin + for bl in [AcousticAnalogies.TrippedN0012BoundaryLayer(), AcousticAnalogies.UntrippedN0012BoundaryLayer()] + for Re_c in (range(0.04, 3.0; length=30)) .* 10^6 + for alphastar_deg in 0:30 + alphastar = alphastar_deg*pi/180 + # For a positive angle of attack, the pressure side should be the bottom side. + delta_p = AcousticAnalogies.bl_thickness_p(bl, Re_c, alphastar) + delta_bot = AcousticAnalogies.bl_thickness_bot(bl, Re_c, alphastar) + @test delta_p ≈ delta_bot + + # For a positive angle of attack, the suction side should be the top side. + delta_s = AcousticAnalogies.bl_thickness_s(bl, Re_c, alphastar) + delta_top = AcousticAnalogies.bl_thickness_top(bl, Re_c, alphastar) + @test delta_s ≈ delta_top + + # But if we switch the sign on alpha, the top and bottom switch too. + delta_bot_neg = AcousticAnalogies.bl_thickness_bot(bl, Re_c, -alphastar) + @test delta_bot_neg ≈ delta_s + + delta_top_neg = AcousticAnalogies.bl_thickness_top(bl, Re_c, -alphastar) + @test delta_top_neg ≈ delta_p + + # But the value of the pressure and suction sides should never change. + delta_p_neg = AcousticAnalogies.bl_thickness_p(bl, Re_c, -alphastar) + @test delta_p_neg ≈ delta_p + delta_s_neg = AcousticAnalogies.bl_thickness_s(bl, Re_c, -alphastar) + @test delta_s_neg ≈ delta_s + end + end + end + end + + @testset "ITrip1N0012BoundaryLayer" begin + + bl = AcousticAnalogies.ITrip1N0012BoundaryLayer() + bl_untripped = AcousticAnalogies.UntrippedN0012BoundaryLayer() + bl_tripped = AcousticAnalogies.TrippedN0012BoundaryLayer() + for Re_c in (range(0.04, 3.0; length=30)) .* 10^6 + for alphastar in (-30:30) .* (pi/180) + # Should use the untripped pressure-side and suction-side boundary layer thickness. + @test AcousticAnalogies.bl_thickness_p(bl, Re_c, alphastar) ≈ AcousticAnalogies.bl_thickness_p(bl_untripped, Re_c, alphastar) + @test AcousticAnalogies.bl_thickness_s(bl, Re_c, alphastar) ≈ AcousticAnalogies.bl_thickness_s(bl_untripped, Re_c, alphastar) + + # Should use the tripped displacement thickness. + @test AcousticAnalogies.disp_thickness_p(bl, Re_c, alphastar) ≈ AcousticAnalogies.disp_thickness_p(bl_tripped, Re_c, alphastar) + @test AcousticAnalogies.disp_thickness_s(bl, Re_c, alphastar) ≈ AcousticAnalogies.disp_thickness_s(bl_tripped, Re_c, alphastar) + + end + end + end + + @testset "ITrip2N0012BoundaryLayer" begin + bl = AcousticAnalogies.ITrip2N0012BoundaryLayer() + bl_untripped = AcousticAnalogies.UntrippedN0012BoundaryLayer() + bl_tripped = AcousticAnalogies.TrippedN0012BoundaryLayer() + for Re_c in (range(0.04, 3.0; length=30)) .* 10^6 + for alphastar in (-30:30) .* (pi/180) + # boundary layer thickness should be untripped multiplied by 0.6. + @test AcousticAnalogies.bl_thickness_p(bl, Re_c, alphastar) ≈ 0.6*AcousticAnalogies.bl_thickness_p(bl_untripped, Re_c, alphastar) + @test AcousticAnalogies.bl_thickness_s(bl, Re_c, alphastar) ≈ 0.6*AcousticAnalogies.bl_thickness_s(bl_untripped, Re_c, alphastar) + + # The pressure-side displacement thickness should be tripped multiplied by 0.6. + @test AcousticAnalogies.disp_thickness_p(bl, Re_c, alphastar) ≈ 0.6*AcousticAnalogies.disp_thickness_p(bl_tripped, Re_c, alphastar) + # The suction-side displacement thickness should be the tripped zero-alpha displacement thickness multipled by 0.6 multiplied by the untripped suction-side to zero-alpha displacement thickness ratio. + @test AcousticAnalogies.disp_thickness_s(bl, Re_c, alphastar) ≈ AcousticAnalogies.disp_thickness_s(bl_tripped, Re_c, 0) * 0.6 * AcousticAnalogies.disp_thickness_s(bl_untripped, Re_c, alphastar) / AcousticAnalogies.disp_thickness_s(bl_untripped, Re_c, 0) + end + end + end + + @testset "ITrip3N0012BoundaryLayer" begin + bl = AcousticAnalogies.ITrip3N0012BoundaryLayer() + bl_untripped = AcousticAnalogies.UntrippedN0012BoundaryLayer() + bl_tripped = AcousticAnalogies.TrippedN0012BoundaryLayer() + for Re_c in (range(0.04, 3.0; length=30)) .* 10^6 + for alphastar in (-30:30) .* (pi/180) + # boundary layer thickness should be untripped. + @test AcousticAnalogies.bl_thickness_p(bl, Re_c, alphastar) ≈ AcousticAnalogies.bl_thickness_p(bl_untripped, Re_c, alphastar) + @test AcousticAnalogies.bl_thickness_s(bl, Re_c, alphastar) ≈ AcousticAnalogies.bl_thickness_s(bl_untripped, Re_c, alphastar) + + # The pressure-side displacement thickness should be untripped multiplied by 1.48. + @test AcousticAnalogies.disp_thickness_p(bl, Re_c, alphastar) ≈ 1.48*AcousticAnalogies.disp_thickness_p(bl_untripped, Re_c, alphastar) + # The suction-side displacement thickness should be the untripped. + @test AcousticAnalogies.disp_thickness_s(bl, Re_c, alphastar) ≈ AcousticAnalogies.disp_thickness_s(bl_untripped, Re_c, alphastar) + end + end + end +end + +@testset "displacement thickness" begin + @testset "zero angle of attack" begin + @testset "tripped" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure06-disp_thickness-tripped.csv") + bpm_tripped = DelimitedFiles.readdlm(fname, ',') + Re_c_1e6 = bpm_tripped[:, 1] + deltastar0_c = bpm_tripped[:, 2] + + # Get the AcousticAnalogies.jl implementation. + Re_c_1e6_jl = range(minimum(Re_c_1e6), maximum(Re_c_1e6); length=50) + deltastar0_c_jl = AcousticAnalogies.disp_thickness_0.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), Re_c_1e6_jl.*1e6) + + # Interpolate the BPM report data onto the uniform Re spacing. + deltastar0_c_interp = linear(Re_c_1e6, deltastar0_c, Re_c_1e6_jl) + + # Find the scaled error. + vmin, vmax = extrema(deltastar0_c) + err = abs.(deltastar0_c_jl .- deltastar0_c_interp)/(vmax - vmin) + @test maximum(err) < 0.05 + end + + @testset "untripped" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure06-disp_thickness-untripped.csv") + bpm_untripped = DelimitedFiles.readdlm(fname, ',') + Re_c_1e6 = bpm_untripped[:, 1] + deltastar0_c = bpm_untripped[:, 2] + + # Get the AcousticAnalogies.jl implementation. + Re_c_1e6_jl = range(minimum(Re_c_1e6), maximum(Re_c_1e6); length=50) + deltastar0_c_jl = AcousticAnalogies.disp_thickness_0.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), Re_c_1e6_jl.*1e6) + # Interpolate the BPM report data onto the uniform Re spacing. + deltastar0_c_interp = linear(Re_c_1e6, deltastar0_c, Re_c_1e6_jl) + + # Find the scaled error. + vmin, vmax = extrema(deltastar0_c) + err = abs.(deltastar0_c_jl .- deltastar0_c_interp)/(vmax - vmin) + @test maximum(err) < 0.02 + end + end + + @testset "non-zero angle of attack, tripped" begin + @testset "pressure side" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure07-pressure_side.csv") + bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm_pressure_side[:, 1] + deltastar_bpm = bpm_pressure_side[:, 2] + + # Get the AcousticAnalogies.jl implementation. + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + deltastar_jl = AcousticAnalogies._disp_thickness_p.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) + + # Interpolate the BPM report data onto the uniform alpha spacing. + deltastar_bpm_interp = linear(alpha_deg, deltastar_bpm, alpha_deg_jl) + + # Find the scaled error. + vmin, vmax = extrema(deltastar_bpm) + err = abs.(deltastar_jl .- deltastar_bpm_interp)./(vmax - vmin) + @test maximum(err) < 0.06 + end + + @testset "suction side" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure07-suction_side.csv") + bpm_suction_side = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm_suction_side[:, 1] + deltastar_bpm = bpm_suction_side[:, 2] + + # Get the AcousticAnalogies.jl implementation. + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + deltastar_jl = AcousticAnalogies._disp_thickness_s.(Ref(AcousticAnalogies.TrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) + + # Interpolate the BPM report data onto the uniform alpha spacing. + deltastar_bpm_interp = linear(alpha_deg, deltastar_bpm, alpha_deg_jl) + + # Find the scaled error. + vmin, vmax = extrema(deltastar_bpm) + err = abs.(deltastar_jl .- deltastar_bpm_interp)./(vmax - vmin) + @test maximum(err) < 0.04 + end + end + + @testset "non-zero angle of attack, untripped" begin + @testset "boundary layer thickness, pressure side" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure08-bl_thickness-pressure_side.csv") + bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm_pressure_side[:, 1] + delta_bpm = bpm_pressure_side[:, 2] + + # Get the AcousticAnalogies.jl implementation. + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + delta_jl = AcousticAnalogies._bl_thickness_p.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) + + # Interpolate the BPM report onto the uniform alpha spacing. + delta_bpm_interp = linear(alpha_deg, delta_bpm, alpha_deg_jl) + + # Find the scaled error. + vmin, vmax = extrema(delta_bpm) + err = abs.(delta_jl .- delta_bpm_interp)./(vmax - vmin) + @test maximum(err) < 0.037 + end + + @testset "displacement thickness, pressure side" begin + # Get the digitized data from the BPM report plot. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure08-pressure_side.csv") + bpm_pressure_side = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm_pressure_side[:, 1] + deltastar_bpm = bpm_pressure_side[:, 2] + + # Get the AcousticAnalogies.jl implementation. + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + deltastar_jl = AcousticAnalogies._disp_thickness_p.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) + + # Interpolate the BPM report onto the uniform alpha spacing. + deltastar_bpm_interp = linear(alpha_deg, deltastar_bpm, alpha_deg_jl) + + # Find the scaled error. + vmin, vmax = extrema(deltastar_bpm) + err = abs.(deltastar_jl .- deltastar_bpm_interp)./(vmax - vmin) + # This is dumb. Maybe I have a bug? + @test maximum(err) < 0.11 + end + + @testset "displacement thinckness, suction side" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure08-suction_side.csv") + bpm_suction_side = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm_suction_side[:, 1] + deltastar_bpm = bpm_suction_side[:, 2] + + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + deltastar_jl = AcousticAnalogies._disp_thickness_s.(Ref(AcousticAnalogies.UntrippedN0012BoundaryLayer()), alpha_deg_jl.*pi/180) + + deltastar_bpm_interp = linear(alpha_deg, deltastar_bpm, alpha_deg_jl) + + vmin, vmax = extrema(deltastar_bpm) + err = abs.(deltastar_jl .- deltastar_bpm_interp)./(vmax - vmin) + # This is dumb. Maybe I have a bug? + @test maximum(err) < 0.081 + end + end + + @testset "positive/negative angle of attack" begin + for bl in [AcousticAnalogies.TrippedN0012BoundaryLayer(), AcousticAnalogies.UntrippedN0012BoundaryLayer()] + for Re_c in (range(0.04, 3.0; length=30)) .* 10^6 + for alphastar_deg in 0:30 + alphastar = alphastar_deg*pi/180 + # For a positive angle of attack, the pressure side should be the bottom side. + deltastar_p = AcousticAnalogies.disp_thickness_p(bl, Re_c, alphastar) + deltastar_bot = AcousticAnalogies.disp_thickness_bot(bl, Re_c, alphastar) + @test deltastar_p ≈ deltastar_bot + + # For a positive angle of attack, the suction side should be the top side. + deltastar_s = AcousticAnalogies.disp_thickness_s(bl, Re_c, alphastar) + deltastar_top = AcousticAnalogies.disp_thickness_top(bl, Re_c, alphastar) + @test deltastar_s ≈ deltastar_top + + # But if we switch the sign on alpha, the top and bottom switch too. + deltastar_bot_neg = AcousticAnalogies.disp_thickness_bot(bl, Re_c, -alphastar) + @test deltastar_bot_neg ≈ deltastar_s + + deltastar_top_neg = AcousticAnalogies.disp_thickness_top(bl, Re_c, -alphastar) + @test deltastar_top_neg ≈ deltastar_p + + # But the value of the pressure and suction sides should never change. + deltastar_p_neg = AcousticAnalogies.disp_thickness_p(bl, Re_c, -alphastar) + @test deltastar_p_neg ≈ deltastar_p + deltastar_s_neg = AcousticAnalogies.disp_thickness_s(bl, Re_c, -alphastar) + @test deltastar_s_neg ≈ deltastar_s + end + end + end + end +end + +end # module diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-bl_thickness-tripped.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-bl_thickness-tripped.csv new file mode 100644 index 00000000..16485c11 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-bl_thickness-tripped.csv @@ -0,0 +1,95 @@ +0.043515365256685146, 0.0947800184783715 +0.045848593655796285, 0.09328481651943997 +0.04685731826591985, 0.09274224063188645 +0.04915532059093932, 0.0909854583945438 +0.050236797200033205, 0.0902516249784931 +0.0527005377861259, 0.08889923417697465 +0.053860013468863446, 0.08819332284299246 +0.056337733754360624, 0.08699043072725679 +0.05766082843132637, 0.08633634031612064 +0.060400966381931265, 0.084718213138473 +0.061729860823538575, 0.08404021435554875 +0.0645696174172093, 0.0830453376346922 +0.06666383319442536, 0.08237586606707253 +0.07421936620516459, 0.07942044685569741 +0.07585228218511761, 0.07901814109950826 +0.07934171202679355, 0.07725370860237943 +0.08457182555886235, 0.0758730213826319 +0.08668367278330774, 0.07550437497242121 +0.09040865978999096, 0.07469365642805845 +0.09906174093569786, 0.0724721129870678 +0.10331864060315113, 0.07157710268764206 +0.11370115864388741, 0.06961177455334903 +0.11977591965345706, 0.0686428410813515 +0.12304671122968373, 0.06861674731213446 +0.1273245722140997, 0.06765950119993239 +0.131617723633292, 0.0663614568857871 +0.14677816097726254, 0.06464233075115117 +0.15022525390312602, 0.06414659219933098 +0.15736420647383828, 0.0633033391766955 +0.17217567204994622, 0.06177344241245178 +0.1808818471449405, 0.06099894020893365 +0.18512986695632805, 0.060640913629718976 +0.19336564243052917, 0.059854651192383826 +0.19819418541835665, 0.0594216106307787 +0.20731170548660793, 0.05879209770884262 +0.21218043192842706, 0.05842055605805862 +0.22226359704623794, 0.05767579304339302 +0.22715366547359922, 0.05733311706216263 +0.23760340747365163, 0.056636583744935104 +0.24318353614954083, 0.05628149653174323 +0.25474002006581475, 0.05558917660581798 +0.26300211902890985, 0.05514104340213724 +0.2715321864064626, 0.05471028849634238 +0.278716711605826, 0.05456058505996748 +0.2919617907993815, 0.053686019017968815 +0.29881852900202793, 0.053322587448247014 +0.31301887981102794, 0.05265341366081758 +0.32037014487031323, 0.05241027184173632 +0.33559466411643313, 0.05169267557211123 +0.3434761226721955, 0.05145655988817186 +0.35875616512879516, 0.051004551414532175 +0.3666492354269987, 0.05074299454210361 +0.38463064850523415, 0.05006130011393048 +0.42144393851940765, 0.04852198071350772 +0.44179202132832207, 0.048335922907703235 +0.4492250336023366, 0.04820760254544114 +0.4767577984498747, 0.04740825840967347 +0.49412875240919935, 0.047137853555968647 +0.5126282171375136, 0.0468378484260626 +0.5416840919345477, 0.04630394440007238 +0.5536017982561184, 0.04605490195345933 +0.5807518415494157, 0.04549339276771509 +0.5935290856966068, 0.0453484511686862 +0.6190343286255171, 0.04489823236259359 +0.6344922653568736, 0.04465198443957871 +0.6636807904911014, 0.04421230542902445 +0.6792673691939628, 0.04394838223604719 +0.7134769338937448, 0.04348430682567297 +0.7347267292104404, 0.043315732288660744 +0.7575352061647295, 0.04341635329855059 +0.7773909821287895, 0.04277466970756252 +0.8155162174280624, 0.04217030026344729 +0.8346686592171286, 0.04210145294224447 +0.8743334946265842, 0.04175973209883832 +0.8948672633024274, 0.041495827927955656 +0.9373928359595964, 0.041194252696499484 +0.9594075566242881, 0.04098958363455732 +1.005000190783791, 0.040626206059801065 +1.0286026737763319, 0.04048951546288959 +1.0774835743666709, 0.04006599248136533 +1.148510040508136, 0.03965144101003401 +1.2313437499724256, 0.0390948297871373 +1.2620916954440236, 0.03889508976194755 +1.3201516548565282, 0.03861399043961191 +1.355081815279942, 0.0384543801892165 +1.4236024106196106, 0.03775600329195844 +1.4826250991662007, 0.03802611592133082 +1.534170272562992, 0.037589365839040545 +1.5643892666904162, 0.037547390722686744 +1.6316144949797584, 0.03724484715168311 +1.672357620953663, 0.03702193760424273 +1.7543743014518025, 0.03671347996383577 +1.7955758753343642, 0.036580747689181466 +1.8700206183757198, 0.03635190670515587 +1.9167169954076175, 0.036277078165304434 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-bl_thickness-untripped.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-bl_thickness-untripped.csv new file mode 100644 index 00000000..4b66d932 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-bl_thickness-untripped.csv @@ -0,0 +1,121 @@ +0.04040131712460812, 0.05838291914634628 +0.04160860147041628, 0.05722360006892484 +0.043072506877375835, 0.0559518465017467 +0.04447264362147685, 0.05536475095332723 +0.0459183177070235, 0.05476993520928728 +0.04741103550030498, 0.054154057578502675 +0.04895217729697358, 0.05359940642010075 +0.05054352013617096, 0.05299669116562158 +0.05218659452586714, 0.05240075333093568 +0.05388297051092858, 0.05186405968625346 +0.055634661765666914, 0.05125487542484593 +0.057443150284932964, 0.05071706459145757 +0.059310426448816914, 0.050184896938159154 +0.06123849640669605, 0.04962057720125712 +0.06322911326164521, 0.04911235839262301 +0.06528436941514297, 0.048633986365757956 +0.06740653622316821, 0.0481236761850861 +0.06959761515520121, 0.04764286000114537 +0.0718599532908753, 0.04715489716565682 +0.07419586936184783, 0.04666010687823939 +0.07660767822041986, 0.04618220949642904 +0.07909780332175034, 0.045732378173214995 +0.08166899661504415, 0.045252514195119255 +0.08432381410248373, 0.04476634009630792 +0.08706466124464823, 0.04435277222704175 +0.08989482926037082, 0.04388738427717764 +0.09281709231470964, 0.043404876331718786 +0.09583390426255874, 0.043025686141617635 +0.09894907847966729, 0.042585012852734486 +0.102165249843885, 0.04220228963137287 +0.10548606667163794, 0.04180181543750553 +0.10891476812984938, 0.041415634934369554 +0.11245503203453772, 0.04101223176099571 +0.11611025157666235, 0.04063334572146785 +0.1198843418656755, 0.04024775985600711 +0.12378123481494172, 0.039845634003615904 +0.12780479797335884, 0.039447525895361005 +0.1319589437388061, 0.03908309518252474 +0.13624797400434135, 0.038741660589352696 +0.1406769197180398, 0.03833514931416758 +0.14524953401683485, 0.037971371942075366 +0.14997062287535215, 0.03763011278032644 +0.15484516269094753, 0.03729192060851019 +0.1603147316608354, 0.03691120649272889 +0.1657155037419209, 0.036435389861249216 +0.17043929743481512, 0.036387561340229684 +0.17597941015790824, 0.03603313341127857 +0.1793376536327586, 0.0357993364375049 +0.190906906333647, 0.03522507693527661 +0.19711180614484913, 0.034926195661859956 +0.20351827359815486, 0.03463862671628852 +0.21013296209125004, 0.034353425503500234 +0.21696320111718595, 0.03402743228120675 +0.2240153366979387, 0.033713074381166996 +0.23129609463155373, 0.03344396747304403 +0.2388138567632244, 0.033151796973883506 +0.24657545600972372, 0.03289550503152399 +0.2545894439537646, 0.032632924183806214 +0.26362959781209205, 0.032332471927215334 +0.27220302592214546, 0.03177828744726832 +0.2810457757381244, 0.03175392182368161 +0.29017918708766166, 0.031548383304889856 +0.29961112282384905, 0.03125692776856217 +0.3093486711247335, 0.031015284797102527 +0.3194021994453275, 0.030798914462115627 +0.3297836534149131, 0.030529851462360785 +0.34050200415986587, 0.03028615390337818 +0.3515694422003597, 0.030013963909573546 +0.36299510415961744, 0.029804579037956767 +0.37480213309253285, 0.02921119619042039 +0.3926402775885296, 0.029253644973271455 +0.40540133142343304, 0.02902748910313259 +0.41857691063288827, 0.028810381266611413 +0.4321804734560461, 0.02860214415687275 +0.44622637715549035, 0.028388217639987202 +0.46072996730765386, 0.02814021477594789 +0.47666249816993594, 0.027909501162679276 +0.5011382721502626, 0.0276839941041423 +0.5175540879993439, 0.027387425424182935 +0.5343735344717834, 0.02721015060167553 +0.551740721713494, 0.027006635343860535 +0.5696733769388092, 0.026780879665373902 +0.5881849176077869, 0.026644639838215488 +0.6073006649771612, 0.026452056382321842 +0.6270376656064389, 0.026260864890729776 +0.6474137623278388, 0.026117341358576823 +0.6684561520914496, 0.025895738315442195 +0.6901813938203449, 0.02569554195574181 +0.7126119811549727, 0.025509818436829732 +0.7357700894596877, 0.025350084264980033 +0.7596818320624507, 0.025174264560658088 +0.7843581504738899, 0.025195791061150205 +0.8098374841746665, 0.025194980542107295 +0.8338812122999554, 0.025021642258226243 +0.8633541503879749, 0.024516340286245875 +0.8914118514994493, 0.024351478110030238 +0.9203804318106141, 0.024199986056352374 +0.9502914006210232, 0.024037251230556327 +0.9811729057695654, 0.023893767938924886 +1.0130600626132957, 0.023727079075454308 +1.0459770186947288, 0.02363330836474603 +1.0799702456315208, 0.023468436531997063 +1.1150718701751874, 0.02326741767861444 +1.1513171442460826, 0.0230410607764546 +1.1857897562618942, 0.022754370191599958 +1.2273434423689011, 0.02293050741288989 +1.2672269614361298, 0.022805185286918363 +1.3084078833179724, 0.022669056450062324 +1.3509249572325228, 0.02255087692268545 +1.394824357702032, 0.02242762959162612 +1.440148066657337, 0.02232201866020247 +1.4869468443208236, 0.022200022108442775 +1.5352655908623634, 0.02208428777577163 +1.585158574079454, 0.02194133939216066 +1.6366687377827693, 0.021826953637945734 +1.6898509876609715, 0.021724171268795764 +1.7447694869073556, 0.021572618050906843 +1.801465317910936, 0.021465593247613244 +1.8600044287284925, 0.021353687678431044 +1.9204447892164687, 0.02124774901961902 +1.9542365815794616, 0.021187257309573077 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-disp_thickness-tripped.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-disp_thickness-tripped.csv new file mode 100644 index 00000000..01601404 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-disp_thickness-tripped.csv @@ -0,0 +1,108 @@ +0.04037433404302965, 0.01782147857312894 +0.04072736976854077, 0.0184323060028401 +0.042048450836318786, 0.017931112337930023 +0.04341238404990346, 0.018010382397535267 +0.04499432215471717, 0.017976267327306606 +0.04627441201351699, 0.017897839938265235 +0.04753340952625329, 0.017824495726928825 +0.049325123557721014, 0.01778083994793001 +0.050483659218970224, 0.017721084206775914 +0.052883003827397135, 0.017641039547060332 +0.05412510605419282, 0.017587877405463515 +0.05669751826441675, 0.017451619836116428 +0.05802921481327154, 0.01744453098718378 +0.060611028407633945, 0.017353644742145898 +0.062034644463923365, 0.01732345467557858 +0.06498297451829997, 0.017247208027706785 +0.06698608305581204, 0.017012203218299316 +0.0692670767232461, 0.017125071448086143 +0.0709557513750097, 0.016856591102102074 +0.07469567471667717, 0.01691313726456771 +0.07656111760691704, 0.01686428931305488 +0.080083563243578, 0.016814281182770844 +0.08196454512878336, 0.016786977976501905 +0.08561128026986996, 0.016652092001064153 +0.08762209573355104, 0.016659825744790427 +0.09258911167007308, 0.016453861505447937 +0.09559244145063266, 0.01608031016896024 +0.09858309475396242, 0.01609129822833225 +0.1010112707552887, 0.016317231969310116 +0.10550542551611061, 0.016243528393093055 +0.10814030828083948, 0.016256260915638795 +0.11311565828822488, 0.016162651297375274 +0.11594059830421571, 0.01606383019372569 +0.12127482626971298, 0.015989105700548657 +0.12475526535821443, 0.015860055415182137 +0.13002252481502896, 0.01590026413382095 +0.13346321127305757, 0.015826344245913563 +0.13940120533899195, 0.015743236088674634 +0.1428825981823775, 0.01572436338337017 +0.1494563813278422, 0.015678493809031968 +0.15318889120885618, 0.01560450511856119 +0.1600938329835394, 0.01531593003149915 +0.16473980732861798, 0.015585716876378275 +0.1703057608359019, 0.015324250249923637 +0.1755750536996477, 0.015360091459655941 +0.18418669897688278, 0.015267211103929755 +0.18851282821288526, 0.015215902868911446 +0.1974723062893463, 0.015182380658785488 +0.20211048441124413, 0.01514014235660276 +0.21110270665473335, 0.014988011176186719 +0.21637476617803464, 0.014985981524360299 +0.22632979785508642, 0.01493070696365369 +0.2319821373494366, 0.0148955074492687 +0.24125093671066372, 0.014495757136337424 +0.24907643702859375, 0.01452582608802758 +0.25757070379194585, 0.01453229117256631 +0.2660311267758637, 0.014588679586315937 +0.27371171663743304, 0.014340416889246341 +0.2830004916944808, 0.014373629309638468 +0.2990428830630295, 0.014192202309478348 +0.3060667244501852, 0.014122358481139607 +0.3206132045684983, 0.01399100677657704 +0.32814368405174416, 0.013944796795575207 +0.3437394192123809, 0.013780660745591382 +0.35181308120470445, 0.01372558251855411 +0.3685337554312148, 0.013463630681732893 +0.3766428713769725, 0.013372124556126491 +0.3951165368331504, 0.013251211279995291 +0.43743053002700216, 0.012610353837238762 +0.46014272701078424, 0.01248200540748955 +0.48252517004715406, 0.012238600629053561 +0.4996109361764893, 0.01215656025121354 +0.5145354351867956, 0.012035369151301385 +0.5281511921992177, 0.011886905268481435 +0.554860596333185, 0.011710231907877438 +0.5670695971182917, 0.011603672278036176 +0.5914406316702766, 0.011482743432216155 +0.6053322352564272, 0.011391138931918959 +0.6341019531698971, 0.011234868026043236 +0.648995574769353, 0.011162072389155848 +0.6798404869113523, 0.011011500113492988 +0.6947995110217327, 0.010921594646525147 +0.7288781959011412, 0.010919851578859675 +0.7470811327318478, 0.010905495067872948 +0.7791885498663015, 0.010549357340977363 +0.8500656736012902, 0.010250549103612729 +0.8956502052300221, 0.010158025472027828 +0.916687004084664, 0.01008342466261324 +0.9574718910857517, 0.009969945139968156 +0.9813837057738873, 0.009916178882802199 +1.0235607794941373, 0.009813785700612077 +1.049123091985163, 0.009730693688321572 +1.1005807206741887, 0.009534740645498512 +1.179966926908226, 0.009436480119222254 +1.205930596399675, 0.009376141946401122 +1.2614133936756136, 0.009240002898157188 +1.2891691889429384, 0.009188528592167306 +1.3524006533428254, 0.00911959209014705 +1.388994139098373, 0.009046419762121255 +1.4415597394558353, 0.00894142968778257 +1.5232771434893926, 0.008941911595790674 +1.5726879600159562, 0.008808497988592554 +1.666668293587214, 0.00867908963303141 +1.703341206818738, 0.008626983901217137 +1.7817090126873563, 0.008570464075570026 +1.823557330142698, 0.008527791435327624 +1.915777380786581, 0.008417638857665364 +1.9579316222315237, 0.008385942099503753 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-disp_thickness-untripped.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-disp_thickness-untripped.csv new file mode 100644 index 00000000..2c28f4eb --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure06-disp_thickness-untripped.csv @@ -0,0 +1,118 @@ +0.040617768187194966, 0.014673570162313375 +0.042048450836318786, 0.014715625233306351 +0.04341238404990346, 0.01447084888278145 +0.04482055941210757, 0.014242538322652449 +0.04627441201351699, 0.014009696241552032 +0.047775423495010655, 0.013768668447305456 +0.049325123557721014, 0.013539643559766732 +0.05092509152197321, 0.013295122871571401 +0.05257695793679158, 0.013070181291945333 +0.05428240624161459, 0.012834138909423492 +0.05604317448191047, 0.012602359360377463 +0.05786105708044305, 0.012378357360596122 +0.05973790666599235, 0.012154809048767973 +0.0616756359613934, 0.011959568093344662 +0.06367621973281838, 0.011760635368072644 +0.06587391053592068, 0.011677027711757937 +0.067874172125459, 0.011382547276985892 +0.0698966120183625, 0.0114554313943525 +0.0723488809644594, 0.01102940978486743 +0.07469567471667717, 0.010861698095687143 +0.07711859184277481, 0.010690330099499361 +0.07980001709550286, 0.010365718321410014 +0.08490437066706959, 0.010192785541599317 +0.08600971738877042, 0.009916620138934707 +0.08864514580313489, 0.009943939447960322 +0.09152054444872587, 0.009792733271523569 +0.09448921292083874, 0.00963543400071915 +0.09755417662972493, 0.009483413110195734 +0.10071855912141614, 0.009347343941790152 +0.10398558526097215, 0.00921055380287129 +0.10735858451898465, 0.009075765467055229 +0.11084099436468584, 0.008955935360852912 +0.1144363637691197, 0.008819752638762099 +0.11829130518998779, 0.008727330141253686 +0.1229375404122297, 0.008596638321248906 +0.1288954548215152, 0.008361641219065852 +0.1330764600289488, 0.008060246934704798 +0.14228950384451344, 0.007789161884877837 +0.1473034131404887, 0.00787916070767636 +0.15208152062508493, 0.007775129739951052 +0.1570146164473417, 0.007668020485779306 +0.16210772799203169, 0.007566777266955751 +0.16736604571811786, 0.007462538251446737 +0.17279492844842037, 0.007364008077385317 +0.1783999088308657, 0.007264670300711412 +0.18418669897688278, 0.007160435924851982 +0.1901611962826932, 0.007069996761712929 +0.1963294894394278, 0.0069766494329524765 +0.20269786463819392, 0.006876547615645951 +0.20927281197641845, 0.0067916647427863205 +0.21606103207199337, 0.006690332887454406 +0.22306944289196665, 0.006605831313274693 +0.230305186802736, 0.006518612502839618 +0.23825383063031957, 0.006479933039708831 +0.2454884092684032, 0.006511805890944338 +0.252879934872845, 0.0064134145384671815 +0.2616726089488799, 0.006220691102674694 +0.27016053074699875, 0.0061296567719166285 +0.27892377680141034, 0.005998381600349714 +0.2879712778548694, 0.0060036060983946786 +0.2973122543382508, 0.005931219660496085 +0.3069562257672151, 0.005863107979537431 +0.316913020443676, 0.0057873748355040475 +0.3271927854719565, 0.005725897838118919 +0.3378059970998394, 0.005655218380145786 +0.34876347139505387, 0.005585411376750204 +0.3600763752680764, 0.005526079757430019 +0.37175623785248113, 0.00546737839447123 +0.383814962254435, 0.005404593275355728 +0.3962648376833152, 0.005291847436616211 +0.4218787710048077, 0.005140974149646922 +0.4360903196364343, 0.005172575258747141 +0.4502358602983303, 0.005114659605565607 +0.4648402424240408, 0.005060328596406115 +0.4799183495372112, 0.005003669732820031 +0.4941393411279053, 0.0050560533486039535 +0.5115577023782769, 0.004895088378490563 +0.5281511921992177, 0.004841684518112355 +0.5452829280541006, 0.004791643557534758 +0.5629703691269898, 0.004739368247317053 +0.5812315409286651, 0.0046971955023371705 +0.6000850536666625, 0.004645950590421358 +0.6195501212111901, 0.004600602058566116 +0.6396465806762428, 0.0045556961679532925 +0.6603949126358739, 0.0045295942166816185 +0.6897769500902408, 0.004447533365709137 +0.7121513699197721, 0.004402843660359712 +0.7368535807947776, 0.00427864906930494 +0.7686501267190228, 0.004246977485559278 +0.7973356539059833, 0.004168165406864758 +0.820707638788883, 0.004183612445548774 +0.8439207259240049, 0.004172790694671719 +0.8878864698892782, 0.004105674394348162 +0.916687004084664, 0.0040940145346061736 +0.9464217464227236, 0.004059940118859287 +0.9771209999821381, 0.004027317869403919 +1.0088160507880417, 0.003992639729368936 +1.0415391996960313, 0.003955963471169471 +1.075323795310402, 0.0039287345483016226 +1.1102042679701691, 0.003894905282461622 +1.1462161648374853, 0.0038624880497509 +1.1833961861242415, 0.0038281181263751076 +1.2217822224937467, 0.0037973586026365386 +1.2614133936756136, 0.00376575324934027 +1.302330088333213, 0.003722508891759594 +1.344574005224297, 0.003694741774148193 +1.3881881956967774, 0.003673572678099024 +1.433217107562934, 0.0036451126159551895 +1.4797066303967772, 0.0036242278711491782 +1.527704142300744, 0.0036024172060917336 +1.577258558189358, 0.0035755458821660107 +1.628420379639078, 0.003551966013611859 +1.6812417463551497, 0.003527517807929801 +1.7357764893078718, 0.003504254673019909 +1.792080185592479, 0.0034811449529119336 +1.8502102150685082, 0.0034551782288179253 +1.9102258188363836, 0.003433388387170133 +1.952257905230749, 0.003422197439232577 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-bl_thickness-pressure_side.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-bl_thickness-pressure_side.csv new file mode 100644 index 00000000..717b93e1 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-bl_thickness-pressure_side.csv @@ -0,0 +1,74 @@ +0.7342464345577309, 0.933795097958901 +0.9896521086558021, 0.8982802371381512 +1.2454728760531566, 0.8755969060411909 +2.013259855182284, 0.8193413558348672 +2.269343651997005, 0.8053589377520405 +3.46865504932469, 0.7215268843690286 +3.7121175439404386, 0.7169126218643977 +4.944836965141455, 0.6363872516022215 +5.201558608293293, 0.6383432101259998 +5.457691723123769, 0.6284343184361536 +5.713763190434555, 0.6174676926559408 +5.969834657745334, 0.606692442294725 +6.225943113567936, 0.5968067319554506 +6.482076228398416, 0.5875426038611762 +6.738221672732831, 0.5786490905250323 +7.008781452054542, 0.5668785703238617 +7.506842948295169, 0.5560283336791481 +7.762815779574439, 0.5446144759438585 +8.018961223908853, 0.5363707569811258 +8.275069679731455, 0.527630898746009 +8.531313760097387, 0.5212765870381043 +8.787446874927863, 0.5131849003725663 +9.043690955293794, 0.507004563268528 +9.29986105863609, 0.49972180652396064 +9.556117468505956, 0.49389719645505786 +9.81243552589552, 0.4890982684129109 +10.068630288245693, 0.48245085482610384 +10.324849709603747, 0.4762670727092701 +10.581155437489372, 0.47145458148087677 +10.837374858847422, 0.46541174337478286 +11.60625505399248, 0.45091477364276916 +11.862573111382044, 0.4465334822173788 +12.981039129414242, 0.42773408295833687 +13.237534731660531, 0.4259760470587431 +13.493889777561908, 0.422333494804702 +13.750170846439659, 0.41773831220497526 +14.00663685787649, 0.41563011103496217 +14.263004233281809, 0.4122376097101212 +14.519359279183192, 0.40871253583609024 +14.775825290620027, 0.4066498850782492 +15.03215567751353, 0.4028565963467541 +15.288560041430667, 0.4000385735351496 +15.54108977993737, 0.4105551476090471 +15.801578370831905, 0.3970992689615243 +16.05808137078056, 0.39556018001746407 +16.31451039370557, 0.3931012986670046 +16.571013393654223, 0.39157770517297436 +16.82757804112257, 0.39082536294353387 +17.084167347598793, 0.39038043594520705 +17.34074432457108, 0.38978317479906044 +17.597259654023667, 0.3884246900678073 +17.853799642484134, 0.3873745537890573 +18.110302642432785, 0.3858731561800765 +18.366953596428704, 0.3861901359155558 +18.623567561912807, 0.3860530638647379 +18.88016919789297, 0.38576477548303517 +19.136758504369194, 0.3853256096051526 +20.163313002337116, 0.3859875248657655 +20.41996395633304, 0.38630459855065535 +20.676602580825012, 0.38647039103281533 +20.933191887301234, 0.38603042186159947 +21.189929147824735, 0.38740923350280104 +21.44659243132459, 0.3878795096564289 +21.703231055816566, 0.3880459780519025 +21.96006695237157, 0.3906552903561799 +22.21679188339113, 0.39189695144730174 +22.473492155402802, 0.39283442441483163 +22.730217086422357, 0.3940830116785659 +22.987003664961613, 0.39611126481972564 +23.243864220524493, 0.3990876042006921 +23.50049051551253, 0.39910238794716846 +23.75717845802027, 0.39990028957862855 +24.014088331598913, 0.40353741508304447 +24.270788603610583, 0.40450273368690226 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-bl_thickness-suction_side.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-bl_thickness-suction_side.csv new file mode 100644 index 00000000..683e42fc --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-bl_thickness-suction_side.csv @@ -0,0 +1,58 @@ +0.878008450487421, 1.0532100463776388 +1.123498737517684, 1.071107340733469 +1.5092367208715327, 1.09871324585482 +1.7197313549045727, 1.117336985880531 +2.16403735885331, 1.1550658679613817 +2.421058197967403, 1.1696911074823708 +2.6778608048617727, 1.1763105909280047 +2.9358671823240616, 1.2291247636977025 +3.7773406197781796, 1.2936601618238441 +4.034274330397768, 1.3064159213879543 +4.822772220559088, 1.4132134798675935 +5.059200922862267, 1.441382935990729 +5.322800785278254, 1.5511807690297224 +5.573954835434662, 1.6691629975727422 +5.864227524705527, 1.8096503289044634 +6.302132050209099, 2.0534448210305465 +6.592865040960351, 2.1500958333337774 +6.8056517297756685, 2.351847403653882 +7.158818040606718, 2.6056472191678024 +7.676496922496927, 2.9996560931242593 +8.240943325259181, 3.4651682331029425 +8.785702250120483, 4.096388045805003 +9.00629556984656, 4.348552998019177 +9.327454488451753, 4.567367891024411 +9.912728642737584, 5.652017294645706 +10.14825422468428, 6.067337985695341 +10.481096228950609, 6.652448877970667 +10.695499257020412, 7.075152121786196 +10.889713603068824, 7.4789351904614145 +11.227102258692497, 8.22705608897023 +11.675823594996306, 9.391639452310029 +11.937487177315905, 10.15132285819967 +12.196234146981467, 10.859844550285844 +12.503591368645939, 11.76496755780224 +13.250123155182333, 12.355897941008791 +13.647490737634989, 12.660179833555977 +13.904610212780593, 12.860753069363442 +14.161606392886807, 13.013386103292781 +14.418750527040288, 13.229924391438406 +14.675845343178015, 13.428990460984984 +14.886162021370868, 13.579561527067792 +15.283430967792011, 13.87040755060444 +15.531348839305537, 13.988064238951576 +15.798185291347874, 14.549872211129728 +16.05491268826821, 14.597262109330464 +16.312032163413818, 14.82852423464703 +16.569163968063364, 15.069356846494674 +16.826271113705026, 15.302098079390195 +17.071737974677806, 15.550540479399071 +17.480819818822983, 15.958584710447436 +17.656225506612326, 16.18034182184931 +18.01841084957481, 16.480047194402005 +18.27560430174405, 16.7805635416936 +18.532612811354205, 16.986375417302668 +18.789744616003745, 17.262254061248584 +19.046814773133594, 17.508259922675194 +19.292291497709524, 17.798102394343204 +19.754144187768, 18.692850388015703 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-pressure_side.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-pressure_side.csv new file mode 100644 index 00000000..9f69558b --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-pressure_side.csv @@ -0,0 +1,89 @@ +0.6433925811500547, 0.9701906171308675 +0.9175516858756954, 0.9173355459611888 +1.1726632061102347, 0.8951280038577215 +1.4267753807062107, 0.842918372643146 +2.1002465798640984, 0.8160476880118434 +2.35547700241257, 0.7996712509147121 +2.611284321373107, 0.7998896763076493 +2.8665834430362995, 0.7857575853214372 +3.6313252536859935, 0.7148114162009909 +3.886634944443756, 0.7024468012207672 +4.164262159148432, 0.705539410965608 +4.398944122865281, 0.6925733071565539 +4.549916089474744, 0.6835818715784314 +4.746292068519432, 0.6836921697495566 +4.979487250021856, 0.6621199078589373 +5.255715821211487, 0.6327208295297687 +5.5110123006010365, 0.6214837180826456 +5.766282357254157, 0.6098720171086247 +6.021631682116565, 0.6001691578516193 +6.276941372874331, 0.5897875937192499 +6.532277486368523, 0.5801312545582724 +6.787666445335583, 0.5717079584774755 +7.043582018876384, 0.5740730828034756 +7.299169213524776, 0.5697458932707363 +7.5541292568847656, 0.5529619944602919 +7.809103378889864, 0.536941673517597 +8.064399858279417, 0.5274055982940177 +8.319868085455765, 0.5212171828369359 +8.575217410318173, 0.5129247922606713 +8.830685637494517, 0.5069062901381799 +9.08606138509336, 0.49931121255124966 +9.341489978165063, 0.49275643025994487 +9.596958205341407, 0.48697457750855244 +9.852360375676676, 0.48012973090650624 +10.107788968748379, 0.4738267563716586 +10.363230773188297, 0.4678265860046625 +10.618791479942148, 0.46386247246444307 +10.874220073013847, 0.45777304878702413 +11.129767568399485, 0.45368061633068113 +11.385222584207616, 0.4481463644306681 +11.64070402275218, 0.44309638059388606 +11.896251518137815, 0.43913515567241934 +12.151825436259882, 0.4356190688832441 +12.406838814901965, 0.42359017753522643 +12.763778857511072, 0.4113739883269687 +13.034661905869035, 0.42285497917412923 +13.29022261262289, 0.41927193109896777 +13.545756896640311, 0.41532823553073056 +13.801330814762375, 0.41200276704282285 +14.056984001093737, 0.40985932788035534 +14.312584341952236, 0.4069604182305919 +14.568092203233226, 0.4027533556620505 +14.823745389564584, 0.40065803644480963 +15.079398575895942, 0.39857361809918346 +15.344709272392576, 0.39605026564763435 +15.591472859336166, 0.40537312275488496 +15.828032098340605, 0.4040811492897069 +16.10205095532602, 0.3908951836952973 +16.357770198498457, 0.3897774313852421 +16.61352907577554, 0.38921186099414895 +16.869182262106897, 0.3871869912309191 +17.12494113938397, 0.38662517959067505 +17.380700016661052, 0.38606418314393176 +17.636485316674566, 0.3858669311923504 +17.89209886890128, 0.3833180272320473 +18.14785774617836, 0.3827618294916996 +18.40365625756008, 0.38274630483388483 +18.659441557573594, 0.3825507480874023 +18.915213646218888, 0.3821754351649914 +19.17097252349597, 0.3816208953355185 +19.42685030308698, 0.38268421249911055 +19.682648814468706, 0.3826686909894097 +19.93850017132329, 0.3833740024347669 +20.194351528177883, 0.38408061386689163 +20.450255730505326, 0.385513382539727 +20.694458624004618, 0.38593235757079297 +21.45040914986501, 0.388398124864866 +21.706181238510304, 0.38801707519751927 +21.96219113178347, 0.3909332372228347 +22.218121756847346, 0.3927609835662378 +22.4741184387523, 0.39552665934644354 +22.73000942971153, 0.3968153803630008 +22.98590042067076, 0.3981083003426862 +23.241936736680366, 0.401477917015286 +23.49785415037602, 0.40316522920970244 +23.753718718598826, 0.40409840244948003 +24.00978145734485, 0.4079023758807748 +24.265857407459094, 0.41193592847791427 +24.52162949610439, 0.4115317863400766 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-suction_side.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-suction_side.csv new file mode 100644 index 00000000..f47e6647 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure07-suction_side.csv @@ -0,0 +1,67 @@ +0.2693843460828411, 1.019282928688709 +0.9238931426189669, 1.1497658891350881 +1.1573512303488762, 1.1877628301656449 +1.7168394628922439, 1.2475910637224454 +2.115030100896851, 1.3815523014964262 +2.3719647899450766, 1.4385421675541639 +2.8856599392127276, 1.550023882321968 +3.1336713472238866, 1.6358676606142926 +3.388126838560419, 1.6940471335363605 +3.7033139990903408, 1.7712415290637527 +3.8550201403049034, 1.8063933680303306 +4.46075778702671, 1.9944823889239807 +5.175545275471494, 2.288706384311476 +5.351577508980613, 2.4249253545625877 +5.7156828169901335, 2.762560065440481 +6.138486233979565, 3.210810258321147 +6.420086547485473, 3.5155646447885336 +6.678236682409496, 3.822515459536465 +6.956148462795666, 4.1310626966408295 +7.173680486940997, 4.465121635278031 +7.385015908354729, 4.828478402241083 +7.535322543946295, 5.136442874396151 +7.9051384658668145, 5.8301875604521065 +8.19049025747215, 6.355370380271513 +8.425991231651425, 6.991591347161059 +8.702497052839744, 7.7156391957958705 +8.885708343836972, 8.234085073924652 +9.2770816222566, 9.426674992699311 +9.70760341414328, 10.94331854087119 +9.963497047376153, 11.928054778250488 +10.228846056840615, 13.072704269568174 +10.487161333867325, 14.297950751915668 +10.658594029532336, 15.176671497221747 +10.99611145900887, 17.029134356245162 +11.445376585964832, 20.00513074387587 +11.6989978638647, 21.846566779818552 +11.952677271784717, 23.906944695510134 +12.805312553654039, 29.78301345656397 +12.968354048797197, 30.059961269496085 +13.340993900673704, 30.673816223108954 +13.597281232679391, 31.211211147409543 +13.853581776053291, 31.77296673439158 +14.109736994376826, 32.177864627410806 +14.365984692277864, 32.695427729179904 +14.587202447356438, 33.046471445872236 +14.995178305419065, 34.27125440434331 +15.130558278172286, 34.89169014874281 +15.5424676009315, 35.27203678611376 +15.833767127560156, 36.05708185162522 +16.08965869194021, 36.17530324273938 +16.34578748752731, 36.60184359380213 +16.602154087742292, 37.34838150158539 +16.800212314339703, 37.87729544503711 +17.20796137724797, 38.96512762193292 +17.382711447471806, 39.44151643786255 +17.743840894790864, 40.41478883431438 +17.999956479009754, 40.8720817845069 +18.256151331437934, 41.45140144859228 +18.512359395234327, 42.05871637035423 +18.768646727240018, 42.79557090894917 +19.001539661996276, 43.32894374289496 +19.444483075864802, 45.07231050216964 +19.700791315041165, 45.89612252023768 +19.956965001434227, 46.511579480972514 +20.21294564096349, 46.81234403514544 +20.469235398663017, 47.6365955335323 +20.70200385297209, 48.01696388223941 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-bl_thickness-pressure_side.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-bl_thickness-pressure_side.csv new file mode 100644 index 00000000..9c793be8 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-bl_thickness-pressure_side.csv @@ -0,0 +1,97 @@ +0.5665154651447253, 0.9694362876462931 +0.7627190434989366, 0.9475308133169189 +1.010525989207439, 0.9117181356345037 +1.266582268741919, 0.8898984240173042 +1.5373212181344744, 0.8685582347271924 +1.7569078289732403, 0.8474236697697107 +2.034653870783517, 0.8331867276192311 +2.290677738130716, 0.8150976574659662 +2.5505545217731793, 0.8114747986144274 +2.790169726665596, 0.7938238373652933 +3.0584813994241067, 0.7776327384018973 +3.2446220948785154, 0.7684636327874905 +3.50085157471033, 0.7410141583692238 +3.756862477182615, 0.7255858270758639 +4.0130175367164345, 0.7033301571017433 +4.254135043390011, 0.6862389164922028 +4.510335903278193, 0.6753639503170998 +4.757728405151973, 0.663808516022972 +4.99367880528057, 0.6561711405575235 +5.269506845485747, 0.6474133456843949 +5.525452923583465, 0.6368231586521066 +5.781457343618296, 0.6238477673176659 +6.037396939278558, 0.6139221709478503 +6.293381912001017, 0.60223441375109 +6.549340954973651, 0.5918447324985239 +6.805280550633913, 0.582428313564078 +7.061213663856723, 0.5734224120548264 +7.317172706829357, 0.563529792257132 +7.5731252673645315, 0.5540597353404432 +7.829006521087685, 0.5474805652766944 +8.084965564060322, 0.5380354913398362 +8.3408727475333, 0.5306804333643734 +8.596773448568825, 0.5236639980246591 +8.85286214029059, 0.5099705571502511 +9.20172916580168, 0.5039161432018298 +9.45756335355173, 0.49957912502825214 +9.713425159962515, 0.4943207880460369 +9.969345308310409, 0.4871200905719279 +10.225226562033562, 0.4813357938383422 +10.481127263069087, 0.4749717727404743 +10.736969622167504, 0.4706140262850929 +10.992883288077941, 0.46396959980811714 +11.248706199863985, 0.4603403745258522 +11.504626348211879, 0.4536346646867391 +11.760475189747751, 0.44926833355335716 +12.016304583971252, 0.44555144665324076 +12.218330425663748, 0.4432976068567442 +12.481393206431775, 0.440591199832615 +12.759031551422918, 0.43351857994904824 +12.993169014051485, 0.4297885623708185 +13.248953031212793, 0.4275917766272683 +13.504814837623577, 0.42309114491611965 +13.760611819659797, 0.42054593869993595 +14.016415284133469, 0.4178259978849595 +14.27225116079443, 0.4141808518029092 +14.528061107705565, 0.4113149936929785 +14.783890501929065, 0.40791210237458353 +15.03971341371511, 0.40472136549119264 +15.295419641626935, 0.40485594532568914 +15.551131840335565, 0.40482097523816585 +15.831826135803983, 0.39683647048739495 +16.109309111611566, 0.3974365502977515 +16.365047751710673, 0.3966657803098184 +16.620883628371633, 0.3932052375903632 +16.87664819822057, 0.3917294830588436 +17.1324581451317, 0.3890189736013538 +17.388190302793355, 0.38844112829303473 +17.643909495580093, 0.3882170573706138 +17.899648135679204, 0.38746416723909194 +18.155347881153574, 0.3877693032148248 +18.411138380752337, 0.3856118977527592 +18.666864055976536, 0.3852142462441941 +18.922602696075643, 0.3844671796251145 +19.17838023079949, 0.38267602484066265 +19.434054046524036, 0.3836746463749394 +19.689766756873322, 0.3836277366536244 +19.9455248442848, 0.3823617639429062 +20.201192177571887, 0.38353393441645073 +20.45689192304626, 0.38383597525325486 +20.712598150958083, 0.3839636101804614 +20.968297896432457, 0.3842659893957392 +21.2238679931577, 0.38808214370080385 +21.479567738632067, 0.3883877663456697 +21.73522210704424, 0.3899328860337816 +21.990967229580807, 0.38899973387724196 +22.246628080430437, 0.39036973058829194 +22.502288931280074, 0.39174455221520826 +22.757962747004616, 0.39276683874580715 +23.01359766810442, 0.39486770019921724 +23.26923258920422, 0.39697979890183155 +23.524925852241136, 0.39747313494658 +23.780534843591116, 0.40032668806329824 +24.036137352503633, 0.4033841211807624 +24.291837097978007, 0.4037017944466243 +24.5474590542029, 0.406230437094723 +24.803251242712573, 0.4039224624816097 +24.989306273128545, 0.40156571713283096 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-bl_thickness-suction_side.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-bl_thickness-suction_side.csv new file mode 100644 index 00000000..a0cb45d4 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-bl_thickness-suction_side.csv @@ -0,0 +1,62 @@ +0.8820639104698476, 1.06151690506704 +1.137682667406585, 1.0837297741305454 +1.4648031745354153, 1.0802321264250965 +1.7186343877173496, 1.1251132684763623 +2.01491976507584, 1.133542508256153 +2.2298719015908244, 1.16998681768386 +3.866219247132813, 1.2839203708946865 +4.096067581604483, 1.319840776966452 +4.36777423233444, 1.333914685552834 +4.64663105808361, 1.3789246279873264 +4.9022498150203475, 1.3844091567069459 +5.157868571957085, 1.4333689993564218 +5.413487328893819, 1.4640262184621022 +5.6458680170181275, 1.4819568622812533 +6.087391324454309, 1.5324875798282918 +6.250057806141324, 1.5476885022372122 +6.645104975952645, 1.593774316349917 +6.900723732889382, 1.6249149878572153 +7.156342489826116, 1.651418589973704 +7.4119612467628535, 1.6829229509758903 +7.655960969293375, 1.822426360425092 +7.8999606918239, 2.0707047296402563 +8.062627173510911, 2.2563840777988604 +8.376341102478726, 2.665985642368276 +8.56224565297817, 2.957122702367502 +8.75976923788383, 3.291472659403951 +8.95729282278949, 3.670225255581472 +9.10834027007029, 4.003785051980603 +9.440312681676442, 4.759698112927343 +9.750291921013687, 5.6502871357710305 +9.968148816130224, 6.3924401770414505 +10.18600571124676, 7.172253359681692 +10.355449963004066, 7.878067167559737 +10.502624398816128, 8.58330433103774 +10.781481224565297, 10.004141803677129 +10.998369866814649, 11.222201919124679 +11.176528394376618, 12.373717919412634 +11.385671013688494, 13.88015152324985 +11.594813633000367, 15.518342093173652 +11.803956252312243, 17.426905564565242 +12.036336940436549, 19.668547448577627 +12.152527284498703, 21.228828487578742 +12.477860247872734, 24.2191377347197 +12.727669487606363, 25.56216344790078 +13.012335830558637, 25.63804563886704 +13.267954587495375, 26.1034834737726 +13.523573344432112, 26.52925118778422 +13.755954032556417, 26.84740970250799 +14.174239271180166, 27.49360727908446 +14.37176285608583, 27.799008484910864 +14.731952922678502, 28.399470098434673 +14.992551265789334, 29.176523263830862 +15.243190436551977, 29.21409765607994 +15.977513411024784, 29.992533619813162 +16.40509387717351, 31.314287075894185 +16.60261746207917, 31.60241637730399 +16.986045597484274, 32.376305170750214 +17.24166435442101, 32.93421548386202 +17.49728311135775, 33.35030382005953 +17.752901868294487, 33.80226325936886 +18.00852062523122, 34.38474576252859 +18.15956807251202, 34.57877868239897 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-pressure_side.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-pressure_side.csv new file mode 100644 index 00000000..4221756b --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-pressure_side.csv @@ -0,0 +1,89 @@ +0.4798245681205575, 1.0203400939902614 +0.7221345871110021, 0.9776095954493949 +0.9790415951972555, 0.9408279615002207 +1.235948603283509, 0.9193089731776002 +1.6233766233766236, 0.8713510125314436 +2.0066696275422693, 0.8611443760099514 +2.2635766356285227, 0.8419353994789205 +2.857142857142856, 0.7857867389195877 +3.734953136486155, 0.7507206023454989 +3.9918601445724082, 0.7284695606564573 +4.259276984807645, 0.7003958460927333 +4.483778677101199, 0.6892009064829666 +5.089553724577311, 0.6773918908473207 +5.346460732663562, 0.667673341942503 +5.6033677407498175, 0.6531581560354391 +5.860274748836069, 0.6422976427395455 +6.117181756922324, 0.6308865479587079 +6.374088765008576, 0.6229165399322915 +6.630995773094831, 0.6100805999129093 +6.887902781181083, 0.6027223936811228 +7.144809789267338, 0.5920143949229559 +7.40171679735359, 0.5821705613154148 +7.658623805439845, 0.5754821674729614 +7.915530813526097, 0.565258120052039 +8.172437821612352, 0.5603843866768243 +8.429344829698604, 0.5517051463407956 +8.686251837784859, 0.5447354392535568 +8.94315884587111, 0.5381653635875524 +9.200065853957366, 0.5282982412188625 +9.456972862043617, 0.5225313025297543 +9.713879870129873, 0.5153329037329477 +9.970786878216124, 0.5102982216780761 +10.22769388630238, 0.5041434946545377 +10.484600894388631, 0.49864023078321146 +10.741507902474886, 0.4931970409058127 +10.998414910561138, 0.4878132692506387 +11.255321918647393, 0.4830474475943184 +11.512228926733645, 0.4780512480679341 +11.7691359348199, 0.4709198340065015 +12.026042942906152, 0.4690275332944689 +12.282949950992407, 0.4655224065271373 +12.539856959078659, 0.4593753287595661 +12.796763967164914, 0.45515085893701984 +13.053670975251165, 0.4533219228161504 +13.31057798333742, 0.4507165711327641 +13.567484991423672, 0.44838579605628376 +13.824391999509928, 0.4437481048459261 +14.08129900759618, 0.44017689784919567 +14.338206015682434, 0.43866210497491925 +14.595113023768686, 0.43563612579996747 +14.852020031854941, 0.43238053900182466 +15.108927039941193, 0.430144584416601 +15.365834048027448, 0.4266828561687519 +15.6227410561137, 0.4244763658144689 +15.879648064199955, 0.4227706892400993 +16.136555072286207, 0.4213157968306097 +16.393462080372462, 0.42083968339463224 +16.650369088458714, 0.42085128951358275 +16.90727609654497, 0.41891749742166373 +17.16418310463122, 0.4162687286279596 +17.421090112717472, 0.41507652946255086 +17.677997120803727, 0.4138877447713793 +17.93490412888998, 0.4138991591664277 +18.191811136976234, 0.41104399975793493 +18.448718145062486, 0.4112934633038613 +18.70562515314874, 0.4110666720083268 +18.962532161234993, 0.4108400057677641 +19.219439169321248, 0.4101381344015942 +19.4763461774075, 0.410387048175758 +19.733253185493755, 0.41063611301626285 +19.990160193580007, 0.41088532901478964 +20.24706720166626, 0.41304395247475373 +20.503974209752517, 0.41425316159264003 +20.76088121783877, 0.4142645860653292 +21.01778822592502, 0.4166822102726536 +21.274695234011272, 0.4179020705923699 +21.53160224209753, 0.417188134527007 +21.788509250183782, 0.4203525153132856 +22.045416258270034, 0.42060762821864583 +22.302323266356286, 0.4228173286620509 +22.559230274442545, 0.4262712062817298 +22.816137282528796, 0.428758900431451 +23.073044290615048, 0.43126111262060923 +23.3299512987013, 0.4310233109651712 +23.58685830678756, 0.43228515565389714 +23.84376531487381, 0.4348079468649496 +24.10067232296006, 0.43937643654356817 +24.357579331046313, 0.44296558092796096 +24.614486339132572, 0.44560231272905654 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-suction_side.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-suction_side.csv new file mode 100644 index 00000000..4b6464f5 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure08-suction_side.csv @@ -0,0 +1,89 @@ +0.324675324675324, 1.0744070048836116 +0.5194805194805205, 1.1136616043020828 +0.7142857142857135, 1.1543504121429682 +1.0053161755697122, 1.2239325401032952 +1.2271904098260222, 1.2422531282430687 +1.4928556113697624, 1.3256608838107748 +2.076735175202156, 1.4337819219973431 +2.3336421832884096, 1.4888251792308465 +2.590549191374663, 1.477299605092961 +2.8474561994609164, 1.5677710687092192 +3.107477231887609, 1.6395492162873375 +3.3762842615605404, 1.6429641595587285 +3.602008251182779, 1.788180130836887 +3.880923027444256, 1.8991252278037445 +4.089659971514333, 2.031183643059697 +4.3583568554087435, 2.00340279050595 +4.599094890958099, 2.025909285208591 +4.856001899044351, 2.182312893272245 +5.112908907130606, 2.264780442208253 +5.369815915216858, 2.354451482415145 +5.556657375643226, 2.427787010369722 +5.930340296495956, 2.565583627614478 +6.1055041656456766, 2.6332704977086885 +6.490864677775054, 2.79726829400452 +6.747771685861309, 2.906338834269315 +7.004678693947561, 3.012675097998435 +7.261585702033816, 3.135587842532363 +7.518492710120068, 3.3187890558799125 +7.752044535653027, 3.8130188922512525 +7.95056358735604, 4.350463860071321 +8.277536143102182, 5.415394300626917 +8.476055194805195, 6.236915721173679 +8.700264947316835, 7.100716549825783 +8.89644848076452, 8.380764703951074 +9.04825716736094, 9.271893508748374 +9.305164175447196, 11.03631925579049 +9.503683227150209, 12.642123980995967 +9.713879870129873, 14.667672141127252 +9.912398921832885, 16.922694371225358 +10.110917973535898, 19.403853628225267 +10.309437025238914, 22.31187710433151 +10.476815833537533, 25.252967223284582 +10.694797537368295, 29.27367762110737 +11.021770093114434, 36.717783996155966 +11.22028914481745, 42.078900550677616 +11.418808196520462, 48.1630894864053 +11.617327248223475, 55.170907481266575 +11.7691359348199, 61.64075011986763 +12.072753308012743, 75.45156124202711 +12.266970089245408, 95.74853573223277 +12.292292024013726, 88.06145061975393 +12.512380273721835, 103.20120927792581 +12.769721124208466, 109.19977847416833 +13.03031579269787, 105.9062665854469 +13.287222800784125, 107.01901461428392 +13.544129808870377, 108.45705908017005 +13.832177060361023, 110.41165975185042 +14.057943825042884, 111.71440141820582 +14.2331076941926, 112.76837883481524 +14.57175784121539, 115.53700974436379 +14.828664849301646, 116.8185819013199 +15.080567175412195, 122.14879949867205 +15.342478865474149, 120.81584347330201 +15.590403111039905, 123.23013920749443 +15.869638700248544, 128.30888000628346 +16.253330985052685, 126.67078177847719 +16.440172445479053, 128.35165261689826 +16.813855366331783, 130.94375837952333 +17.070762374418038, 133.3967762347923 +17.32766938250429, 135.65984434047775 +17.584576390590545, 137.48274365514524 +17.8181282161235, 139.78942673875184 +18.181818181818187, 143.6071810213105 +18.518783692722376, 144.9906105549027 +18.70562515314874, 146.57463563237272 +19.05595289144818, 149.69980720423072 +19.31285989953443, 152.50418905905707 +19.569766907620686, 153.92814223327318 +19.826673915706937, 156.26778488398955 +20.078576241817483, 159.1669862296754 +20.3054551580495, 160.8545486955556 +20.737526035285473, 165.55767888520978 +20.924367495711838, 167.366399561109 +21.298050416564568, 175.50532620464404 +21.554957424650826, 179.18012335366956 +21.811864432737078, 180.6996010609957 +22.06877144082333, 182.3093750478241 +22.32567844890958, 183.90508580016396 +22.53587509188925, 185.1876189584014 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-a-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-a-TBL-TE-suction.csv new file mode 100644 index 00000000..44d18260 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-a-TBL-TE-suction.csv @@ -0,0 +1,20 @@ +0.19122884328458217, 47.47663551401869 +0.2445397785389371, 49.719626168224295 +0.3057995860613679, 51.588785046728965 +0.3910506478432203, 53.27102803738318 +0.48901298166689, 54.95327102803737 +0.6253404255629251, 56.44859813084111 +0.781994833017049, 58.130841121495315 +0.9778928306368182, 59.81308411214952 +1.2228653538814906, 60.56074766355139 +1.5991289849841541, 60.56074766355139 +1.9555194321247966, 59.43925233644859 +2.5006807584394393, 57.57009345794391 +3.1271278046105184, 56.07476635514018 +3.998911083012669, 54.579439252336435 +5.000680712102545, 52.710280373831765 +6.253404255629254, 50.841121495327094 +7.99673347137438, 48.97196261682242 +10, 47.102803738317746 +12.505106035854066, 44.85981308411214 +15.991289849841541, 42.616822429906534 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-b-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-b-TBL-TE-suction.csv new file mode 100644 index 00000000..b153bbd1 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-b-TBL-TE-suction.csv @@ -0,0 +1,21 @@ +0.2, 44.49999999999999 +0.24410038095696923, 46.39122596153845 +0.31141368095074606, 48.28605769230768 +0.38858992294316563, 50.179086538461526 +0.49574776495506734, 51.69891826923076 +0.6186066880395188, 53.216947115384606 +0.789194121811289, 54.73677884615383 +0.9847765263413465, 56.25480769230768 +1.2288292322897234, 56.272836538461526 +1.5676920821958156, 55.54266826923076 +1.95620611001812, 54.060697115384606 +2.4410038095696898, 52.57872596153845 +3.1141368095074573, 51.09855769230768 +3.9728934589573064, 49.24338942307691 +4.957477649550668, 47.38641826923076 +6.324555320336747, 45.90624999999999 +7.891941218112874, 43.674278846153825 +10.06822871371386, 41.44411057692306 +12.56339223148977, 39.21213942307691 +15.676920821958156, 36.60516826923076 +19.99999999999996, 33.999999999999986 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-c-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-c-TBL-TE-suction.csv new file mode 100644 index 00000000..6226df16 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-c-TBL-TE-suction.csv @@ -0,0 +1,21 @@ +0.2, 39.00000000000003 +0.24956509409400443, 40.875 +0.31141368095074623, 42.375000000000014 +0.3972893458957312, 44.250000000000014 +0.49574776495506784, 45.750000000000014 +0.632455532033676, 47.625000000000014 +0.8068619331773571, 48.750000000000014 +1.0068228713713865, 49.125000000000014 +1.2563392231489776, 48.375000000000014 +1.6027882483009852, 46.500000000000014 +2.0447743105980503, 45.000000000000014 +2.495650940940043, 43.500000000000014 +3.1838534738843176, 42.000000000000014 +4.061835241809468, 40.125000000000014 +4.957477649550676, 38.25 +6.324555320336749, 36.375 +7.891941218112885, 34.125000000000014 +10.068228713713866, 31.875000000000014 +12.288292322897252, 29.625000000000014 +16.02788248300985, 26.625000000000014 +19.999999999999993, 23.625000000000014 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-d-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-d-TBL-TE-suction.csv new file mode 100644 index 00000000..16147784 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure11-d-TBL-TE-suction.csv @@ -0,0 +1,19 @@ +0.19733138705584236, 35.847955881682694 +0.246708176799955, 37.375689348707894 +0.3154455089777354, 39.282621576044846 +0.39437713158935017, 40.81035504307005 +0.49305923683834, 42.33808851009526 +0.6303020948101578, 43.86764504808349 +0.8054082886958644, 44.642450207374324 +1.0056724401058368, 43.90592953830728 +1.2552051011121506, 42.41465749054282 +1.6018989565557475, 40.925208513741396 +1.9993704327060953, 39.43393646597694 +2.495464592707136, 37.94266441821249 +3.184055884533878, 36.07583975206235 +4.062655068504369, 34.20901508591223 +5.068573991546193, 31.96299165945034 +6.323559808693353, 29.716968232988478 +8.06677133471125, 27.47276787748963 +10.059891090263687, 24.471993072330363 +12.827708660108557, 21.47304133813408 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-TBL-TE-pressure.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-TBL-TE-pressure.csv new file mode 100644 index 00000000..64a72ab5 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-TBL-TE-pressure.csv @@ -0,0 +1,21 @@ +0.2, 45.50000000000003 +0.24956509409400443, 47.75000000000006 +0.3183853473884317, 49.62500000000003 +0.4061835241809472, 51.50000000000006 +0.5068461471582617, 53.00000000000003 +0.632455532033676, 54.50000000000003 +0.8068619331773571, 56.37500000000003 +1.0068228713713865, 57.87500000000003 +1.2563392231489776, 59.37500000000003 +1.6027882483009852, 60.12500000000003 +2.022263242309491, 59.375 +2.495650940940043, 57.87500000000003 +3.1838534738843176, 56.37500000000003 +4.017118203830592, 54.68750000000003 +5.068461471582615, 53.00000000000003 +6.324555320336749, 51.50000000000006 +8.068619331773567, 49.62500000000003 +10.068228713713866, 47.75000000000006 +12.56339223148979, 45.87500000000003 +16.02788248300985, 43.25000000000003 +19.99999999999995, 40.81250000000003 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-TBL-TE-suction.csv new file mode 100644 index 00000000..3befd28f --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-TBL-TE-suction.csv @@ -0,0 +1,20 @@ +0.2, 50.75000000000003 +0.24956509409400443, 52.62500000000003 +0.3183853473884317, 54.12500000000003 +0.4061835241809472, 56.00000000000003 +0.5068461471582617, 57.50000000000003 +0.632455532033676, 59.00000000000003 +0.8068619331773563, 60.68750000000003 +1.0068228713713865, 61.62500000000003 +1.2563392231489776, 61.25 +1.6027882483009852, 60.12500000000003 +1.9999999999999993, 58.25000000000003 +2.523431581749075, 56.75000000000003 +3.1838534738843176, 55.25000000000003 +4.061835241809468, 53.37500000000003 +5.068461471582615, 51.87500000000003 +6.324555320336749, 50 +7.891941218112885, 48.12500000000003 +9.957386855546654, 45.87500000000003 +12.425080937674517, 43.62500000000003 +16.02788248300985, 41.00000000000003 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-separation.csv new file mode 100644 index 00000000..96de2192 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-U71.3-separation.csv @@ -0,0 +1,10 @@ +0.4061835241809472, 42.87500000000006 +0.5068461471582617, 46.25 +0.632455532033676, 50 +0.8068619331773571, 53.00000000000003 +1.0068228713713865, 55.25000000000003 +1.2563392231489776, 54.87500000000003 +1.6386701177271523, 51.87500000000003 +1.9999999999999993, 48.875 +2.495650940940043, 45.50000000000003 +3.1838534738843176, 41.00000000000003 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-pressure.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-pressure.csv new file mode 100644 index 00000000..6303bd8e --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-pressure.csv @@ -0,0 +1,21 @@ +0.19559968899256894, 37.12318840579712 +0.24433546979935863, 39.01630434782612 +0.3120805557126614, 40.536231884058 +0.39860881980786933, 42.4311594202899 +0.4979265240939303, 44.32427536231887 +0.6219903099880392, 45.84239130434787 +0.7944449561431122, 47.362318840579746 +0.9923895206005797, 48.505434782608745 +1.2396541169813167, 48.523550724637715 +1.5833638318526004, 47.41847826086962 +2.02237139350116, 45.938405797101495 +2.526267127953674, 44.081521739130494 +3.1557139417061566, 42.224637681159464 +4.030675371883462, 40.74456521739137 +5.034961791965142, 38.88768115942034 +6.4309683539554054, 36.65760869565224 +8.033313765075567, 34.80072463768121 +10.147148246624083, 32.75724637681165 +12.675420123274442, 30.52536231884062 +16.010748595215397, 27.731884057971087 +19.99999999999996, 25.125000000000057 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-separation.csv new file mode 100644 index 00000000..735c2638 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-separation.csv @@ -0,0 +1,12 @@ +0.19559968899256894, 22.498188405797094 +0.24433546979935863, 28.51630434782612 +0.3120805557126614, 33.036231884058 +0.39860881980786933, 36.8061594202899 +0.4979265240939303, 39.82427536231887 +0.6219903099880392, 42.84239130434787 +0.7944449561431122, 43.612318840579746 +0.9923895206005797, 41.38043478260872 +1.2396541169813167, 38.398550724637715 +1.5833638318526004, 34.66847826086962 +1.9778760779814692, 30.93659420289859 +2.4706853226994423, 26.07971014492759 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-suction.csv new file mode 100644 index 00000000..26e0ba5d --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure12-b-TBL-TE-suction.csv @@ -0,0 +1,21 @@ +0.20201505550299306, 41.88843537414962 +0.25186397316140885, 43.434013605442146 +0.3139479561385023, 45.35691609977323 +0.4001791758335442, 46.906122448979545 +0.4880027686095134, 48.44807256235825 +0.6220411438527994, 49.99727891156459 +0.79339241744819, 50.414512471655314 +0.9904089953652075, 49.69614512471651 +1.237123952705327, 47.84580498866211 +1.579558316961316, 46.37641723356006 +2.0171993359764544, 44.52970521541948 +2.519165807618344, 43.05668934240359 +3.1467003793636934, 41.20634920634919 +4.01854230236993, 39.35963718820858 +5.0195777304993525, 37.50929705215418 +6.2712848330576705, 35.281632653061195 +8.189830124760856, 33.061224489795904 +10.0101463389338, 30.452607709750538 +12.788952794128654, 27.85124716553284 +15.988084524004146, 24.49160997732426 +19.987472849540442, 21.131972789115622 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-a-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-a-TBL-TE-suction.csv new file mode 100644 index 00000000..8f4d9ef5 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-a-TBL-TE-suction.csv @@ -0,0 +1,19 @@ +0.31207633691744474, 39.775171659476214 +0.39910271632651695, 43.15124263231452 +0.49902862323938363, 45.77444248647993 +0.6238863230749762, 48.0202953150635 +0.7975299766018652, 50.264325211156354 +0.9969336607042019, 52.132831014158114 +1.2742277127084614, 53.99951388466915 +1.628650258119821, 55.86619675518018 +2.0355712676638595, 57.35735553260012 +2.5441621766739138, 58.84851431002006 +3.249993709807516, 59.205809078203814 +4.058033698767741, 58.055538676551016 +5.06626629411179, 56.52792124931641 +6.324997786649053, 55.00030382208179 +8.072973371942346, 53.09351643677463 +10.07732163248435, 51.1885519839582 +12.579307103561472, 49.28358753114178 +16.05347653447461, 46.99945312025279 +20.48428034332578, 44.33797168378198 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-b-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-b-TBL-TE-suction.csv new file mode 100644 index 00000000..dd3493b6 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-b-TBL-TE-suction.csv @@ -0,0 +1,20 @@ +0.24956509409400418, 32.016187925998054 +0.31141368095074606, 36.184274586173316 +0.3972893458957306, 39.97170155793574 +0.49574776495506734, 43.00054771178189 +0.6186066880395188, 45.649647030185015 +0.789194121811289, 47.91808666017528 +0.9847765263413465, 49.80769230769231 +1.2288292322897234, 51.507424537487836 +1.5851430365421124, 53.39566090555015 +1.977981855335443, 54.90551971762415 +2.4410038095696946, 55.846214703018504 +3.1141368095074573, 55.07667964946447 +3.9728934589573144, 53.54765092502435 +4.957477649550668, 52.01953505355405 +6.32455532033676, 50.1107594936709 +7.89194121811289, 48.202896786757556 +9.957386855546659, 46.10470423563778 +12.56339223148977, 43.62676484907498 +16.027882483009844, 40.57874878286271 +19.99999999999996, 37.15189873417723 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-c-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-c-TBL-TE-suction.csv new file mode 100644 index 00000000..62d5d455 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-c-TBL-TE-suction.csv @@ -0,0 +1,19 @@ +0.24983216594852678, 25.12500000000003 +0.3120805557126614, 30.75000000000003 +0.3986088198078691, 35.625000000000014 +0.4979265240939303, 39.00000000000003 +0.6219903099880398, 41.62500000000003 +0.7944449561431122, 44.250000000000014 +0.9923895206005807, 46.125000000000014 +1.2396541169813153, 48.000000000000014 +1.5833638318526004, 49.500000000000014 +1.9778760779814735, 50.250000000000014 +2.4706853226994445, 49.500000000000014 +3.1557139417061566, 48.000000000000014 +4.030675371883467, 46.125000000000014 +4.924184802989251, 44.250000000000014 +6.2894770497736445, 42.000000000000014 +8.033313765075567, 39.00000000000003 +10.03490088836472, 35.625000000000014 +12.535205120094762, 31.31250000000003 +16.010748595215397, 25.500000000000014 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-d-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-d-TBL-TE-suction.csv new file mode 100644 index 00000000..570a1f14 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure26-d-TBL-TE-suction.csv @@ -0,0 +1,16 @@ +0.3126294409171655, 25.02707965678816 +0.39174500143052676, 30.704679608105636 +0.5011679863267893, 34.481835331345465 +0.6267653323476254, 37.501369196129744 +0.8011608255486816, 40.13935373942677 +1.0010971659110657, 42.01971642426824 +1.2512798896586061, 44.27980283575732 +1.5976527013805848, 45.39889247246394 +1.9930062775139767, 45.00091279741983 +2.4848005959869446, 43.84348566908052 +3.165525419599971, 41.92478549260635 +4.031608588980645, 39.62636158948456 +5.0222244579901485, 37.329763281202446 +6.250989317051318, 33.893993792977525 +7.950103479489087, 29.696951256617766 +9.99135264414231, 24.361650337735014 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-TBL-TE-pressure.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-TBL-TE-pressure.csv new file mode 100644 index 00000000..f94c36a7 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-TBL-TE-pressure.csv @@ -0,0 +1,8 @@ +2.4956509409400445, 51.20552884615385 +3.1488022006949494, 52.91195913461537 +4.017118203830595, 54.4317908653846 +4.957477649550679, 55.38641826923077 +6.32455532033676, 55.031249999999986 +7.979791317928454, 53.362680288461526 +9.957386855546659, 51.69320913461537 +12.563392231489782, 50.21213942307691 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-TBL-TE-suction.csv new file mode 100644 index 00000000..bdfbb9b0 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-TBL-TE-suction.csv @@ -0,0 +1,16 @@ +0.19562061100181222, 54.373197115384606 +0.24956509409400443, 56.64302884615384 +0.31141368095074623, 58.536057692307686 +0.3972893458957312, 60.43088942307691 +0.506846147158262, 61.950721153846146 +0.6324555320336762, 63.46875 +0.8068619331773571, 64.98858173076923 +1.0068228713713865, 65.00661057692307 +1.2563392231489783, 64.2746394230769 +1.602788248300986, 62.419471153846146 +2.0000000000000004, 60.93749999999999 +2.4956509409400445, 59.08052884615383 +3.1838534738843194, 57.60036057692307 +3.9728934589573104, 55.36838942307692 +4.957477649550679, 53.13641826923075 +6.32455532033676, 50.53124999999999 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-separation.csv new file mode 100644 index 00000000..11aacf3f --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-a-separation.csv @@ -0,0 +1,10 @@ +0.3972893458957312, 56.30588942307691 +0.506846147158262, 61.57572115384615 +0.6324555320336762, 65.71875 +0.8068619331773571, 69.11358173076923 +1.0068228713713865, 71.38161057692307 +1.2563392231489783, 71.3996394230769 +1.602788248300986, 68.41947115384615 +2.0000000000000004, 65.0625 +2.4956509409400445, 60.58052884615384 +3.1838534738843194, 54.97536057692306 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-TBL-TE-pressure.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-TBL-TE-pressure.csv new file mode 100644 index 00000000..ee851f16 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-TBL-TE-pressure.csv @@ -0,0 +1,14 @@ +0.9846402658323226, 40.25 +1.241391025662117, 42.3125 +1.5999075929444284, 44.74999999999999 +1.9953007281803254, 46.25 +2.4880650254638517, 48.125 +3.1724192215653626, 49.625 +3.956982506408099, 50.75 +5.048162903094697, 50.75 +6.301841787213741, 49.625 +8.045206710977787, 47.75 +10.045962070954591, 45.875 +12.54254780240878, 44.375 +16.014580711281045, 42.125 +19.99999999999996, 39.875 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-TBL-TE-suction.csv new file mode 100644 index 00000000..5c1ed40b --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-TBL-TE-suction.csv @@ -0,0 +1,16 @@ +0.20357399682922497, 51.875 +0.24829060351907786, 53.75000000000001 +0.30960905192998983, 55.625 +0.3947138809139725, 57.5 +0.49219337631515303, 59.37500000000001 +0.6275735206953629, 60.875 +0.8004121076932287, 61.625 +0.9990510669918726, 60.875 +1.2473315822107587, 59.37500000000001 +1.5923980250309249, 57.5 +1.9884100851623028, 55.625 +2.4825624830942763, 54.125 +3.1697863849222285, 51.875 +4.047807954466729, 49.24999999999999 +5.056552432501364, 46.25 +6.317557835162936, 42.87499999999999 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-separation.csv new file mode 100644 index 00000000..28f76502 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-b-separation.csv @@ -0,0 +1,11 @@ +0.31059600190717196, 46.99999999999999 +0.39515107588735565, 54.5 +0.49219337631515303, 59.37500000000001 +0.6269659249861568, 63.50000000000001 +0.7989735449710955, 66.5 +0.9967036607291092, 67.25 +1.244659127699273, 65.1875 +1.5904161051149528, 60.875 +1.9875848087403334, 56.75 +2.485656164057426, 50.75 +3.1464066510111293, 41.93749999999999 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-TBL-TE-pressure.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-TBL-TE-pressure.csv new file mode 100644 index 00000000..257ab137 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-TBL-TE-pressure.csv @@ -0,0 +1,14 @@ +0.8061880970493079, 32.07547169811322 +1.0049319915389328, 34.90566037735847 +1.2528452662871294, 37.358490566037744 +1.5969959783219596, 39.62264150943395 +1.9913853050610466, 41.50943396226414 +2.4831718345214244, 43.39622641509433 +3.166610022653156, 44.52830188679245 +3.9959182492163303, 44.15094339622641 +5.043819721325635, 43.01886792452831 +6.298190204759981, 41.132075471698116 +8.041699632379189, 38.867924528301884 +10.043024877459867, 36.60377358490567 +12.544163427883158, 33.96226415094338 +16.023419441793944, 30.56603773584905 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-TBL-TE-suction.csv new file mode 100644 index 00000000..3089da34 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-TBL-TE-suction.csv @@ -0,0 +1,15 @@ +0.198667688159059, 47.92452830188678 +0.24773006329427427, 49.811320754716974 +0.3157803484885661, 52.075471698113205 +0.4025237275021722, 54.339622641509436 +0.502069581083929, 55.47169811320754 +0.6263207606101797, 56.22641509433963 +0.7992579899328551, 55.47169811320754 +0.9980290972707953, 53.58490566037736 +1.2462334959990038, 51.698113207547166 +1.5912246408594677, 49.43396226415095 +1.987230235438525, 47.16981132075472 +2.4821347299576324, 44.52830188679245 +3.17102249719571, 40.75471698113208 +4.007899179431113, 36.03773584905663 +5.067050134029268, 30.56603773584905 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-separation.csv new file mode 100644 index 00000000..2da3edab --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-c-separation.csv @@ -0,0 +1,10 @@ +0.24911373791035224, 34.716981132075475 +0.31661691130374225, 44.9056603773585 +0.3940387619179325, 52.075471698113205 +0.5018598901367922, 56.60377358490567 +0.6324555320336757, 59.81132075471699 +0.797923575706387, 60 +0.9965015714918111, 57.73584905660377 +1.2455395531676294, 53.20754716981132 +1.5927764075923079, 46.792452830188694 +1.994160176895641, 37.73584905660377 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-TBL-TE-pressure.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-TBL-TE-pressure.csv new file mode 100644 index 00000000..9e791d34 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-TBL-TE-pressure.csv @@ -0,0 +1,10 @@ +0.9847290618887449, 29.94224896441203 +1.2550455320266316, 32.603634384543284 +1.5997889065884308, 34.88767272397422 +1.994576904790426, 37.16989689474798 +2.487481363898925, 38.69742690412117 +3.173407679893117, 38.717382759350514 +4.0490428557113125, 38.35999153387958 +5.056687856905546, 36.11405073625009 +6.45646814209933, 33.86992410727781 +8.064347939192823, 31.246636228948063 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-TBL-TE-suction.csv new file mode 100644 index 00000000..eba4ef83 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-TBL-TE-suction.csv @@ -0,0 +1,13 @@ +0.1989722545655486, 43.77347080700267 +0.24803910396449638, 46.43304205847669 +0.3092920315454877, 48.33791914855016 +0.39425020713285885, 50.62195748798112 +0.491815174574402, 51.39479333595378 +0.6274338673380312, 51.41474919118312 +0.8008955470585419, 49.92531672361139 +1.0000671900509177, 48.056723006682176 +1.2491178777069258, 45.43343512835243 +1.5951178055129855, 42.81196141867986 +1.9926337415608903, 39.81132645964986 +2.4902538145707407, 35.67865025851901 +3.183587061951412, 30.03839990324431 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-separation.csv new file mode 100644 index 00000000..53ede705 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure28-d-separation.csv @@ -0,0 +1,9 @@ +0.24942446269428653, 31.339158830465948 +0.31002503135521287, 41.92301877664558 +0.39452478480419195, 48.73522208447977 +0.5024052680069998, 53.66068998881261 +0.6266480701629653, 54.81087291748554 +0.7822688955535648, 53.696973361956864 +0.9996495214550998, 49.188764248782974 +1.2501618962143333, 43.16935264415079 +1.601348978022264, 32.246243159072336 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure38-d-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure38-d-TBL-TE-suction.csv new file mode 100644 index 00000000..d6ea4795 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure38-d-TBL-TE-suction.csv @@ -0,0 +1,12 @@ +1.591716941901872, 22.486785345403746 +1.9783340536338525, 29.074062822771737 +2.4810711786738358, 33.672762622273524 +3.1385452736905126, 37.562427851023756 +4.0045137521306255, 40.885229965368495 +4.9843497243388875, 42.35433501427791 +6.311486527964002, 42.689713834376334 +7.994863342464926, 41.74554954736011 +10.045785044607687, 39.520019442250444 +12.626361856720948, 36.299289142718266 +16.145606980416492, 31.80266115802904 +20.13555906774264, 26.305364845980918 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-TBL-TE-pressure.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-TBL-TE-pressure.csv new file mode 100644 index 00000000..9012bc77 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-TBL-TE-pressure.csv @@ -0,0 +1,9 @@ +3.1471039443872, 22.286935613144536 +3.9923161669660274, 27.002404488378318 +5.019265075905392, 30.49692759818329 +6.395923932839587, 33.61474752872029 +8.07732974048349, 34.674058242051856 +10.109593642382482, 34.969275981832766 +12.653177089187697, 33.66550895004008 +16.123627054423885, 30.691958322201444 +20.180347069970292, 27.40849585893669 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-TBL-TE-suction.csv new file mode 100644 index 00000000..0fb575e3 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-TBL-TE-suction.csv @@ -0,0 +1,13 @@ +0.796929418850918, 24.923857868020306 +0.9974376242018511, 31.538872562115955 +1.2596510951101805, 36.481432006411964 +1.6196160129706267, 40.667913438418395 +2.0089971164723095, 43.62543414373499 +2.5371365150402814, 45.37002404488378 +3.1754824931503123, 45.8936681806038 +4.0464379085596605, 45.20438151215602 +5.064525563397584, 42.986908896607005 +6.395923932839587, 39.706118087095916 +8.07732974048349, 35.66390595778789 +10.109593642382482, 30.400748063051026 +12.540098587319626, 22.77451242318996 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-separation.csv new file mode 100644 index 00000000..9403495e --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure39-d-separation.csv @@ -0,0 +1,7 @@ +1.5907971014046818, 26.347849318728308 +2.0089971164723095, 37.99091637723751 +2.514462715872422, 45.97648944696766 +3.1754824931503123, 48.17793213999467 +4.0464379085596605, 47.48864547154689 +5.064525563397584, 41.4640662570131 +6.338765047660795, 31.02324338765696 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-LBL-VS.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-LBL-VS.csv new file mode 100644 index 00000000..2d3a85b5 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-LBL-VS.csv @@ -0,0 +1,3 @@ +2.515284132691356, 47.07182029107781 +3.1510601896995754, 48.93851508120653 +4.009044004226417, 41.827673486606216 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-TBL-TE-pressure.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-TBL-TE-pressure.csv new file mode 100644 index 00000000..0cc1150e --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-TBL-TE-pressure.csv @@ -0,0 +1,17 @@ +0.495236196047142, 42.078756476683964 +0.6286940093355667, 44.49948186528496 +0.8076954051273012, 46.12124352331611 +1.0131953969974448, 48.14093264248703 +1.2559069298684298, 49.35958549222798 +1.6328530211091588, 51.38238341968912 +2.024003889817087, 52.60103626943004 +2.508855171307443, 54.219689119170994 +3.1849493818933237, 55.44041450777203 +4.0432395943909185, 56.26113989637307 +5.011799935888166, 55.479792746114015 +6.516034326975962, 53.90259067357513 +8.076954051273011, 52.32124352331607 +10.253557123337979, 51.141968911917104 +12.709802556509684, 49.160621761658035 +16.13488026702086, 47.58134715025909 +20.48295872997347, 46.00207253886012 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-TBL-TE-suction.csv new file mode 100644 index 00000000..b5c43d89 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-TBL-TE-suction.csv @@ -0,0 +1,20 @@ +0.2538966312856989, 40.82072538860103 +0.31471771352980493, 43.23937823834197 +0.3995288363557754, 45.26010362694302 +0.5071951282611334, 47.28082901554404 +0.643875672350099, 49.301554404145094 +0.8173893208825227, 50.92227979274611 +1.0131953969974448, 52.540932642487036 +1.2559069298684298, 54.15958549222796 +1.6328530211091588, 55.7823834196891 +2.024003889817087, 57.001036269430045 +2.508855171307443, 57.81968911917099 +3.1849493818933237, 57.84041450777201 +4.0432395943909185, 56.26113989637307 +5.011799935888166, 54.679792746114 +6.3623956019994345, 53.10051813471503 +8.271995824805863, 51.52331606217618 +10.253557123337979, 49.54196891191711 +12.709802556509684, 47.96062176165805 +16.13488026702086, 46.3813471502591 +19.999999999999982, 44.00000000000003 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-separation.csv new file mode 100644 index 00000000..60caec84 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure45-a-separation.csv @@ -0,0 +1,8 @@ +1.2559069298684298, 42.95958549222797 +1.6328530211091588, 46.58238341968911 +2.024003889817087, 49.40103626943005 +2.508855171307443, 51.41968911917101 +3.1849493818933237, 51.44041450777203 +4.0432395943909185, 48.26113989637307 +5.132824562484053, 45.0818652849741 +6.3623956019994345, 41.10051813471503 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure48-c-LBL-VS.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure48-c-LBL-VS.csv new file mode 100644 index 00000000..9a8dbc37 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure48-c-LBL-VS.csv @@ -0,0 +1,9 @@ +0.7946179079287674, 22.26008165234019 +0.9947815615976292, 25.869838590205177 +1.2589749622916813, 32.080067526829865 +2.0161689438421546, 44.90051850958639 +2.5029048405891947, 39.70991025133074 +3.150583084195995, 29.51990491119878 +4.053008464832621, 24.53084356858625 +5.028278322508261, 20.940207748359214 +1.6289910453613516, 42.49125768720607 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure54-a-LBL-VS.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure54-a-LBL-VS.csv new file mode 100644 index 00000000..6e581231 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure54-a-LBL-VS.csv @@ -0,0 +1,12 @@ +1.255906929868431, 51.21212121212122 +1.6134880267020877, 55.454545454545524 +2.0000000000000004, 59.49494949494951 +2.508855171307443, 63.33333333333334 +3.1471771352980524, 67.77777777777777 +4.043239594390923, 77.87878787878788 +6.3623956019994345, 80.7070707070707 +8.076954051273011, 71.01010101010101 +10.011792982166742, 64.54545454545453 +12.410123677992818, 60.50505050505052 +16.13488026702086, 56.46464646464648 +19.999999999999982, 52.62626262626267 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure59-c-LBL-VS.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure59-c-LBL-VS.csv new file mode 100644 index 00000000..2ec82f21 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure59-c-LBL-VS.csv @@ -0,0 +1,11 @@ +0.998900147361505, 41.69811320754718 +1.245378663805296, 45.47169811320755 +1.604898851815439, 49.81132075471699 +1.9996510746033878, 55.283018867924525 +2.515435781003538, 64.90566037735849 +3.1354627693923716, 69.24528301886792 +4.009717745648088, 64.33962264150945 +5.023948173564555, 54.71698113207549 +6.284186430492234, 49.622641509433976 +8.034150727479528, 45.47169811320755 +10.044578466616215, 41.69811320754718 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure60-c-LBL-VS.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure60-c-LBL-VS.csv new file mode 100644 index 00000000..161a2a94 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure60-c-LBL-VS.csv @@ -0,0 +1,13 @@ +0.8056269968349395, 43.96226415094344 +1.0038830376382706, 47.7358490566038 +1.2648525871974698, 51.50943396226418 +1.6110673334671342, 55.84905660377359 +2.0061362534131506, 61.50943396226418 +2.5222020521784163, 71.13207547169819 +3.1780952489270304, 74.71698113207552 +4.062400878751684, 69.43396226415098 +5.086844672054134, 60.00000000000006 +6.359880571290804, 54.71698113207552 +8.12499181758166, 50.94339622641513 +10.041626515739349, 46.98113207547175 +12.547657383627204, 43.20754716981139 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure60-d-LBL-VS.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure60-d-LBL-VS.csv new file mode 100644 index 00000000..2c1e4660 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure60-d-LBL-VS.csv @@ -0,0 +1,13 @@ +0.5033184803696572, 31.121358970350627 +0.621858373057373, 35.18472200510655 +0.796093343322128, 39.24964827262778 +0.9952997637133331, 43.31353238497209 +1.258970724330752, 47.78333593872128 +1.5886755306681373, 58.334114949715996 +2.0092198483850385, 63.20931686728153 +2.489583262526167, 59.97550935334269 +3.129777909692455, 50.05314991402216 +4.023070942371006, 43.780417904225914 +6.328224092647111, 35.89495075816788 +8.031609734089493, 31.85138867177318 +4.9861013536035745, 39.93851284456255 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure65-d-LBL-VS.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure65-d-LBL-VS.csv new file mode 100644 index 00000000..2c59a9af --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure65-d-LBL-VS.csv @@ -0,0 +1,13 @@ +0.6323804729499642, 50.70031957664685 +0.8005351953916066, 54.72079997250954 +1.001526190200231, 58.54025634857908 +1.2529801505682856, 62.35971272464863 +1.5860314954080894, 66.58018624789526 +1.9803165209619773, 75.39947080856327 +2.4735986166865658, 83.21878973231159 +3.1368026518717325, 82.83942132572761 +4.040310018041636, 73.06140682450773 +5.016861111841286, 65.88021030205145 +6.2215651964188385, 61.898903817738216 +8.090681093231776, 57.92172090306174 +10.033504771771565, 53.94041441874849 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure66-b-LBL-VS.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure66-b-LBL-VS.csv new file mode 100644 index 00000000..cb7717e1 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure66-b-LBL-VS.csv @@ -0,0 +1,3 @@ +3.165671170218893, 39.350131471259175 +4.008629977030465, 42.624549427969384 +5.033894958326965, 36.97894718512194 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure69-a-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure69-a-separation.csv new file mode 100644 index 00000000..320b26c8 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure69-a-separation.csv @@ -0,0 +1,15 @@ +0.198921032245301, 74.87477975392679 +0.24821095117363703, 76.4018191949159 +0.31666443668194044, 77.93156935680616 +0.40410862713785956, 78.71135340270772 +0.5045210718339805, 78.73846061171935 +0.6302334505656204, 77.26563558875353 +0.8050483196115684, 75.42053822869448 +1.0055041100985864, 74.32269626372303 +1.2562215201461528, 72.47488818276284 +1.6046736696471975, 70.6297908227038 +2.0047910061999294, 68.7819827417436 +2.504675595146879, 66.9341746607834 +3.1643392737805045, 64.9002304112766 +3.9977404894235598, 62.86628616176981 +4.995942761981002, 60.26851196482087 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure69-b-separation.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure69-b-separation.csv new file mode 100644 index 00000000..10a96f37 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure69-b-separation.csv @@ -0,0 +1,11 @@ +0.19873691690470505, 57.16948614449635 +0.24791744679170302, 57.95138101501202 +0.31632389218967794, 57.60397296929566 +0.3949329474852795, 56.121819583654585 +0.4986001986225585, 54.45235611592363 +0.6294794082119991, 52.78289264819266 +0.7948241969241341, 50.73608780443558 +0.9925517461001079, 48.687922354755315 +1.2394677621778598, 46.63975690507506 +1.6006298602271163, 43.652319833099 +1.9996519290789554, 40.47213025534036 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure77.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure77.csv new file mode 100644 index 00000000..a1708860 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure77.csv @@ -0,0 +1,14 @@ +9990.048445307111, 139.0351175216975 +16298.84305872965, 138.06745529233717 +58208.64518330107, 135.79516323315931 +204961.29945196148, 133.37214689440032 +252823.1362459006, 133.04444513080273 +325017.3914307232, 131.9507675201532 +379010.73577773944, 131.47697439540414 +560275.5145774433, 129.91104796614883 +730425.6156975653, 128.81582604935602 +851888.3499450693, 128.4943015103314 +966370.7468891324, 128.48040275504215 +2208681.944680089, 128.3892886925904 +5647560.459253071, 128.4380887667171 +9754853.312375984, 128.5301294128548 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-A_max.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-A_max.csv new file mode 100644 index 00000000..e13e39ad --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-A_max.csv @@ -0,0 +1,157 @@ +0.1007120387104791, -16.37595973731831 +0.09933849976221693, -16.569365275194727 +0.10353423748565803, -15.836106474997 +0.10412278410363193, -16.135281862765616 +0.1070105760705445, -15.843639291249728 +0.11030392056888605, -15.594636050601212 +0.11335774381281573, -15.345191882364253 +0.11649482883217412, -15.105519975939258 +0.1197182349824111, -14.86951266769375 +0.1230306629907115, -14.634726892174735 +0.12643508967306455, -14.39749805120273 +0.1299333632011245, -14.162712275683718 +0.13352769241196477, -13.93281263107068 +0.13722164026643385, -13.701691453731152 +0.1410183618321188, -13.466905678212141 +0.144919933305207, -13.23334143541962 +0.14915637846326915, -12.981141633061421 +0.15351421236645882, -12.743111610330567 +0.15800076132483426, -12.497263778150144 +0.16286469230375616, -12.241086808944212 +0.16762340554342292, -12.001102333850968 +0.17226011183727552, -11.772424221964426 +0.17702434391902588, -11.547410708257372 +0.18192034131247087, -11.322397194550325 +0.18723503774940917, -11.086199470909216 +0.19299604940720497, -10.843215055149427 +0.1986350830205213, -10.60359703987413 +0.2044371606899326, -10.371430374230455 +0.210727723824952, -10.127346579016825 +0.21688347284619955, -9.893347614283401 +0.22288186207464364, -9.668334100576354 +0.22939233981693277, -9.435556668569427 +0.2364504842741849, -9.192572252809642 +0.24372549746635558, -8.950687216503702 +0.25122465707389086, -8.707702800743919 +0.2589545573934318, -8.464718384984133 +0.266920641956979, -8.227230866493576 +0.27554653381180866, -7.985499664924047 +0.28445548259439235, -7.7303760227349425 +0.2936459158537635, -7.495041210715064 +0.3031358462671552, -7.252210629691691 +0.3129327508394055, -7.008580499974611 +0.32353318401809117, -6.760906574351985 +0.33398323464180524, -6.533367362095738 +0.34477330875844986, -6.299431760289842 +0.35590993267926374, -6.070593281406326 +0.3674082733942306, -5.836957510360568 +0.3792794588060848, -5.60012354453999 +0.3915314710375975, -5.369486081095632 +0.40478571864589763, -5.140801436948525 +0.41849290207550505, -4.903121869997225 +0.43265985660338796, -4.674437225850117 +0.44730891836908654, -4.440755402367348 +0.4624513618251715, -4.212070758220239 +0.47810803011415914, -3.980387806471734 +0.49429142206923515, -3.754701469926024 +0.5110237556735249, -3.5270162616460503 +0.5283195180849094, -3.304328232701737 +0.5462006611054532, -3.0816402037574235 +0.5646850860935275, -2.8619504824145086 +0.5837950576828245, -2.6422607610715936 +0.6035531072220071, -2.420572167994413 +0.6247384123268234, -2.23107700460141 +0.6884114648349446, -1.6064228920765249 +0.7106461217736716, -1.3799830592741245 +0.7346907078388645, -1.1662899531340045 +0.7595342722081081, -0.969587256735136 +0.7852099495743219, -0.7818794831404601 +0.8051922291365005, -0.6007967935379694 +0.8315913453280492, -0.48809433015778136 +0.8596427497049118, -0.36235158032531967 +0.8907106629484776, -0.24433913875679814 +0.9164051458350063, -0.15539906720785623 +0.949487441438139, -0.09306240447824088 +0.9814039165100592, -0.06826267722615942 +1.067489101969357, -0.07327945334353103 +1.103288743772752, -0.11544192918932428 +1.1402289702748347, -0.20422570862764378 +1.164956352052084, -0.26403387326781846 +1.1924784046522436, -0.4180750291133828 +1.2323167996351183, -0.5701754503437497 +1.2734473307686862, -0.7492606399866943 +1.3159090933985986, -0.9563300339093495 +1.3597468167501625, -1.1893847603774468 +1.4050385942811046, -1.4264372303140753 +1.4518389946575967, -1.6634897002507056 +1.5001965762207539, -1.9015416060544652 +1.8102717740032663, -3.064679189188732 +1.8706122812480976, -3.2817429417827135 +1.932955353751773, -3.5028044378452226 +1.997391945542759, -3.716869882837802 +2.0639695969714515, -3.9339336354317815 +2.2038365385688774, -4.376056627556801 +2.277285185564061, -4.59711812361931 +2.3531790472531267, -4.81917905554895 +2.4316021829560865, -5.0412399874785905 +2.51263038106168, -5.266299227009629 +2.5963703947415606, -5.487360723072138 +2.682901264547338, -5.708422219134645 +2.772287856656084, -5.9384786380013495 +2.8646525542040377, -6.16853505686805 +2.9601045968417683, -6.395593168133354 +3.0587199096937425, -6.6276484587343205 +3.1606241380836577, -6.858704313468154 +3.265893931256504, -7.097755655139046 +3.374681329020585, -7.333808689208544 +3.4870924506904015, -7.56986172327804 +3.597863381784625, -7.800563856102036 +3.7121296102136565, -8.03686282978197 +3.8301238158742152, -8.250274722104576 +3.9516136087162157, -8.520854346027159 +4.077043927429893, -8.772544632060935 +4.206514439365957, -9.011841913342268 +4.340135581895799, -9.243143707686546 +4.47789818806179, -9.494833993720322 +4.620095612633023, -9.734630992935221 +4.766677367060864, -9.998814227308157 +4.918010691251178, -10.244807728899277 +5.066628166726011, -10.474556478293158 +5.219684900350282, -10.7131002633178 +5.3773919844566915, -10.947246530527062 +5.539836518666533, -11.185790315551708 +5.707195388568024, -11.423234721122506 +5.879610182275267, -11.660679126693305 +6.057165992774217, -11.908017947348712 +6.230798743416678, -12.144309082315965 +6.409408794026092, -12.380600217283222 +6.5931315499512095, -12.617868578431674 +6.7821187640045855, -12.85538124612542 +6.976428890534152, -13.104864934538822 +7.176314976644506, -13.35324924349838 +7.381897591908803, -13.605298150637422 +7.570804828570549, -13.833419387310409 +7.764546315994902, -14.061540623983403 +7.975123404764162, -14.29948801361805 +8.191422708544147, -14.536213870526202 +8.41354202662467, -14.777825858340341 +8.641648606600285, -15.02310244433396 +8.875939574989673, -15.268379030327582 +9.116595171568022, -15.512434083594703 +9.363607889813736, -15.77236906230627 +9.617366419223547, -16.02741791011185 +9.877988314213654, -16.28368829064393 +10.145700802908294, -16.537515605723016 +10.420496404563963, -16.80600131352005 +10.702720069447826, -17.075708554043572 +10.992617655493476, -17.34297272911411 +11.273406635919631, -17.611862620533877 +11.527238148571804, -17.839418000135034 +11.804147905564179, -18.093137532914724 +12.105609807298357, -18.366150097286415 +12.3778856874759, -18.614711477166402 +12.656335998755747, -18.859739137373325 +12.94091262681313, -19.114190050041778 +13.212257977361757, -19.35366692182977 +13.409518630000644, -19.52696546178823 +13.715658452039687, -19.81500018413832 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-A_min.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-A_min.csv new file mode 100644 index 00000000..0898c5b5 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-A_min.csv @@ -0,0 +1,157 @@ +0.27355039055049124, -19.74824252244953 +0.2742285859358864, -19.45488989843456 +0.27663525533876365, -19.125179995212406 +0.27925517741979106, -18.755837000754966 +0.28203321005378645, -18.41109531613482 +0.28469262562165787, -18.077940228699802 +0.28737672176664336, -17.746006673991282 +0.29038344694926477, -17.39334299036547 +0.2926737449832167, -17.084564666310662 +0.2954764425826937, -16.812668418611295 +0.29818843111064697, -16.509869445927777 +0.3009790166768364, -16.239012527544027 +0.3037957178363549, -15.968155609160265 +0.306639413166462, -15.695466391686766 +0.30950716661321015, -15.430106370572238 +0.3123965711620451, -15.179404742175654 +0.3155575874495826, -14.906742470277004 +0.319688723668434, -14.690989252459778 +0.32865183560031125, -13.842982072429104 +0.3324105517508175, -13.565742046758858 +0.3364643102951843, -13.279148912663194 +0.3405665989851912, -12.994911591682909 +0.3433071458267973, -12.735656667955636 +0.3475473850343733, -12.502469663211004 +0.3518541856968126, -12.233552826216387 +0.35621656627237414, -11.959139091952542 +0.36016058464030876, -11.705881483313119 +0.36496911969974144, -11.44267026486593 +0.369138171473964, -11.17747106178542 +0.3740664197130681, -10.914608852688657 +0.37882567675282347, -10.651658963546746 +0.38365275918047925, -10.37191299941553 +0.3893138702290586, -10.10613382491446 +0.3942705864677256, -9.835396664641143 +0.3991470932284883, -9.587093192406135 +0.4040763934218002, -9.355280411978812 +0.4096950868435975, -9.09356343258389 +0.41538830017999934, -8.839542109365887 +0.4211684669457449, -8.5690300943402 +0.42701224140477045, -8.333423376974114 +0.4329465006713374, -8.07857751916573 +0.4391097642531306, -7.823652022213901 +0.4462203072773484, -7.567029988321165 +0.4532989753708334, -7.288641046887754 +0.4597418269935335, -7.053260073559848 +0.46718096237948503, -6.807076592057163 +0.47530552556729666, -6.528258481104336 +0.48263453018619235, -6.274413202308683 +0.4923073997979264, -5.987687136710429 +0.5001003638101689, -5.739081384117567 +0.5076006257119109, -5.490746067112278 +0.5194801159940909, -5.191733472608865 +0.5281294322953753, -4.953451304620028 +0.535854624261876, -4.725842033869174 +0.5453400378247008, -4.478708769456183 +0.5545746468160395, -4.235082279141423 +0.5648138831222511, -3.990200894912256 +0.5752397893804846, -3.748984108862574 +0.5858508777600719, -3.5187611173513513 +0.5966626381752747, -3.2812089294811564 +0.6076663869442186, -3.0546505361494205 +0.6188756284748052, -2.8244275446381977 +0.6306045664547784, -2.597887115023024 +0.641898985618576, -2.3905498984170226 +0.6672920923133849, -1.9090538612393981 +0.6567012468364305, -2.1467463371818223 +0.6884114648349446, -1.6064228920765249 +0.7106461217736716, -1.3799830592741245 +0.7346907078388645, -1.1662899531340045 +0.7595402699473752, -0.9625912056652082 +0.7862302745343676, -0.7716430442248878 +0.8252570283777096, -0.4630550866848182 +0.8545068569452148, -0.3501427853209371 +0.8843623688871748, -0.2994026348148253 +0.9120868431437682, -0.1591560502153948 +0.9437839002530807, -0.10983724962069896 +0.975518558192602, -0.07604259956442672 +1.0082770686248588, -0.08022651245918588 +1.0421579667960639, -0.06542114387842979 +1.0771311823787666, -0.08859433824870688 +1.1160927389622646, -0.15514500893070693 +1.1505531653303882, -0.20021816676825566 +1.1889189139121141, -0.40597401640839603 +1.2286425512196961, -0.5550761300373654 +1.269653313016065, -0.7321624479460445 +1.3119900481429703, -0.9382324060015677 +1.3557033311883944, -1.1672893890011355 +1.400857263779844, -1.4063407306720297 +1.44537057256005, -1.6286476022121121 +1.4912808298228266, -1.8613486067703722 +1.5288865242535277, -2.1166092086894164 +1.5723511547932745, -2.2923080343427635 +1.6131712762218147, -2.6126652658514082 +1.6397895873004198, -2.8942165834975206 +1.6741549259601598, -3.1431167077470477 +1.7066755019217648, -3.392224697859696 +1.7398288203991248, -3.6408091739467032 +1.7762560608476152, -3.9069852610423776 +1.8134266996695414, -4.182584600599586 +1.8486171378945437, -4.448706796545562 +1.8812761766416222, -4.706914692221556 +1.9067884700307238, -4.93576422928904 +1.9519334933989196, -5.247241356798135 +1.9974658525514508, -5.5465126288201 +2.039384552340547, -5.903471437076863 +2.0739372024237435, -6.127100461485712 +2.1118606089646783, -6.41674229490717 +2.1372437588965387, -6.646765119290942 +2.1745431766548924, -6.919077098716551 +2.2156539783123597, -7.2105328727042295 +2.25289165342661, -7.486917364857812 +2.283688033717999, -7.72646831559126 +2.319342551343599, -7.976005024186286 +2.3575631791923812, -8.249448717755564 +2.386113300139136, -8.46919442990336 +2.4179359286233186, -8.704318436542863 +2.4501614627160127, -8.94721662646313 +2.4828041656110837, -9.19451233419878 +2.5159371714953003, -9.42229405662867 +2.549460137223522, -9.668215540047013 +2.583434579823985, -9.912487954284588 +2.6147863677621483, -10.16349795981556 +2.651862861611859, -10.400990268630531 +2.6880485749661664, -10.661795888805 +2.730942055423787, -10.97374540762428 +2.764953476822113, -11.241716155546415 +2.804931861851221, -11.530769121230533 +2.8455330187824996, -11.805896613832607 +2.8799876262533592, -12.080879199121041 +2.9149056387597536, -12.341814158054786 +2.956082806351109, -12.62572471047658 +2.991846078562289, -12.909563408032112 +3.0271314952271497, -13.164226035931526 +3.058881593842395, -13.422376191089983 +3.0942773755610364, -13.68174274648449 +3.1307174352186506, -13.95152184187428 +3.171166070586415, -14.255393077353782 +3.2054205640182083, -14.534473956264515 +3.2424516648086392, -14.810331203466708 +3.280550207799639, -15.103472112250719 +3.314200563781684, -15.374113466035682 +3.3475130998018385, -15.635454747129854 +3.3775770953630664, -15.886025497020023 +3.407240588045831, -16.120883127405307 +3.437136165506052, -16.36306995414955 +3.4621634989429855, -16.586879898846675 +3.4925482003573, -16.827234426501185 +3.5230829824188286, -17.096905739591577 +3.5538773751674073, -17.368409351771717 +3.583299595719613, -17.66554975373691 +3.608814693004779, -17.967535226684504 +3.636540834857216, -18.281756556858845 +3.657028883529857, -18.62552820078443 +3.7031031967699066, -18.93577954959766 +3.726756971225696, -19.185996157646954 +3.74815248538932, -19.435404398450785 +3.7810314489700034, -19.679423524284772 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-B_max.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-B_max.csv new file mode 100644 index 00000000..892819d5 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-B_max.csv @@ -0,0 +1,153 @@ +0.27192437368524963, -19.97108872655918 +0.2753802033463755, -19.587316659692497 +0.2786332023834429, -19.313988925206615 +0.28126120116659514, -19.03341868161774 +0.2839103264328109, -18.77524382785593 +0.28732619381433283, -18.49912066881842 +0.2908475640781019, -18.21100397869317 +0.29434940404345356, -17.920083865662775 +0.29718815977892926, -17.646716139409357 +0.3007628446985795, -17.37599186899088 +0.3048085849980444, -17.065968132955618 +0.30825195168444275, -16.767569115040715 +0.31196007491260047, -16.494845256244815 +0.31615558669932153, -16.18948722642353 +0.3201411507274753, -15.879447938034225 +0.32406155640850826, -15.608127790279276 +0.3280315566956828, -15.328409371339177 +0.33205233287577307, -15.037493257485544 +0.3356867601706378, -14.76314973210394 +0.3401215853885741, -14.49251388792704 +0.3444064053557768, -14.196938288801043 +0.3486214320072267, -13.938215547823823 +0.3528860540269725, -13.689290789895942 +0.3573304319439496, -13.399780608848111 +0.3625545613667527, -13.117617359851884 +0.36664243337242597, -12.856366250459665 +0.371484129717761, -12.595506171683468 +0.3761539155486925, -12.346743158237672 +0.3813301419299036, -12.086368757260708 +0.3865752930321643, -11.836352224078759 +0.39189461145799426, -11.577377534965976 +0.39728379516179757, -11.332959849240794 +0.40335888474505205, -11.060762548717626 +0.4107630482007147, -10.770891553055918 +0.4181869322214249, -10.489244076673891 +0.4241262694489513, -10.236481563307464 +0.4305341101938382, -9.987920730464275 +0.43777699965246064, -9.706420011750424 +0.4458179801732082, -9.396953049990039 +0.4533206205283004, -9.105374405854022 +0.4601681879670527, -8.861914745138101 +0.46670051630883125, -8.621254790920645 +0.47500231169596197, -8.35181789185571 +0.48174587688792253, -8.10878266902023 +0.4890181946217242, -7.881746294177496 +0.4972386602370798, -7.622267708793608 +0.5063639299446308, -7.33986184307426 +0.5156522337902978, -7.072386237239627 +0.5245916955465044, -6.784051814157721 +0.534750565013598, -6.513173353257692 +0.5444113901600125, -6.244080868142362 +0.5545499900037483, -5.973556435374448 +0.5645679333990711, -5.706245401722626 +0.5750815725363486, -5.436738941219588 +0.5812328260310439, -5.2176467088238425 +0.5964090867616167, -4.795720674952662 +0.6110187431181275, -4.5000517617023945 +0.6231422183667342, -4.28765948342992 +0.6340377811871816, -4.035409632206878 +0.6469691237609874, -3.7496195742469993 +0.6590577929346542, -3.4787286714637347 +0.6721553716465114, -3.2122142011091697 +0.6844734130141651, -2.973665973801168 +0.6980747954567933, -2.710350844850474 +0.7203617115766521, -2.302363337888494 +0.7438714266047588, -1.908491910445754 +0.7586532417413658, -1.6449101697114088 +0.7737209559193876, -1.3989248066983322 +0.7902790455353934, -1.1417697430090072 +0.8071922314364335, -0.8830150086177397 +0.8281885039685999, -0.6286633678335534 +0.8548304672882929, -0.41639324623286456 +0.88407433381137, -0.25093083939806604 +0.927648933678342, -0.038128487154793334 +0.961315394068643, 0.01813330488685949 +0.99360369541103, 0.007337709017939176 +1.0286946246729327, 0.0014374915005390676 +1.0621625150436507, -0.12399641268324046 +1.0969463067174305, -0.3039734791622948 +1.131959746130954, -0.5124312946310567 +1.1645688833758747, -0.7483636159884313 +1.1945007734075865, -1.017895243028022 +1.2215474278728684, -1.2586656795527986 +1.2473205195923742, -1.5150049111841426 +1.2736467732642938, -1.75854677720001 +1.2972466512949263, -2.0431002008367045 +1.331590427679454, -2.306735897943611 +1.3640920138385964, -2.598061959928259 +1.3970280733846945, -2.8976482889863675 +1.4286220011577881, -3.1852090935426958 +1.4609250475769824, -3.479168580906766 +1.4911677529184404, -3.759895792183272 +1.5209212823671567, -4.00941542765343 +1.5483747163377741, -4.24117038671389 +1.5786716331998885, -4.496415176973329 +1.6087300926549037, -4.779378261320517 +1.6410074136859427, -5.05782760817042 +1.6756164317046773, -5.328830487902813 +1.70992737461368, -5.600248748794151 +1.7392080910366436, -5.848356874828696 +1.773994122730523, -6.1094751226820705 +1.8096092170399682, -6.412041201984053 +1.843229421175653, -6.6915153075805875 +1.8815685300153946, -6.981820638075305 +1.9224882317680358, -7.261149046391431 +1.957895726455299, -7.51903895880946 +1.9857603206377052, -7.756322779733473 +2.021576111412685, -8.012339411106595 +2.0580257265301904, -8.278620596150454 +2.095704125621354, -8.545415857188075 +2.1323382225918737, -8.801252646794396 +2.162026562480788, -9.027615746091946 +2.197342943958387, -9.290444308537467 +2.236935251897393, -9.577254600922807 +2.2772592932319045, -9.850067774666229 +2.3182890645650693, -10.138744349537163 +2.356542247954908, -10.408170220569232 +2.391846037370987, -10.667116915444723 +2.4772513783956938, -11.202715367318966 +2.4277006274395823, -10.910386837441273 +2.499267450741314, -11.503612719723066 +2.5269563970041915, -11.745370952906278 +2.557966661664695, -12.009369052376108 +2.594512631936519, -12.297044055646438 +2.6263481701133813, -12.56353053176371 +2.6577069252241694, -12.817102333080705 +2.689420602948691, -13.083271541175428 +2.721514904000638, -13.348041037405963 +2.7540210507251306, -13.594614279402002 +2.7868862636295244, -13.85938377563253 +2.8201459470780605, -14.12275355999887 +2.8538025633176987, -14.386123344365217 +2.8878399078033814, -14.662090535509279 +2.922302053028732, -14.926860031739814 +2.957158774616779, -15.201427511019688 +2.9924240279019703, -15.48019412589214 +3.0281415512900374, -15.740764486530097 +3.0642903364747265, -15.99853542343967 +3.1008081902309845, -16.29129915695404 +3.137796630890282, -16.564466924369718 +3.175223735131439, -16.839034403649592 +3.2130558410896497, -17.13599727275654 +3.2472201094838518, -17.398543226711382 +3.2852591733523457, -17.666907982844506 +3.328261452881204, -17.977734220348573 +3.369024627867396, -18.283257105122757 +3.4040979116940493, -18.55546373705836 +3.4344656924673695, -18.781451883238347 +3.4650969373927767, -19.011172594389514 +3.495948794588938, -19.267021260338936 +3.5919297456212336, -19.937528701408787 +3.527101869077049, -19.509805948889216 +3.548065319973722, -19.651755394743134 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-B_min.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-B_min.csv new file mode 100644 index 00000000..384d9c9d --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure78-B_min.csv @@ -0,0 +1,132 @@ +0.5001821933136144, -19.633154157209276 +0.49932799171483305, -19.90634898572099 +0.5055609612999111, -19.110008369895645 +0.5013598476282115, -19.374528462921297 +0.5089699171956923, -18.715382372777682 +0.5105387700163482, -18.4214526570628 +0.513153234975825, -18.12080654616465 +0.5155710828736071, -17.78216025774207 +0.5201031312320855, -17.36333847373858 +0.5228297209129632, -16.977111313345908 +0.5244796023488144, -16.721953171916162 +0.527392347863609, -16.41924881804819 +0.5304158742033026, -16.08622037317197 +0.5344192676048014, -15.706923452830694 +0.5376527047157871, -15.374478554495944 +0.5393471898230092, -15.126318972387153 +0.5430979339970857, -14.828306319382065 +0.5449974729614014, -14.540227621435974 +0.5495404404996101, -14.200359806691282 +0.5528591157624546, -13.8875553097525 +0.5552356903764967, -13.61095591541644 +0.5584011659337741, -13.332916150919182 +0.5619124129731312, -13.06640501321192 +0.5658304755790181, -12.736478929703253 +0.5690989965806467, -12.42144778001797 +0.5728647902966651, -12.146024476912558 +0.5760295753192035, -11.85218452049817 +0.580596464992038, -11.46911759844776 +0.5862548266753524, -11.145183836953237 +0.5907722379552119, -10.85605002287334 +0.5981291549094825, -10.22920306161366 +0.5953308540536039, -10.548253383937556 +0.6029877398752606, -9.872890076611867 +0.6086409828123424, -9.534019056673323 +0.6152317434194364, -9.166546904180514 +0.6212087191388582, -8.816495650380482 +0.6269446633410858, -8.504372346548934 +0.6323367166837282, -8.19503680218024 +0.6372150327444561, -7.890039586972833 +0.6438291143846989, -7.5630070189345275 +0.6584097259588667, -6.49232231218744 +0.6647359744048003, -6.1873600897766465 +0.6695473383783069, -5.865757292888986 +0.6736903654080582, -5.585926896999744 +0.6798157406768686, -5.268468691377244 +0.6857682875570952, -4.908590329210284 +0.6921219192163002, -4.542313728588553 +0.6988845015297139, -4.175331051093124 +0.7053568635365725, -3.8159285909599774 +0.7126063956245734, -3.446591287061892 +0.718385228494026, -3.113606833129964 +0.726192168070972, -2.817999351678182 +0.7330529347593377, -2.2461529016953676 +0.7325115094148954, -2.5512795902502035 +0.7438714266047588, -1.908491910445754 +0.7586532417413658, -1.6449101697114088 +0.7737209559193876, -1.3989248066983322 +0.7902790455353934, -1.1417697430090072 +0.8071922314364335, -0.8830150086177397 +0.8281885039685999, -0.6286633678335534 +0.8548304672882929, -0.41639324623286456 +0.8892442646798108, -0.23502691559753686 +0.9246501371748748, -0.047215979424223065 +0.9584315708926346, 0.017171321096554948 +0.9906288164504977, 0.016555447876314133 +1.023876390266708, -0.03715814243471982 +1.059652420446534, -0.12171664282876549 +1.0936671439398196, -0.28661196218499896 +1.130267690557526, -0.5020199832921364 +1.1645688833758747, -0.7483636159884313 +1.1945007734075865, -1.017895243028022 +1.2215474278728684, -1.2586656795527986 +1.2473205195923742, -1.5150049111841426 +1.2736467732642938, -1.75854677720001 +1.2972466512949263, -2.0431002008367045 +1.3160261219344893, -2.2965065816606725 +1.3215814037985294, -2.516243247054078 +1.3271426113590443, -2.731443985677096 +1.3378410067189863, -3.0888039388964827 +1.3500135074435355, -3.40027202205205 +1.3618461138751843, -3.7211898710498517 +1.3739335692272645, -4.024939787462721 +1.3866627178836874, -4.354825123803785 +1.3974179207818258, -4.649311702664136 +1.4114582380727476, -4.970017320603013 +1.4242051796736994, -5.302938151268378 +1.4359478801046552, -5.605898785713386 +1.448684746361747, -5.919602208716057 +1.4597186573598258, -6.2188186139243555 +1.4746400328560565, -6.55410279444915 +1.4857049880396451, -6.8742196972135545 +1.4992583076626955, -7.188083309462911 +1.5125469880144446, -7.5129844273791235 +1.525944272233963, -7.848336727214651 +1.5402157852308873, -8.200992576162378 +1.5538629850687666, -8.530932656789673 +1.5676240336133906, -8.868711123856457 +1.582282413380839, -9.22460186244588 +1.5955123002895726, -9.544827942735694 +1.6088441637460877, -9.874385435453462 +1.6230576598254884, -10.249054086318715 +1.6373779629968088, -10.643629750363587 +1.6485319035285186, -11.025726205521487 +1.6581708630523357, -11.334396886754696 +1.6678936563277384, -11.614451236542202 +1.6781069823936694, -11.880513133394004 +1.6854188846007676, -12.154940641487464 +1.6990995818268846, -12.46103163153731 +1.7189164837971636, -12.75513708885294 +1.7190519023551651, -13.053133745151001 +1.7252481390689274, -13.325547667748403 +1.7404093048924207, -13.635828017625421 +1.7468368940433976, -13.899667483083967 +1.756787652067719, -14.17847453407694 +1.7713302158997857, -14.497330451975259 +1.7765770461199881, -14.763813595445235 +1.7878236682848325, -15.065916739741063 +1.8024497003619864, -15.406979863982471 +1.8117984823032331, -15.696797537287452 +1.818326089237085, -15.97201088361323 +1.8344753458865872, -16.266118340517224 +1.839904642809407, -16.536920594882424 +1.8535127444789494, -16.855875736799547 +1.8661558852694473, -17.17877946588557 +1.877754428278341, -17.503911536259366 +1.891844455471495, -17.823748496650936 +1.902142318866099, -18.134029157575043 +1.9137792696289255, -18.40988903747619 +1.9221010148717603, -18.699713376075756 +1.9344628349628652, -19.01399379141357 +1.9498541466056112, -19.327858070192384 +1.972837276306722, -19.821807792628945 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure80-M0.093.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure80-M0.093.csv new file mode 100644 index 00000000..ac827652 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure80-M0.093.csv @@ -0,0 +1,158 @@ +0.21391214365936495, 0.08230691785875288 +0.29921696895008587, 0.08239720460535621 +0.4368696615829286, 0.08253692847893332 +0.5861871341804621, 0.08257345426283187 +0.7354997099993055, 0.08262754656130941 +0.8848122858181489, 0.08268167429462234 +1.0341248616369922, 0.08273583748598323 +1.183466818127977, 0.082684582986115 +1.3328871230780024, 0.08235298179089436 +1.4493841934450504, 0.08186199323909413 +1.604570198362702, 0.08171874819127634 +1.762044204796764, 0.08292648211233145 +1.9029015432789826, 0.08287543743367795 +2.052145564196165, 0.08317672433196073 +2.201332456028629, 0.08368624936770835 +2.3505417914300892, 0.08411695800893418 +2.508302307640422, 0.08463302558718233 +2.648951688837858, 0.08501738801972439 +2.7981975808030164, 0.08531953636077531 +2.9406934794773445, 0.08548310747016698 +3.109362461384295, 0.08591636096945163 +3.245916550722086, 0.08630244376283422 +3.3951360877458185, 0.08670823566158979 +3.534909811221196, 0.08862406816619134 +3.693232387284972, 0.08883676445919504 +3.842353988734901, 0.0896344782089713 +3.991460899848761, 0.09049700836477383 +4.152867579025553, 0.09307615786200565 +4.285725924763783, 0.09357197576600557 +4.43863387483653, 0.09373361654653432 +4.592999353029553, 0.09394900586764857 +4.746525770585617, 0.09439340700443602 +4.876627124878235, 0.09616999777288315 +5.034832225686635, 0.09836753242918364 +5.187809105206318, 0.10093108519913824 +5.481756319954313, 0.10299160855663037 +5.608280604773984, 0.10378988296138963 +5.766171019833299, 0.10600784021004142 +5.915106543693005, 0.10782663449906008 +6.064012686880568, 0.10981651208523606 +6.212923726846823, 0.11181935587215683 +6.361795592583556, 0.1140523843768114 +6.501500362160492, 0.1169216116518457 +6.657563065790674, 0.11718865718144418 +6.784867477851707, 0.11990969354034314 +6.904947030624346, 0.12261266070911758 +7.05194250034458, 0.1254217887905001 +7.200839710904086, 0.1277858825840376 +7.344247999040592, 0.13138409147541494 +7.498475036361484, 0.13356725845496928 +7.6472391729670335, 0.13687275585127298 +7.782576886490823, 0.13935746780650188 +7.944586265366603, 0.14486532913192457 +8.093232389605717, 0.14921236368933738 +8.236780858411132, 0.1524838018841783 +8.390844304902497, 0.15612159969142822 +8.537488012887023, 0.15808664316136856 +8.693860001143666, 0.16353735615136072 +8.837151497885149, 0.1678941162507816 +8.985822595695586, 0.17274493697980514 +9.134464312833884, 0.17796258679018723 +9.3013840725628, 0.1819298120695586 +9.562563683115643, 0.19520204325646798 +9.69123485098094, 0.20121826225034603 +9.8506279898199, 0.20556849226739649 +9.943772003791464, 0.21318306307568335 +10.093733464669116, 0.21701300866819334 +10.242228278446708, 0.22499704265925666 +10.390762266453825, 0.2328787219999921 +10.53930604801832, 0.24093411477727153 +10.687830242468058, 0.24948004152132527 +10.836344643360414, 0.25843886685846273 +10.988191098118945, 0.26843760031236225 +11.123287917335505, 0.2761817844582839 +11.281868258922719, 0.2875364529554816 +11.423154726422664, 0.2983926539166595 +11.578740363789345, 0.3106627068268543 +11.727181313001351, 0.32284567454493684 +11.875641849328114, 0.3352214506131693 +12.035970078580268, 0.34458952746630633 +12.17243070895701, 0.36349325153684503 +12.323215354050456, 0.3764204718327686 +12.469327297717092, 0.3923117238325825 +12.615546931980484, 0.39571409138377733 +12.755008607412618, 0.3965421450229411 +12.917078947583397, 0.39626909520882136 +13.066401316959618, 0.3963602535647718 +13.215723686335844, 0.3964514328909314 +13.365075436384208, 0.3960375400596185 +13.514427186432572, 0.3956240793298486 +13.663734865472724, 0.39596734984455545 +13.813027854176807, 0.39656355857258346 +13.962159249184117, 0.39995456164828075 +14.111672592929255, 0.3967460317478921 +14.261039033313692, 0.3960793386162683 +14.410361402689913, 0.39617045332031847 +14.559678875287448, 0.39634577407227334 +14.709035522114503, 0.39584789434908135 +14.858357891490725, 0.3959389558113341 +15.007670467309568, 0.39619832788638953 +15.156880210775919, 0.39823039517004694 +15.29364036981343, 0.3954882768142097 +15.455554330200508, 0.39790615900981646 +15.598887511742179, 0.40096499996392687 +15.747446411139295, 0.397485907130961 +16.14798332087556, 0.39632807763310374 +16.2972958966944, 0.3965877046144594 +16.446608472513248, 0.39684750167250965 +16.595994500012438, 0.39584414520842837 +16.745336456503424, 0.3955989214419817 +16.894653929100954, 0.39577398926896984 +17.043971401698492, 0.3959491345702443 +17.205294047369343, 0.39566035484558104 +17.342649530537912, 0.3955579499288786 +17.491945756556795, 0.39609791151714735 +17.62842060733191, 0.3982694276865604 +17.790637113145202, 0.395479577094049 +17.939939895406667, 0.3959068140799866 +18.089125154979563, 0.39836027139835306 +18.23857484060173, 0.39625729977735424 +18.387916797092714, 0.3960118200634073 +18.53730282459191, 0.3950105764677221 +18.686600710074686, 0.3955213167622243 +18.83593287300829, 0.3954442623537545 +18.98520627459761, 0.3963763425101698 +19.134504160080382, 0.39688884871118757 +19.283816735899222, 0.39714884304300474 +19.433181217572184, 0.3965151635997076 +19.73184540353143, 0.39636308823632777 +19.88122863287137, 0.3954089507669247 +20.030541208690217, 0.3956679756457618 +20.179853784509064, 0.3959271702068675 +20.329220224893497, 0.39526185309244755 +20.47857687172055, 0.3947653349638851 +20.627899241096777, 0.3948561473925014 +20.777211816915617, 0.395114810140368 +20.926524392734464, 0.3953736423332782 +21.075851658889377, 0.3953805967753937 +21.22524747994595, 0.39421343139961285 +21.374520881535275, 0.3951426104313502 +21.523882425141018, 0.394562417990654 +21.673195000959865, 0.39482088832197926 +21.822507576778705, 0.39507952797229967 +21.971702629908982, 0.3973590041531493 +22.120951501189893, 0.3987196661225507 +22.275796900172658, 0.39720682649252737 +22.419610976693377, 0.3986481978665781 +22.569129217217203, 0.3953661530708761 +22.718490760822945, 0.3947856323999506 +22.867803336641792, 0.3950442489547874 +23.017115912460632, 0.39530303492440777 +23.16649704318114, 0.39438735247539564 +23.38055953795945, 0.3958503489512621 +23.62807719606832, 0.3940129305548451 +23.77736039121502, 0.3947738811255579 +23.926623999246964, 0.3958725324424819 +24.27820356544904, 0.39631340871506615 +24.96334140261051, 0.3997086491606328 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure80-M0.209.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure80-M0.209.csv new file mode 100644 index 00000000..8f42b919 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure80-M0.209.csv @@ -0,0 +1,166 @@ +0.01191788615022027, 0.05087771883968323 +0.15708477312551317, 0.05069820361468981 +0.32579113377646607, 0.05099758201924726 +0.4751183999313797, 0.0509984790434649 +0.6244309757502231, 0.051031887176562235 +0.7737435515690665, 0.051065317194691824 +0.9230561273879099, 0.05109876911219007 +1.0724078774362749, 0.051045422314903395 +1.2217204532551182, 0.05107886119964453 +1.3712286670416285, 0.050680371734747966 +1.52020383149073, 0.0514613324443117 +1.6683322418596713, 0.05077589654049029 +1.846114416939555, 0.051228001687989314 +1.9953918991777861, 0.05133965939987006 +2.1446310233162773, 0.05153724722057791 +2.2939044249056, 0.05165872286208713 +2.454587320842883, 0.05229161056614223 +2.5923581892891328, 0.05211244031865035 +2.904199746611429, 0.052999370736225605 +3.0536539209473954, 0.052709318620797294 +3.2026926852244824, 0.053374081744463946 +3.339132588937707, 0.053880162033038706 +3.500970165575172, 0.05425619749533522 +3.65009666380379, 0.05473176580916608 +3.7992280588110994, 0.05519977549433554 +3.9483398667036482, 0.055719111693336126 +4.1068485061294915, 0.05624678291643617 +4.245471395909881, 0.056676067536337756 +4.395555319303389, 0.057605646770305885 +4.553153906313971, 0.05814193696620091 +4.69962650497426, 0.058209818111445065 +4.843156801289865, 0.0585670212885676 +4.980349383490811, 0.05984907490850082 +5.14069078740944, 0.06148646208893791 +5.289680175834736, 0.062395426837247296 +5.438684254596103, 0.06327749081657885 +5.567393634076307, 0.06398254484757439 +5.702553295286059, 0.06564917158005297 +5.912476973536414, 0.06706710747690521 +6.0615691943142025, 0.06775564283540074 +6.2104606471656965, 0.06905002364647508 +6.359381480689331, 0.07027949972828475 +6.508287623876896, 0.07157646686378588 +6.657164386392321, 0.0729903396549231 +6.806050942465125, 0.0744005252432215 +6.954908117865788, 0.07593467706482449 +7.103765293266452, 0.07750046336486742 +7.196669005190795, 0.07928887761749462 +7.332778278951638, 0.0806479974843392 +7.397847368867721, 0.08156902430780127 +7.523154800959638, 0.08250700502157343 +7.67191893756519, 0.08454887286725934 +7.820727145178951, 0.08647578721605599 +7.969496178563192, 0.08859705144718838 +8.118250521611364, 0.09082821491538498 +8.266980380766084, 0.09321451961497601 +8.415720033478184, 0.09562288489318836 +8.564440099075526, 0.09817686035584633 +8.713160164672866, 0.1007990495172559 +8.861841056040685, 0.10366729746394321 +9.010546431301954, 0.10650398070826038 +9.159202838776324, 0.10965096468262828 +9.307839659135931, 0.11298690037850549 +9.456476479495539, 0.11642432598830402 +9.605118196633837, 0.11994084793700663 +9.753720739542615, 0.12377374734663085 +9.902328179230084, 0.12770200304709745 +10.05091603180279, 0.13186693144322556 +10.199494090818115, 0.13622555994470475 +10.348067253054753, 0.1407581526865227 +10.49660124106187, 0.14568893138013234 +10.645135229068986, 0.15079243597317535 +10.79369370096955, 0.1559090336760121 +10.942193411525837, 0.16161068320831853 +11.090688225303433, 0.16755643363117462 +11.239207522974477, 0.1735365156470114 +11.38765336896517, 0.18030362906857045 +11.536118802070627, 0.18717551714839908 +11.684584235176084, 0.19430931257876544 +11.833034977945468, 0.20184358671886307 +11.99332473250791, 0.20783088717340245 +12.157049927091373, 0.2181499567268021 +12.371620303936188, 0.23571411792502267 +12.507492324467934, 0.24328612117636464 +12.656908198999146, 0.24235701310840346 +12.806225671596676, 0.24246426546259492 +12.95553824741552, 0.24262309918869526 +13.104850823234363, 0.242782036963747 +13.254163399053207, 0.24294107885591043 +13.403480871650741, 0.24304858968179047 +13.56085746261646, 0.24406528449311946 +13.702037468386765, 0.24409196834505845 +13.851496947566313, 0.24270025638994072 +14.000829110499916, 0.24265297417303103 +14.15014658309745, 0.2427603575014432 +14.299459158916294, 0.24291938519180342 +14.448771734735141, 0.24307851705817735 +14.598099000890054, 0.24308279269847155 +14.747426267044967, 0.2430870684139723 +14.896797604208095, 0.24262703853652393 +15.046002450895754, 0.24392326189992855 +15.195368891280188, 0.24351337257441852 +15.344754918779385, 0.24289769346485363 +15.494067494598228, 0.2430568111213899 +15.643414347867902, 0.24285464441111967 +15.792795478588404, 0.24229209437759708 +15.942112951185939, 0.24239931800273867 +16.09142552700478, 0.24255810918299403 +16.240738102823627, 0.24271700438432983 +16.390050678642467, 0.24287600367488807 +16.53937794479738, 0.24288027575306417 +16.68874438518182, 0.24247213906436685 +16.8380863416728, 0.2423219286042161 +16.987364640040816, 0.24284150118245368 +17.13672618364656, 0.24248493421257034 +17.28605344980147, 0.24248919941201288 +17.435424786964596, 0.24203030097115416 +17.58476184667689, 0.24193175129195288 +17.734069525717047, 0.24214166782921367 +17.88339189509327, 0.2421973704732332 +18.03270447091211, 0.24235602936150527 +18.182017046730955, 0.24251479218419558 +18.331452042017048, 0.2413883219492067 +18.470247915502497, 0.2411086401377597 +18.630052709761294, 0.24196154114833646 +18.779375079137516, 0.24201720235573554 +18.928687654956356, 0.24217574321930252 +19.078000230775203, 0.24233438793997197 +19.227361774380945, 0.2419785655702963 +19.37669393731455, 0.24193142395126818 +19.525991822797323, 0.24224423614942023 +19.675323985730927, 0.24219704277315804 +19.824670839000603, 0.24199559119009523 +19.973983414819443, 0.24215411789659874 +20.12330088741698, 0.2422612804618097 +20.272633050350585, 0.2422140837650199 +20.42200438751371, 0.24175570596649007 +20.550980641432517, 0.24163568907168 +20.991969839927783, 0.24380678719307508 +21.141399938435192, 0.24272587143747915 +21.29078596593439, 0.2421121833807819 +21.44017199343358, 0.24150004692230806 +21.589489466031118, 0.24160692003580944 +21.738802041849958, 0.24176519213123637 +21.888114617668805, 0.241923567907701 +22.03745657415979, 0.24177369728505166 +22.186788737093394, 0.24172659557791648 +22.336101312912234, 0.24188494607051353 +22.48547265007536, 0.24142719114828187 +22.634785225894205, 0.24158534550673488 +22.784122285606493, 0.24148697700409721 +22.933415274310576, 0.241850584365794 +23.082727850129423, 0.24200901608108646 +23.23210408407124, 0.2414997201657319 +23.3814558341196, 0.24124759595921363 +23.530768409938446, 0.24140563266827608 +23.680080985757286, 0.24156377290417924 +23.829393561576133, 0.24172201673474134 +23.978706137394973, 0.24188036422782538 +24.1280285067712, 0.24193600676116017 +24.277394947155635, 0.24152945682469446 +24.426702626195784, 0.2417390243037557 +24.576064169801533, 0.24138407611335636 +24.725376745620373, 0.24154220222797051 +24.874713805332675, 0.2414438512923742 +25.002478152940647, 0.2421696306528227 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.093.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.093.csv new file mode 100644 index 00000000..c2b4df09 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.093.csv @@ -0,0 +1,163 @@ +1.0081298874286855, -19.180285859537776 +1.0070873076515507, -19.773305236771726 +1.0214651608789005, -17.60946803534118 +1.024349377307888, -18.265289366896702 +1.0129359259135233, -18.633624156374715 +1.0610467444990936, -14.231826908538892 +1.0396272396469124, -14.933423086641113 +1.0321838133762586, -15.339971222116347 +1.0246484197024994, -15.798830416477664 +1.0238652134308968, -16.24431814376561 +1.0297807941338393, -16.70680856720437 +1.0291162554791455, -17.084798153994143 +1.1147685635708715, -13.442532988188141 +1.1952243750803664, -12.039820298982583 +1.167517449454964, -12.72064057899037 +1.1305948680793811, -12.945581488798844 +1.2772644825511241, -11.423541140907105 +1.3102284295901816, -10.867913799357382 +1.4060841140873288, -10.35881351099313 +1.4737519492776832, -9.759348854719377 +1.5501976280908396, -9.270077048825996 +1.588485734686719, -8.924529289817436 +1.8090127387948538, -7.934223898564383 +1.8569400676952252, -7.4049774018522925 +1.973537909459453, -6.967891240126441 +2.1128498283219743, -6.574845270274928 +2.251057629771738, -6.119185604692049 +2.368126786074476, -5.6010628968248 +2.4789577593489964, -5.1475710736785345 +2.5700817149156228, -4.781826644707806 +2.693073752751584, -4.48031915997656 +2.8419135170907657, -4.020261203850197 +2.975683206446875, -3.781648674954461 +3.062773640195953, -3.4192656058627406 +3.216075998549293, -3.168669722267822 +3.355188718102845, -2.942054140907395 +3.5095483177892834, -2.531707778653832 +3.639807387518603, -2.3067125529818355 +3.801030506407791, -1.9472449530542093 +3.9495095862781007, -1.692344322820773 +4.106291297657824, -1.4989977991244032 +4.246464340104007, -1.1844803466461187 +4.460706909886953, -0.8687611995606446 +4.367792870269179, -1.0637214796053485 +4.582484730468098, -0.801536853006148 +4.68960534251195, -0.6323716835018516 +4.8337260827438175, -0.5479809311005255 +4.974605042857638, -0.36350316583473585 +5.102627389827688, -0.2625740274526507 +5.325085183156741, -0.028581181887652463 +5.47327946074647, 0.06432391115017566 +5.621464029167541, 0.15170642905632548 +5.769684197873687, 0.25933838911193163 +5.917820220451478, 0.31910803135973254 +6.066004788872551, 0.40649054926588946 +6.214085792827957, 0.4349655991009058 +6.36219268789978, 0.4781675159537073 +6.510257509907426, 0.49743827390260975 +6.6583223319150715, 0.5167090318515193 +6.806393626701821, 0.5396615065548644 +6.914096140049661, 0.5644874624421163 +7.640459760116039, 0.37466001074327693 +7.747954497254634, 0.281302858812829 +8.231825804630247, -0.05633386957463671 +8.379728807160289, -0.12910603048688074 +8.527580027457498, -0.23133192543469505 +8.675356810795009, -0.3758975630586292 +8.823065629951925, -0.5591212266042476 +8.970797103835705, -0.7294588815093022 +9.118518868550831, -0.9053191115460351 +9.266195323812228, -1.1069513588638813 +9.413852360736312, -1.3196287564450628 +9.561477033764875, -1.5507147377984865 +9.709066106508365, -1.802050161301345 +9.856622815356335, -2.071794168576446 +10.004156869477438, -2.354424184492096 +10.151632668586606, -2.6701896511977665 +10.299144067980846, -2.9657056757539806 +10.44656808485718, -3.3109248764952213 +10.593975919785754, -3.665348369122576 +10.714644241893678, -3.920115845043007 +11.069283093128652, -5.046991808044616 +11.203108124746102, -5.472768369493409 +11.330187297900967, -5.908316497189013 +11.443806102159456, -6.345576998596627 +11.557400183997757, -6.796899612608016 +11.670962621138212, -7.266221730752257 +11.777812426748817, -7.726415935803807 +11.864636181998804, -8.09560940415777 +11.937832741460976, -8.561406382074104 +12.011095754788617, -8.989404401311447 +12.091002120361189, -9.465936390903735 +12.17101223533598, -9.883455720517638 +12.237527807966142, -10.322125281208429 +12.297345186959841, -10.743454655045923 +12.343818392432059, -11.100404473357628 +12.530799720006947, -11.909061712398461 +12.678793341444447, -11.930289838748465 +12.826819326777468, -11.933109381326233 +12.974845312110489, -11.935928923904008 +13.12287129744351, -11.938748466481776 +13.250747521425282, -11.920934083831312 +13.472765274551765, -11.937236105487777 +13.930386090972465, -11.89706117993935 +14.0783570576831, -11.93117531492991 +14.226337733562392, -11.959766874788805 +14.374383137232726, -11.951541267103238 +14.522399413397089, -11.959883384812677 +14.67044158067787, -11.953498635504339 +14.81843520211537, -11.974726761854335 +15.011426000283446, -11.956106218397345 +15.492122887279507, -11.965262349578225 +15.814304631185813, -11.960559142951155 +15.962385635141217, -11.932084093116138 +16.11041485686379, -11.933062777316685 +16.25843760580726, -11.937723178271682 +16.399735137261505, -11.94041455982319 +17.00403217623105, -11.905349703037807 +17.146551444741206, -11.978571592642211 +17.29456772090557, -11.98691371035165 +17.44259370623859, -11.989733252929426 +17.59063587351937, -11.98334850362108 +17.738661858852392, -11.986168046198856 +17.886687844185413, -11.988987588776624 +18.034713829518434, -11.991807131354399 +18.182804542642497, -11.957809506387704 +18.28386242460096, -11.88517715750411 +19.07111256494957, -11.888206418124867 +19.219115895555724, -11.903911969343191 +19.36708362587681, -11.93986696271098 +19.51512579315759, -11.933482213402634 +19.663138832932404, -11.943665189489302 +19.811168054654978, -11.944643873689849 +19.959210221935756, -11.93825912438151 +20.107252389216537, -11.931874375073157 +20.25528161093911, -11.932853059273711 +20.403307596272132, -11.93567260185148 +20.551333581605153, -11.938492144429254 +20.69935956693817, -11.941311687007023 +20.84738555227119, -11.944131229584798 +20.995411537604213, -11.946950772162566 +21.143437522937234, -11.949770314740341 +21.291463508270255, -11.95258985731811 +21.439489493603276, -11.955409399895885 +21.587515478936297, -11.958228942473653 +21.735554409827525, -11.953685051542536 +21.883580395160546, -11.956504594120304 +22.03161932605178, -11.951960703189194 +22.179655020553454, -11.94925767063529 +22.327681005886475, -11.952077213213066 +22.475706991219496, -11.954896755790834 +22.623732976552517, -11.95771629836861 +22.771758961885535, -11.960535840946378 +22.919784947218556, -11.963355383524153 +23.067885369511274, -11.923835183425794 +23.202526366854574, -11.88549044001276 +24.05030436360327, -11.905729525715635 +24.19829798504077, -11.926957652065646 +24.346314261205137, -11.935299769775085 +24.49427875513667, -11.973095621520095 +24.64230474046969, -11.975915164097863 +24.79033072580271, -11.978734706675638 +24.89123973384178, -11.990781843144298 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.116.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.116.csv new file mode 100644 index 00000000..e809cccc --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.116.csv @@ -0,0 +1,180 @@ +1.042296807685136, -14.421033392560027 +0.9087410115622285, -19.725145984845945 +1.0632356161773835, -13.825957537088364 +0.9487521719556344, -16.868616134894808 +0.9422123995877474, -17.52662047593099 +0.941502767238628, -17.930259356110064 +0.9191529082698748, -18.395586410263434 +0.9183697019982722, -18.84107413755138 +0.9175864957266686, -19.286561864839328 +0.9634362723971943, -16.17084525828121 +0.9708801224807653, -15.76405605801849 +0.9837347920824957, -15.15004726128106 +1.0850288765384368, -13.348365962136178 +1.2011071660470583, -12.131519738117191 +1.159868473919306, -12.697351889646697 +1.1371809208178627, -13.026707418422916 +1.2493178632101927, -11.330083272533798 +1.3633673320283837, -10.671876721878391 +1.4586010612887517, -10.084749700399506 +1.542045162809151, -9.50583566468692 +1.632087183829725, -9.001297744548587 +1.6900209841041152, -8.580370330293462 +1.7591713014686254, -8.158275873965856 +1.8706700250751416, -7.691531490309245 +1.9473077628621267, -7.083203020288366 +2.049210532320381, -6.640400759427649 +2.189032564678719, -6.349281864053175 +2.3153694984917133, -5.841731306223593 +2.4289713816270506, -5.438111491974965 +2.544139787183018, -4.993958775377251 +2.6827011824416642, -4.5482025202247485 +2.822281254428895, -4.08800129683128 +2.9436550863421074, -3.558747522778262 +3.0791978317143247, -3.00748850051599 +3.2242798429969834, -2.6800785781765555 +3.3751513082583298, -2.431272254406231 +3.5296792319307873, -2.3004060253052216 +3.6661738525035457, -2.108255148333633 +3.8146589428115973, -1.8499357811139205 +3.9609114765697893, -1.5857370036973535 +4.118710147348116, -1.3580170578539565 +4.243234357404578, -1.1080581424451736 +4.341199381983355, -0.8810067074903785 +4.522446532205265, -0.4518700855117359 +4.416335891567876, -0.6686125810674639 +4.6371710732762565, -0.31412688190673066 +4.732690312697343, -0.18278349919178538 +4.847773375519248, -0.09626463882032255 +4.96180951782654, 0.012947651022308548 +5.101255442314892, 0.23281980302641614 +5.258580614251054, 0.41634729728570363 +5.40678460100944, 0.5147749654551959 +5.555085679454388, 0.6684283849413646 +5.7033641031724684, 0.8091957957869838 +5.78419293223566, 0.8573610396568512 +5.898106036647038, 0.9359833136982019 +6.111535328714616, 1.0588070659764597 +6.3903784045088425, 1.2011122140972716 +6.538501481528426, 1.25351842283618 +6.686637504106217, 1.313288065083988 +6.83472821723028, 1.3472856900506756 +6.982802748406581, 1.3720790231312492 +7.130877279582883, 1.3968723562118228 +7.278971229096497, 1.4327108395557318 +7.427074887778769, 1.474071898031312 +7.57510087311179, 1.4712523554535437 +7.720075405438564, 1.3730260831824594 +7.870825968433071, 1.2796865741984789 +8.018842244597433, 1.2713444564890395 +8.166852047982696, 1.2593206220251503 +8.314784178018705, 1.2031161865079127 +8.462683944159195, 1.1285031672184545 +8.610548110014612, 1.0336407057795256 +8.758451112544654, 0.9608685448672958 +8.906302332841863, 0.8586426499194815 +9.034049505790245, 0.8030528047781829 +9.200989625913445, 0.7146537369137249 +9.349681228697674, 0.4525586127060137 +9.497375484101608, 0.261051086462885 +9.645178158555536, 0.13121231585673598 +9.792748614353412, -0.1307124263112982 +9.940633015349219, -0.21406513989643372 +10.088254451988227, -0.4469919796270716 +10.235888834185447, -0.6725553858488169 +10.383584707784156, -0.863142482903335 +10.531215853591824, -1.0905467475022945 +10.678788744387553, -1.3510864628912813 +10.826332507677314, -1.6281939036752675 +10.97385037985066, -1.920028211477046 +11.121332651738928, -2.2321119614282665 +11.268801978068993, -2.5515591448883725 +11.416258358840846, -2.8783697618573854 +11.563653248211214, -3.2401566879936325 +11.71858640804605, -3.566700626463536 +11.85825207996837, -4.072341184522259 +12.005536932093968, -4.496717295484089 +12.14612407604153, -4.903477090836027 +12.253197866779054, -5.236268555697279 +12.428388056298846, -5.862634211383501 +12.520518924046073, -6.274960273126062 +12.627390979834846, -6.722498576834212 +12.73428083576616, -7.1599121594676305 +12.847863050842768, -7.617984587528831 +12.947931496595391, -8.108143552526236 +13.027860069964849, -8.572043747253872 +13.10781237685768, -9.022444313881877 +13.187729083465445, -9.493094322659331 +13.267758524309269, -9.899621097963518 +13.335623051074652, -10.527823728359508 +13.40925185733142, -11.066698123450621 +13.487097814024107, -11.439433108163641 +13.593908378411395, -11.921947721039018 +13.741889054290688, -11.950539280897914 +13.889915039623709, -11.953358823475682 +14.037947497735832, -11.952496649299015 +14.186031738080793, -11.92218074108677 +14.334086850919782, -11.908432558269539 +14.482119309031905, -11.907570384092864 +14.630151767144028, -11.90670820991619 +14.778177752477049, -11.909527752493965 +14.92620373781007, -11.912347295071733 +15.074229723143091, -11.915166837649508 +15.222255708476112, -11.917986380227276 +15.37022667518675, -11.952100515217843 +15.491307405791883, -11.972290037926442 +16.27185244050063, -11.961910659228103 +16.419920498897827, -11.940799042901979 +16.567952957009954, -11.939936868725304 +16.71597570595342, -11.944597269680301 +16.864008164065545, -11.94373509550362 +17.012034149398566, -11.946554638081395 +17.160089262237555, -11.932806455264164 +17.308131429518337, -11.926421705955825 +17.456157414851358, -11.929241248533593 +17.60419958213214, -11.922856499225247 +17.752219094686055, -11.929357758557458 +17.90026449835639, -11.921132150871898 +18.048280774520755, -11.929474268581338 +18.19630028707467, -11.935975527913556 +18.344329508797244, -11.936954212114102 +18.492355494130265, -11.939773754691878 +18.640381479463286, -11.942593297269646 +18.788407464796304, -11.945412839847421 +18.936472286803948, -11.926142081898519 +19.084566236317563, -11.89030359855461 +19.232592221650584, -11.893123141132378 +19.380650570879126, -11.877534099937925 +19.46143085409904, -11.856981731726393 +19.75741809697404, -11.899437984426399 +19.905382590905564, -11.937233836171409 +20.053411812628138, -11.938212520371955 +20.20145397990892, -11.93182777106361 +20.34947996524194, -11.934647313641385 +20.49750595057496, -11.937466856219153 +20.645531935907982, -11.940286398796928 +20.79356439402011, -11.93942422462026 +20.94168423465014, -11.88885887425856 +21.06963813198116, -11.82686389055474 +21.560786137625673, -11.8527873708669 +21.708660012649744, -11.94212725717415 +21.849066817779487, -12.026211246848831 +22.044907941552616, -12.047941660857305 +22.475687572882183, -11.96594190605417 +22.623758867668933, -11.942989431350831 +22.771872235519858, -11.89610579774358 +22.919966185033473, -11.860267314399671 +23.068014825093357, -11.850200848336883 +23.216001973751755, -11.875110691441328 +23.363969704072836, -11.91106568480911 +23.511995689405857, -11.913885227386885 +23.66001843834933, -11.918545628341874 +23.807982932280858, -11.956341480086891 +23.95597331732881, -11.979410464814116 +24.104005775440932, -11.978548290637434 +24.252047942721713, -11.972163541329095 +24.40008040083384, -11.97130136715242 +24.54810638616686, -11.974120909730196 +24.696132371499882, -11.976940452307964 +24.844151884053794, -11.983441711640182 +24.951824983924904, -11.975346141318077 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.163.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.163.csv new file mode 100644 index 00000000..63a64a55 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.163.csv @@ -0,0 +1,190 @@ +0.7366809501375533, -19.893074212457265 +0.7545205766265264, -18.908153618697085 +0.7359657080465434, -19.256102260930973 +0.7718472353714958, -17.983053154861743 +0.744260574468524, -18.36525496738134 +0.865846535734704, -15.121301613319595 +0.8362576444776826, -15.791867000717417 +0.8288059114738449, -16.203140006027517 +0.8146067377725279, -16.625084552791073 +0.8071840783348341, -17.01982051367913 +0.7999394203225023, -17.313309263819917 +0.9250002550930958, -14.431736749337126 +0.9426233686585119, -13.956194601812925 +1.0307795799094954, -13.161931541243732 +0.9679015652963354, -13.63098665724992 +1.075991941952049, -12.535039001338433 +1.1227272050782746, -11.953175736295307 +1.199029296074971, -11.527351572179619 +1.2623838870296176, -11.050103212383384 +1.3365745574825372, -10.602515974465199 +1.395646901621407, -10.171863597972823 +1.4882901015908407, -9.684336863284052 +1.5677723021551504, -9.224511531955521 +1.6203886758670265, -8.82099348931549 +1.7669473640407567, -8.058211855897959 +1.8126861585656746, -7.699328187467351 +1.9241893028669308, -7.21371344628686 +2.0429878991586827, -6.83097086543701 +2.156636617545602, -6.4007111600889885 +2.340153607767835, -5.584933990370253 +2.2560040253613636, -6.052522248294757 +2.4309226652008693, -5.211438178403995 +2.568036478538186, -4.796975278012006 +2.7028102577528292, -4.345403671418552 +2.837717538036496, -4.01488863537427 +2.92358898566078, -3.4905274084988136 +3.0701187418697398, -3.250895583337062 +3.2008760460649075, -3.070556541539702 +3.3246115118891417, -2.6332326716246612 +3.464894991473267, -2.2558985750837977 +3.627767032056621, -2.011024315514156 +3.7454825756841252, -1.573923991456418 +3.8994044967448485, -1.21419717141179 +3.9925970451913937, -0.7366452453885017 +4.15339061235473, -0.5429985086163569 +4.300610202415948, -0.23904113634080915 +4.426576060981512, -0.012457987045273455 +4.544950418204566, 0.19440087695240038 +4.693471398172868, 0.47313428292231663 +4.841727167164088, 0.601015685127372 +4.969448044447359, 0.8784027499686573 +5.111582876112866, 1.0040338442840167 +5.2690738821826795, 1.281887793764362 +5.408450262832243, 1.4622034102659214 +5.562174721069088, 1.5112813159894856 +5.69949220186961, 1.7962522741136766 +5.853377231690468, 1.9366632968240864 +6.001506781489155, 1.9927512223174517 +6.149879060504249, 2.186903526102533 +6.298160720611884, 2.3295117953253737 +6.44644561710907, 2.4739609229254356 +6.5947841452045495, 2.6489157036337616 +6.7428115175616625, 2.646885100360514 +6.890963722087216, 2.7158590344944358 +7.039106217444111, 2.7793103934966865 +7.187459078121892, 2.9624175470184397 +7.335498009013122, 2.966961437949557 +7.483634031590913, 3.026731080197365 +7.63174739944184, 3.0736147138046093 +7.779851058124109, 3.1149757722801894 +7.927935298469068, 3.145291680492427 +8.076006593255817, 3.1682441551957794 +8.224094069990329, 3.2004009217852385 +8.399007979722027, 3.1823418680846416 +8.546953055316246, 3.1335008660762895 +8.694979040649267, 3.1306813234985214 +8.843005025982288, 3.127861780920746 +8.990995411030237, 3.1047927961935287 +9.139001978025943, 3.090928103352411 +9.286982653905236, 3.0623365434935224 +9.434927729499455, 3.0134955414851774 +9.576132376573558, 2.9579715245073714 +9.918991278414461, 2.7852058007047518 +10.066878098996742, 2.703229347906401 +10.21469695539843, 2.5825948691863587 +10.362483447904598, 2.4435518066940958 +10.510392923213743, 2.3744613625362945 +10.658156760993046, 2.2225322914034678 +10.805844543617873, 2.0273430484058963 +10.95371680044717, 1.9370827329100422 +11.101571257133932, 1.8366976963394492 +11.24934480408189, 1.6902912003382937 +11.397063332407463, 1.5125901119243466 +11.544736551279307, 1.3091170062292719 +11.692364460697423, 1.0798718832530767 +11.840095934581203, 0.9095342283480221 +11.987879190697821, 0.7686503074785307 +12.133068374521894, 0.5030602056495894 +12.282963480887787, 0.21259456753332984 +12.430552553631276, -0.03874085596952881 +12.578138389985217, -0.29191713784962303 +12.72567244410632, -0.5745471537652804 +12.873190316279665, -0.8663814615670518 +13.020679060947039, -1.1747834947638296 +13.168141914497998, -1.4979123949783926 +13.315617713607168, -1.813677861684063 +13.46298994825067, -2.1883507964608597 +13.610326582609098, -2.583273173387113 +13.757663216967522, -2.978195550313373 +13.898273986558817, -3.371517079511584 +14.038824559304448, -3.799078574526149 +14.179395197665297, -4.215226747601925 +14.306450241738052, -4.664499497198825 +14.42682271674391, -5.087544804776826 +14.547187280575308, -5.515089988388048 +14.674192879807684, -5.992486963192519 +14.801274426314887, -6.426685128078155 +14.901366605590898, -6.903344464975909 +14.988097376286774, -7.3254275477059565 +15.08151761007301, -7.769816751911655 +15.17492767234923, -8.219991511017191 +15.261617757005023, -8.665216813346603 +15.354973571227795, -9.146247865251311 +15.448400586020718, -9.586780032857114 +15.495096293274639, -9.817170837734743 +15.601493678595773, -10.534701703435594 +15.656430851844071, -11.18037695374533 +15.712108079503274, -11.637065177995119 +15.841279938102396, -11.926095477888971 +15.989299450656311, -11.93259673722119 +16.137328672378885, -11.933575421421736 +16.285351421322353, -11.938235822376733 +16.433377406655374, -11.9410553649545 +16.581364555313773, -11.965965208058954 +16.729358176751273, -11.98719333440895 +16.87738416208429, -11.990012876986725 +17.02541014741731, -11.992832419564493 +17.17344907830854, -11.988288528633376 +17.321478300031114, -11.989267212833923 +17.469510758143237, -11.988405038657255 +17.617549689034465, -11.983861147726131 +17.765575674367486, -11.986680690303906 +17.913601659700507, -11.989500232881674 +18.06162764503353, -11.99231977545945 +18.209650393977, -11.99698017641444 +18.35767961569957, -11.997958860614993 +18.50570560103259, -12.000778403192761 +18.653731586365613, -12.003597945770537 +18.801757571698634, -12.006417488348305 +18.94978355703165, -12.00923703092608 +19.09789692488258, -11.962353397318829 +19.245942328552914, -11.954127789633262 +19.39400391417101, -11.93669789006158 +19.542039608672685, -11.933994857507685 +19.690052648447498, -11.944177833594345 +19.83808510655962, -11.943315659417678 +19.98612403745085, -11.938771768486554 +20.134169441121184, -11.930546160800986 +20.282195426454205, -11.933365703378755 +20.430221411787226, -11.93618524595653 +20.578247397120247, -11.939004788534298 +20.726273382453268, -11.941824331112073 +20.87429936778629, -11.944643873689849 +21.022325353119307, -11.947463416267617 +21.170351338452328, -11.950282958845392 +21.31837732378535, -11.95310250142316 +21.46640330911837, -11.955922044000936 +21.61442929445139, -11.958741586578704 +21.762471461732172, -11.952356837270365 +21.910549229298027, -11.92572264581257 +22.058614051305675, -11.906451887863668 +22.206640036638696, -11.909271430441436 +22.354666021971717, -11.912090973019211 +22.502692007304738, -11.91491051559698 +22.65071799263776, -11.917730058174755 +22.79874721436033, -11.918708742375301 +22.94677319969335, -11.921528284953077 +23.09482831253234, -11.907780102135838 +23.24285753425491, -11.908758786336392 +23.39088351958793, -11.91157832891416 +23.53890950492095, -11.914397871491936 +23.686935490253973, -11.917217414069704 +23.834961475586994, -11.920036956647479 +23.982987460920015, -11.922856499225247 +24.131013446253036, -11.925676041803023 +24.279039431586057, -11.92849558438079 +24.427065416919078, -11.931315126958566 +24.5750914022521, -11.934134669536334 +24.716467254333505, -11.892277278359053 +24.917663236339735, -11.922250647101095 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.209.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.209.csv new file mode 100644 index 00000000..126269ef --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure82-M0.209.csv @@ -0,0 +1,170 @@ +0.5845497844571383, -19.905722022826794 +0.6013432300434616, -19.283913203629908 +0.6321137431081176, -18.36649385730187 +0.6193697063954575, -18.888029212190197 +0.7212203576484288, -16.857307154155173 +0.7659813717766246, -16.448481987459374 +0.721262790311445, -16.137303686836546 +0.7960539034945491, -15.149365261534172 +0.8718875964547861, -14.661913952504314 +0.9300705814703072, -14.290508998753317 +1.028415767516977, -13.430829289763707 +0.9729518448501802, -13.928084616719374 +1.0907737242075513, -12.632211759459103 +1.0640767078750537, -13.126565558474603 +1.183036313009545, -11.82143306706687 +1.1519550391231066, -12.27773438094571 +1.266606943876475, -11.106761260260235 +1.356447823286386, -10.52526905190269 +1.4586921810660218, -10.032920771088392 +1.4954028559828387, -9.564010090524498 +1.567983926071972, -9.104139848067106 +1.6754408002189534, -8.630222280816653 +1.7590111001857975, -8.200330764570786 +1.847350240903718, -7.75664057783068 +1.9469066663169725, -7.311346735172201 +2.0295214845068266, -6.836122064867574 +2.1102323876257127, -6.376624007208676 +2.244426072909481, -5.977612960658867 +2.351995240402899, -5.481880880013776 +2.4837225433858388, -4.913832501758023 +2.6055769791475347, -4.4939385314146705 +2.7342420730826262, -4.027414919316115 +2.8922914058114815, -3.628255162444624 +3.0281036244770636, -3.45645366364986 +3.1668172533356884, -2.924106936829702 +3.2938350654436395, -2.4377390461897264 +3.458030517019999, -2.079863515759399 +3.5977709099548836, -1.6496151037791194 +3.732165828675445, -1.3867377164761763 +3.861515711816999, -0.9449130088579025 +4.005414979400726, -0.5115385328537485 +4.154091479033715, -0.14434554160971658 +4.308128758978974, 0.21024110943583452 +4.403278471566571, 0.5308781487407188 +4.556645262523773, 0.7227919620813807 +4.6807912239078195, 0.9151966155083429 +4.810001302726413, 1.1449543825895816 +4.977919062929246, 1.521511450895332 +5.126309373257557, 1.7259199656392283 +5.274591033365192, 1.8685282348620689 +5.410344326105205, 2.061137509018451 +5.57153948393716, 2.3728069201972772 +5.719879399056733, 2.548550640210131 +5.868193423059887, 2.709567493205192 +6.003091173974317, 2.8939536678779234 +6.4346651591395005, 3.427781884379435 +6.59219343315047, 3.530563442518037 +6.7197093726843455, 3.7219695097269323 +6.872891522480478, 3.91821008000025 +7.0817165222867935, 4.052415424377379 +7.229855781254136, 4.114025925002416 +7.378069477181176, 4.217976168303572 +7.526279936718666, 4.320085553227514 +7.674500105424812, 4.427717513283106 +7.822710564962302, 4.529826898207041 +7.970836878371438, 4.584073965323185 +8.119050574298479, 4.688024208624334 +8.267270743004623, 4.7956561686799475 +8.415348510570478, 4.822290360137735 +8.563423041746779, 4.847083693218316 +8.711575246272332, 4.916057627352231 +8.859840724432207, 5.049461604688965 +9.008012347295072, 5.129480689086215 +9.156142975890276, 5.186182234038654 +9.303993117390966, 5.083342719631766 +9.453727388995857, 5.031590347886095 +9.593152872866899, 4.984684361615017 +10.0033963179327, 4.867519551405962 +10.151409357707513, 4.857336575319302 +10.299412688313668, 4.84163102410097 +10.447403073361617, 4.818562039373738 +10.595380512851357, 4.788129621137628 +10.743351479561992, 4.754015486147061 +10.891264191260689, 4.686765900366495 +11.039199557686251, 4.632402323226472 +11.18715757883868, 4.590924754727027 +11.334957016903054, 4.459245125743642 +11.482801764421158, 4.353337514041392 +11.630646511939261, 4.247429902339135 +11.778471841120055, 4.130477140373543 +11.926319825027711, 4.026410387048507 +12.074193700051783, 3.937070500741264 +12.21515302879784, 3.7420094187699533 +12.853150592173186, 3.0441143757594986 +13.000995339691293, 2.9382067640572345 +13.14881743248253, 2.8194131437144208 +13.578519346091259, 2.2884070589023224 +13.819911933612225, 1.8106926590105843 +13.967523661082577, 1.5722432441482752 +14.115109497436517, 1.319066962268188 +14.262698570180007, 1.0677315387653152 +14.410232624301113, 0.7851015228496578 +14.557763442032666, 0.5006306485567862 +14.705278077816455, 0.20695548237778638 +14.852740931367418, -0.11617341783676949 +15.000207021307926, -0.4374614596741111 +15.147660165690226, -0.7661129350203382 +15.295093891735217, -1.1058095606299077 +15.442459653599613, -1.4841642121611542 +15.58982217907446, -1.8643597220696293 +15.737158813432888, -2.2592820989958824 +15.884482502233105, -2.661567909431035 +16.018408617084233, -3.0298483275645722 +16.152190173202037, -3.480353753214061 +16.28594871499413, -3.9439497273237976 +16.419726315524702, -4.396705090989897 +16.540188433384024, -4.768761543516256 +16.647105695884004, -5.19058626989176 +16.774097055002354, -5.676083021556018 +16.887718416265443, -6.111889098745749 +16.98120476486682, -6.518672196102457 +17.081355995409336, -6.9617431726094665 +17.181507225951854, -7.404814149116461 +17.27491728822807, -7.854988908222012 +17.388447614476476, -8.342575701765334 +17.50462674448041, -8.868977464620897 +17.628164507367032, -9.773425207437192 +17.71176386568622, -10.275645549017284 +17.781667003220427, -10.488478293296964 +18.02135401344745, -11.936325057985187 +18.16927967070436, -11.996211210256867 +18.31730889242693, -11.99718989445742 +18.465334877759947, -12.000009437035189 +18.613360863092968, -12.002828979612964 +18.76138684842599, -12.005648522190732 +18.90941283375901, -12.008468064768508 +19.05743881909203, -12.011287607346276 +19.205484222762365, -12.003061999660709 +19.35362348172971, -11.94145149903568 +19.501668885400044, -11.933225891350112 +19.64977901686142, -11.88818311612009 +19.797817947752648, -11.883639225188972 +19.94584393308567, -11.88645876776674 +20.09388326852559, -11.881684769538467 +20.24189590375171, -11.892097852922284 +20.389892761578764, -11.911485120895065 +20.53785725551029, -11.949280972640068 +20.618475719252597, -12.020771523289689 +21.587554315610923, -11.936138641946982 +21.7357453568111, -11.84507440728639 +21.883667777678454, -11.906801417935284 +22.018156305113965, -11.955181558071416 +22.448838485158127, -11.928612094404663 +22.596890361607567, -11.916704769964653 +22.744919583330137, -11.917683454165207 +22.89294556866316, -11.920502996742975 +23.04098773594394, -11.914118247434637 +23.18902990322472, -11.90773349812629 +23.337055888557742, -11.910553040704066 +23.485081873890763, -11.913372583281834 +23.633107859223784, -11.91619212585961 +23.781133844556805, -11.919011668437378 +23.929159829889826, -11.921831211015153 +24.077185815222848, -11.924650753592921 +24.22521180055587, -11.927470296170696 +24.37323778588889, -11.930289838748465 +24.521263771221907, -11.93310938132624 +24.669289756554928, -11.935928923904008 +24.81731574188795, -11.938748466481783 +24.938478769255983, -11.912127590455277 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure85-G1.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure85-G1.csv new file mode 100644 index 00000000..bd23e162 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure85-G1.csv @@ -0,0 +1,125 @@ +0.3402987009442946, -29.73243580474025 +0.35019525857233447, -29.152355185042815 +0.3589264881080276, -28.706499394427503 +0.367342878957542, -28.304722672206815 +0.37612264071832174, -27.893779059089844 +0.38604850350703596, -27.447197823905007 +0.3957555346958149, -27.03009539673387 +0.4053967579730522, -26.588661439570537 +0.4155638307676336, -26.17459499861191 +0.4254979145846255, -25.774128403895844 +0.4360302650469125, -25.33433715919974 +0.4468916126957555, -24.8962540414718 +0.45846703703400293, -24.480307974853424 +0.4708936836036186, -24.00954406645738 +0.4827955931589734, -23.59949926981639 +0.4940536415057475, -23.182015717427973 +0.507735747208707, -22.733220791423747 +0.5192115592297624, -22.339271146987848 +0.533527281021875, -21.90535801994576 +0.5458590632022026, -21.492543519435692 +0.5593707133410144, -21.08741644777586 +0.5717586674756521, -20.7019259763023 +0.5845021671391908, -20.318695779629852 +0.5901950901715672, -19.866038781045123 +0.5970087773325552, -19.431300745296515 +0.6029686962037756, -19.010968885472057 +0.6089881127478948, -18.58859333290623 +0.615067620928213, -18.1600867021163 +0.6212078206375461, -17.735667456809107 +0.6274093177574205, -17.317379289726013 +0.6336727242178568, -16.89704742990155 +0.6399986580577539, -16.478759262818453 +0.646387743485872, -16.062514788476733 +0.6528406109424271, -15.62992077220407 +0.6593578971612986, -15.19528306319004 +0.6659402452328593, -14.758601661434643 +0.672588304667432, -14.321920259679246 +0.6793027314593795, -13.889326243406579 +0.6860841881518349, -13.46081961261665 +0.6929333439020765, -13.02822559634399 +0.6998508745475587, -12.59358788732996 +0.7068374626725983, -12.160993871057293 +0.7134999374768176, -11.737048390885597 +0.7202252111179139, -11.314124757084588 +0.7278167371527753, -10.845394537339569 +0.7354882815855606, -10.393831336622032 +0.7428306367659459, -9.959193627608002 +0.7502462904351646, -9.526599611335339 +0.7577359743296059, -9.114442522476345 +0.7653004274905584, -8.694110662651891 +0.7729403963371357, -8.27377880282743 +0.7806566347399291, -7.849359557520234 +0.7884499040953948, -7.420852926730305 +0.7963209734009846, -6.984171524974908 +0.8042706193310266, -6.557708586926346 +0.8122996263133627, -6.131245648877783 +0.8204087866067523, -5.696607939863753 +0.8285989003790482, -5.276276080039292 +0.8362552224558768, -4.817064514062402 +0.8487095291634535, -4.38015228199737 +0.8674349463787812, -3.9675649198112186 +0.8833768330575315, -3.678331304589232 +0.9564414786646993, -3.2662113737800826 +0.9919198561748636, -3.2435821214256713 +1.028714273713436, -3.3095748179469098 +1.0668735486581538, -3.4625173511008587 +1.1064483092255704, -3.7325077412603846 +1.1399171252993654, -4.096646013136498 +1.1551153213912777, -4.470949665791103 +1.1653598601405184, -4.915025519465264 +1.1818752154105314, -5.410035769961773 +1.1920281222640952, -5.883471127768164 +1.2039280995686996, -6.2474063574433565 +1.2171553307876235, -6.686360902897903 +1.2274080879361353, -7.13388130779251 +1.2428122051775807, -7.5596048006492005 +1.2548036045312951, -7.995762273901807 +1.2673302673983562, -8.409257052555148 +1.2799819835263568, -8.80231490379482 +1.292760001317863, -9.191285369551753 +1.3056655816382028, -9.598649069980993 +1.316518593855397, -10.00564583466803 +1.3296613554189518, -10.38337599034745 +1.3447556446088529, -10.847102118630083 +1.356341799610321, -11.302076259422982 +1.3706383056544933, -11.698747731009888 +1.39044645752728, -12.13910777969975 +1.4029329474042662, -12.728906357443353 +1.4174076286038186, -13.229893480257118 +1.4319131144285957, -13.660061075875028 +1.445210570733138, -14.077085869263456 +1.459638060043905, -14.50488649710637 +1.474860567132898, -14.950496978239048 +1.4899540156358826, -15.364110662651889 +1.4979925099574656, -15.785984581544835 +1.5229993729140543, -16.31054012642279 +1.5382034252632395, -16.72735590578085 +1.5525307845123262, -17.168498131419906 +1.5734038929877407, -17.677663741004118 +1.5931502986648303, -18.192900975932687 +1.6085219705732579, -18.62946718773357 +1.624041957613948, -19.062354752599997 +1.6426098972476242, -19.51375445789822 +1.6693727709249893, -19.965476907400795 +1.7134045977445034, -20.444746538404047 +1.7626599828114025, -20.891308083720155 +1.8157598225537341, -21.40519580583851 +1.8720695957107614, -21.96128525649481 +1.927829076214447, -22.469751639011683 +1.9811589607836064, -22.939631104155417 +2.03201541048417, -23.36919939351229 +2.0914195573754966, -23.84454640027578 +2.1438904282113675, -24.287046099308256 +2.197823118265701, -24.688482441171274 +2.261684819630471, -25.17918229292436 +2.323842079730216, -25.621187776282916 +2.384685601462501, -26.083780724795524 +2.4523249208697875, -26.575314164128308 +2.5213767338969277, -27.01026096055694 +2.574755301290612, -27.431886206347095 +2.6431966583397535, -27.917334077714628 +2.7178956738650752, -28.373348281974074 +2.777792010893448, -28.791729344181768 +2.8462917733338724, -29.191451757075434 +2.9201200163188474, -29.536675616437293 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure86-St_1_prime.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure86-St_1_prime.csv new file mode 100644 index 00000000..001da2fa --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure86-St_1_prime.csv @@ -0,0 +1,160 @@ +10079.102972387203, 0.17754258781823296 +10334.465648836638, 0.17684922230294883 +10695.006458437525, 0.17811885771036892 +11141.59794800993, 0.1776942523055717 +11607.027310229661, 0.17761104265207697 +12091.899529051056, 0.1775278719635254 +12597.026810801206, 0.17744474022167067 +13123.255290932577, 0.17736164740827504 +13671.46645137898, 0.1772785935051093 +14242.604440360554, 0.17723335064851914 +14838.140707675655, 0.17794506235643798 +15457.989529929528, 0.17786173525503962 +16103.731930767086, 0.17777844717358254 +16776.51047110273, 0.17777096348167098 +17477.745065120806, 0.1781807499885073 +18208.092048053913, 0.1783632331465243 +18968.68287429436, 0.17824171507068826 +19761.009344534657, 0.17808231860675633 +20586.543545815985, 0.17803687063335694 +21446.604106737814, 0.17802937606295255 +22342.51502703457, 0.1779460094796114 +23275.851750181668, 0.17786268193469956 +24248.35369681323, 0.1779310283038416 +25261.12162093906, 0.17769614388704974 +26316.810045430677, 0.17795397412391406 +27416.26855137042, 0.17794648304308872 +28561.556367880534, 0.17786315527641927 +29754.579483481222, 0.17770409734767612 +30998.166656363086, 0.1780378182451854 +32293.084764535328, 0.17795444770858715 +33642.157854537894, 0.1779090323688216 +35047.58970417699, 0.1778636286193987 +36511.668501443906, 0.1777803396513274 +38036.90775917906, 0.1776970896853402 +39626.36570804572, 0.17787907750444135 +41281.86820861395, 0.17787158957643512 +43006.53396653412, 0.17786410196363778 +44803.252470747444, 0.1778566146660357 +46675.45738881217, 0.1780387658620579 +48625.367222014625, 0.1779933290036526 +50656.73631818578, 0.177947903741082 +52772.87195570614, 0.1778645753091362 +54977.60660456393, 0.17785708799160835 +57274.13844995037, 0.1777359147502106 +59666.81785791962, 0.17769055518173155 +62159.3408434806, 0.17760734725950497 +64858.30168580601, 0.17942008843856166 +69764.55416774347, 0.17927346822261503 +75710.0445173293, 0.17773655975646424 +78873.61630699722, 0.1778806698056361 +82168.48452114657, 0.17779737285761504 +85600.99263386948, 0.17771411491541494 +89461.08860586067, 0.1774757413792583 +96783.59191608094, 0.1775780876215486 +100511.94235567769, 0.1788196379742944 +105040.09058399795, 0.1777145878617564 +109423.2724015211, 0.17672502447612545 +114004.8721230136, 0.17857290292431804 +118754.91141258282, 0.1763130215611259 +123732.2947999874, 0.17901515544340632 +129339.37638250491, 0.17729183547888264 +133843.80588152786, 0.17660015152336428 +151903.0892155644, 0.1893372726030689 +158271.66536575573, 0.1925032528451019 +164908.1433888332, 0.1958473635337931 +171821.3362435729, 0.19903733625798126 +179286.85374397872, 0.20309344901472381 +192906.72152930935, 0.20876213561274037 +201626.39100363507, 0.211014526528509 +209422.3777717395, 0.21595355053590526 +215380.59598440392, 0.2197241151541342 +240706.7704303503, 0.2288240492860581 +250522.76280297333, 0.2316466224881271 +261582.7293135515, 0.23785966745110765 +272990.2472413338, 0.2401636809588331 +285320.7119613801, 0.24184724156273307 +296348.6323202384, 0.24710114920836568 +308763.60063393845, 0.25032433967966927 +346909.6754855274, 0.2623321881925166 +364384.11419177876, 0.27101905174382146 +379202.94939256867, 0.2766224183525455 +395689.79563156486, 0.2792220870507299 +428759.56053795875, 0.2778480114414054 +446681.71633849887, 0.27853301141840714 +465361.04023555765, 0.27978565533687744 +485113.0680031368, 0.27856924809627587 +505069.8802420563, 0.280614608322308 +526127.366187032, 0.27790797890692215 +548119.7463061935, 0.2786079722174479 +571024.1656983551, 0.27889330754476155 +594881.3802207796, 0.2789410155583325 +619727.4703133407, 0.27857278918217304 +645620.6654466204, 0.2786798349012369 +672594.4988514361, 0.27872750639777605 +700691.4765106272, 0.2785969854668744 +729962.1779438457, 0.2784665256555716 +760462.5335948471, 0.2786329130752412 +793368.9538260868, 0.2786790151683377 +825343.3636495619, 0.2791104261156628 +859811.246335832, 0.27859772689039713 +895729.0205975499, 0.2784672667319048 +933153.9975880783, 0.2785742719024049 +972139.1214776668, 0.2785625451489173 +1012754.7958394883, 0.27861019658165154 +1055065.4661978916, 0.27859846831589274 +1099139.794613259, 0.27846800781020986 +1145049.744471109, 0.27817945089292895 +1192842.6749908428, 0.27694511479432893 +1242734.1452790545, 0.2784328424498516 +1294695.1330369634, 0.2794913603410668 +1348809.1252379883, 0.2800759235511876 +1405159.4071707914, 0.2800641335847601 +1463866.5362711474, 0.2801120418820352 +1524973.8559606248, 0.2790276801196453 +1588669.5000091447, 0.27871874016423126 +1655037.6183539082, 0.2786476090042823 +1724165.8113478625, 0.27833908986429884 +1796213.9670854867, 0.27862414981674233 +1871269.4220215688, 0.2788500602314903 +1956362.208005146, 0.2810827793101456 +2024336.404754037, 0.2804897385062525 +2115748.2205900466, 0.2789931865589704 +2204131.5341436104, 0.27886254121687437 +2296206.974217101, 0.27873195705263587 +2392133.116317793, 0.2786608225196351 +2492107.357675029, 0.27912463593335457 +2596212.706250542, 0.27899392903689335 +2704666.953989106, 0.2788632833471143 +2817651.7719017686, 0.27873269883535523 +2935356.4201284423, 0.27860217547296845 +3057978.0649663806, 0.27847171323131914 +3185722.1091421554, 0.27834131208178614 +3318802.5358804194, 0.2782109719957615 +3457498.7296946486, 0.2786146453633359 +3601912.7519574184, 0.2783061627207557 +3752413.1796207204, 0.2784724543214576 +3909180.7582524894, 0.278460731854043 +4072490.3523457022, 0.2783896665397935 +4242676.241916249, 0.2787341824067155 +4419966.034237869, 0.2790196469917296 +4604639.214771775, 0.27912686442252366 +4796993.516460249, 0.2789961564825183 +4997383.231055648, 0.2788655097496834 +5206144.030076696, 0.27873492419535717 +5423625.607391685, 0.27860439979089147 +5650192.264988402, 0.2784739365076515 +5886351.691528197, 0.27905637175023346 +6132348.422650462, 0.2794612717601768 +6388428.547695005, 0.2788545128432606 +6655407.590419041, 0.27925911996373176 +6933430.736163084, 0.279128350091854 +7223068.027024353, 0.2789976414561481 +7524804.632561114, 0.2788669940279382 +7839145.989815594, 0.2787364077785626 +8166722.379166847, 0.2790218746426825 +8507879.222745104, 0.2788912158666939 +8863528.800301878, 0.2796532857466662 +9233777.296181368, 0.2794627592094103 +9619526.77041665, 0.279391438170095 +9854892.929329835, 0.278986875576402 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure87.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure87.csv new file mode 100644 index 00000000..4f0b3d49 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure87.csv @@ -0,0 +1,62 @@ +0.4748453697731536, 0.9627061541003156 +0.5779822991814649, 0.9543051005857622 +0.6811332818571723, 0.945520680842594 +0.7842842645328796, 0.9368171220632588 +0.8874422738422831, 0.9279696064744569 +0.9905897432011415, 0.9195386048133337 +1.093744239193696, 0.9109642351968639 +1.1969022485031005, 0.90236088019627 +1.3000356645945637, 0.8945944172788342 +1.403186647270271, 0.8863596369591554 +1.5063306033122803, 0.8784127140663858 +1.6094850993048357, 0.8702218287171615 +1.7126325686636932, 0.8623154903713036 +1.8157765247057025, 0.854584142478781 +1.9189204807477127, 0.8469221123022251 +2.0220468702054797, 0.8398355442810664 +2.1252013661980333, 0.8320043772849002 +2.228373428774833, 0.8237488739608809 +2.434629721007213, 0.8099234344101649 +2.5377771903660706, 0.802564932824281 +2.64092114640808, 0.7953692964576741 +2.7440861823511815, 0.7876674513554409 +2.847230138393191, 0.7806053828224685 +2.9503740944352, 0.7736066313808379 +3.0535145371603614, 0.766763186338921 +3.1566655198360687, 0.7597050980312346 +3.25980596256123, 0.7529846281237302 +3.3629674851874816, 0.7457832333889398 +3.4661149545463408, 0.7390074730238689 +3.569262423905198, 0.7322932733462335 +3.6724063799472075, 0.7257276785971976 +3.775567902573459, 0.7187869638888977 +3.8787118586154685, 0.7123424640040092 +3.9818593279743277, 0.7058705273636238 +4.085013823966883, 0.6992885363832485 +4.188168319959437, 0.6927679201218715 +4.291322815951992, 0.6863081062821207 +4.394480825261396, 0.6798264552468807 +4.497624781303407, 0.6737312674754176 +4.600772250662266, 0.6676101301066886 +4.703933773288518, 0.6612252400355282 +4.807084755964225, 0.6551386330901352 +4.910232225323083, 0.6491864177747723 +5.01338320799879, 0.6432106287092026 +5.1165412173081934, 0.6371360001287024 +5.219702739934445, 0.6310425585559236 +5.322860749243849, 0.6250828480184765 +5.426018758553252, 0.6191794223531173 +5.529173254545808, 0.6134057950161276 +5.632324237221515, 0.6077593681312603 +5.7354892731646165, 0.6018742170025633 +5.838657822424568, 0.5959741043889141 +5.941801778466577, 0.5906307199925823 +6.044980867677071, 0.5846290610922733 +6.148142390303325, 0.579037785407342 +6.251300399612728, 0.5735692198653138 +6.35446192223898, 0.5680837182950249 +6.457623444865233, 0.5626506789671917 +6.560763887590395, 0.5576733832162021 +6.663904330315554, 0.5527401174005152 +6.767048286357563, 0.5477843602681265 +6.828083383310347, 0.5432617567220622 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure88-G2-alpha0.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure88-G2-alpha0.csv new file mode 100644 index 00000000..9e5220a0 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure88-G2-alpha0.csv @@ -0,0 +1,140 @@ +15970.087021491256, 125.65629502572898 +16396.547639910805, 126.45956873315363 +16663.820931547085, 127.09783876500858 +17005.03852810282, 127.72203871600098 +17341.192619313628, 128.38205341827984 +17647.654247195725, 129.06892918402352 +18020.541555128948, 129.82103896103897 +18358.113273598938, 130.4565909090909 +18707.611951676798, 131.21653516295027 +19135.98468506806, 131.89701543739278 +19500.795730024103, 132.5800539083558 +19826.930470513198, 133.1970909090909 +20272.35143475466, 133.91831046312177 +20626.041725103332, 134.58759862778732 +21003.04903308872, 135.19644939965696 +21436.88299627237, 135.97542024013723 +21863.573874478523, 136.57531732418525 +22393.656648650096, 137.4035334476844 +22715.546886174052, 137.99984905660378 +23248.184726371517, 138.706295025729 +23590.727656088515, 139.2623190394511 +24109.23506947055, 139.97682332761576 +24527.11388989166, 140.50598627787306 +24994.53583258162, 141.20885077186963 +25430.575528368896, 141.88261578044597 +26039.405685208472, 142.57876500857634 +26410.419994309843, 143.1383704974271 +27000.37834738168, 143.75617495711833 +27441.73377902924, 144.32831560891938 +28085.090732189736, 145.04550600343052 +28499.10706185771, 145.5800411663808 +29121.164651262836, 146.2632075471698 +29652.912969397225, 146.9257804459691 +30304.85416360343, 147.6214819897084 +30868.48444456774, 148.24197255574614 +31532.875736115784, 148.86246312178386 +32288.12535346731, 149.52861749571184 +32983.4437077104, 150.1155317324185 +33693.279932430916, 150.74273756432245 +34500.52262690928, 151.38740308747856 +35326.8508923823, 152.0535574614065 +36172.84024156089, 152.73045626072042 +36952.298240470715, 153.27842195540308 +37836.6557781744, 153.99919382504288 +38834.7366264896, 154.72891938250427 +39670.9813005613, 155.3198627787307 +40525.23318198552, 155.91080617495712 +41397.97333862605, 156.49503430531732 +42288.47913317213, 157.15178730703258 +43261.2230477024, 157.73198627787306 +44128.28446868624, 158.403512864494 +45078.842473123426, 158.97296740994852 +46048.79677337267, 159.61226072041165 +47040.51206598289, 160.19514579759863 +48052.71862397673, 160.83175300171527 +49231.37210918093, 161.59863636363636 +50982.153920304554, 162.4828130360206 +52040.23681718862, 163.3140441768474 +54722.871941562036, 164.43134481299145 +53562.653733686995, 163.83865719186474 +56782.178576931576, 164.95867352773013 +58214.84228712814, 165.85835334476843 +59896.2819497384, 166.44481989708405 +61772.90790392892, 167.06965939720658 +63861.70102753887, 167.64909090909092 +66337.23754276041, 168.2340651801029 +69568.6337754064, 168.8969094027756 +74869.33179919011, 169.77495221759372 +78361.74768577679, 170.20821768283173 +82580.86336885499, 170.56962108217684 +87030.49526757504, 170.81625448308125 +91723.79205394055, 170.9359083112428 +96427.22796810175, 170.88688217442933 +101894.09412790278, 170.86020895056916 +107401.1762531668, 170.64043661312957 +113210.5397837129, 170.298568532668 +118768.25305849896, 169.88154373927958 +124246.1713657315, 169.36640823327616 +129856.67184817245, 168.75755746140652 +135848.22703886204, 168.19398676794904 +140420.13981432412, 167.70583490566037 +144608.61448306125, 167.08500857632933 +148083.5930942513, 166.67571183533448 +151732.9887533824, 166.17173241852487 +155803.8525083394, 165.59421955403087 +160369.52353046276, 164.9629845626072 +164675.80973955136, 164.31831903945113 +168285.55612067494, 163.78109777015436 +171980.941622675, 163.1310600343053 +178723.05594594585, 162.45819039451115 +180972.00246406803, 161.81062484685125 +183555.68571999366, 161.2695883361921 +189910.1945728008, 160.71669811320754 +193246.42109981686, 160.09656419052646 +196212.06682053095, 159.55495711835334 +200218.33735226264, 158.6551114922813 +205104.79568508425, 157.9992538593482 +209006.23291054805, 157.3827924528302 +212466.82307420982, 156.86168782161235 +217859.89725593693, 156.2116500857633 +223183.6597394358, 155.46567998039694 +228394.02440482198, 154.83968501481365 +235658.14717188114, 153.93204116638077 +245753.72428339624, 153.18623966942147 +254309.40225438538, 152.1795602682052 +261857.06146936875, 151.20244547904926 +266150.85801688535, 150.65517350573953 +275081.1287147119, 150.0909090909091 +287097.979164723, 148.54843287073132 +278338.31327016064, 149.33717137065335 +291695.1514020491, 147.99350771869638 +296442.4751567703, 147.3510806174957 +303198.8084809977, 146.64821612349914 +310116.58392555837, 145.87372212692966 +317434.32280787517, 145.1986140651801 +332501.45240755426, 143.79309269893355 +326358.6723717225, 144.4545626072041 +339343.37882631825, 142.81405264546774 +345867.46317324426, 142.31910806174957 +350782.796415798, 141.79979416809604 +357220.85936653183, 141.17175692232297 +365788.9911618066, 140.3821269296741 +373527.20224549633, 139.70463121783877 +386534.6121712455, 138.83750098957645 +398729.33657064004, 138.16459691252143 +405081.248905065, 137.40062607204118 +416292.6151880857, 136.28730703259004 +429304.7954470145, 135.43491595197256 +419116.2617714475, 135.9204116638079 +434601.9195733975, 134.5992384219554 +444147.95369097486, 133.93174099485418 +449934.0341793281, 133.33408233276157 +458338.85231423937, 132.76731389365352 +468189.881398289, 132.05280960548885 +477547.9404329647, 131.46052315608918 +485709.45239824185, 130.80108404802743 +495674.8131064486, 130.0865797598628 +503473.430902628, 129.5409164420485 +560113.7467128999, 126.14203259005146 +580189.1638947661, 125.1548885077187 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure88-G2-alpha6.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure88-G2-alpha6.csv new file mode 100644 index 00000000..515e0f68 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure88-G2-alpha6.csv @@ -0,0 +1,90 @@ +278136.5952401709, 126.0789090909091 +284259.5785734193, 126.69134133790736 +290240.16801799665, 127.30041595197255 +295537.3585829643, 127.988730703259 +302124.5707182007, 128.74979416809606 +306869.6315311644, 129.30223670668954 +312274.89571496873, 129.9563036020583 +318997.37257521634, 130.56470668953688 +325610.18660584814, 131.12699828473413 +332091.05174596055, 131.72913379073756 +351039.70295342687, 133.18227662560423 +339239.5078568106, 132.34290909090907 +358830.2276725649, 133.88089683901003 +365923.8659484874, 134.53835334476844 +373791.9433140259, 135.22107204116637 +381837.34722449636, 135.84021955403085 +399633.40411171527, 137.07996382348352 +412619.6275696948, 137.97433104631216 +421734.719621837, 138.7197255574614 +430816.1102476286, 139.3106689536878 +440089.8799690893, 139.9231012006861 +449565.70930296456, 140.51941680960547 +460333.20067694644, 141.1864665523156 +473591.4465779767, 142.01020583190393 +489185.90028998745, 142.771269296741 +506431.4793307743, 143.78684391080617 +518161.2906741104, 144.54186106346484 +529309.2918752816, 145.18786963979417 +540717.1247847106, 145.72374785591768 +553680.6680049187, 146.3214065180103 +569665.1162860442, 146.94816466552317 +586112.7880295335, 147.5659691252144 +610274.8732371066, 148.22121627943238 +627885.4875280559, 148.8843996569468 +672674.0210083671, 150.0315909090909 +700426.7537943105, 150.59231560891936 +734565.8318855292, 151.17349134570404 +775626.3040183682, 151.6597231070816 +817587.2004488849, 152.10397935232592 +858826.0844862629, 152.35727110228402 +906738.1497299948, 152.59122641509435 +954909.1834917029, 152.60445345392174 +1010573.9223329611, 152.60977333986767 +1056228.2462508758, 152.42375175424917 +1111630.6176123247, 152.13354532260195 +1164418.7860209316, 151.66588732022694 +1201586.0342989094, 151.37128644939966 +1263646.1963504057, 150.8206346483705 +1319427.880021468, 150.25319468267583 +1374412.1734328964, 149.62531732418523 +1428290.3345554192, 148.957628032345 +1505808.8197152764, 147.95012713147008 +1466542.5884435612, 148.51729845626073 +1542544.638508201, 147.46971698113208 +1583894.0643891508, 146.95935677530017 +1622493.9492979313, 146.4064665523156 +1666064.1031290889, 145.7573241852487 +1702592.4360411796, 145.20667238421956 +1739968.7120973393, 144.5754373927959 +1778121.4060141179, 144.0180703259005 +1817145.0876622517, 143.40429502572897 +1857009.2998606865, 142.81603773584905 +1902312.2351530998, 142.1892795883362 +1953491.6840746189, 141.39508747855916 +1996337.1446583874, 140.8216037735849 +2040164.6304977036, 140.1863396226415 +2084911.0678503597, 139.61285591766722 +2130679.259117927, 138.9829639794168 +2177405.0424608956, 138.417538593482 +2225161.5405725576, 137.8440548885077 +2274028.0027128016, 137.18864493996568 +2323925.7089198725, 136.58695711835333 +2374906.51544358, 136.00004288164666 +2421211.734545058, 135.41581475128646 +2474388.089463962, 134.75503259005146 +2534886.4537619473, 133.9706895368782 +2590497.518743428, 133.38108919382503 +2647397.814351189, 132.71359176672382 +2705469.8680035817, 132.1320497427101 +2758232.7468978856, 131.5343910806175 +2818762.7072689855, 130.9246449399657 +2887602.86679809, 130.22088507718695 +2950982.5223322655, 129.60039451114923 +3005550.2242730036, 128.9077628032345 +3066408.866060245, 128.16332761578045 +3137862.277539195, 127.46493996569467 +3203798.735299375, 126.72626072041166 +3271055.8447452015, 126.04667581475128 +3338133.889378112, 125.36306174957117 +3426018.2604732327, 124.71436706689536 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure89.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure89.csv new file mode 100644 index 00000000..7646f51c --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure89.csv @@ -0,0 +1,129 @@ +0.18260209914632308, -42.54347107438019 +0.18616533125398865, -41.90560802833531 +0.18966803110390612, -41.26813016528928 +0.19302431412942017, -40.62371900826449 +0.19701038444251395, -40.03795196280993 +0.20078256604580813, -39.350400309917376 +0.2051179159330765, -38.65273760330578 +0.20879797808875433, -38.012370867768595 +0.21338809227869507, -37.26415289256198 +0.21764640581718986, -36.55637913223143 +0.22181471594869479, -35.882308884297544 +0.22606234280202342, -35.2014979338843 +0.23039418891325625, -34.55776084710746 +0.23480530745364842, -33.86683884297523 +0.23987801088192973, -33.20287964876033 +0.24397715817046584, -32.61884592680046 +0.24856883805306312, -31.996293904958677 +0.25307409666807973, -31.382408500590316 +0.2581878156052667, -30.725671487603307 +0.26313495665475434, -30.078564049586774 +0.2682711064620116, -29.4564935064935 +0.2763336224627245, -28.820299586776827 +0.28001306522940667, -28.397240259740244 +0.28389537243043655, -27.548553719008268 +0.28884494820770945, -26.956655844155833 +0.2948803912400475, -26.267820247933884 +0.2995809812656732, -25.72407024793388 +0.3079866723309998, -24.75940082644628 +0.3151467354033214, -24.119783057851237 +0.32041785757043595, -23.495144628099155 +0.32655461901673877, -22.822871900826428 +0.33468233324383145, -22.191942148760333 +0.3424546803612577, -21.48012396694216 +0.3498658271728656, -20.92469008264463 +0.3582877877129371, -20.30005165289255 +0.36778311205652003, -19.58733471074379 +0.3757396653854319, -19.010330578512395 +0.384921476339251, -18.424852420306976 +0.3937360793634629, -17.792510330578494 +0.4014697489627558, -17.188414994096817 +0.41057967702584874, -16.62989964580872 +0.4181595612283354, -15.979710743801661 +0.42417151837936407, -15.613016528925613 +0.4490681053413197, -13.96058146399055 +0.47659816866009863, -12.494318181818187 +0.5057426180472182, -10.597933884297518 +0.5179053848200632, -9.907685950413224 +0.5291048467033939, -9.303719008264466 +0.5418324143425023, -8.629648760330582 +0.5558194973352744, -7.963282172373084 +0.573098986004455, -7.25454545454545 +0.5821342635336781, -6.6384100024307315 +0.6161169110233358, -5.349173553719012 +0.6440469431349443, -4.458502066115699 +0.672924551050595, -3.587603305785123 +0.6974481609997447, -2.9910511363636374 +0.7333155869214467, -2.259684917355372 +0.7608464490665636, -1.7579840613931594 +0.783418484384122, -1.3467599549211116 +0.9094666608244443, -0.20009391435011992 +0.9356765754918469, 0.0531243082201911 +0.9775583962238239, 0.13347107438016792 +1.0352052712981252, 0.0646318557475638 +1.0934648912503517, -0.047080135773313714 +1.1476892514502937, -0.24151069518715929 +1.213129236394918, -0.589829075882804 +1.2729550445009485, -1.014152892561981 +1.3357822610236294, -1.55191115702479 +1.3923684423469778, -2.1855371900826412 +1.4568867718584326, -2.7209415584415524 +1.5106088961627993, -3.3584194214875964 +1.571418915314829, -4.160563016528926 +1.6359887005254414, -4.969447314049589 +1.6881616114159044, -5.551394628099175 +1.737861201376662, -6.198502066115708 +1.789040212727976, -6.872572314049592 +1.8197525656198084, -7.5342846074380105 +1.8564005191836896, -8.150309917355372 +1.8998775149153742, -8.800413223140495 +1.956879710792087, -9.48755634861007 +2.0586689578233353, -11.130449380165288 +2.0705607530306858, -10.419979338842978 +2.1236084003829925, -12.038518299881943 +2.171403853240218, -12.751962809917345 +2.2305895511919576, -13.429028925619832 +2.2812296568631028, -14.17387654958678 +2.3319752136554017, -14.777169421487585 +2.392916313633422, -15.370351239669404 +2.4540553824151687, -16.176539256198325 +2.507770489916143, -16.812861570247918 +2.5618744331773127, -17.41952479338842 +2.637579537706853, -17.978553719008232 +2.6803388980690737, -18.70025826446279 +2.7539811869404254, -19.374328512396673 +2.8397040341292827, -19.94988080101716 +2.9082469849544283, -20.60972890745616 +2.958318291464275, -21.182762691853583 +3.0170745101997323, -21.89535123966941 +3.0755196656106136, -22.53860684769775 +3.15169845598287, -23.25547520661155 +3.2161325909169145, -23.968117252066094 +3.279168782183906, -24.598372933884278 +3.3422711528371702, -25.207925029515934 +3.4090300099586273, -25.90943956611568 +3.513710552248368, -26.645299586776844 +3.62202937451813, -27.728305785123936 +3.699332423153728, -28.677995867768573 +3.7749372690367515, -29.370790289256178 +3.8767414368827966, -30.005764462809907 +3.962075097379827, -30.525697314049566 +4.000016863714242, -31.34003837072018 +4.100947102676588, -32.04107142857141 +4.175272529368018, -32.950103305785106 +4.324659414853411, -34.01064049586773 +4.475619657751913, -34.70807851239667 +4.526401367915814, -35.430681818181796 +4.6144774668533275, -36.258825265643424 +4.6888643286168605, -36.917488193624536 +4.785251367022955, -37.617665289256195 +4.883113719157373, -38.34940599173552 +5.01249309164478, -39.04100206611568 +5.15045005965451, -39.43386606708796 +5.235081070343995, -39.95144628099172 +5.250221826362573, -40.83479929161746 +5.372328015785741, -41.57820247933881 +5.482355761644609, -42.39607438016526 +5.594380539157113, -43.07800878099172 +5.704043346964392, -43.71500516528923 +5.813770811471624, -44.30529811097989 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure91-tip.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure91-tip.csv new file mode 100644 index 00000000..b4f764fe --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure91-tip.csv @@ -0,0 +1,13 @@ +1.2401721540542965, 42.47045219036755 +1.584306020291701, 45.91662036133181 +1.9820989414369934, 48.61985072161235 +2.4801140830728974, 50.7319747097782 +3.147569623346996, 52.255695556189664 +3.995481645521921, 52.89275684442913 +5.0014471518503765, 53.23156171625095 +6.2615564489090785, 52.97926021595811 +7.951632683313081, 51.84300238785352 +10.0282864505485, 50.26206316548277 +12.471821918208114, 48.38286752669444 +16.070391849980226, 45.03266403352012 +20.13392559438178, 41.67705407962518 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure95-0Psi.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure95-0Psi.csv new file mode 100644 index 00000000..964beeff --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure95-0Psi.csv @@ -0,0 +1,152 @@ +0.20551596271370642, 0.1158908937909841 +0.2102323697917107, 0.11686102112823273 +0.21505701418340936, 0.11781779080457164 +0.21999237983810577, 0.11877156802435197 +0.22504100770951263, 0.1197658096015731 +0.23020549706395224, 0.12065835150216189 +0.23548850681857847, 0.12159078710201958 +0.24089275691030979, 0.12260862847563084 +0.24642102969617827, 0.12347733129267302 +0.2520761713858152, 0.12443155168470818 +0.2573297508350023, 0.12540767429233743 +0.27602466922359564, 0.12812407189225833 +0.2823591878976681, 0.12907890284959353 +0.2888390780957606, 0.13006455652910465 +0.29546767596400886, 0.13096221094004076 +0.30224839421011124, 0.13191414437009547 +0.3091847238603477, 0.13286088720659758 +0.3162802360569216, 0.13374126680509116 +0.3235385838965477, 0.13468884624279337 +0.33096350431123517, 0.13556898168447354 +0.3385588199922321, 0.1364921845149513 +0.34632844135812335, 0.13738410402020423 +0.3542763685680943, 0.1382944559294808 +0.36240669358139677, 0.13921084012760646 +0.37072360226407897, 0.14013329658649581 +0.379074960467678, 0.1413064839831905 +0.38793439661567186, 0.1421260673182081 +0.3968371431947698, 0.1428333184940195 +0.4059441998256266, 0.14374047022546568 +0.4152602552407453, 0.14465338338759579 +0.42479010577483556, 0.14554556105700828 +0.43453865783418855, 0.1465634169827126 +0.46084969481404253, 0.1494039434798627 +0.47976416367281927, 0.1507313105775924 +0.49077432107101326, 0.1512468535845744 +0.502037151709753, 0.15219356859401795 +0.5135584542133618, 0.1529788014532757 +0.5253441602793911, 0.15386622182550755 +0.5369571216783292, 0.15478163603043385 +0.5497331936486186, 0.15594053679353037 +0.5623490775502992, 0.15643111786287572 +0.5752544846760811, 0.15726687921362606 +0.5892969896869593, 0.15754975192664733 +0.6403872573510969, 0.16100088501259693 +0.6550835707340232, 0.1619643623288992 +0.6701171513323259, 0.16274066505998575 +0.6854957391262024, 0.16352068864621364 +0.7012272517214573, 0.16425953115931965 +0.717319788425848, 0.165046834741493 +0.7337816344189843, 0.16568683010248536 +0.7506212650179189, 0.16642029114715354 +0.7678473500406316, 0.16706561230387842 +0.7854687582696526, 0.16774401059973815 +0.8034945620181178, 0.16839446468924688 +0.8219340418006167, 0.1690320341255187 +0.8407966911112268, 0.1696874827311758 +0.860092221311203, 0.17023682629198353 +0.8798305666288342, 0.17091252354602263 +0.9000218892740408, 0.17140333236596883 +0.9206765846703501, 0.1719895794372381 +0.941805286806938, 0.17259356172053425 +0.9634188737134982, 0.17318387970724963 +0.9855284730607516, 0.17366538195996162 +1.008145467889487, 0.17433879710902173 +1.0312815024710713, 0.17483944514524868 +1.0549484883024596, 0.17545343540927855 +1.0791586102387818, 0.1759572843479173 +1.10392433276667, 0.1765591072016131 +1.2727729125720022, 0.1799156997211124 +1.3019819097432292, 0.18041591841849 +1.3318612272106551, 0.18098349780486767 +1.3624262482240652, 0.1815197710157586 +1.393692709065037, 0.18200785989433046 +1.4256767071486998, 0.18254716839823698 +1.4583947093114267, 0.1830046573955818 +1.4918635602887218, 0.18354691951571905 +1.5261004913876652, 0.18395660774355116 +1.5611231293583874, 0.18450169059306928 +1.5969495054691274, 0.18499779756120988 +1.6335980647895645, 0.18542762401325807 +1.6734757356668029, 0.18538416726379392 +1.7109074636677124, 0.1860269385431972 +1.7486677006817835, 0.18691040332258768 +1.7887980565513275, 0.1874471531908074 +1.8718427704562806, 0.18826771447787954 +1.9147998837379834, 0.18856759430624787 +1.958742824254016, 0.18912633999574505 +2.0036942158555093, 0.1895830372562274 +2.049677201590694, 0.18995425202494604 +2.0967154556200067, 0.1904997429014822 +2.144833195404643, 0.19078578828929116 +2.194055194174816, 0.19121163412590897 +2.244406793684161, 0.19167336689924777 +2.2959139172568395, 0.19196117454524392 +2.3486030831340563, 0.19242471728887106 +2.4025014181268802, 0.19299489204097212 +2.4576366715823688, 0.19347856450999606 +2.5140372296702145, 0.19369845237362243 +2.5717321299972538, 0.19395394224320028 +2.630751076557363, 0.19420976910604087 +2.691124455024451, 0.19467874169606528 +2.7528833483963924, 0.19497106207045767 +2.816059552997997, 0.19529941872408796 +2.880685594851219, 0.19566399216891445 +2.9467947464210535, 0.19604711380601209 +3.0144210437457386, 0.19641308300395177 +3.083599303960069, 0.19660046491981778 +3.154365143220867, 0.1969674670810048 +3.2267549950438204, 0.19731716932082766 +3.300806129061134, 0.197577432308154 +3.376556670209661, 0.19782000773255756 +3.454045618359367, 0.19804482963462738 +3.5333128683922683, 0.19830605241195928 +3.6143992307421504, 0.19849524025759802 +3.69734645240567, 0.1988295320861411 +3.7821972384356206, 0.19914623517101104 +3.8689952739274704, 0.1994089107114052 +3.957785246510459, 0.19949002741898117 +4.04861286935485, 0.19969854521742914 +4.141524904707181, 0.19992550207225362 +4.2365691879656175, 0.2002074522712224 +4.333794652307825, 0.2002523870346442 +4.43325135388402, 0.2004251634154217 +4.534990497588188, 0.20063465866874175 +4.639064463420723, 0.2008809875986608 +4.745526833456062, 0.2010176600399694 +4.854432419429208, 0.20111776092797232 +4.965837290955338, 0.2011079033805349 +5.079798804397022, 0.2013548133360068 +5.196375632393934, 0.20141836277508857 +5.315627794070217, 0.20170241832013788 +5.437616685935096, 0.2017660774665637 +5.56240511349264, 0.2017561881426635 +5.69005732357692, 0.2019670746552329 +5.820639037429254, 0.20214133045668367 +5.954217484534514, 0.2021314227402053 +6.090861437233972, 0.20219521728438897 +6.23064124613247, 0.20231434338126694 +6.373628876318165, 0.20235975101746395 +6.519897944413451, 0.20234983259536204 +6.669523756476204, 0.20246904978597988 +6.822583346770813, 0.20245912600672905 +6.979155517428957, 0.20246765550663343 +7.139320879020595, 0.20245773179572157 +7.303161892055981, 0.20242935758729452 +7.470762909440149, 0.20247479103739646 +8.61343878846522, 0.20156568856333384 +8.811109485823483, 0.2014639773639627 +9.013316548453936, 0.20112387122059866 +9.220164081872248, 0.20093079430401845 +9.43175858072235, 0.20092094592052737 +9.559067083514492, 0.20091512664808536 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure95-14Psi.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure95-14Psi.csv new file mode 100644 index 00000000..f4255c16 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure95-14Psi.csv @@ -0,0 +1,153 @@ +0.2072186509383286, 0.08160700226831218 +0.2117388271287582, 0.08208139097848936 +0.21683874948434348, 0.08309972751560439 +0.22220752710378625, 0.08402944256563669 +0.23558567543194325, 0.08552116892369319 +0.24089275691030979, 0.08635433996387698 +0.24642102969617827, 0.0870454752779608 +0.2520761713858152, 0.08773414530892638 +0.2578610935068109, 0.0883799190212897 +0.2642455560211751, 0.08936377297479899 +0.2693132822615688, 0.09011182959116786 +0.27602466922359564, 0.09075029043187537 +0.2823591878976681, 0.09122682504082305 +0.2888390780957606, 0.09191506029694801 +0.29546767596400886, 0.09260004746384558 +0.30224839421011124, 0.09329013942442221 +0.3091847238603477, 0.09398537422160741 +0.3162802360569216, 0.09465990370595623 +0.3235385838965477, 0.0953479642249155 +0.33096350431123517, 0.09605853474157373 +0.3385588199922321, 0.09672149296570406 +0.34632844135812335, 0.09752226354040558 +0.3542763685680943, 0.09818637437620611 +0.36240669358139677, 0.09872894810685848 +0.37072360226407897, 0.09943752204198794 +0.3792313765440615, 0.10010555108085648 +0.38793439661567186, 0.10077806799097933 +0.3968371431947698, 0.10138115400806852 +0.4059441998256266, 0.10200644184847045 +0.4152602552407453, 0.102654297134038 +0.42479010577483556, 0.10331568316266299 +0.43453865783418855, 0.103962377660055 +0.4445109304227203, 0.10459405218137706 +0.47582200504770344, 0.10664819490102724 +0.48674169344000323, 0.1071300679960542 +0.4979119788902783, 0.1075160796478116 +0.5102399354712656, 0.10764907286099941 +0.6465129641574365, 0.11434903167743737 +0.6618747453395678, 0.11521978826996852 +0.6770641773060784, 0.11576149067938693 +0.6926021931173268, 0.11631634089505705 +0.7084967924600082, 0.11684189798715157 +0.7247561586064551, 0.11749827007704873 +0.7615380500075445, 0.11883186805132014 +0.7790146654577448, 0.11911882008876909 +0.7968923535629373, 0.11956982374327466 +0.815180318580951, 0.12003347475863779 +0.8338879759990798, 0.1205758271354639 +0.8530249573816086, 0.1209992578085424 +0.8726011153285873, 0.12145738111284853 +0.8926265285484027, 0.12193946492919022 +0.9131115070467626, 0.12238999243943915 +0.9340665974347621, 0.12280860025545924 +0.9555025883587647, 0.12326233894409772 +0.9774305160548945, 0.12369520394186952 +0.9998616700309998, 0.12408434281922923 +1.0228075988790117, 0.12446336135042727 +1.046280116220691, 0.12490044402381431 +1.0702913067898276, 0.12530479473703227 +1.094853532654015, 0.12566463202199238 +1.1199794395792146, 0.12599104810192108 +1.1456819635403777, 0.12638740958929762 +1.171974337381484, 0.1267734628918827 +1.1988700976284166, 0.12713751774539203 +1.2263830914581908, 0.1274909975340542 +1.2545274838281193, 0.12789207778674674 +1.283317764768584, 0.12827103551512575 +1.3127687568431743, 0.12855734450555192 +1.342895622780022, 0.12895002592515864 +1.373713873278275, 0.12928497587322213 +1.40523937499372, 0.12963261050573097 +1.4374883587076674, 0.130028576350518 +1.4704774276833077, 0.13030693109644886 +1.504223566213833, 0.13068113299666853 +1.5387441483667375, 0.1309966983242567 +1.5740569469287857, 0.13130105787238652 +1.6101801425562627, 0.13152218594915477 +1.6471323331352177, 0.13163566238564944 +1.7414685961451184, 0.1326918396820178 +1.7814337390202866, 0.13290319618687624 +1.8223160460915635, 0.13326055985928767 +1.864136565454918, 0.1335093228186697 +1.9069168282412488, 0.13378293485165857 +1.9506788597016032, 0.1340571076211039 +1.9954451905467951, 0.13433184227617082 +2.041238868547248, 0.13461940910860626 +2.088083470399051, 0.1348461257209034 +2.136003113862332, 0.13506091365280917 +2.1850224701781875, 0.13536237807678206 +2.23516677677058, 0.1356027047028118 +2.2864618502397205, 0.13584345801229672 +2.3389340996536494, 0.1361342607904449 +2.39261054014484, 0.1363883882053626 +2.4475188068188323, 0.13654339323851383 +2.503687168982065, 0.13682322325057913 +2.5611445446962087, 0.137016181800735 +2.619920515666524, 0.13723442627879667 +2.6800453424718813, 0.13746554692048193 +2.7415499801443097, 0.13772215950188732 +2.804466094106063, 0.13784098523287586 +2.8688260764724482, 0.1380605434885672 +2.9346630627287738, 0.13830566052238308 +3.0020109487900264, 0.13855121274469484 +3.070904408452054, 0.13879720092814993 +3.1413789112432275, 0.1388536616546033 +3.2134707406857914, 0.13908750929948482 +3.2872170129762956, 0.13929635651329716 +3.3626556960947194, 0.13946737742598111 +3.4398256293521454, 0.13957498697059087 +3.5187665433870188, 0.13972087831853472 +3.5995190806203143, 0.13991792336298212 +3.6821248161801283, 0.13994932668345522 +3.766626279306469, 0.14010837871352544 +3.853066975247277, 0.14022926325802046 +3.9414914076569194, 0.1404526256519108 +4.0319451015087315, 0.14048414898150735 +4.124474626533369, 0.14059254304165097 +4.2191276211950495, 0.14071384531979483 +4.315952817218037, 0.1409508257561632 +4.415000064675969, 0.1410081625465537 +4.516320357656978, 0.1410912394474701 +4.619965860517798, 0.14118723302243735 +4.725989934740384, 0.141257540115841 +4.834447166404851, 0.1414825403874125 +4.94964558715206, 0.14128956842667617 +5.047236548091029, 0.1417865196407708 +5.4264120573543195, 0.14187331737604328 +5.550943348732041, 0.14204750214892944 +5.678332521591724, 0.142040539859849 +5.808645161750993, 0.14209831993043176 +5.941948360163184, 0.14229871782445852 +6.078310747458853, 0.1423047127969945 +6.2178025292800045, 0.14240153197704825 +6.36049552242517, 0.14256337093178137 +6.50646319182402, 0.142569377054018 +6.655780688360489, 0.1425883788571146 +6.808524887563917, 0.14275043016281994 +6.964774429188126, 0.14283453354469686 +7.124609757698767, 0.1428275326802102 +7.288113163689856, 0.1428205321588626 +7.455368826250756, 0.1429046768422959 +7.626462856305465, 0.14298887110072833 +7.80148334094647, 0.14303399970929168 +7.980520388786055, 0.1430139536656859 +8.163666176348364, 0.14301997877074377 +8.35101499552612, 0.14299993469215572 +8.542663302126453, 0.14297989342272133 +8.738709765530775, 0.1429077449506791 +8.939255319494332, 0.14295284795508006 +9.144403214111565, 0.14294584129155355 +9.354259068973997, 0.14303005980258815 +9.568930927548084, 0.14306216161411675 +9.788529312800959, 0.14302907484286959 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure96-0Psi.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure96-0Psi.csv new file mode 100644 index 00000000..f969fd7d --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure96-0Psi.csv @@ -0,0 +1,124 @@ +0.1125329277799472, 139.93476310435227 +0.11638431969510715, 140.32399723114196 +0.12036067019933908, 140.5800843192481 +0.1244736728204126, 140.85115044920613 +0.12872640165003224, 141.1072375373123 +0.13312476900360856, 141.36931624215921 +0.13767412680227287, 141.64337818048767 +0.14237931753759764, 141.92343173555685 +0.14724210726341266, 142.15255654832956 +0.15227312552662703, 142.4146352531765 +0.15747584357385797, 142.673718149653 +0.16285527972771474, 142.91782200427767 +0.16841847951589575, 143.16192585890226 +0.17417305924892978, 143.42400456374918 +0.18012564804506734, 143.7040581188184 +0.1862811969170514, 143.9781200571468 +0.1926471032940694, 144.25218199547524 +0.19923055585756044, 144.5262439338037 +0.2060395168975742, 144.80629748887284 +0.21307981798897058, 145.07137200209016 +0.22036181309050087, 145.34842974878896 +0.2278917942018575, 145.61650007037665 +0.23567908221563175, 145.8845703919643 +0.2437312205093476, 146.14065748007044 +0.25206072618750125, 146.41771522676927 +0.2606725546391209, 146.67380231487542 +0.2695789575237298, 146.93288521135196 +0.2787925230467558, 147.21593457479153 +0.2883180311498568, 147.47501747126805 +0.2981743455705046, 147.7760416849299 +0.3069600685694588, 148.05668141128356 +0.32480585428477154, 148.50905889959768 +0.3358914509026416, 148.68425916170358 +0.34736607873322656, 148.9313588246986 +0.3592368417107278, 149.205420763027 +0.37151184393771874, 149.47049527624432 +0.3842067711043753, 149.738565597832 +0.3973380417809778, 150.02161496127152 +0.4109144227634486, 150.28369366611847 +0.4249535972538959, 150.5397807542246 +0.43947411894598815, 150.8048552674419 +0.4544908019873971, 151.06992978065918 +0.470021804404815, 151.34099591061727 +0.48608166884182175, 151.60307461546418 +0.5026889841061163, 151.8591617035703 +0.5198650318193573, 152.1212404084172 +0.5376265789661104, 152.37732749652338 +0.5559970986006543, 152.64240200974064 +0.5749953327211382, 152.90747652295795 +0.5946404445986345, 153.1635636110641 +0.6576996360788591, 153.94680391723446 +0.6801721403259127, 154.20888262208138 +0.7034151963117963, 154.4799487520394 +0.7274487933361637, 154.73903164851592 +0.7523093296351117, 155.01608939521478 +0.7780154867560815, 155.28116390843206 +0.8045969221347244, 155.53725099653823 +0.8320929268969612, 155.81131293486663 +0.8605230577737528, 156.07039583134315 +0.8899245613368684, 156.32947872781972 +0.9203318055972288, 156.5915574326666 +0.9517950865820364, 156.89557745469884 +1.0463125575005403, 157.61918385377916 +1.0820189587241795, 157.7853966907739 +1.1189797141930589, 158.02650473702812 +1.157207462245976, 158.27660020839355 +1.197819397043265, 158.59870930341546 +1.2376388219007906, 158.80195594143552 +1.2917113638206588, 159.14030395008783 +1.3358487072847118, 159.4053784633051 +1.3814853592911516, 159.6554739346705 +1.4286829284312303, 159.90856521440628 +1.4774948654493565, 160.16465230251245 +1.5279744959409944, 160.4207393906186 +1.5801767733168877, 160.67383067035433 +1.632206744700665, 160.9740125935686 +1.687986053819805, 161.24927285524518 +1.7477861352847404, 161.50799971882117 +1.807454139377084, 161.70417063951973 +1.8692094506833803, 161.96325353599624 +1.9330772332011723, 162.22533224084316 +1.999119588086452, 162.47842352057893 +2.0674235355068507, 162.73750641705547 +2.138061224870956, 162.99658931353198 +2.2167114084196506, 163.06803809289374 +2.2866624313979313, 163.51775091485544 +2.3647878295264517, 163.77383800296158 +2.445591835417286, 164.0389125161789 +2.5291601273482334, 164.30698283776655 +2.61558738149753, 164.5780489677246 +2.7049126068318006, 164.80118216375658 +2.7674928533582683, 164.8974874596031 +2.9105632205834784, 165.310377852118 +3.0101276391869494, 165.66203122723925 +3.112978701351275, 165.9241099320862 +3.2193357644093323, 166.18019702019234 +3.329343651697685, 166.44826734178 +3.443097383633086, 166.7073502382565 +3.5607286170928707, 166.9604415179923 +3.682402235826278, 167.22851183957997 +3.808218925430821, 167.4875947360565 +3.938329349962511, 167.74368182416265 +4.072911177333688, 168.0147479541207 +4.2120757879091, 168.2768266589676 +4.355989841306703, 168.53590955544416 +4.504809465290305, 168.78900083517993 +4.658725354409579, 169.04808373165645 +4.817906262486399, 169.31016243650333 +4.9821750380072, 169.40747168097937 +5.097234167103203, 169.4086600610663 +5.442003496433254, 169.40937052311563 +5.576285884609125, 169.46216603251224 +5.980655982419762, 169.4439409970085 +6.137346664267959, 169.41378190974524 +6.592569721362353, 169.44541644866842 +6.7550746341433445, 169.44009327567971 +7.222964470204694, 169.44118254390514 +7.412253761427326, 169.42700110128393 +7.961904003818676, 169.41869152860204 +8.15813333993587, 169.40498009217626 +8.749742209490831, 169.39035002671696 +8.979140926058093, 169.40163295524397 +9.615956639761682, 169.4638660094248 +9.900375069051924, 169.49204530327026 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure96-14Psi.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure96-14Psi.csv new file mode 100644 index 00000000..260f5ab2 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure96-14Psi.csv @@ -0,0 +1,108 @@ +0.12217984676706929, 125.83073180075561 +0.12635452921291473, 126.09281050560253 +0.1306708491463444, 126.33691436022713 +0.1351344431187676, 126.57802240648138 +0.1397515835602277, 126.8371053029579 +0.14452573725118695, 127.08420496595295 +0.14946279272895102, 127.32830882057755 +0.15456909403446292, 127.58140010031335 +0.15985046326687072, 127.84347880516023 +0.16531122914705254, 128.09057846815526 +0.17095963929555286, 128.35265717300217 +0.17679946065182697, 128.59376521925643 +0.18283853059430522, 128.83187745714028 +0.18908533501973204, 129.08796454524645 +0.19554531529599636, 129.3410558249822 +0.20222625577933984, 129.5971429130884 +0.20913545519936208, 129.8532300011945 +0.2162798809004146, 130.10032966418953 +0.22366837243214704, 130.34742932718456 +0.23130867480664008, 130.58853737343878 +0.23921118864687957, 130.84162865317458 +0.24738463767728952, 131.10370735802147 +0.25583670434180505, 131.3597944461276 +0.3017042560500024, 132.5864464661503 +0.31201298940412103, 132.84852517099722 +0.3226714746522804, 133.09262902562185 +0.33369405790803336, 133.33673288024647 +0.3450958296624816, 133.59881158509342 +0.3568876382572226, 133.8638860983107 +0.3690800047009126, 134.11398156967607 +0.3816879214194061, 134.35808542430073 +0.3947280466295416, 134.61117670403647 +0.4082131564349999, 134.86127217540187 +0.4221589585779245, 135.11136764676726 +0.4375201227954081, 135.45700083369255 +0.6513400825909186, 138.34477505445386 +0.6735935654709304, 138.60086214256 +0.6966055689811614, 138.85095761392537 +0.716021432999465, 139.06966537140715 +0.7611355103478388, 139.58083789006398 +0.7871119931729718, 139.7530423437995 +0.8140042169634241, 140.00912943190568 +0.8418141536030425, 140.26222071164142 +0.870573083691889, 140.51231618300685 +0.900313352781335, 140.75941584600181 +0.9310731790506921, 141.01550293410796 +0.9628901041268354, 141.28656906406604 +0.9957866324600371, 141.53966034380178 +1.0298044110472697, 141.78676000679684 +1.0649829308409455, 142.03086386142144 +1.101791386801456, 142.2348716400478 +1.2161703822554026, 142.79839221116535 +1.2597403237425744, 143.24539151780382 +1.3027785511320364, 143.4984827975396 +1.3472888783158636, 143.75456988564576 +1.3933235016896426, 144.01664859049268 +1.4409310516890868, 144.2787272953396 +1.4901690909383372, 144.54679761692725 +1.5410797706838384, 144.79988889666302 +1.5937440744463807, 145.07395083499145 +1.6481869927981772, 145.3180546896161 +1.7045006212404006, 145.57713758609265 +1.7627270263707284, 145.82124144071724 +1.8229448036918343, 146.06834110371227 +1.8852221388266877, 146.31843657507764 +1.9496320526531443, 146.57452366318378 +2.0162451587460173, 146.83360655966035 +2.085128892940703, 147.08669783939612 +2.1563577080883167, 147.33080169402072 +2.230028298466819, 147.58389297375652 +2.3062098884055193, 147.8309926367515 +2.384993972065745, 148.07809229974654 +2.466488415060654, 148.34316681296383 +2.550751155940074, 148.5932622843292 +2.637885808953188, 148.83736613895385 +2.727993520609653, 149.07847418520808 +2.8212009140569183, 149.33755708168462 +2.9175966637959876, 149.59963578653154 +3.0172706335462394, 149.84973125789693 +3.120345771335711, 150.09683092089196 +3.2269379982697717, 150.34093477551656 +3.3371629061950823, 150.57904701340044 +3.4324616432335846, 150.93125400364454 +3.5692193354802324, 151.1751038239834 +3.6741659144406853, 151.31531503297546 +4.008389098903174, 152.029537880249 +4.145179151168056, 152.19575071724375 +4.286780085533257, 152.43985457186835 +4.433206803517089, 152.6779668097522 +4.584670369697731, 152.93405389785838 +4.741296644129227, 153.18414936922377 +4.903248620376036, 153.42226160710766 +5.070349230915326, 153.4836211511391 +5.163734474721055, 153.44982047811226 +5.487933643923063, 153.47096434189976 +5.623209600924136, 153.46564116891105 +6.031055052116803, 153.47557673208885 +6.189128281524547, 153.46888481039358 +6.648099844287501, 153.46806475863767 +6.811975303802782, 153.463340747323 +7.3060200827550785, 153.466685532086 +7.486124765438618, 153.46555649081577 +8.029029937417032, 153.45931468879357 +8.239461052044124, 153.45012626012294 +8.85050138025064, 153.45479852371273 +9.082462262819462, 153.44561009504213 +9.696816509581428, 153.45356042731981 +9.905658510666726, 153.4525725162084 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p25.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p25.csv new file mode 100644 index 00000000..7bc25c27 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p25.csv @@ -0,0 +1,112 @@ +0.17387577242435007, -29.338640931990696 +0.1789630581766478, -28.850036763454398 +0.18420004498254888, -28.349877694980933 +0.18958922369285977, -27.863584506432062 +0.19541875176191126, -27.338816653805466 +0.20142650569698023, -26.826654146564863 +0.2076175166931173, -26.33171894468518 +0.21400007987744565, -25.822077506521808 +0.22026071472375852, -25.340406277947807 +0.22638018849069347, -24.857526218717794 +0.2303379855173751, -24.492517917542173 +0.23898427931944846, -23.865494225538214 +0.2454226822594713, -23.442598685737437 +0.25259763578421696, -23.00971481245378 +0.26036220430955365, -22.50742649243223 +0.2668212171914836, -22.110716338075235 +0.27621870470904, -21.50413874757814 +0.28471111539758465, -20.986513924003617 +0.29304069473478805, -20.50253171544219 +0.3016167709762666, -19.995439707006412 +0.3099971896712911, -19.507424136693203 +0.3186097669150355, -19.024800853017368 +0.3279347529001614, -18.513086884606693 +0.3375298353303361, -18.022171736082953 +0.34740792275497345, -17.515079727647176 +0.3575731055064816, -17.021853599135994 +0.36856702611938774, -16.50254806284333 +0.3799001212609559, -15.975679319319056 +0.39101348308689, -15.498630050719953 +0.40245456791409273, -15.005403922208785 +0.41422810867366733, -14.526043673622212 +0.4269643736319206, -14.004217068252345 +0.44072656047047376, -13.461983460524706 +0.454274500742019, -12.956963982336205 +0.46824230896493224, -12.433876842427736 +0.4826382460775249, -11.917722642481593 +0.49747509881490387, -11.409972006126111 +0.512768660258704, -10.8992801225139 +0.5277698571944774, -10.417608893939914 +0.5432139594960353, -9.91744982546642 +0.5591094818683128, -9.419601736980383 +0.5762869662748114, -8.955759720386169 +0.5948526594259117, -8.453443039714259 +0.6131363647609236, -7.956827125116433 +0.6310709141070632, -7.486710796479613 +0.6495385139379625, -6.984240748018706 +0.6695014878764222, -6.493507327934324 +0.6910836218158768, -5.942870156616024 +0.7123300705330192, -5.429026936657294 +0.7331660860345541, -4.9589106080204886 +0.7557137786278598, -4.420486964559046 +0.7789423888602262, -3.9219802481533037 +0.8028916355571843, -3.4028848009504173 +0.8275821893115693, -2.8688730283740824 +0.8530233746825944, -2.360071946569775 +0.8805193101569471, -1.815737447944457 +0.9105027815760545, -1.4728719354393718 +0.9358286280792989, -1.1509937345942802 +0.9648457255908998, -0.780296199230861 +0.9964754933571723, -0.4405763194740757 +1.0137556202487346, -0.42174815176993263 +1.0687931302081373, -0.717344602456464 +1.0930900279888272, -1.289717793184792 +1.1024982375130963, -1.8537228219664712 +1.1117567639331483, -2.424854922836971 +1.121091303861592, -2.9998386570198647 +1.130502466468854, -3.578674024515138 +1.1399837986859775, -4.176767558572408 +1.1495464307886454, -4.77100945931727 +1.1591874815006882, -5.369102993374526 +1.1689166363795382, -5.9517899941822066 +1.178738409627834, -6.511367195115511 +1.188635341319022, -7.086350929298419 +1.198622800162541, -7.645928130231738 +1.2086829388805722, -8.228615131039433 +1.2188369578744964, -8.792043965285146 +1.2290800893637353, -9.34776953290607 +1.2393900961663302, -9.942011433650919 +1.249780776624609, -10.547808234332976 +1.2602624757745136, -11.145901768390232 +1.2708498090649094, -11.709330602635958 +1.2807270691054193, -12.297442053130169 +1.291474885974437, -12.88288022058957 +1.3031242273374197, -13.44583670512182 +1.3140655281024989, -14.020820439304714 +1.3251130698097318, -14.568842740300866 +1.3362307098768293, -15.15923300773332 +1.3474541560768938, -15.726513475291426 +1.358750813692024, -16.332310275973455 +1.3701506729430326, -16.922700543405938 +1.381659024195622, -17.489981010964044 +1.3932618786436002, -18.061113111834544 +1.4049578163868066, -18.63994847932983 +1.4167409590187856, -19.238042013387087 +1.4286207107933038, -19.839987180756737 +1.4396919991869912, -20.48367219761549 +1.4526911511640845, -21.024619348934067 +1.4648905170638136, -21.59575144980458 +1.477174015757615, -22.19769661717423 +1.4895789831186108, -22.768828718044716 +1.5020811407612036, -23.351515718852397 +1.514685882572957, -23.938054352972472 +1.5273774601922188, -24.555406053591696 +1.537999330628427, -25.127456892683497 +1.5531214541371354, -25.724631688519466 +1.566173919580281, -26.280357256140377 +1.5793311829250714, -26.84378609038609 +1.592579233544731, -27.438027991130966 +1.6059433917841592, -28.02456662525104 +1.6194222053796143, -28.607253626058736 +1.6330192094433869, -29.1822373602416 +1.6468145981500077, -29.63011719511553 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p43.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p43.csv new file mode 100644 index 00000000..4d1da44d --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p43.csv @@ -0,0 +1,107 @@ +0.3703999540606767, -29.087368804870536 +0.3779834689889374, -28.545869797646247 +0.3846159806278393, -28.024228408433316 +0.3913636605047004, -27.51029028584513 +0.39822972127578826, -26.996352163256958 +0.40521435580408316, -26.49396894060598 +0.4123227733321917, -25.98388245133019 +0.4195545888536253, -25.481499228679212 +0.42691787613012044, -24.952154572841465 +0.43440702470118825, -24.442068083565673 +0.44203029085927076, -23.916575061040334 +0.44978524397828923, -23.402636938452147 +0.45767554022861684, -22.892550449176383 +0.4652986614464568, -22.41239766267364 +0.4738767418227489, -21.85697093737525 +0.48218965988571244, -21.346884448099473 +0.49064612496813675, -20.84835285876086 +0.4992578601145178, -20.315156569610735 +0.5077680771661726, -19.831970937375246 +0.5154438567652561, -19.32158156736716 +0.5244883988145169, -18.799940178154202 +0.5336949547627129, -18.262892255691668 +0.5430605921857741, -17.73739923316633 +0.5525914405069267, -17.208054577328582 +0.5622878147174795, -16.686413188115623 +0.5721525586789237, -16.172475065527465 +0.5821912713990064, -15.654685309626885 +0.5924070366385544, -15.133043920413925 +0.6028020588758563, -14.611402531200952 +0.6133775823259412, -14.097464408612794 +0.6241396094190761, -13.579674652712228 +0.6350924303723655, -13.054181630186875 +0.6468496876427197, -12.548067926516424 +0.65567610223407, -12.083716427817663 +0.6671740748124683, -11.589036471791474 +0.6788778849558323, -11.078949982515695 +0.6907880781716339, -10.565011859927509 +0.7029148486944786, -10.024112304152595 +0.7152478534598805, -9.506322548252015 +0.7288435971522573, -8.977159620853655 +0.7426943215963902, -8.459551593392462 +0.7557241065791005, -7.945613470804304 +0.7689824853341862, -7.431675348216132 +0.7824758936510455, -6.910033959003158 +0.7962060720783795, -6.388392569790213 +0.8101771752436837, -5.866751180577253 +0.8231997000576731, -5.387296029361252 +0.8364380262272153, -4.888582711583268 +0.8511164023493729, -4.363089689057915 +0.8634681164099848, -3.8911430456903844 +0.8773857672274353, -3.454063599538287 +0.8923188727969898, -2.79649190756696 +0.9286047198959859, -1.5310856155899586 +0.9547356760815542, -0.9429310090630878 +0.9895439598757528, -0.5862351054628192 +1.0224956319936085, -0.44174654048522655 +1.055165212511616, -0.578100692704723 +1.082548424906529, -0.9682358570557597 +1.0989187468352513, -1.6311879345932283 +1.1115517461579287, -2.3747577285702306 +1.121091303861592, -2.9998386570198647 +1.130502466468854, -3.578674024515138 +1.1399837986859775, -4.176767558572408 +1.1495464307886454, -4.77100945931727 +1.1591874815006882, -5.369102993374526 +1.1689166363795382, -5.9517899941822066 +1.178738409627834, -6.511367195115511 +1.188635341319022, -7.086350929298419 +1.198622800162541, -7.645928130231738 +1.2086829388805722, -8.228615131039433 +1.2188369578744964, -8.792043965285146 +1.2290800893637353, -9.34776953290607 +1.2393900961663302, -9.942011433650919 +1.249780776624609, -10.547808234332976 +1.2602624757745136, -11.145901768390232 +1.270841930852339, -11.724737135885519 +1.2807236664808042, -12.304044853094283 +1.291474885974437, -12.88288022058957 +1.3031242273374197, -13.44583670512182 +1.3140655281024989, -14.020820439304714 +1.3251130698097318, -14.568842740300866 +1.3362307098768293, -15.15923300773332 +1.3474541560768938, -15.726513475291426 +1.358750813692024, -16.332310275973455 +1.3701506729430326, -16.922700543405938 +1.381659024195622, -17.489981010964044 +1.3932618786436002, -18.061113111834544 +1.4049578163868066, -18.63994847932983 +1.4167409590187856, -19.238042013387087 +1.4286207107933038, -19.839987180756737 +1.4396919991869912, -20.48367219761549 +1.4526911511640845, -21.024619348934067 +1.4648905170638136, -21.59575144980458 +1.477174015757615, -22.19769661717423 +1.4895766745753303, -22.772680351357124 +1.5020811407612036, -23.351515718852397 +1.514685882572957, -23.938054352972472 +1.5273774601922188, -24.555406053591696 +1.537999330628427, -25.127456892683497 +1.5531214541371354, -25.724631688519466 +1.566173919580281, -26.280357256140377 +1.5793311829250714, -26.84378609038609 +1.592579233544731, -27.438027991130966 +1.6059433917841592, -28.02456662525104 +1.6194222053796143, -28.607253626058736 +1.6330192094433869, -29.1822373602416 +1.6451692333656143, -29.741693408882014 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p50.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p50.csv new file mode 100644 index 00000000..cd11fa14 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p50.csv @@ -0,0 +1,103 @@ +0.5142815594855304, -29.13820905670005 +0.5218589378157413, -28.52260519206429 +0.5291708750628704, -27.951732222486967 +0.5355592206756173, -27.392171848261015 +0.5420224486777092, -26.842882496201426 +0.549000691851448, -26.291768287729738 +0.5562583455710247, -25.684460616994727 +0.5644272314182294, -25.04382546488131 +0.5718868259878831, -24.445183969099205 +0.5792503796284539, -23.89053909675782 +0.586436252377224, -23.304057673442728 +0.5938540383127279, -22.79794493129839 +0.6087993115243667, -21.565211985566933 +0.6035564467423613, -22.180407175372196 +0.6202446082226324, -20.833160024694635 +0.6285511363476676, -20.198012398382147 +0.6353533139950547, -19.66012217902599 +0.64268056021206, -19.127135923240814 +0.6502343828804421, -18.55951092884972 +0.6578685788585356, -18.023661909285863 +0.6655916318646724, -17.49070161470631 +0.6743869832289664, -16.896682078899076 +0.6840691677233532, -16.269615647058444 +0.6918310756738807, -15.713174103039776 +0.7018828791483789, -15.099097047937931 +0.7107485744305615, -14.51193776071726 +0.7190907408635492, -13.984754916106283 +0.7277765686063317, -13.409146069745333 +0.737975210464077, -12.833137589084828 +0.7471401744157569, -12.213275343728995 +0.7576109494595785, -11.634699107526899 +0.7658119594756918, -11.089839265986413 +0.774634851654473, -10.585327585046414 +0.7846094738615588, -10.029077865491558 +0.7943462053915239, -9.432325420010088 +0.8054668970545793, -8.889697761390323 +0.8146045818315131, -8.338391728454852 +0.8214274543144007, -7.881563922050162 +0.8326225855806688, -7.331840489479532 +0.8423529905779681, -6.758095993754381 +0.8530049041702388, -6.225249279449443 +0.8619960096900448, -5.673362666216917 +0.8717357013716379, -5.036345861945165 +0.8916556127948867, -4.312994996799489 +0.9044094392396256, -3.6692136794002153 +0.9194839280057191, -2.6881043379638214 +0.9324145163336787, -2.1490796139218276 +0.9549696492500198, -1.0975918909527564 +0.9426460759941665, -1.6828660971069382 +0.9826062142776181, -0.7000717469802566 +1.0166571872967676, -0.43681784493237785 +1.049156188718658, -0.5353559609938117 +1.077946930581162, -0.8773148472289733 +1.0954745810843738, -1.3652700937963118 +1.1024982375130963, -1.8537228219664712 +1.1117567639331483, -2.424854922836971 +1.121091303861592, -2.9998386570198647 +1.130502466468854, -3.578674024515138 +1.1399837986859775, -4.176767558572408 +1.1495464307886454, -4.77100945931727 +1.1591874815006882, -5.369102993374526 +1.1689166363795382, -5.9517899941822066 +1.178738409627834, -6.511367195115511 +1.188635341319022, -7.086350929298419 +1.198622800162541, -7.645928130231738 +1.2086829388805722, -8.228615131039433 +1.2188369578744964, -8.792043965285146 +1.2290800893637353, -9.34776953290607 +1.2393900961663302, -9.942011433650919 +1.249780776624609, -10.547808234332976 +1.2602624757745136, -11.145901768390232 +1.2708498090649094, -11.709330602635958 +1.2807270691054193, -12.297442053130169 +1.291474885974437, -12.88288022058957 +1.3031242273374197, -13.44583670512182 +1.3140655281024989, -14.020820439304714 +1.3251130698097318, -14.568842740300866 +1.3362307098768293, -15.15923300773332 +1.3474541560768938, -15.726513475291426 +1.358750813692024, -16.332310275973455 +1.3701506729430326, -16.922700543405938 +1.381659024195622, -17.489981010964044 +1.3932618786436002, -18.061113111834544 +1.4049578163868066, -18.63994847932983 +1.4167409590187856, -19.238042013387087 +1.4286207107933038, -19.839987180756737 +1.4396919991869912, -20.48367219761549 +1.4526911511640845, -21.024619348934067 +1.4648905170638136, -21.59575144980458 +1.477174015757615, -22.19769661717423 +1.4895766745753303, -22.772680351357124 +1.5020811407612036, -23.351515718852397 +1.514685882572957, -23.938054352972472 +1.5273774601922188, -24.555406053591696 +1.537999330628427, -25.127456892683497 +1.5531214541371354, -25.724631688519466 +1.566173919580281, -26.280357256140377 +1.5793311829250714, -26.84378609038609 +1.592579233544731, -27.438027991130966 +1.6059433917841592, -28.02456662525104 +1.6194222053796143, -28.607253626058736 +1.6330192094433869, -29.1822373602416 +1.6444544588675942, -29.635327753313504 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p54.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p54.csv new file mode 100644 index 00000000..29f0e9ec --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar0p54.csv @@ -0,0 +1,103 @@ +0.5814820618389084, -29.361267637097043 +0.5874726583710137, -28.802127089219454 +0.5926632449001352, -28.294801862619792 +0.5980355245154099, -27.73137879753088 +0.6040683220005763, -27.191745571674815 +0.6102953920474721, -26.617198490547636 +0.6165818762709528, -26.06190957598244 +0.622296746685317, -25.504565038732906 +0.62981959099178, -24.876315761480058 +0.6358655480805334, -24.267013116321664 +0.64162802050607, -23.709092384536177 +0.6490556511337859, -23.068810629334322 +0.6567088301092334, -22.408746435445778 +0.6684688440294948, -21.828335505679604 +0.6721338307211979, -21.146366586148986 +0.6772330978776508, -20.666617352164792 +0.6832190879379242, -20.150818532277867 +0.6892641831622235, -19.61268023917907 +0.6953616874775148, -19.07839357939264 +0.7025431976462493, -18.456663990188673 +0.7106781202371348, -17.808954085027196 +0.7171169869482701, -17.25653568654512 +0.7236061805563268, -16.731628954580145 +0.7319763669639183, -16.113218974259397 +0.7395254221500003, -15.527116993195037 +0.747159569754068, -14.916942303928238 +0.7548625808615647, -14.339506497816771 +0.7615392143860492, -13.809071471342747 +0.7682689482918795, -13.297894611430706 +0.7750569517792303, -12.790569384831059 +0.7828742733982785, -12.25478779228736 +0.7901397184057448, -11.668280888529708 +0.7990993061465702, -11.101841996720637 +0.8065678261431848, -10.556943117219106 +0.815796595219653, -10.043012061848003 +0.8242005292334649, -9.485797330626596 +0.8349020156342855, -8.744801638263695 +0.8462413305147265, -7.961895834171443 +0.8561767819949962, -7.426046814607588 +0.8777453751246587, -5.675660382117115 +0.8637334592290604, -6.941831387882289 +0.8876630188637893, -5.038643577845363 +0.8963737509300878, -4.496774803727092 +0.9214446609317533, -2.900284572203489 +0.9019534678306482, -3.9162322708098287 +0.9125849103535563, -3.4227380429251753 +0.9321074250016279, -2.3077332065592344 +0.9479322279820779, -1.7041997751389886 +0.9593410301038716, -1.2739218982161589 +0.972260234595403, -0.8664287346734767 +1.0050699244043944, -0.4521711445986938 +1.0372257020780513, -0.48558164283240046 +1.0687931302081373, -0.717344602456464 +1.0930900279888272, -1.289717793184792 +1.1024982375130963, -1.8537228219664712 +1.1117567639331483, -2.424854922836971 +1.121091303861592, -2.9998386570198647 +1.130502466468854, -3.578674024515138 +1.1399837986859775, -4.176767558572408 +1.1495464307886454, -4.77100945931727 +1.1591874815006882, -5.369102993374526 +1.1689166363795382, -5.9517899941822066 +1.178738409627834, -6.511367195115511 +1.188635341319022, -7.086350929298419 +1.198622800162541, -7.645928130231738 +1.2086829388805722, -8.228615131039433 +1.2188369578744964, -8.792043965285146 +1.2290800893637353, -9.34776953290607 +1.2393900961663302, -9.942011433650919 +1.249780776624609, -10.547808234332976 +1.2602624757745136, -11.145901768390232 +1.2708498090649094, -11.709330602635958 +1.2807270691054193, -12.297442053130169 +1.291474885974437, -12.88288022058957 +1.3031242273374197, -13.44583670512182 +1.3140655281024989, -14.020820439304714 +1.3251130698097318, -14.568842740300866 +1.3362307098768293, -15.15923300773332 +1.3474541560768938, -15.726513475291426 +1.358750813692024, -16.332310275973455 +1.3701506729430326, -16.922700543405938 +1.381659024195622, -17.489981010964044 +1.3932618786436002, -18.061113111834544 +1.4049578163868066, -18.63994847932983 +1.4167409590187856, -19.238042013387087 +1.4286207107933038, -19.839987180756737 +1.4396919991869912, -20.48367219761549 +1.4526911511640845, -21.024619348934067 +1.4648905170638136, -21.59575144980458 +1.477174015757615, -22.19769661717423 +1.4895766745753303, -22.772680351357124 +1.5020811407612036, -23.351515718852397 +1.514685882572957, -23.938054352972472 +1.5273774601922188, -24.555406053591696 +1.537999330628427, -25.127456892683497 +1.5531214541371354, -25.724631688519466 +1.566173919580281, -26.280357256140377 +1.5793311829250714, -26.84378609038609 +1.592579233544731, -27.438027991130966 +1.6059433917841592, -28.02456662525104 +1.6194222053796143, -28.607253626058736 +1.6330192094433869, -29.1822373602416 +1.6467252725801655, -29.764924361049296 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar1p20.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar1p20.csv new file mode 100644 index 00000000..715bbed3 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi0-h_over_deltastar1p20.csv @@ -0,0 +1,95 @@ +0.7597071920552536, -28.854503978909676 +0.7636938181195133, -28.142089397394983 +0.7676283677678299, -27.573551109424315 +0.770650620334218, -26.959958014464007 +0.7811045868046581, -25.5056761783337 +0.7846775720003718, -24.840659127270243 +0.7888082182889667, -24.24910655502758 +0.801815229920217, -21.62046972993153 +0.7918166883241854, -23.686259504188484 +0.7970612066947804, -23.097909942430718 +0.8013720649842866, -22.347344938990602 +0.8110826170093904, -20.88627857445681 +0.8172239945065928, -19.934733321831857 +0.8112162305831265, -20.476904976682434 +0.820974566803962, -19.232278394971928 +0.8251978250233771, -18.68302028289645 +0.8284245060852055, -18.136115467573575 +0.8321700947080115, -17.602053949131502 +0.8359416871397842, -17.041030997502688 +0.8402548944090759, -16.45345463630217 +0.8431485717102841, -15.875015898337281 +0.849158976679323, -15.226242004412853 +0.8550207715045977, -14.342991645443092 +0.8627461286488652, -13.343427681519557 +0.8564236210124344, -13.82782483668423 +0.8685024723443219, -12.578307683057986 +0.8715432109829504, -12.027389265345406 +0.8745941309143005, -11.477791407625617 +0.8801556574488945, -10.977417726518965 +0.8860101647672596, -10.09329194608027 +0.8939742317246505, -9.208506654866042 +0.9006637499512085, -8.476321089937386 +0.9064771461593485, -7.909377829594561 +0.9111252869543026, -7.40092502129724 +0.9146716790178426, -6.898258965733859 +0.91881149231321, -6.352642547354591 +0.9229574548686219, -5.840920502124419 +0.9271321833058616, -5.3022370237074625 +0.9313368607789811, -4.734024356562173 +0.9358185366616146, -4.192552692737351 +0.9480008677732671, -2.4789741568852435 +0.9437674201332883, -3.1027878179280606 +0.9411444486929551, -3.613187283960542 +0.9645124284449472, -1.0706932821868236 +0.9565177723058793, -1.731698615490771 +0.9907412341207132, -0.5469948414976784 +1.0224956319936085, -0.44174654048522655 +1.055165212511616, -0.578100692704723 +1.0815635661194936, -0.857517805364111 +1.0989187468352513, -1.6311879345932283 +1.1115517461579287, -2.3747577285702306 +1.121091303861592, -2.9998386570198647 +1.130502466468854, -3.578674024515138 +1.1399837986859775, -4.176767558572408 +1.1495464307886454, -4.77100945931727 +1.1591874815006882, -5.369102993374526 +1.1689166363795382, -5.9517899941822066 +1.178738409627834, -6.511367195115511 +1.188635341319022, -7.086350929298419 +1.198622800162541, -7.645928130231738 +1.2086829388805722, -8.228615131039433 +1.2188369578744964, -8.792043965285146 +1.2290800893637353, -9.34776953290607 +1.2393900961663302, -9.942011433650919 +1.249780776624609, -10.547808234332976 +1.2602624757745136, -11.145901768390232 +1.2708498090649094, -11.709330602635958 +1.2807270691054193, -12.297442053130169 +1.291474885974437, -12.88288022058957 +1.3031242273374197, -13.44583670512182 +1.3140655281024989, -14.020820439304714 +1.3251130698097318, -14.568842740300866 +1.3362307098768293, -15.15923300773332 +1.3474541560768938, -15.726513475291426 +1.358750813692024, -16.332310275973455 +1.3701506729430326, -16.922700543405938 +1.381659024195622, -17.489981010964044 +1.3932618786436002, -18.061113111834544 +1.4049578163868066, -18.63994847932983 +1.4167409590187856, -19.238042013387087 +1.4286207107933038, -19.839987180756737 +1.4396919991869912, -20.48367219761549 +1.4506326016647646, -20.98977292068315 +1.4586040096930994, -21.60676116442363 +1.4761052901643723, -22.2168639195165 +1.4896390064997242, -22.668686251922495 +1.5413382686749726, -25.07655778562078 +1.55283573240556, -25.673434027592037 +1.566173919580281, -26.280357256140377 +1.5793311829250714, -26.84378609038609 +1.59035498840713, -27.352340003156456 +1.6056507965262385, -27.96896709768089 +1.6194222053796143, -28.607253626058736 +1.633337765846735, -29.205923354651958 +1.6398490264882613, -29.487061577238833 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p25.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p25.csv new file mode 100644 index 00000000..f94db8ea --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p25.csv @@ -0,0 +1,119 @@ +0.11531540688073041, -14.235230777850227 +0.11901203725537667, -14.013867348118957 +0.12282686226539874, -13.798725896472469 +0.1267638624497299, -13.585658437520884 +0.1308271653222163, -13.370516985874389 +0.13502071375455305, -13.155375534227886 +0.13934891492681575, -12.936086097191549 +0.14381574032392017, -12.718870652850121 +0.14842513116875936, -12.512025171983318 +0.15318238374531115, -12.303105698421575 +0.15809250882242823, -12.087964246775073 +0.16316015957428984, -11.87074880243366 +0.16838941167775753, -11.66597731426176 +0.17378712934983775, -11.448761869920347 +0.17935712329606224, -11.241916389053529 +0.18510594782542794, -11.030922922796876 +0.19103887670541903, -10.82200344923514 +0.1971616363941962, -10.617231961063247 +0.20348113812751661, -10.406238494806594 +0.210002669930045, -10.201467006634694 +0.216733396219025, -9.99462152576789 +0.2236800332168759, -9.785702052206155 +0.2308487433719573, -9.583004556729186 +0.2382477988455976, -9.374085083167444 +0.24588482507753237, -9.15686963882603 +0.25376559848275587, -8.950024157959213 +0.26189633668113493, -8.768066589431463 +0.27028736129923997, -8.58818301359863 +0.27895536706011, -8.335709693443533 +0.28789271434459895, -8.157900110305626 +0.29737243291530413, -7.972073622420801 +0.30664761540485613, -7.704803287368492 +0.31647482191758897, -7.506253777281366 +0.32661805202218974, -7.299408296414555 +0.33708609851113625, -7.094636808242662 +0.3478896439004534, -6.8898653200707685 +0.3590412362725955, -6.672649875729348 +0.3705484396542841, -6.467878387557448 +0.3824263590623718, -6.250662943216035 +0.39468338012499665, -6.043817462349217 +0.407332907442863, -5.839045974177331 +0.4203882000703597, -5.632200493310513 +0.4338622851675983, -5.423281019748785 +0.44776786212786884, -5.216435538881967 +0.4621187370044729, -5.011664050710078 +0.47692995218008194, -4.804818569843263 +0.4922162869535623, -4.595899096281531 +0.5079934188995022, -4.382831637329954 +0.5242727636457913, -4.186356119937749 +0.5410778608187582, -3.9712146682912497 +0.5584193034185247, -3.7664431801193565 +0.5763170162763901, -3.559597699252542 +0.5947878671108755, -3.3548262110806526 +0.613851728406021, -3.1459067375189207 +0.633525031632294, -2.9432092420419487 +0.6538293884857465, -2.7384377538700555 +0.6747850585020122, -2.5315922730032447 +0.6964106305568438, -2.3309687702211974 +0.7187250678304435, -2.1448632163036017 +0.7417681063448032, -1.9131298230977265 +0.7655422711940647, -1.7062843422309122 +0.790079730905894, -1.4952908759742591 +0.8154029952745132, -1.2863714024125201 +0.843181128949621, -1.151004747509429 +0.8707920664101203, -0.983424170218477 +0.9546379042658424, -0.47406121643506793 +0.985169001162585, -0.4331351511619772 +1.0166816233360907, -0.3797651297193596 +1.0491830030453133, -0.3720229475650214 +1.082624133693019, -0.5924199618520589 +1.11067165983028, -1.0072945110398521 +1.1272151920833964, -1.584600150411724 +1.1358531261236882, -2.162677401934907 +1.1437206922206329, -2.780733360130821 +1.154980614109118, -3.3148448440508034 +1.1630026850633535, -3.8857900581815734 +1.1727439653448892, -4.483470956502636 +1.1825776798192433, -5.0583379351795585 +1.1925066067209489, -5.606588674271663 +1.2025060352627324, -6.181455652948586 +1.2125837528761867, -6.7677295914475835 +1.222742191183877, -7.361608169827953 +1.2329932677539066, -7.940277468445572 +1.2433264865547584, -8.52655140694457 +1.2537405569112066, -9.124232305265629 +1.2645142544231622, -9.69422765039102 +1.2768273033712068, -9.985109391732543 +1.2936616690941887, -11.201085336534796 +1.3017545871311689, -11.697825589519383 +1.3089659839267551, -12.18652124832579 +1.3199508237857982, -12.744658019263682 +1.3329523492537483, -13.266411963376427 +1.3572861738589441, -14.515125683793663 +1.362813888910488, -15.078227368832124 +1.3722769772938812, -15.653735366891723 +1.3854731325117333, -16.243153542433667 +1.3973547438476617, -16.856060784032557 +1.4090632568419572, -17.446137042472245 +1.420874218165509, -18.028608661030553 +1.4327907482771107, -18.599673319766787 +1.4447939739427027, -19.193551898147156 +1.4568999828802818, -19.783628156586843 +1.4691321209291965, -20.33187889567894 +1.4814148979318014, -20.9675829934069 +1.4958811305483994, -21.698464534257567 +1.5084359448255105, -22.254319913231043 +1.521077537502935, -22.84059385173004 +1.533822730655638, -23.430670110169714 +1.5467243454264268, -23.940897649854925 +1.5574673243942818, -24.51184286398569 +1.5705222289500536, -25.094314482544 +1.5836817219180728, -25.684390740983687 +1.5969514790084234, -26.274466999423367 +1.6103398056793852, -26.85313629804098 +1.6238329323339036, -27.443212556480667 +1.6374266090514795, -28.0523004146238 +1.651149220410492, -28.63857435312279 +1.664979203392674, -29.236255251443865 +1.6671149951200166, -29.605199730296214 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p43.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p43.csv new file mode 100644 index 00000000..32ccd02a --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p43.csv @@ -0,0 +1,124 @@ +0.10501417805208024, -26.43534621461975 +0.10838573390377348, -26.09576520127795 +0.11186628184316827, -25.739592246376787 +0.11545927282069769, -25.368901342611167 +0.11916786435790579, -24.994062453455705 +0.12299475706896996, -24.635815505859618 +0.12694539095088697, -24.260976616704156 +0.13102259295704066, -23.892359705633467 +0.13523074557175496, -23.523742794562764 +0.13957440361104106, -23.148903905407302 +0.14405746137824482, -22.776139008946764 +0.14868476048185605, -22.399226127096377 +0.1534606940039099, -22.022313245246004 +0.1583895082347515, -21.653696334175294 +0.16347716993907455, -21.27678345232492 +0.1687282534628483, -20.899870570474533 +0.17414800811167236, -20.522957688624146 +0.17974200160718615, -20.14397081407885 +0.18551568572085386, -19.764983939533543 +0.1914745133253906, -19.39014505037808 +0.19762490522733195, -19.013232168527693 +0.20397302511902962, -18.63424529398239 +0.2105247088105587, -18.259406404826926 +0.21728647264895817, -17.888715501061313 +0.22426578885223217, -17.513876611905843 +0.23146966891786688, -17.134889737360552 +0.23890535070207386, -16.751754877425398 +0.24657927820693937, -16.374841995575018 +0.25449970150261464, -15.99792911372463 +0.26267322481146127, -15.63346018804377 +0.2711094752950506, -15.266917269668006 +0.27687067561312384, -14.545862762267099 +0.27981923730765235, -14.877560431648085 +0.2888092937188057, -14.484055608238336 +0.29808694125878044, -14.100920748303182 +0.3076641604422867, -13.705341932198507 +0.3175467037011178, -13.328429050348127 +0.3277480519177402, -12.941146205023138 +0.33827543202315763, -12.566307315867675 +0.3491409551968112, -12.191468426712206 +0.3603554827103046, -11.81662953755675 +0.3719299147259403, -11.443864641096205 +0.3838757915877197, -11.073173737330592 +0.3962063441971949, -10.696260855480205 +0.40893296900238274, -10.319347973629824 +0.422067684792111, -9.94658307716928 +0.43562391780869447, -9.575892173403666 +0.4496178067080835, -9.192757313468519 +0.4640596852354592, -8.81791842431305 +0.47896663941785106, -8.436857557072834 +0.4943503885298363, -8.066166653307207 +0.510229092964121, -7.691327764151751 +0.5266169490480768, -7.320636860386131 +0.5435311605099052, -6.94994595662051 +0.5609914384298879, -6.566811096685363 +0.5790121239913694, -6.185750229445141 +0.597607204090553, -5.823355296459205 +0.6168015248190652, -5.452664392693585 +0.6366128712774679, -5.079899496233047 +0.6570583575054539, -4.715430570552197 +0.6781570806637764, -4.363405601040874 +0.6999449694074205, -3.9699007776311106 +0.7232718169965617, -3.6540973847275637 +0.7471350632024157, -3.137051531212016 +0.7710780114238274, -2.940634083170238 +0.796435760149012, -2.4655161574380564 +0.8219197819697193, -1.994124601425078 +0.8473873340519296, -1.6354406483874229 +0.8744180837209008, -1.2860589338506578 +0.8982340312194467, -1.0206574895195217 +0.9558420281270988, -0.5403647427135709 +1.0141937024286758, -0.3755542809373722 +1.0491830030453133, -0.3720229475650214 +1.082624133693019, -0.5924199618520589 +1.11067165983028, -1.0072945110398521 +1.1272151920833964, -1.584600150411724 +1.1358531261236882, -2.162677401934907 +1.1437206922206329, -2.780733360130821 +1.154980614109118, -3.3148448440508034 +1.1630026850633535, -3.8857900581815734 +1.1727439653448892, -4.483470956502636 +1.1825776798192433, -5.0583379351795585 +1.1925066067209489, -5.606588674271663 +1.2025060352627324, -6.181455652948586 +1.2125837528761867, -6.7677295914475835 +1.222742191183877, -7.361608169827953 +1.2329932677539066, -7.940277468445572 +1.2433264865547584, -8.52655140694457 +1.2537405569112066, -9.124232305265629 +1.2642515137919892, -9.702901603883248 +1.274846695333506, -10.289175542382239 +1.2855267423616734, -10.883054120762608 +1.2963022036908216, -11.465525739320917 +1.3071699837050745, -12.044195037938536 +1.318118805535343, -12.641875936259595 +1.3291573035226998, -13.24335915452135 +1.3402902905726477, -13.841040052842416 +1.3515062020101885, -14.457732550866929 +1.362813888910488, -15.078227368832124 +1.3722769772938812, -15.653735366891723 +1.3854731325117333, -16.243153542433667 +1.3973547438476617, -16.856060784032557 +1.4090632568419572, -17.446137042472245 +1.420874218165509, -18.028608661030553 +1.4327907482771107, -18.599673319766787 +1.4447939739427027, -19.193551898147156 +1.456904435033699, -19.776023516705465 +1.4691074287390002, -20.37370441502653 +1.4813967897951001, -20.998001552932415 +1.4938026483671496, -21.59948477119417 +1.5063377164910114, -22.159142470108343 +1.518961724763848, -22.745416408607326 +1.5316868490582785, -23.339294986987703 +1.5445303780661912, -23.914161965664633 +1.5577835213307356, -24.515119058878497 +1.5772822438677074, -25.083265856538333 +1.5860015779372207, -25.60085914689398 +1.6030139707636937, -26.505646345465784 +1.6170685892403827, -27.153877907171854 +1.6306205882541678, -27.74015184567086 +1.6443012355120703, -28.303611864525713 +1.6534193504010464, -28.778619171545643 +1.6770093149242646, -30.065029609448167 +1.667298408775813, -29.331432694566566 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p50.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p50.csv new file mode 100644 index 00000000..ee4f0762 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p50.csv @@ -0,0 +1,118 @@ +0.12171773362862881, -29.25388056981719 +0.12563028075198793, -28.820969885203922 +0.12966913481959236, -28.37768923711605 +0.13383716365525702, -27.946852545197707 +0.1381400888510139, -27.499423911719994 +0.14258076087768856, -27.062365241716883 +0.14716430606459677, -26.623232579018854 +0.15189519852578734, -26.184099916320825 +0.15677739105727273, -25.757411209792316 +0.16181691087170189, -25.324500525179054 +0.16701884077038298, -24.88536786248102 +0.17238770981717647, -24.45038318517284 +0.17792916271563994, -24.01539850786464 +0.18364721664929362, -23.601153757505678 +0.18955155752195546, -23.15372512402795 +0.19564539950444418, -22.710444475940086 +0.20193565566804011, -22.26094184976745 +0.20842745697774667, -21.819735194374495 +0.21512885234592724, -21.368158575506932 +0.22204478683404322, -20.92695192011398 +0.22918324489627953, -20.483671272026108 +0.2365511953245959, -20.040390623938237 +0.2441566264677022, -19.59088799776559 +0.2520061621372985, -19.145533356982796 +0.2601067564824692, -18.712622672369534 +0.268468858558039, -18.269342024281656 +0.27551007187494636, -17.90735816688597 +0.2895140714817313, -17.118779193756538 +0.30064404815303397, -16.571842345324576 +0.30910679542070124, -16.300384571967285 +0.3190417934585607, -15.875769858133701 +0.32882684446883725, -15.440873135489532 +0.33891064839608076, -15.015931577780997 +0.34980561249702524, -14.576798915082968 +0.3610544280590804, -14.112778340045878 +0.37266621788923193, -13.640461794229104 +0.3846447197574915, -13.211699095005677 +0.3970098975210363, -12.772566432307649 +0.4097739448480436, -12.325137798829935 +0.42294730456526525, -11.883931143436982 +0.43654379591671005, -11.444798480738953 +0.4505803780173294, -10.989073876481541 +0.46440163009900287, -10.544014589632262 +0.47863782439605584, -10.14582753768822 +0.49402212906290877, -9.719138831159711 +0.5099047384344068, -9.273784190376922 +0.5262979672004772, -8.82842954959412 +0.5432177788324828, -8.385148901506255 +0.5606801390706855, -7.948090231503144 +0.5787033646536417, -7.513105554194958 +0.5973044586136318, -7.084342854971531 +0.6165080664480507, -6.636914221493811 +0.6363312002809806, -6.181189617236413 +0.6567846090030531, -5.752426918012986 +0.6778954456937177, -5.323664218789567 +0.6996865912828009, -4.888679541481373 +0.7221776176794064, -4.4557688568681115 +0.7458238585273347, -4.003825217303753 +0.7718476951563531, -3.537847922457111 +0.7966585480626064, -3.104159490583246 +0.8207907582241852, -2.6931356725966893 +0.9016053558639586, -1.4366858357268484 +0.916897642263474, -1.1966142107045528 +0.9601315105114301, -0.43098514826357714 +0.9908275679124481, -0.41702098802447196 +1.0225228951809104, -0.3595029811920156 +1.0551899028356995, -0.40153662371579557 +1.0888079751897066, -0.655117521121575 +1.1153995013961417, -1.1141178031955619 +1.127771519134326, -1.6278262999543642 +1.1358531261236882, -2.162677401934907 +1.1437206922206329, -2.780733360130821 +1.154980614109118, -3.3148448440508034 +1.1630026850633535, -3.8857900581815734 +1.1727439653448892, -4.483470956502636 +1.1825776798192433, -5.0583379351795585 +1.1925066067209489, -5.606588674271663 +1.2025060352627324, -6.181455652948586 +1.2125837528761867, -6.7677295914475835 +1.222742191183877, -7.361608169827953 +1.2329932677539066, -7.940277468445572 +1.2433264865547584, -8.52655140694457 +1.2537405569112066, -9.124232305265629 +1.264247650366522, -9.710506243764627 +1.274846695333506, -10.289175542382239 +1.2855267423616734, -10.883054120762608 +1.2963022036908216, -11.465525739320917 +1.3071699837050745, -12.044195037938536 +1.318118805535343, -12.641875936259595 +1.3291573035226998, -13.24335915452135 +1.3402902905726477, -13.841040052842416 +1.3515062020101885, -14.457732550866929 +1.362813888910488, -15.078227368832124 +1.3722769772938812, -15.653735366891723 +1.3854731325117333, -16.243153542433667 +1.3973547438476617, -16.856060784032557 +1.4090632568419572, -17.446137042472245 +1.420874218165509, -18.028608661030553 +1.4327907482771107, -18.599673319766787 +1.4447939739427027, -19.193551898147156 +1.4568999828802818, -19.783628156586843 +1.4691051840150156, -20.377506734967213 +1.4813967897951001, -20.998001552932415 +1.4938026483671496, -21.59948477119417 +1.5063377164910114, -22.159142470108343 +1.518961724763848, -22.745416408607326 +1.5316868490582785, -23.339294986987703 +1.5445303780661912, -23.914161965664633 +1.5574673243942818, -24.51184286398569 +1.5705222289500536, -25.094314482544 +1.5836817219180728, -25.684390740983687 +1.5969514790084234, -26.274466999423367 +1.6103398056793852, -26.85313629804098 +1.6238329323339036, -27.443212556480667 +1.6374266090514795, -28.0523004146238 +1.651149220410492, -28.63857435312279 +1.664979203392674, -29.236255251443865 +1.6789198953270754, -29.84154078964631 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p54.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p54.csv new file mode 100644 index 00000000..2942ebcc --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p54.csv @@ -0,0 +1,104 @@ +0.21570138298262298, -28.99055950776563 +0.2220074698536935, -28.463388931771654 +0.2278418118471089, -27.97377222234087 +0.23416589862829365, -27.465516845808146 +0.24101376228841537, -26.91809027449377 +0.2473472923724451, -26.43145204901652 +0.2534829396002058, -25.95977691469855 +0.26014312995165584, -25.482834605070067 +0.26698076245483426, -24.98307837579744 +0.2739978369879028, -24.485857026485277 +0.28119905535507594, -23.991170557133565 +0.2885880665001817, -23.509158487584166 +0.2961736507405027, -23.00686737835108 +0.3039570751856228, -22.517250668920305 +0.3110483545346796, -22.073022909566852 +0.3192330317637483, -21.5027509286669 +0.3276265206895346, -20.98225477244506 +0.3333435954647428, -20.641479313048592 +0.3500745137678027, -19.782759468547084 +0.3608308888297983, -19.213053220733016 +0.3708377848848635, -18.76183264331064 +0.3805837656368212, -18.2696810539194 +0.39058428886897, -17.787668984369986 +0.4008484104784999, -17.300587154899667 +0.4113856142116002, -16.793226285745668 +0.4221998120891458, -16.285865416591662 +0.4332951959287397, -15.796248707160885 +0.444680806836271, -15.314236637611465 +0.4563725682574102, -14.794201368655173 +0.46837030379025174, -14.281770739580246 +0.4806849208469721, -13.761735470623947 +0.49332030464364535, -13.256909481430405 +0.5062867933229203, -12.757153252157785 +0.5195935654333498, -12.259931902845615 +0.5332506235771097, -11.760175673572995 +0.5472649730452079, -11.268024084181754 +0.5616487775930944, -10.770802734869584 +0.5764088712549038, -10.281186025438807 +0.5915556540670058, -9.796639075928937 +0.6071023169294179, -9.304487486537695 +0.6230588306794043, -8.807266137225525 +0.6394334279255398, -8.315114547834284 +0.6562376971827776, -7.8254978384035 +0.6734828955192154, -7.338416008933173 +0.6911826866517204, -6.846264419541924 +0.7093505359277914, -6.343973310308847 +0.7279907391605329, -5.8594263607989845 +0.7471215278028325, -5.3723445313286575 +0.7667566144259507, -4.880192941937409 +0.7835191894460118, -4.4497875777610325 +0.8029760427797461, -3.9129257008235037 +0.8264206375587234, -3.47796138339125 +0.8493630374934165, -2.958362419035474 +0.8843355330629598, -2.2020033438387614 +0.91061467739827, -1.6985062232796864 +1.0343002794004144, -0.33349663300176857 +1.0673026258291223, -0.4709339394919425 +1.0996977640720127, -0.803414513968761 +1.1240703055264096, -1.418960343780796 +1.1342897276923487, -2.031149780179213 +1.1410740359861833, -2.614182788383207 +1.1503476171937146, -3.1482878734850424 +1.162792508884233, -3.8271086298672934 +1.1677569993173067, -4.410868543813134 +1.1957762714870204, -5.911013158737767 +1.2060681897571317, -6.447330812959905 +1.2176523785489022, -7.064668880637768 +1.2278551554454245, -7.654745139077448 +1.2381528811311235, -8.225809797813689 +1.2485178944634008, -8.834897655956823 +1.2589850662249351, -9.413566954574435 +1.2695322322208624, -10.007445532954812 +1.2801755814194498, -10.58611483157243 +1.2909042161429891, -11.172388770071414 +1.3017545871311689, -11.697825589519383 +1.3089659839267551, -12.18652124832579 +1.3199508237857982, -12.744658019263682 +1.3310384239234314, -13.28302272650999 +1.3402902905726477, -13.841040052842416 +1.3515062020101885, -14.457732550866929 +1.362813888910488, -15.078227368832124 +1.3722769772938812, -15.653735366891723 +1.3854731325117333, -16.243153542433667 +1.3973547438476617, -16.856060784032557 +1.4090632568419572, -17.446137042472245 +1.420874218165509, -18.028608661030553 +1.4327907482771107, -18.599673319766787 +1.4447939739427027, -19.193551898147156 +1.4568999828802818, -19.783628156586843 +1.4691051840150156, -20.377506734967213 +1.4813967897951001, -20.998001552932415 +1.4938026483671496, -21.59948477119417 +1.5063377164910114, -22.159142470108343 +1.518961724763848, -22.745416408607326 +1.5316868490582785, -23.339294986987703 +1.5445303780661912, -23.914161965664633 +1.5574673243942818, -24.51184286398569 +1.5705222289500536, -25.094314482544 +1.5836817219180728, -25.684390740983687 +1.5969514790084234, -26.274466999423367 +1.6103398056793852, -26.85313629804098 +1.6238329323339036, -27.443212556480667 +1.6377397350697656, -28.084908791916206 +1.6547393873007343, -28.572212921068925 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p62.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p62.csv new file mode 100644 index 00000000..12fab7d4 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar0p62.csv @@ -0,0 +1,104 @@ +0.3757538297691322, -28.698546920743787 +0.38288554537457653, -28.17809549161447 +0.3895942707597765, -27.662413314946278 +0.3964205430120171, -27.1467311382781 +0.40336703805261365, -26.62724664166923 +0.41043400259000007, -26.11536678494174 +0.41762414178095203, -25.60728924815494 +0.4249415391475651, -25.09160707148675 +0.4323864875551403, -24.57972721475926 +0.4399632154628355, -24.06024271815039 +0.4476706586525184, -23.55216518136359 +0.455515907785092, -23.028878364814027 +0.4634979335658451, -22.50939386820515 +0.47162054935711045, -21.986107051655587 +0.4798840442575478, -21.470424874987415 +0.48829158181737986, -20.95854501825992 +0.49685097385986016, -20.423851241888286 +0.505554998469588, -19.915773705101493 +0.5144138614915058, -19.396289208492618 +0.5234247596878951, -18.8920139916465 +0.5310296861136814, -18.58712168247566 +0.5497898157928509, -17.608989808308948 +0.5578493988002985, -16.984702624120175 +0.5676263535649959, -16.457613487629935 +0.5775737782439682, -15.93432667108037 +0.5876910377236605, -15.430051454234253 +0.5992763602375305, -14.89838858472634 +0.6085927578782282, -14.388383581716802 +0.6200111918250655, -13.891272197279513 +0.631818294070246, -13.215468839144883 +0.6428955683658264, -12.673170422891872 +0.6532147898300857, -12.196912929001392 +0.6637004580800486, -11.71761357915836 +0.6753294792459809, -11.201931402490182 +0.6871622581939534, -10.686249225822003 +0.6992012967171093, -10.174369369094507 +0.7114523454843378, -9.65868719242632 +0.7239202631117264, -9.135400375876763 +0.7366021740208566, -8.627322839089956 +0.7495131227649618, -8.09643138265902 +0.762643379137772, -7.58835384587222 +0.7760072134402837, -7.068869349263345 +0.7896052228135437, -6.549384852654477 +0.8034415107178698, -6.0299003560456015 +0.8175202525187004, -5.510415859436733 +0.8318444257272288, -4.994733682768548 +0.8464169932251777, -4.486656145981748 +0.8599853622236813, -4.06134973929651 +0.9046778348479421, -2.55296742808153 +0.9488510769326416, -1.368446473600148 +0.9879026940653152, -0.655653384438164 +1.0175542926607877, -0.43487920945718983 +1.0521830432000774, -0.3847057929454891 +1.0857116518200425, -0.6237687414868134 +1.113822456872183, -1.0759751591831979 +1.127771519134326, -1.6278262999543642 +1.1358531261236882, -2.162677401934907 +1.1437206922206329, -2.780733360130821 +1.154980614109118, -3.3148448440508034 +1.1630026850633535, -3.8857900581815734 +1.1727439653448892, -4.483470956502636 +1.1825776798192433, -5.0583379351795585 +1.1925066067209489, -5.606588674271663 +1.2025060352627324, -6.181455652948586 +1.2125837528761867, -6.7677295914475835 +1.222742191183877, -7.361608169827953 +1.2329932677539066, -7.940277468445572 +1.2433264865547584, -8.52655140694457 +1.2537405569112066, -9.124232305265629 +1.264247650366522, -9.710506243764627 +1.274846695333506, -10.289175542382239 +1.2855267423616734, -10.883054120762608 +1.2963022036908216, -11.465525739320917 +1.3071719809996496, -12.04039271799784 +1.318118805535343, -12.641875936259595 +1.3291573035226998, -13.24335915452135 +1.3402902905726477, -13.841040052842416 +1.3515062020101885, -14.457732550866929 +1.362813888910488, -15.078227368832124 +1.3722769772938812, -15.653735366891723 +1.3854731325117333, -16.243153542433667 +1.3973547438476617, -16.856060784032557 +1.4090632568419572, -17.446137042472245 +1.420874218165509, -18.028608661030553 +1.4327907482771107, -18.599673319766787 +1.4447939739427027, -19.193551898147156 +1.4568999828802818, -19.783628156586843 +1.4691051840150156, -20.377506734967213 +1.4813967897951001, -20.998001552932415 +1.4938026483671496, -21.59948477119417 +1.5063377164910114, -22.159142470108343 +1.5189686874818245, -22.734009448785258 +1.5319810919981274, -23.369730610028284 +1.5503850652445754, -24.159464214343892 +1.5639799603575872, -24.804979833235194 +1.577091864439423, -25.383649131852806 +1.590332648013315, -25.93266033493304 +1.5991485597282709, -26.412230425881795 +1.6125853659638256, -26.944511421222998 +1.6261261298930803, -27.490480768350686 +1.6374266090514795, -28.0523004146238 +1.651149220410492, -28.63857435312279 +1.664979203392674, -29.236255251443865 +1.676679311590016, -29.60567750871808 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar1p20.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar1p20.csv new file mode 100644 index 00000000..29793fc2 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure97-Psi14-h_over_deltastar1p20.csv @@ -0,0 +1,93 @@ +0.7068013875603847, -26.869918265109057 +0.7131614495797154, -26.22868653647256 +0.7195169902263636, -25.504427535413875 +0.7259276911653565, -24.78523829427612 +0.7323992399352506, -24.053374653336057 +0.73892848170128, -23.321511012395995 +0.7455151713808225, -22.592182251416403 +0.7521628722872317, -21.85524885055542 +0.7588698502265405, -21.118315449694443 +0.7656342940589052, -20.388986688714844 +0.772459821909966, -19.65712304777479 +0.7793382597832206, -18.950608206439334 +0.7862667343843794, -18.2795816845503 +0.7932648849548937, -17.583206363056682 +0.8003375510982623, -16.848807842156162 +0.8074584711582659, -16.160037160543922 +0.8146493874773431, -15.450987439248003 +0.8219118783639501, -14.719123798307947 +0.829234045255508, -14.00246943713065 +0.8360557659440934, -13.2741701748934 +0.8423984985979034, -12.770270924162588 +0.8510895474474724, -12.141442854222667 +0.8632595380128573, -10.976798228619721 +0.8573466689068527, -11.708575604011386 +0.8715834693731667, -10.270090948753229 +0.8771819887848551, -9.702793534954488 +0.8838658957312924, -9.116764173504784 +0.8909661225023017, -8.526857981431931 +0.898489980164686, -7.938289568940306 +0.9055352696160668, -7.313710883035817 +0.9135637920592995, -6.702254040217596 +0.9216601159848405, -6.09992276525702 +0.9298307497058593, -5.490747314403215 +0.9394061125775106, -4.908877895730807 +0.9450486988231883, -4.242618872552761 +0.9537697070339981, -3.7551517868311493 +0.9636877713672475, -3.0943899172277867 +0.9717956022258277, -2.413500920623491 +0.9811515195849804, -1.7041940616352456 +1.0004372162870838, -0.6000680361354256 +0.9909434484495012, -1.1428820143079435 +1.031345210647035, -0.335331736485756 +1.0642630238597957, -0.4499551233317902 +1.0981344694383857, -0.784421735839512 +1.1240806107267751, -1.3961464241366563 +1.1383171106103778, -2.1088889744849197 +1.144395008479817, -2.500352079373453 +1.1544636566238613, -3.2425609503092083 +1.1630026850633535, -3.8857900581815734 +1.1727439653448892, -4.483470956502636 +1.1825776798192433, -5.0583379351795585 +1.1925066067209489, -5.606588674271663 +1.2025060352627324, -6.181455652948586 +1.2091526546907292, -6.700950103274586 +1.2141318030014858, -7.151883350062697 +1.2295279023115668, -7.8259689810139506 +1.240095429398993, -8.392162006198653 +1.2535128882519249, -9.067723631203172 +1.264247650366522, -9.710506243764627 +1.274846695333506, -10.289175542382239 +1.2855267423616734, -10.883054120762608 +1.2963022036908216, -11.465525739320917 +1.3071699837050745, -12.044195037938536 +1.318118805535343, -12.641875936259595 +1.3291573035226998, -13.24335915452135 +1.3402902905726477, -13.841040052842416 +1.3515062020101885, -14.457732550866929 +1.362813888910488, -15.078227368832124 +1.3722769772938812, -15.653735366891723 +1.3854731325117333, -16.243153542433667 +1.3973547438476617, -16.856060784032557 +1.4090632568419572, -17.446137042472245 +1.420874218165509, -18.028608661030553 +1.4327907482771107, -18.599673319766787 +1.4447939739427027, -19.193551898147156 +1.4568999828802818, -19.783628156586843 +1.4691051840150156, -20.377506734967213 +1.4813967897951001, -20.998001552932415 +1.4938026483671496, -21.59948477119417 +1.5063377164910114, -22.159142470108343 +1.518961724763848, -22.745416408607326 +1.5316868490582785, -23.339294986987703 +1.5445303780661912, -23.914161965664633 +1.5574673243942818, -24.51184286398569 +1.5705222289500536, -25.094314482544 +1.5836817219180728, -25.684390740983687 +1.5969514790084234, -26.274466999423367 +1.6103398056793852, -26.85313629804098 +1.6238329323339036, -27.443212556480667 +1.6374266090514795, -28.0523004146238 +1.651149220410492, -28.63857435312279 +1.664979203392674, -29.236255251443865 +1.678971202292745, -29.765494390832515 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-a-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-a-TBL-TE-suction.csv new file mode 100644 index 00000000..08678029 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-a-TBL-TE-suction.csv @@ -0,0 +1,19 @@ +0.19999999999999982, 54.785276073619634 +0.2486523931334979, 56.467824043858506 +0.31594505029697023, 58.15298263934212 +0.4014490813831109, 59.83814123482574 +0.5045697947407928, 61.337945437932376 +0.634179251046298, 62.837749641039025 +0.8058068247167196, 63.41861375799504 +1.001828976845588, 62.708523691424084 +1.2591700035052644, 61.26354261845711 +1.6174520477738452, 59.63712309098028 +2.010916612288221, 58.006787625636335 +2.5274632060617885, 56.56180655266936 +3.176695751062076, 54.748727320193176 +4.03640313370572, 52.75290432058477 +5.018306494237403, 50.75447069573163 +6.376407955487519, 48.75864769612323 +8.102051650590377, 46.39472653700561 +10.07297266105253, 44.02819475264326 +12.523343790695101, 41.293564808771706 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-b-bluntness.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-b-bluntness.csv new file mode 100644 index 00000000..fed42922 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-b-bluntness.csv @@ -0,0 +1,14 @@ +0.3088227179989663, 39.825126553152316 +0.3921776373865684, 41.69236079153244 +0.4980310394995792, 43.19374137137598 +0.6188651590288712, 45.05752416014725 +0.7859042155364313, 46.558904739990794 +0.9765831820806095, 48.0568338702255 +1.2401745815251595, 49.55821445006903 +1.574912430279955, 51.425448688449144 +1.9570234670535507, 52.923377818683846 +2.4852473438230063, 54.42475839852738 +3.156045118497447, 56.29199263690751 +4.0078991794311065, 57.793373216751036 +4.980310394995792, 59.29130234698574 +6.324555320336747, 54.57317073170732 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-c-bluntness.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-c-bluntness.csv new file mode 100644 index 00000000..e6a8cccd --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-c-bluntness.csv @@ -0,0 +1,12 @@ +0.392735443323626, 40.8343959082498 +0.4986194369496742, 43.053911947161595 +0.6192527919104482, 45.99722059055199 +0.794708090411764, 48.58207137637994 +0.9979104544745524, 51.16348371753101 +1.2395031911454977, 53.743176836343665 +1.6078956647621192, 56.693362369087765 +1.9971649746379956, 59.273055487900436 +2.4806758444186032, 61.85274860671309 +3.1488586334000406, 64.61768793249146 +5.108908145983431, 51.05775154371764 +3.9996578987147675, 65.56454963538121 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-d-bluntness.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-d-bluntness.csv new file mode 100644 index 00000000..c301c1c4 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure98-d-bluntness.csv @@ -0,0 +1,9 @@ +0.7849061712986825, 43.632441760138036 +0.9844805942366371, 47.87575496117344 +1.2347998727349885, 52.11906816220882 +1.5823566265854805, 57.09749784296811 +1.9845636201515835, 61.523727351164794 +2.489004498896005, 65.94995685936152 +3.1235264015857895, 68.72993960310615 +3.9860346388974763, 55.23209663503022 +4.980049040825702, 40.267471958585006 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-b-TBL-TE-suction.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-b-TBL-TE-suction.csv new file mode 100644 index 00000000..c4d24e34 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-b-TBL-TE-suction.csv @@ -0,0 +1,17 @@ +0.19888373359389414, 45.33849381465674 +0.24697069235315255, 47.20494827461479 +0.3134606295749702, 48.705924907762466 +0.39352730388205115, 50.38964045431527 +0.49417695368446257, 51.33719163712655 +0.6207758196502704, 51.364537365260816 +0.797249531297717, 50.290240902843095 +0.9912000118610859, 48.84395572596401 +1.2324158122800868, 47.21362945814951 +1.5831880076211426, 45.403168631990184 +1.9900966489802605, 43.5901034507705 +2.4744012800845496, 41.959777182955975 +3.1443333713626367, 40.148014179266454 +3.9961788121099207, 37.96816899370617 +5.023605497442693, 35.97106272155108 +6.316448405514776, 33.421833176589786 +8.029270565386138, 30.689864718223305 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-b-bluntness.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-b-bluntness.csv new file mode 100644 index 00000000..89a66994 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-b-bluntness.csv @@ -0,0 +1,11 @@ +0.39195718815617164, 31.432105910439134 +0.4974806759264461, 32.93308254358678 +0.6178460083864385, 34.43145482167404 +0.7840792359404558, 36.30051363669247 +0.9844863436141147, 37.61614700137457 +1.2359518866419605, 39.299862547927404 +1.585827422365149, 40.8021413586053 +1.9910250740626105, 42.30181581422269 +2.4725883667492887, 43.98422918324533 +3.1393091820237666, 44.56500036171599 +4.006576751725049, 30.7905664472257 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-c-bluntness.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-c-bluntness.csv new file mode 100644 index 00000000..31a78cb6 --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-c-bluntness.csv @@ -0,0 +1,11 @@ +0.24326243001204642, 30.511567567567624 +0.3088470867765021, 32.735135135135124 +0.3963794007371903, 35.14291891891895 +0.4977632031041067, 37.54810810810815 +0.6250784120054128, 39.953297297297354 +0.8022358538345494, 42.361081081081096 +0.9965857669069371, 44.58205405405411 +1.2378546011813674, 47.16886486486493 +1.6061790599389314, 49.39502702702708 +1.9955574257243194, 51.25016216216221 +2.4882342108564943, 43.2276756756757 diff --git a/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-d-bluntness.csv b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-d-bluntness.csv new file mode 100644 index 00000000..0cad892f --- /dev/null +++ b/test/bpm_data/brooks_airfoil_self_noise_and_prediction_1989/19890016302-figure99-d-bluntness.csv @@ -0,0 +1,10 @@ +0.3117247474485876, 32.205797768319314 +0.39490952907466825, 35.536063499367316 +0.4949542113736202, 38.68169791786494 +0.6203437833736429, 41.827332336362616 +0.7859886659052311, 44.974692281145735 +0.9851076553996511, 48.120326699643385 +1.2213346151802933, 51.26423559185554 +1.5812257372739074, 54.597952375474506 +1.974209677466171, 48.04785459565167 +2.479596231916002, 33.26699643391231 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure21a-loading.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure21a-loading.csv new file mode 100644 index 00000000..b070f763 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure21a-loading.csv @@ -0,0 +1,32 @@ +27.46780855834909, 44.44024425005671 +28.35297928483881, 42.02008647121904 +29.237775626416717, 39.35443915735159 +30.1679037410663, 36.13611948831418 +31.019411024235758, 33.08882686952545 +31.901555472688344, 29.945852163989816 +32.82479646489776, 26.942385978939853 +33.709663003646625, 24.322767952890494 +34.55616288862062, 22.09211245115486 +35.44142721133829, 19.733327056074636 +36.28092297858718, 17.640809558629655 +37.190846007527504, 15.366240712372154 +37.311552642896004, -44.57133292689413 +38.00580786352433, 13.271336511114377 +38.243885468692916, -42.55932155637804 +38.891165782469955, 10.973923499791596 +39.25729082716326, -40.372278554145865 +39.77614931650377, 8.431020953439038 +40.19034382393636, -37.88804078638499 +40.66103925430963, 5.826746023329051 +41.154100283320716, -35.140623796511306 +41.50499124196715, 2.8715654637353083 +41.99022008662526, -32.19285739526039 +42.227975304786455, 0.0740678064621676 +42.66779697941149, -29.44089430288615 +42.949940208679166, -3.3917069183920248 +43.278931989890395, -26.101334091425926 +43.5101318322416, -6.963760160086316 +43.728796019795695, -22.538687270640878 +43.86882117660312, -10.200270924570788 +44.06468168317467, -14.23520431160432 +44.017618379885874, -18.602591500325232 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure21a-thickness.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure21a-thickness.csv new file mode 100644 index 00000000..a4b42867 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure21a-thickness.csv @@ -0,0 +1,33 @@ +45.675301173153116, -44.329413419416284 +45.84517832688696, 44.35344043407556 +46.543437386155475, -42.78066326459607 +46.800795814282274, 42.71018483080271 +47.538903467601585, -41.00264914940615 +47.825268926708006, 40.800500879218134 +48.44206806891518, -39.19330703963155 +48.757580953343144, 39.01420349785441 +49.403281830773494, -37.16700553074055 +49.64752508745845, 36.885534457362766 +50.27199912035772, -35.237235160092894 +50.543584175133304, 34.98185737797929 +51.17849592071278, -32.92499828904772 +51.41873230554644, 32.612913449443795 +52.11590374198088, -30.52887245597769 +52.33422820989278, 30.207888175032593 +52.94244769787097, -27.97286086650773 +53.18882026874184, 27.606381019092048 +53.882436175135346, -24.914833428917333 +54.07645006279466, 24.590944545031448 +54.71974803039867, -21.62696641415532 +54.933150203352, 21.164012254777553 +55.49295964231696, -17.982235701455878 +55.66835204044608, 17.546986025552066 +56.14497523192301, -14.329388858704007 +56.18895297956364, 14.507448522793688 +56.58819392964369, 11.368511825949724 +56.59425792525692, -11.147932732590164 +56.946137104076804, 7.6427267798434 +56.92257269375263, -7.808793704155747 +57.16989344641056, 4.237696006930399 +57.211991989785524, -3.4812785085426157 +57.2600307737612, 1.5257453020058662 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-BVS.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-BVS.csv new file mode 100644 index 00000000..75c86e18 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-BVS.csv @@ -0,0 +1,8 @@ +5010.349561349019, 13.116329845509398 +6334.487056773419, 18.74400387387881 +8076.718403208972, 24.87084821630927 +10073.104384257105, 30.4000034640466 +12629.47291760871, 33.98914772255189 +16183.851993194035, 35.78805734671567 +20150.968433735346, 27.13891545330977 +25217.712560009088, 14.609574540831204 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-LBLVS.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-LBLVS.csv new file mode 100644 index 00000000..9ee71058 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-LBLVS.csv @@ -0,0 +1,9 @@ +198.42897216086706, 18.483400097993652 +248.6573977210179, 17.59518736455899 +313.3097431905787, 16.4086612056036 +402.45881688342297, 15.33468861357688 +497.44090206077436, 14.48334458688683 +626.7892339988555, 13.446063660996117 +807.355300418456, 12.3721795892737 +1000.6631194242536, 11.670169315952627 +1247.032872006364, 10.483289075780007 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-pressure-2.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-pressure-2.csv new file mode 100644 index 00000000..5f10bacd --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-pressure-2.csv @@ -0,0 +1,13 @@ +2013.676498773692, 11.941395528354839 +2511.296793612552, 17.07256348791973 +3166.0568401523524, 20.811130020098304 +4035.1922454063997, 23.405837179998343 +5030.569628232357, 25.452603656226813 +6340.558901400064, 27.002240103456963 +8019.520714421171, 27.79160900202556 +10070.488536286177, 28.161324968076613 +16163.968731498817, 25.191645799124423 +20250.3021756469, 22.064754569719767 +25370.413605592672, 19.1866053954229 +31780.789565639818, 15.139368562119472 +40470.91236116183, 10.445933507361687 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-pressure.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-pressure.csv new file mode 100644 index 00000000..f9053ae1 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-pressure.csv @@ -0,0 +1,23 @@ +2010.8876869005044, 11.860510100292665 +2146.9242301096574, 13.69930116578243 +2363.3573266586254, 15.783375906042195 +2683.2460874591607, 18.41265549514766 +3006.059628226959, 19.949529019290416 +3557.7008901273443, 22.105098238166462 +4263.972253348358, 24.153833751407852 +4849.044100926952, 25.067649929050695 +5652.165317410403, 26.24521446100796 +6368.701667608679, 27.208016590672152 +7174.081479418778, 27.53645462243493 +9262.140705145814, 28.315381891406155 +12759.498651554895, 27.358038614595827 +14191.029118838314, 26.356543497060343 +16202.993569330958, 24.883661830223488 +18241.874276810493, 23.486004386500568 +20744.004088345788, 21.596172145101768 +23319.767178201688, 20.425528197837068 +26903.6447818636, 18.005793779860532 +29715.54122783614, 16.44394214928142 +32309.383369317067, 14.945880880961255 +35509.787253687995, 13.122470371876311 +40027.73573824793, 10.456239799934792 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-suction-2.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-suction-2.csv new file mode 100644 index 00000000..388a2139 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-suction-2.csv @@ -0,0 +1,15 @@ +626.6083825809217, 10.958643109918356 +790.065753409601, 15.617555245995703 +1242.1697918773516, 24.26342188814217 +1600.8258416394856, 27.554960883561215 +2006.8311506861367, 30.049640099592303 +2501.857182585286, 32.07153237030998 +3153.2277908381757, 33.272929940389254 +3995.9323298352647, 34.05164305739392 +5035.79850404155, 34.40731764010674 +6345.720882690218, 34.016766057496234 +7995.183143191944, 32.3327557883253 +12550.270321868575, 27.22318678301177 +16160.330781047569, 23.251457769283775 +20131.787659197125, 18.930427634753173 +25194.401747478736, 14.99822809458616 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-suction.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-suction.csv new file mode 100644 index 00000000..abbdf58c --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-TBL-TE-suction.csv @@ -0,0 +1,23 @@ +623.5041083679228, 10.979919648752386 +797.3723896068367, 15.86659236878451 +914.6844243506171, 18.65840282047281 +1052.665621053777, 21.223457597568775 +1273.3768782596662, 24.56892758838797 +1465.645287624041, 26.45766319134912 +1630.5250159716036, 27.80429307403105 +2058.366163753664, 30.28924685929541 +2389.5664065334568, 31.74669236026473 +2562.2905545671856, 32.146922162813 +3101.543119091579, 33.197776202031065 +3520.4584860909235, 33.64958383522327 +4040.1675853536376, 34.02712293310037 +5008.1689377971115, 34.44445190776429 +6193.860969528456, 34.05578580763557 +7890.307309560729, 32.421878030703425 +9123.276529496332, 30.993797665350137 +10183.762077144207, 29.6541313799405 +12619.745619231042, 27.347734851174273 +15866.75704575442, 23.42498707249716 +19694.355062369308, 19.41476647977887 +23223.470138410667, 16.397861728477928 +28300.50548445084, 12.076123431512862 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-separation-2.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-separation-2.csv new file mode 100644 index 00000000..4d116cbc --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-separation-2.csv @@ -0,0 +1,17 @@ +313.17415114286615, 12.677530378986965 +401.234553108405, 15.505170443387051 +497.6304247432492, 17.766739714309466 +627.1909107319838, 18.96813728438874 +795.29099498784, 19.896822388555364 +996.2144404153433, 20.72420308126705 +1255.4822350652917, 21.229122897044533 +1599.84677972037, 22.28162931527637 +1994.4760200394119, 24.278647380483285 +2514.0376721195903, 26.47501317099365 +3168.9818833078452, 28.770875783547126 +4047.2768364576204, 30.53165882504313 +5034.142105600009, 31.571658211878095 +6343.633618441638, 31.181106629267596 +8080.168668226837, 28.55223063190435 +10065.781721656165, 24.131703675330648 +12536.00881281385, 17.422749811765406 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-separation.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-separation.csv new file mode 100644 index 00000000..aae8c705 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-separation.csv @@ -0,0 +1,25 @@ +313.1687286816831, 12.528285145922304 +435.0033956057982, 16.41921282587721 +503.14068094163923, 17.767093795526705 +606.7970463744182, 18.792955602161584 +662.7043433039073, 19.119152923539573 +786.1221862286804, 19.945489964262386 +1001.7205732222211, 20.774128532897222 +1118.353743242615, 20.926914578134237 +1274.066987137666, 21.329091827377297 +1551.2591652562228, 22.22093979464225 +1721.8661099419892, 23.03021602204793 +2029.3238092221713, 24.421342111029098 +2534.920258102742, 26.587212656705077 +3134.2347313834, 28.65681104856634 +3913.3790254410314, 30.390923809976066 +4267.271237022486, 30.820120828296247 +5045.15429584945, 31.422483795056877 +5437.452912111732, 31.424891547334077 +6484.691537748657, 30.908198531083514 +7399.467469502746, 29.34537255851135 +8366.20863897123, 27.83199992927971 +9717.992699750635, 24.787249640920024 +10929.20283449256, 21.597190322360603 +12453.970452561225, 17.78072592239026 +13635.30214525935, 14.24156612905135 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-tip_vortex_shedding.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-tip_vortex_shedding.csv new file mode 100644 index 00000000..62210ae9 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure22b-tip_vortex_shedding.csv @@ -0,0 +1,9 @@ +8020.001266277251, 11.587845432945429 +10053.821213623798, 13.883531004890287 +12469.888098144867, 15.58153141637775 +16059.356034825221, 16.684490473829875 +19930.193683318867, 16.940175015676665 +25128.22692997341, 17.203122396604954 +31782.034789984347, 16.50603042174179 +40181.98219065483, 15.131985968740118 +50181.631852600156, 13.28849751932642 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-BVS.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-BVS.csv new file mode 100644 index 00000000..f30f8bf9 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-BVS.csv @@ -0,0 +1,7 @@ +9941.972169538814, 14.470046082949303 +12403.632741625106, 20.86929883251517 +15830.837188848589, 27.55034919298457 +19775.415289360157, 31.904962374361943 +24709.593226327903, 34.648965200983305 +31181.5527071823, 30.711917667135268 +39606.63614707291, 14.00929176596177 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-LBLVS.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-LBLVS.csv new file mode 100644 index 00000000..b1347a8f --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-LBLVS.csv @@ -0,0 +1,11 @@ +3143.5208349573836, 11.026679997895073 +4014.7674141702964, 13.770682824516435 +4994.385283181881, 16.753294592583124 +6266.520776168983, 20.809646597153836 +7963.3934537958, 27.2520880161779 +9945.931140487071, 32.62078919869795 +12373.77280867454, 35.126183083873975 +15793.735477476384, 32.79974590478195 +19887.81327391852, 24.269476248111204 +24790.462887453356, 15.321640943911113 +31290.54531844659, 10.072244232113732 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-TBL-TE-pressure.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-TBL-TE-pressure.csv new file mode 100644 index 00000000..e2cd4bd3 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-TBL-TE-pressure.csv @@ -0,0 +1,13 @@ +2511.0253377277877, 12.367806586929888 +3148.373548383108, 15.99220423842852 +4032.4887730018436, 18.53432916607153 +4993.338394193654, 20.6605160087505 +6299.041717758706, 22.24034980513281 +8004.396359258761, 23.374692717691197 +9999.749237827325, 24.07858909495493 +12451.696713757881, 23.88173671826253 +15856.625696493944, 23.100292435029054 +19752.693310797957, 21.44593710767473 +30942.437754178933, 17.07143984784358 +39904.05891719062, 14.193548387096776 +49909.949830771715, 10.7373271889401 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-TBL-TE-suction.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-TBL-TE-suction.csv new file mode 100644 index 00000000..56f2f318 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-TBL-TE-suction.csv @@ -0,0 +1,16 @@ +1259.7826091164259, 15.145503341577651 +1610.6354124861155, 19.8883473823145 +2009.2285326524916, 23.22697168116313 +2496.359179643009, 25.822335248891953 +3144.2351077626236, 27.726847640598102 +3958.8106442089597, 29.199788003397963 +4989.057778188725, 30.37786514911179 +6280.970541728588, 30.921658986175117 +7988.7339715648395, 30.237551106323707 +9922.509916107076, 29.517922519215546 +12364.933955515506, 28.257654269411816 +15628.52333447935, 25.963599732373083 +19747.913064098357, 22.87759075634674 +24844.02188391758, 19.81544267446494 +31291.803738793275, 15.787517975142485 +39683.66648990339, 11.14598446861774 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-separation.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-separation.csv new file mode 100644 index 00000000..35261d34 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-separation.csv @@ -0,0 +1,21 @@ +203.77934681456463, 14.406973335037328 +252.4935887805937, 15.083032002465778 +319.5369537859144, 14.987588425887651 +403.1950712414183, 14.894603107779979 +501.1625746117447, 15.162568316280883 +633.0252599344444, 15.083032002465778 +798.7686898591635, 15.083032002465778 +1012.5711596465026, 15.301756865457342 +1249.0723902746463, 15.117118994100828 +1607.2978922786547, 14.277726825087768 +2009.0498928609716, 14.307552942768439 +2516.192500741679, 14.957074446891852 +3161.9748226694383, 18.51632449011811 +4001.553096351974, 22.688692011035855 +4972.824318246206, 25.743935168131344 +6223.003920347921, 27.510581036077014 +7988.490396464756, 27.530465114530784 +9993.994150489743, 26.41695672111922 +12449.804303674979, 24.780781122636924 +15858.968460654405, 21.778274536673585 +19865.565160546397, 16.70127810109465 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-tip_vortex_shedding.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-tip_vortex_shedding.csv new file mode 100644 index 00000000..1f8c1b7b --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure23c-tip_vortex_shedding.csv @@ -0,0 +1,9 @@ +7942.21491376868, 12.188489035565809 +9909.524963524653, 14.454323538603461 +12420.008734379138, 16.109050450680726 +15967.660934189358, 17.158929793040194 +19839.670190897188, 17.439295299238466 +24900.721371992255, 17.628194044549353 +31188.040614858644, 16.991903534028467 +39434.66113042424, 15.303636267957692 +49436.27555862587, 13.603077709534595 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-BVS.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-BVS.csv new file mode 100644 index 00000000..b641ab95 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-BVS.csv @@ -0,0 +1,6 @@ +4994.115408307409, 1.602885530561565 +6276.071191304018, 6.65125568875149 +8010.780804897988, 12.603706271849575 +9909.749176933228, 18.60237506951657 +12477.560399890495, 19.73699649061186 +15895.162583471803, 14.993235066428056 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-LBLVS.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-LBLVS.csv new file mode 100644 index 00000000..b0c785c1 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-LBLVS.csv @@ -0,0 +1,20 @@ +201.2812406499209, 7.253951720427828 +250.73843437497516, 6.283038663828478 +316.4108150398763, 5.048560666390117 +400.9818712388363, 4.047077982702362 +500.61716728644495, 3.369454192744847 +635.3540946068531, 2.420578519153274 +799.2259394818263, 2.1580710039622346 +1012.5194339840486, 2.5320987392646686 +1274.4160056606802, 3.6608802639560523 +1601.9825706643053, 5.269353362179551 +1988.6534224049879, 7.835985813068795 +2502.06970904748, 10.6977091578175 +3157.401528408497, 13.850344832458767 +3984.3751657069133, 20.393341952883162 +4972.583170580966, 27.12028511129212 +6224.629985938435, 28.57590788722453 +7988.9198181633865, 24.846749652543327 +9973.993080264081, 16.9298382774627 +12422.325321243601, 8.172375352124739 +15843.63370467617, 2.5952494740627756 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-TBL-TE-pressure.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-TBL-TE-pressure.csv new file mode 100644 index 00000000..c4e065fb --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-TBL-TE-pressure.csv @@ -0,0 +1,12 @@ +2498.3079772475066, 3.327135634773356 +3135.854244300608, 6.765335405456966 +4007.8854957267504, 9.587163935965016 +5014.870201077561, 11.84269321568759 +6299.520235957786, 12.76474289551605 +7971.986558368031, 12.86356786785241 +9933.672243983749, 12.451578619075448 +12400.778213751988, 10.976681291640553 +15950.448199203756, 8.082785401470161 +19976.885057958996, 4.957396815207581 +22370.16029559359, 2.9190776677960883 +24994.16617513613, 1.0421580768914893 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-TBL-TE-suction.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-TBL-TE-suction.csv new file mode 100644 index 00000000..038e247c --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-TBL-TE-suction.csv @@ -0,0 +1,14 @@ +1002.4140941030279, 3.174494913557389 +1247.9004597288588, 7.680288381472579 +1595.506400444829, 11.630774164766628 +1995.993712824503, 14.970514881844544 +2481.880879461515, 17.22123174780046 +3132.9521163195836, 18.791616831740136 +3974.587999586483, 19.63236648529277 +4968.843754337062, 19.87515026176584 +6264.5808190245025, 18.94340682660272 +7942.056667599996, 16.996938495373804 +9961.175115173151, 14.509564605073564 +12401.974294177207, 11.136972115655382 +15921.245759931284, 6.196374464936902 +19921.47255969292, 0.947909506838613 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-separation.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-separation.csv new file mode 100644 index 00000000..3a537b24 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-separation.csv @@ -0,0 +1,19 @@ +201.2812406499209, 5.00774952032306 +250.27937681046888, 3.57508066949881 +315.83152300394363, 2.238236686378606 +401.8723526500628, 1.3351943839696574 +501.62246632164727, 1.6294855218814632 +629.2638178388403, 1.726487923714629 +804.84699761042, 2.5293735888515556 +999.5178792857503, 3.3513647452337665 +1247.635702973381, 3.891661140667267 +1599.3581030374878, 4.959897393040293 +2002.0347659536415, 8.34454093495539 +2524.856749019957, 11.081835509921056 +3144.0309002275517, 13.315489906345661 +3984.3751657069133, 15.177941219514906 +4974.501911432466, 15.886644845277068 +6265.789340573026, 14.764839705643382 +7988.9198181633865, 11.93108700194091 +9955.732469427745, 7.84771405299513 +12422.325321243601, 1.2673640023779456 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-tip_vortex_shedding.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-tip_vortex_shedding.csv new file mode 100644 index 00000000..fba793d6 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure24b-tip_vortex_shedding.csv @@ -0,0 +1,8 @@ +4953.10200887433, 1.3814538122330475 +6235.646127072764, 3.040240883110222 +7903.849333016873, 4.104494378620295 +9893.51440860238, 4.843250862207306 +12410.589479475359, 4.837320632113773 +15855.863039523641, 3.8768776202237234 +19744.53588711629, 2.859483927163815 +24639.136197855423, 1.2968103460166986 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-BVS.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-BVS.csv new file mode 100644 index 00000000..861ee51a --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-BVS.csv @@ -0,0 +1,5 @@ +12486.277716697496, 20.72611960373807 +16015.174911059583, 26.923531269371573 +20110.028047857428, 30.085498076000885 +25087.074219642876, 32.096837389910995 +31453.58207603152, 19.412390788196348 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-LBLVS.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-LBLVS.csv new file mode 100644 index 00000000..466dc779 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-LBLVS.csv @@ -0,0 +1,6 @@ +5010.814073825407, 16.001181300366085 +6336.914670212687, 22.754501723495522 +8026.293681229403, 28.29881051240365 +10002.58016893442, 29.145136200423394 +12570.730850095759, 25.47772488567118 +16028.318263246156, 15.039708066761008 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-TBL-TE-pressure.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-TBL-TE-pressure.csv new file mode 100644 index 00000000..c2e4b126 --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-TBL-TE-pressure.csv @@ -0,0 +1,12 @@ +2514.149262896887, 16.18685598661972 +3162.261593238226, 19.256950373688575 +4002.5270624573864, 21.401536860080242 +5036.602899286703, 23.20214271511948 +6349.475309461834, 24.701926338319744 +8016.087750707262, 25.6187791670078 +10103.483114819483, 25.839717423595594 +12562.18604186773, 25.388601036269428 +16032.413333720913, 24.18952268447584 +20045.722006232605, 22.504064375021933 +24953.198529465128, 20.98445595854922 +31748.287693059454, 18.220622463420625 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-TBL-TE-suction.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-TBL-TE-suction.csv new file mode 100644 index 00000000..028af24b --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-TBL-TE-suction.csv @@ -0,0 +1,14 @@ +1595.7553512787126, 15.110235207429326 +1991.7047093099825, 19.165545795857255 +2484.9634030819257, 22.427426051766687 +3139.3190442720397, 24.75482169382098 +3990.5801054184594, 26.49331571129487 +5006.766745499279, 27.910911238727937 +6411.902608999668, 28.975871062819447 +8112.809755313637, 29.10281991602241 +10065.475612866834, 28.73635948958468 +12453.132287485305, 27.903858524661104 +15904.290067362292, 25.900887729681045 +19918.145890734908, 23.502964946958443 +25037.18244333652, 21.09784909765026 +31524.212599115745, 17.358167931788685 diff --git a/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-separation.csv b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-separation.csv new file mode 100644 index 00000000..4e8c144f --- /dev/null +++ b/test/bpm_data/pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021/figure25b-separation.csv @@ -0,0 +1,17 @@ +200.8497572110692, 19.017438800453803 +251.1971097486726, 18.75173978643025 +315.5580550387623, 17.80437198095884 +400.6506030074118, 17.049731575807904 +502.2945716438663, 16.873413724137123 +629.6620858014053, 16.48551445046141 +798.6408930727855, 16.252774886255978 +1002.5834729624327, 16.203405887788158 +1253.78806288201, 15.744979473444133 +3147.449707316153, 16.591305161463872 +4002.7043129699496, 19.271336506859726 +5022.701448886523, 20.992198739166533 +6298.999380023496, 21.556415864513035 +8027.929957418758, 21.50469596135627 +9964.14219636752, 20.945040292868917 +12484.806710398032, 19.588568287348387 +15965.44097879352, 16.760570299067822 diff --git a/test/bpm_itr_tests.jl b/test/bpm_itr_tests.jl new file mode 100644 index 00000000..945597f4 --- /dev/null +++ b/test/bpm_itr_tests.jl @@ -0,0 +1,35 @@ +module BPMITRTests + +using SafeTestsets: @safetestset +using Test: @testset + +@testset "BPM.jl comparisons" begin + @safetestset "figure 22b" begin + include("itr_figure22b_bpmjl.jl") + end + + @safetestset "figure 23c" begin + include("itr_figure23c_bpmjl.jl") + end + + @safetestset "figure 24b" begin + include("itr_figure24b_bpmjl.jl") + end + +end + +@testset "PAS/ROTONET/BARC comparisons" begin + @safetestset "figure 22b" begin + include("itr_figure22b_barc.jl") + end + + @safetestset "figure 23c" begin + include("itr_figure23c_barc.jl") + end + + @safetestset "figure 24b" begin + include("itr_figure24b_barc.jl") + end +end + +end # module diff --git a/test/bpm_shape_function_tests.jl b/test/bpm_shape_function_tests.jl new file mode 100644 index 00000000..fc92e206 --- /dev/null +++ b/test/bpm_shape_function_tests.jl @@ -0,0 +1,514 @@ +module BPMShapeFunctionTests + +using AcousticAnalogies: AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using DelimitedFiles: DelimitedFiles +using FLOWMath: linear +using Test + +@testset "shape functions" begin + + @testset "TBL-TE" begin + @testset "St_1" begin + @test isapprox(AcousticAnalogies.St_1(0.093), 0.081; atol=0.0022) + @test isapprox(AcousticAnalogies.St_1(0.116), 0.071; atol=0.002) + @test isapprox(AcousticAnalogies.St_1(0.163), 0.059; atol=0.0004) + @test isapprox(AcousticAnalogies.St_1(0.209), 0.051; atol=0.0002) + end + + @testset "K_1" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure77.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + Re_c_bpm = bpm[:, 1] + K_1_bpm = bpm[:, 2] + + Re_c_jl = range(minimum(Re_c_bpm), maximum(Re_c_bpm); length=50) + K_1_jl = AcousticAnalogies.K_1.(Re_c_jl) + + K_1_interp = linear(Re_c_bpm, K_1_bpm, Re_c_jl) + + vmin, vmax = extrema(K_1_bpm) + err = abs.(K_1_jl .- K_1_interp)./(vmax - vmin) + @test maximum(err) < 0.012 + end + + @testset "A" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure78-A_min.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_St_peak_bpm = bpm[:, 1] + A = bpm[:, 2] + + St_St_peak_jl = range(minimum(St_St_peak_bpm), maximum(St_St_peak_bpm); length=50) + A_jl = AcousticAnalogies.A.(St_St_peak_jl, 9.5e4) + + # Interpolate: + A_interp = linear(St_St_peak_bpm, A, St_St_peak_jl) + + # Check error. + vmin, vmax = extrema(A) + err = abs.(A_jl .- A_interp)./(vmax - vmin) + @test maximum(err) < 0.057 + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure78-A_max.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_St_peak_bpm = bpm[:, 1] + A = bpm[:, 2] + + St_St_peak_jl = range(minimum(St_St_peak_bpm), maximum(St_St_peak_bpm); length=50) + A_jl = AcousticAnalogies.A.(St_St_peak_jl, 8.58e5) + + # Interpolate: + A_interp = linear(St_St_peak_bpm, A, St_St_peak_jl) + + # Check error. + vmin, vmax = extrema(A) + err = abs.(A_jl .- A_interp)./(vmax - vmin) + @test maximum(err) < 0.021 + end + + @testset "B" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure78-B_min.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_St_peak_bpm = bpm[:, 1] + B = bpm[:, 2] + + St_St_peak_jl = range(minimum(St_St_peak_bpm), maximum(St_St_peak_bpm); length=50) + B_jl = AcousticAnalogies.B.(St_St_peak_jl, 9.5e4) + + # Interpolate: + B_interp = linear(St_St_peak_bpm, B, St_St_peak_jl) + + # Check error. + vmin, vmax = extrema(B) + err = abs.(B_jl .- B_interp)./(vmax - vmin) + @test maximum(err) < 0.057 + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure78-B_max.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_St_peak_bpm = bpm[:, 1] + B = bpm[:, 2] + + St_St_peak_jl = range(minimum(St_St_peak_bpm), maximum(St_St_peak_bpm); length=50) + B_jl = AcousticAnalogies.B.(St_St_peak_jl, 8.58e5) + + # Interpolate: + B_interp = linear(St_St_peak_bpm, B, St_St_peak_jl) + + # Check error. + vmin, vmax = extrema(B) + err = abs.(B_jl .- B_interp)./(vmax - vmin) + @test maximum(err) < 0.020 + end + + @testset "St_2" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure80-M0.093.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm[:, 1] + St_2 = bpm[:, 2] + + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + St_2_jl = AcousticAnalogies.St_2.(AcousticAnalogies.St_1(0.093), alpha_deg_jl.*pi/180) + + # Interpolate: + St_2_interp = linear(alpha_deg, St_2, alpha_deg_jl) + + # Check error. + vmin, vmax = extrema(St_2) + err = abs.(St_2_jl .- St_2_interp)./(vmax - vmin) + @test maximum(err) < 0.023 + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure80-M0.209.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm[:, 1] + St_2 = bpm[:, 2] + + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=50) + St_2_jl = AcousticAnalogies.St_2.(AcousticAnalogies.St_1(0.209), alpha_deg_jl.*pi/180) + + # Interpolate: + St_2_interp = linear(alpha_deg, St_2, alpha_deg_jl) + + # Check error. + vmin, vmax = extrema(St_2) + err = abs.(St_2_jl .- St_2_interp)./(vmax - vmin) + @test maximum(err) < 0.011 + + end + + @testset "K_2" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure82-M0.093.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm[:, 1] + K_2_K_1 = bpm[:, 2] + + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=200) + K_2_K_1_jl = AcousticAnalogies.K_2.(1e6, 0.093, alpha_deg_jl.*pi/180) .- AcousticAnalogies.K_1(1e6) + + # Interpolate: + K_2_K_1_interp = linear(alpha_deg, K_2_K_1, alpha_deg_jl) + + # Check error. + vmin, vmax = extrema(K_2_K_1) + err = abs.(K_2_K_1_jl .- K_2_K_1_interp)./(vmax - vmin) + # The curve is almost vertical at low angles of attack, so a small error in the digitization results in big differences. + @test maximum(err[2:end]) < 0.027 + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure82-M0.116.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm[:, 1] + K_2_K_1 = bpm[:, 2] + + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=200) + K_2_K_1_jl = AcousticAnalogies.K_2.(1e6, 0.116, alpha_deg_jl.*pi/180) .- AcousticAnalogies.K_1(1e6) + + # Interpolate: + K_2_K_1_interp = linear(alpha_deg, K_2_K_1, alpha_deg_jl) + + # Check error. + vmin, vmax = extrema(K_2_K_1) + err = abs.(K_2_K_1_jl .- K_2_K_1_interp)./(vmax - vmin) + # There's a branch for low angles of attack that sets K_2 - K_1 to + # -1000, but I can't see that in the digitized plots, so the first + # point is bad. + @test K_2_K_1_jl[1] ≈ -1000 + @test maximum(err[2:end]) < 0.022 + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure82-M0.163.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm[:, 1] + K_2_K_1 = bpm[:, 2] + + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=200) + K_2_K_1_jl = AcousticAnalogies.K_2.(1e6, 0.163, alpha_deg_jl.*pi/180) .- AcousticAnalogies.K_1(1e6) + + # Interpolate: + K_2_K_1_interp = linear(alpha_deg, K_2_K_1, alpha_deg_jl) + + # Check error. + vmin, vmax = extrema(K_2_K_1) + err = abs.(K_2_K_1_jl .- K_2_K_1_interp)./(vmax - vmin) + # There's a branch for low angles of attack that sets K_2 - K_1 to + # -1000, but I can't see that in the digitized plots, so the first + # point is bad. + @test K_2_K_1_jl[1] ≈ -1000.0 + @test maximum(err[2:end]) < 0.020 + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure82-M0.209.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + alpha_deg = bpm[:, 1] + K_2_K_1 = bpm[:, 2] + + alpha_deg_jl = range(minimum(alpha_deg), maximum(alpha_deg); length=200) + K_2_K_1_jl = AcousticAnalogies.K_2.(1e6, 0.209, alpha_deg_jl.*pi/180) .- AcousticAnalogies.K_1(1e6) + + # Interpolate: + K_2_K_1_interp = linear(alpha_deg, K_2_K_1, alpha_deg_jl) + + # Check error. + vmin, vmax = extrema(K_2_K_1) + err = abs.(K_2_K_1_jl .- K_2_K_1_interp)./(vmax - vmin) + @test maximum(err) < 0.024 + end + + end + + @testset "LBL-VS" begin + @testset "St_1_prime" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure86-St_1_prime.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + Re_c_bpm = bpm[:, 1] + St_1_prime_bpm = bpm[:, 2] + + Re_c_jl = 10.0.^(range(4, 7; length=100)) + St_1_prime_jl = AcousticAnalogies.St_1_prime.(Re_c_jl) + + St_1_prime_interp = linear(Re_c_bpm, St_1_prime_bpm, Re_c_jl) + vmin, vmax = extrema(St_1_prime_bpm) + err = abs.(St_1_prime_interp .- St_1_prime_jl)./(vmax - vmin) + @test maximum(err) < 0.04 + end + + @testset "G1" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure85-G1.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + e_bpm = bpm[:, 1] + G1_bpm = bpm[:, 2] + + e_jl = 10.0.^(range(-1, 1; length=101)) + G1_jl = AcousticAnalogies.G1.(e_jl) + + G1_interp = linear(e_jl, G1_jl, e_bpm) + vmin, vmax = extrema(G1_bpm) + err = abs.(G1_interp .- G1_bpm)./(vmax - vmin) + @test maximum(err) < 0.033 + end + + @testset "St_peak_prime_alphastar" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure87.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + alphastar_bpm = bpm[:, 1] + St_peak_ratio_bpm = bpm[:, 2] + + St_1_prime = 0.25 # Just make up a value, since we're multiplying and then dividing by it anyway. + alphastar_jl = range(0.0*pi/180, 7.0*pi/180; length=21) + St_peak_ratio_jl = AcousticAnalogies.St_peak_prime.(St_1_prime, alphastar_jl)./St_1_prime + + St_peak_ratio_interp = linear(alphastar_jl.*180/pi, St_peak_ratio_jl, alphastar_bpm) + vmin, vmax = extrema(St_peak_ratio_bpm) + err = abs.(St_peak_ratio_interp .- St_peak_ratio_bpm)./(vmax - vmin) + @test maximum(err) < 0.031 + end + + @testset "G2" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure89.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + Re_ratio_bpm = bpm[:, 1] + G2_bpm = bpm[:, 2] + + Re_ratio_jl = 10.0.^range(-1, 1, length=51) + G2_jl = AcousticAnalogies.G2.(Re_ratio_jl) + + G2_interp = linear(Re_ratio_jl, G2_jl, Re_ratio_bpm) + vmin, vmax = extrema(G2_interp) + err = abs.(G2_interp .- G2_bpm)./(vmax - vmin) + @test maximum(err) < 0.024 + end + + @testset "G2 + G3" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure88-G2-alpha0.csv") + alphastar = 0.0*pi/180 + bpm = DelimitedFiles.readdlm(fname, ',') + Re_c_bpm = bpm[:, 1] + G2_bpm = bpm[:, 2] + + Re_c_jl = 10.0.^range(log10(first(Re_c_bpm)), log10(last(Re_c_bpm)), length=51) + Re_c0 = AcousticAnalogies.Re_c0(alphastar) + Re_ratio_jl = Re_c_jl./Re_c0 + G2_jl = AcousticAnalogies.G2.(Re_ratio_jl) .+ AcousticAnalogies.G3.(alphastar) + + G2_interp = linear(Re_c_jl, G2_jl, Re_c_bpm) + vmin, vmax = extrema(G2_interp) + err = abs.(G2_interp .- G2_bpm)./(vmax - vmin) + @test maximum(err) < 0.013 + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure88-G2-alpha6.csv") + alphastar = 6.0*pi/180 + bpm = DelimitedFiles.readdlm(fname, ',') + Re_c_bpm = bpm[:, 1] + G2_bpm = bpm[:, 2] + + Re_c_jl = 10.0.^range(log10(first(Re_c_bpm)), log10(last(Re_c_bpm)), length=51) + Re_c0 = AcousticAnalogies.Re_c0(alphastar) + Re_ratio_jl = Re_c_jl./Re_c0 + G2_jl = AcousticAnalogies.G2.(Re_ratio_jl) .+ AcousticAnalogies.G3.(alphastar) + + G2_interp = linear(Re_c_jl, G2_jl, Re_c_bpm) + vmin, vmax = extrema(G2_interp) + err = abs.(G2_interp .- G2_bpm)./(vmax - vmin) + @test maximum(err) < 0.030 + end + + end + + @testset "TEB-VS" begin + @testset "St_3prime_peak" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure95-0Psi.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + h_over_deltastar_0Psi = bpm[:, 1] + St_3prime_peak_0Psi = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure95-14Psi.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + h_over_deltastar_14Psi = bpm[:, 1] + St_3prime_peak_14Psi = bpm[:, 2] + + h_over_deltastar_jl = 10.0.^(range(-1, 1; length=101)) + St_3prime_peak_0Psi_jl = AcousticAnalogies.St_3prime_peak.(h_over_deltastar_jl, 0.0*pi/180) + St_3prime_peak_14Psi_jl = AcousticAnalogies.St_3prime_peak.(h_over_deltastar_jl, 14.0*pi/180) + + St_3prime_peak_0Psi_interp = linear(h_over_deltastar_jl, St_3prime_peak_0Psi_jl, h_over_deltastar_0Psi) + vmin, vmax = extrema(St_3prime_peak_0Psi) + err = abs.(St_3prime_peak_0Psi_interp .- St_3prime_peak_0Psi)./(vmax - vmin) + @test maximum(err) < 0.070 + + St_3prime_peak_14Psi_interp = linear(h_over_deltastar_jl, St_3prime_peak_14Psi_jl, h_over_deltastar_14Psi) + vmin, vmax = extrema(St_3prime_peak_14Psi) + err = abs.(St_3prime_peak_14Psi_interp .- St_3prime_peak_14Psi)./(vmax - vmin) + @test maximum(err) < 0.049 + end + + @testset "G4" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure96-0Psi.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + h_over_deltastar_0Psi = bpm[:, 1] + G4_0Psi = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure96-14Psi.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + h_over_deltastar_14Psi = bpm[:, 1] + G4_14Psi = bpm[:, 2] + + h_over_deltastar_jl = 10.0.^(range(-1, 1; length=51)) + G4_0Psi_jl = AcousticAnalogies.G4.(h_over_deltastar_jl, 0.0*pi/180) + G4_14Psi_jl = AcousticAnalogies.G4.(h_over_deltastar_jl, 14.0*pi/180) + + G4_0Psi_interp = linear(h_over_deltastar_jl, G4_0Psi_jl, h_over_deltastar_0Psi) + vmin, vmax = extrema(G4_0Psi) + err = abs.(G4_0Psi_interp .- G4_0Psi)./(vmax - vmin) + @test maximum(err) < 0.033 + + G4_14Psi_interp = linear(h_over_deltastar_jl, G4_14Psi_jl, h_over_deltastar_14Psi) + vmin, vmax = extrema(G4_14Psi) + err = abs.(G4_14Psi_interp .- G4_14Psi)./(vmax - vmin) + @test maximum(err) < 0.024 + + end + + @testset "G5, Psi = 14°" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p25.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_0p25 = bpm[:, 1] + G5_14Psi_h_over_deltastar_avg0p25 = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p43.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_0p43 = bpm[:, 1] + G5_14Psi_h_over_deltastar_avg0p43 = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p50.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_0p50 = bpm[:, 1] + G5_14Psi_h_over_deltastar_avg0p50 = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p54.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_0p54 = bpm[:, 1] + G5_14Psi_h_over_deltastar_avg0p54 = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar0p62.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_0p62 = bpm[:, 1] + G5_14Psi_h_over_deltastar_avg0p62 = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi14-h_over_deltastar1p20.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_1p20 = bpm[:, 1] + G5_14Psi_h_over_deltastar_avg1p20 = bpm[:, 2] + + St_3prime_over_St_3prime_peak_jl = 10.0.^(range(-1, 10; length=1001)) + G5_14Psi_h_over_deltastar_avg0p25_jl = AcousticAnalogies.G5_Psi14.(0.25, St_3prime_over_St_3prime_peak_jl) + G5_14Psi_h_over_deltastar_avg0p43_jl = AcousticAnalogies.G5_Psi14.(0.43, St_3prime_over_St_3prime_peak_jl) + G5_14Psi_h_over_deltastar_avg0p50_jl = AcousticAnalogies.G5_Psi14.(0.50, St_3prime_over_St_3prime_peak_jl) + G5_14Psi_h_over_deltastar_avg0p54_jl = AcousticAnalogies.G5_Psi14.(0.54, St_3prime_over_St_3prime_peak_jl) + G5_14Psi_h_over_deltastar_avg0p62_jl = AcousticAnalogies.G5_Psi14.(0.62, St_3prime_over_St_3prime_peak_jl) + G5_14Psi_h_over_deltastar_avg1p20_jl = AcousticAnalogies.G5_Psi14.(1.20, St_3prime_over_St_3prime_peak_jl) + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p25_jl, St_3prime_over_St_3prime_peak_0p25) + vmin, vmax = extrema(G5_14Psi_h_over_deltastar_avg0p25) + err = abs.(interp .- G5_14Psi_h_over_deltastar_avg0p25)/(vmax - vmin) + @test maximum(err) < 0.074 + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p43_jl, St_3prime_over_St_3prime_peak_0p43) + vmin, vmax = extrema(G5_14Psi_h_over_deltastar_avg0p43) + err = abs.(interp .- G5_14Psi_h_over_deltastar_avg0p43)/(vmax - vmin) + @test maximum(err) < 0.072 + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p50_jl, St_3prime_over_St_3prime_peak_0p50) + vmin, vmax = extrema(G5_14Psi_h_over_deltastar_avg0p50) + err = abs.(interp .- G5_14Psi_h_over_deltastar_avg0p50)/(vmax - vmin) + @test maximum(err) < 0.072 + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p54_jl, St_3prime_over_St_3prime_peak_0p54) + vmin, vmax = extrema(G5_14Psi_h_over_deltastar_avg0p54) + err = abs.(interp .- G5_14Psi_h_over_deltastar_avg0p54)/(vmax - vmin) + @test maximum(err) < 0.074 + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg0p62_jl, St_3prime_over_St_3prime_peak_0p62) + vmin, vmax = extrema(G5_14Psi_h_over_deltastar_avg0p62) + err = abs.(interp .- G5_14Psi_h_over_deltastar_avg0p62)/(vmax - vmin) + @test maximum(err) < 0.073 + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_14Psi_h_over_deltastar_avg1p20_jl, St_3prime_over_St_3prime_peak_1p20) + vmin, vmax = extrema(G5_14Psi_h_over_deltastar_avg1p20) + err = abs.(interp .- G5_14Psi_h_over_deltastar_avg1p20)/(vmax - vmin) + # The lower end of this case is really bad. + # Not sure why. :-( + @test maximum(err[1:22]) < 0.31 + @test maximum(err[23:end]) < 0.087 + end + + @testset "G5, Psi = 0°" begin + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p25.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_0p25 = bpm[:, 1] + G5_0Psi_h_over_deltastar_avg0p25 = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p43.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_0p43 = bpm[:, 1] + G5_0Psi_h_over_deltastar_avg0p43 = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p50.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_0p50 = bpm[:, 1] + G5_0Psi_h_over_deltastar_avg0p50 = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p54.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_0p54 = bpm[:, 1] + G5_0Psi_h_over_deltastar_avg0p54 = bpm[:, 2] + + # fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar0p62.csv") + # bpm = DelimitedFiles.readdlm(fname, ',') + # St_3prime_over_St_3prime_peak_0p62 = bpm[:, 1] + # G5_0Psi_h_over_deltastar_avg0p62 = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure97-Psi0-h_over_deltastar1p20.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + St_3prime_over_St_3prime_peak_1p20 = bpm[:, 1] + G5_0Psi_h_over_deltastar_avg1p20 = bpm[:, 2] + + St_3prime_over_St_3prime_peak_jl = 10.0.^(range(-1, 10; length=1001)) + G5_0Psi_h_over_deltastar_avg0p25_jl = AcousticAnalogies.G5_Psi0.(0.25, St_3prime_over_St_3prime_peak_jl) + G5_0Psi_h_over_deltastar_avg0p43_jl = AcousticAnalogies.G5_Psi0.(0.43, St_3prime_over_St_3prime_peak_jl) + G5_0Psi_h_over_deltastar_avg0p50_jl = AcousticAnalogies.G5_Psi0.(0.50, St_3prime_over_St_3prime_peak_jl) + G5_0Psi_h_over_deltastar_avg0p54_jl = AcousticAnalogies.G5_Psi0.(0.54, St_3prime_over_St_3prime_peak_jl) + # G5_0Psi_h_over_deltastar_avg0p62_jl = AcousticAnalogies.G5_Psi0.(0.62, St_3prime_over_St_3prime_peak_jl) + G5_0Psi_h_over_deltastar_avg1p20_jl = AcousticAnalogies.G5_Psi0.(1.20, St_3prime_over_St_3prime_peak_jl) + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p25_jl, St_3prime_over_St_3prime_peak_0p25) + vmin, vmax = extrema(G5_0Psi_h_over_deltastar_avg0p25) + err = abs.(interp .- G5_0Psi_h_over_deltastar_avg0p25)/(vmax - vmin) + @test maximum(err) < 0.030 + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p43_jl, St_3prime_over_St_3prime_peak_0p43) + vmin, vmax = extrema(G5_0Psi_h_over_deltastar_avg0p43) + err = abs.(interp .- G5_0Psi_h_over_deltastar_avg0p43)/(vmax - vmin) + @test maximum(err) < 0.026 + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p50_jl, St_3prime_over_St_3prime_peak_0p50) + vmin, vmax = extrema(G5_0Psi_h_over_deltastar_avg0p50) + err = abs.(interp .- G5_0Psi_h_over_deltastar_avg0p50)/(vmax - vmin) + @test maximum(err) < 0.037 + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p54_jl, St_3prime_over_St_3prime_peak_0p54) + vmin, vmax = extrema(G5_0Psi_h_over_deltastar_avg0p54) + err = abs.(interp .- G5_0Psi_h_over_deltastar_avg0p54)/(vmax - vmin) + @test maximum(err) < 0.037 + + # interp = linear(St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg0p62_jl, St_3prime_over_St_3prime_peak_0p62) + # vmin, vmax = extrema(G5_0Psi_h_over_deltastar_avg0p62) + # err = abs.(interp .- G5_0Psi_h_over_deltastar_avg0p62)/(vmax - vmin) + # @test maximum(err) < 0.073 + + interp = linear(St_3prime_over_St_3prime_peak_jl, G5_0Psi_h_over_deltastar_avg1p20_jl, St_3prime_over_St_3prime_peak_1p20) + vmin, vmax = extrema(G5_0Psi_h_over_deltastar_avg1p20) + err = abs.(interp .- G5_0Psi_h_over_deltastar_avg1p20)/(vmax - vmin) + @test maximum(err) < 0.045 + end + + end + +end + +end # module diff --git a/test/bpm_writevtk_test.jl b/test/bpm_writevtk_test.jl new file mode 100644 index 00000000..72479dde --- /dev/null +++ b/test/bpm_writevtk_test.jl @@ -0,0 +1,305 @@ +module BPMWriteVTKTest + +using AcousticAnalogies +using CCBlade + +""" + XROTORAirfoilConfig(A0, DCLDA, CLMAX, CLMIN, DCL_STALL, DCLDA_STALL, CDMIN, CLDMIN, DCDCL2, REREF, REXP, MCRIT) + +`struct` that holds all the required parameters for XROTOR's approach to handling airfoil lift and drag polars. + +# Arguments +- `A0`: zero lift angle of attack, radians. +- `DCLDA`: lift curve slope, 1/radians. +- `CLMAX`: stall Cl. +- `CLMIN`: negative stall Cl. +- `DCL_STALL`: CL increment from incipient to total stall. +- `DCLDA_STALL`: stalled lift curve slope, 1/radian. +- `CDMIN`: minimum Cd. +- `CLDMIN`: Cl at minimum Cd. +- `DCDCL2`: d(Cd)/d(Cl**2). +- `REREF`: Reynolds Number at which Cd values apply. +- `REXP`: Exponent for Re scaling of Cd: Cd ~ Re**exponent +- `MCRIT`: Critical Mach number. +""" +struct XROTORAirfoilConfig{TF} + A0::TF # = 0. # zero lift angle of attack radians + DCLDA::TF # = 6.28 # lift curve slope /radian + CLMAX::TF # = 1.5 # stall Cl + CLMIN::TF # = -0.5 # negative stall Cl + DCL_STALL::TF # = 0.1 # CL increment from incipient to total stall + DCLDA_STALL::TF # = 0.1 # stalled lift curve slope /radian + CDMIN::TF # = 0.013 # minimum Cd + CLDMIN::TF # = 0.5 # Cl at minimum Cd + DCDCL2::TF # = 0.004 # d(Cd)/d(Cl**2) + REREF::TF # = 200000. # Reynolds Number at which Cd values apply + REXP::TF # = -0.4 # Exponent for Re scaling of Cd: Cd ~ Re**exponent + MCRIT::TF # = 0.8 # Critical Mach number +end + + +function XROTORAirfoilConfig(; A0, DCLDA, CLMAX, CLMIN, DCL_STALL, DCLDA_STALL, CDMIN, CLDMIN, DCDCL2, REREF, REXP, MCRIT) + return XROTORAirfoilConfig(A0, DCLDA, CLMAX, CLMIN, DCL_STALL, DCLDA_STALL, CDMIN, CLDMIN, DCDCL2, REREF, REXP, MCRIT) +end + +""" + af_xrotor(alpha, Re, Mach, config::XROTORAirfoilConfig) + +Return a tuple of the lift and drag coefficients for a given angle of attach +`alpha` (in radians), Reynolds number `Re`, and Mach number `Mach`. +""" +function af_xrotor(alpha, Re, Mach, config::XROTORAirfoilConfig) +# C------------------------------------------------------------ +# C CL(alpha) function +# C Note that in addition to setting CLIFT and its derivatives +# C CLMAX and CLMIN (+ and - stall CL's) are set in this routine +# C In the compressible range the stall CL is reduced by a factor +# C proportional to Mcrit-Mach. Stall limiting for compressible +# C cases begins when the compressible drag added CDC > CDMstall +# C------------------------------------------------------------ +# C CD(alpha) function - presently CD is assumed to be a sum +# C of profile drag + stall drag + compressibility drag +# C In the linear lift range drag is CD0 + quadratic function of CL-CLDMIN +# C In + or - stall an additional drag is added that is proportional +# C to the extent of lift reduction from the linear lift value. +# C Compressible drag is based on adding drag proportional to +# C (Mach-Mcrit_eff)^MEXP +# C------------------------------------------------------------ +# C CM(alpha) function - presently CM is assumed constant, +# C varying only with Mach by Prandtl-Glauert scaling +# C------------------------------------------------------------ +# C + # INCLUDE 'XROTOR.INC' + # LOGICAL STALLF + # DOUBLE PRECISION ECMIN, ECMAX +# C +# C---- Factors for compressibility drag model, HHY 10/23/00 +# C Mcrit is set by user +# C Effective Mcrit is Mcrit_eff = Mcrit - CLMFACTOR*(CL-CLDmin) - DMDD +# C DMDD is the delta Mach to get CD=CDMDD (usually 0.0020) +# C Compressible drag is CDC = CDMFACTOR*(Mach-Mcrit_eff)^MEXP +# C CDMstall is the drag at which compressible stall begins +# + A0 = config.A0 + DCLDA = config.DCLDA + CLMAX = config.CLMAX + CLMIN = config.CLMIN + DCL_STALL = config.DCL_STALL + DCLDA_STALL = config.DCLDA_STALL + CDMIN = config.CDMIN + CLDMIN = config.CLDMIN + DCDCL2 = config.DCDCL2 + REREF = config.REREF + REXP = config.REXP + MCRIT = config.MCRIT + + CDMFACTOR = 10.0 + CLMFACTOR = 0.25 + MEXP = 3.0 + CDMDD = 0.0020 + CDMSTALL = 0.1000 +# C +# C---- Prandtl-Glauert compressibility factor + # MSQ = W*W*VEL^2/VSO^2 + # MSQ_W = 2.0*W*VEL^2/VSO^2 + # if (MSQ>1.0) + # # WRITE(*,*) + # # & 'CLFUNC: Local Mach number limited to 0.99, was ', MSQ + # MSQ = 0.99 + # # MSQ_W = 0. + # end + MSQ = Mach*Mach + if MSQ > 1.0 + MSQ = 0.99 + Mach = sqrt(MSQ) + end + PG = 1.0 / sqrt(1.0 - MSQ) + # PG_W = 0.5*MSQ_W * PG^3 +# C +# C---- Mach number and dependence on velocity + # Mach = sqrt(MSQ) + # MACH_W = 0.0 + # IF(Mach.NE.0.0) MACH_W = 0.5*MSQ_W/Mach + # if ! (mach ≈ 0.0) + # MACH_W = 0.5*MSQ_W/Mach + # end +# C +# C +# C------------------------------------------------------------ +# C--- Generate CL from dCL/dAlpha and Prandtl-Glauert scaling + CLA = DCLDA*PG *(alpha-A0) + # CLA_ALF = DCLDA*PG + # CLA_W = DCLDA*PG_W*(ALF-A0) +# C +# C--- Effective CLmax is limited by Mach effects +# C reduces CLmax to match the CL of onset of serious compressible drag + CLMX = CLMAX + CLMN = CLMIN + DMSTALL = (CDMSTALL/CDMFACTOR)^(1.0/MEXP) + CLMAXM = max(0.0, (MCRIT+DMSTALL-Mach)/CLMFACTOR) + CLDMIN + CLMAX = min(CLMAX,CLMAXM) + CLMINM = min(0.0,-(MCRIT+DMSTALL-Mach)/CLMFACTOR) + CLDMIN + CLMIN = max(CLMIN,CLMINM) +# C +# C--- CL limiter function (turns on after +-stall + ECMAX = exp( min(200.0, (CLA-CLMAX)/DCL_STALL) ) + ECMIN = exp( min(200.0, (CLMIN-CLA)/DCL_STALL) ) + CLLIM = DCL_STALL * log( (1.0+ECMAX)/(1.0+ECMIN) ) + CLLIM_CLA = ECMAX/(1.0+ECMAX) + ECMIN/(1.0+ECMIN) +# c +# c if(CLLIM.GT.0.001) then +# c write(*,999) 'cla,cllim,ecmax,ecmin ',cla,cllim,ecmax,ecmin +# c endif +# c 999 format(a,2(1x,f10.6),3(1x,d12.6)) +# C +# C--- Subtract off a (nearly unity) fraction of the limited CL function +# C This sets the dCL/dAlpha in the stalled regions to 1-FSTALL of that +# C in the linear lift range + FSTALL = DCLDA_STALL/DCLDA + CLIFT = CLA - (1.0-FSTALL)*CLLIM + + # CL_ALF = CLA_ALF - (1.0-FSTALL)*CLLIM_CLA*CLA_ALF + # CL_W = CLA_W - (1.0-FSTALL)*CLLIM_CLA*CLA_W +# C + # STALLF = false + # IF(CLIFT.GT.CLMAX) STALLF = .TRUE. + # IF(CLIFT.LT.CLMIN) STALLF = .TRUE. + # STALLF = (CLIFT > CLMAX) || (CLIFT < CLMIN) + +# C +# C +# C------------------------------------------------------------ +# C--- CM from CMCON and Prandtl-Glauert scaling + # CMOM = PG*CMCON + # CM_AL = 0.0 + # CM_W = PG_W*CMCON +# C +# C +# C------------------------------------------------------------ +# C--- CD from profile drag, stall drag and compressibility drag +# C +# C---- Reynolds number scaling factor + if (Re < 0.0) + RCORR = 1.0 + # RCORR_REY = 0.0 + else + RCORR = (Re/REREF)^REXP + # RCORR_REY = REXP/Re + end +# C +# C--- In the basic linear lift range drag is a function of lift +# C CD = CD0 (constant) + quadratic with CL) + CDRAG = (CDMIN + DCDCL2*(CLIFT-CLDMIN)^2 ) * RCORR + # CD_ALF = ( 2.0*DCDCL2*(CLIFT-CLDMIN)*CL_ALF) * RCORR + # CD_W = ( 2.0*DCDCL2*(CLIFT-CLDMIN)*CL_W ) * RCORR + # CD_REY = CDRAG*RCORR_REY +# C +# C--- Post-stall drag added + FSTALL = DCLDA_STALL/DCLDA + DCDX = (1.0-FSTALL)*CLLIM/(PG*DCLDA) +# c write(*,*) 'cla,cllim,fstall,pg,dclda ',cla,cllim,fstall,pg,dclda + DCD = 2.0* DCDX^2 + # DCD_ALF = 4.0* DCDX * (1.0-FSTALL)*CLLIM_CLA*CLA_ALF/(PG*DCLDA) + # DCD_W = 4.0* DCDX * ( (1.0-FSTALL)*CLLIM_CLA*CLA_W/(PG*DCLDA) - DCD/PG*PG_W ) +# c write(*,*) 'alf,cl,dcd,dcd_alf,dcd_w ',alf,clift,dcd,dcd_alf,dcd_w +# C +# C--- Compressibility drag (accounts for drag rise above Mcrit with CL effects +# C CDC is a function of a scaling factor*(M-Mcrit(CL))^MEXP +# C DMDD is the Mach difference corresponding to CD rise of CDMDD at MCRIT + DMDD = (CDMDD/CDMFACTOR)^(1.0/MEXP) + CRITMACH = MCRIT-CLMFACTOR*abs(CLIFT-CLDMIN) - DMDD + # CRITMACH_ALF = -CLMFACTOR*ABS(CL_ALF) + # CRITMACH_W = -CLMFACTOR*ABS(CL_W) + if (Mach < CRITMACH) + CDC = 0.0 + # CDC_ALF = 0.0 + # CDC_W = 0.0 + else + CDC = CDMFACTOR*(Mach-CRITMACH)^MEXP + # CDC_W = MEXP*MACH_W*CDC/Mach - MEXP*CRITMACH_W *CDC/CRITMACH + # CDC_ALF = - MEXP*CRITMACH_ALF*CDC/CRITMACH + end +# c write(*,*) 'critmach,mach ',critmach,mach +# c write(*,*) 'cdc,cdc_w,cdc_alf ',cdc,cdc_w,cdc_alf +# C + FAC = 1.0 + # FAC_W = 0.0 +# C--- Although test data does not show profile drag increases due to Mach # +# C you could use something like this to add increase drag by Prandtl-Glauert +# C (or any function you choose) +# cc FAC = PG +# cc FAC_W = PG_W +# C--- Total drag terms + CDRAG = FAC*CDRAG + DCD + CDC + # CD_ALF = FAC*CD_ALF + DCD_ALF + CDC_ALF + # CD_W = FAC*CD_W + FAC_W*CDRAG + DCD_W + CDC_W + # CD_REY = FAC*CD_REY +# C + return CLIFT, CDRAG +end + +function main(; positive_x_rotation) + # Define the blade geometry. + B = 2 + Rhub = 0.10 + Rtip = 1.1684 # meters + radii = Rhub .+ range(0.0, 1.0, length=31).*(Rtip - Rhub) + radii = 0.5.*(radii[2:end] .+ radii[1:end-1]) + + cs_area_over_chord_squared = 0.064 + chord = [ + 0.35044 , 0.28260 , 0.22105 , 0.17787 , 0.14760, + 0.12567 , 0.10927 , 0.96661E-01 , 0.86742E-01 , + 0.78783E-01 , 0.72287E-01 , 0.66906E-01 , 0.62387E-01 , + 0.58541E-01 , 0.55217E-01 , 0.52290E-01 , 0.49645E-01 , + 0.47176E-01 , 0.44772E-01 , 0.42326E-01 , 0.39732E-01 , + 0.36898E-01 , 0.33752E-01 , 0.30255E-01 , 0.26401E-01 , + 0.22217E-01 , 0.17765E-01 , 0.13147E-01 , 0.85683E-02 , + 0.47397E-02].*Rtip + + theta = [ + 40.005, 34.201, 28.149, 23.753, 20.699, 18.516, 16.890, 15.633, + 14.625, 13.795, 13.094, 12.488, 11.956, 11.481, 11.053, 10.662, + 10.303, 9.9726, 9.6674, 9.3858, 9.1268, 8.8903, 8.6764, 8.4858, + 8.3193, 8.1783, 8.0638, 7.9769, 7.9183, 7.8889].*(pi/180) + + # Define the operating point. + rpm = 2200.0 + omega = rpm*(2*pi/60.0) + rho = 1.226 # kg/m^3 + c0 = 340.0 # m/s + mu = 0.1780e-4 # kg/(m*s) + pitch = 0.0 # rad + Vinf = 5.0 # m/s + + # Create an airfoil interpolation object. + xrotor_config = XROTORAirfoilConfig( + A0=0.0, DCLDA=6.2800, CLMAX=1.5, CLMIN=-0.5, DCLDA_STALL=0.1, + DCL_STALL=0.1, MCRIT=0.8, CDMIN=0.13e-1, CLDMIN=0.5, DCDCL2=0.4e-2, REREF=0.2e6, REXP=-0.4) + airfoil_interp(a, r, m) = af_xrotor(a, r, m, xrotor_config) + + # Create the CCBlade.jl structs. + rotor = Rotor(Rhub, Rtip, B) + sections = Section.(radii, chord, theta, Ref(airfoil_interp)) + ops = OperatingPoint.(Vinf, omega.*radii, rho, pitch, mu, c0) + outs = solve.(Ref(rotor), sections, ops) + + # Create the AcousticAnalogies.jl source elements. + bpp = 60/(rpm*B) + period = 2*bpp + num_source_times = 64 + alphastar0 = 12.5*pi/180 + ses = tblte_source_elements_ccblade(rotor, sections, ops, outs, fill(TrippedN0012BoundaryLayer(), length(radii)), period, num_source_times, positive_x_rotation) + @show size(ses) + + if positive_x_rotation + name = "two_blade_example_tblte_pos_x_rotation" + else + name = "two_blade_example_tblte_neg_x_rotation" + end + outfiles = AcousticAnalogies.to_paraview_collection(name, ses) + + return outfiles +end + +end diff --git a/test/broadband_source_element_tests.jl b/test/broadband_source_element_tests.jl new file mode 100644 index 00000000..6fe866ac --- /dev/null +++ b/test/broadband_source_element_tests.jl @@ -0,0 +1,2764 @@ +module BroadbandSourceElementTests + +using AcousticAnalogies +using AcousticAnalogies: calculate_bpm_test +using AcousticMetrics: AcousticMetrics +using CCBlade +using DelimitedFiles: DelimitedFiles +using FileIO: load +using FLOWMath: linear +using KinematicCoordinateTransformations: KinematicCoordinateTransformations, compose +using StaticArrays +using JLD2 +using Test +using LinearAlgebra: norm, dot, cross + +include("gen_test_data/gen_ccblade_data/constants.jl") +using .CCBladeTestCaseConstants +ccbc = CCBladeTestCaseConstants + +@testset "Twist and rotation tests" begin + # So, the way this should work: first do the twist, then do the theta rotation. + # The twist could be either about the positive y axis or negative y axis. + # Then the theta rotation is always about the x axis. + c0 = 1.1 + nu = 1.2 + r = 2.0 + Δr = 0.1 + chord = 1.3 + h = 1.4 + Psi = 1.5 + vn = 2.0 + vr = 3.0 + vc = 4.0 + τ = 0.1 + Δτ = 0.02 + bl = 2.0 # should be a boundary layer struct, but doesn't matter for these tests. + blade_tip = 3.0 # should be a blade tip struct, but doesn't matter for these tests. + for setype in [TBLTESourceElement, LBLVSSourceElement, TEBVSSourceElement, TipVortexSourceElement, CombinedNoTipBroadbandSourceElement, CombinedWithTipBroadbandSourceElement] + for twist_about_positive_y in [true, false] + if setype == CombinedWithTipBroadbandSourceElement + se_0twist0theta = setype(c0, nu, r, 0.0, Δr, chord, 0.0, h, Psi, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + elseif setype == TipVortexSourceElement + se_0twist0theta = setype(c0, r, 0.0, Δr, chord, 0.0, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + elseif setype in (TEBVSSourceElement, CombinedNoTipBroadbandSourceElement) + se_0twist0theta = setype(c0, nu, r, 0.0, Δr, chord, 0.0, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + else + se_0twist0theta = setype(c0, nu, r, 0.0, Δr, chord, 0.0, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + end + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + + for ϕ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + # The angle of attack depends on the twist and the fluid velocity + if twist_about_positive_y + alpha_check = ϕ - atan(-vn, -vc) + else + alpha_check = ϕ - atan(-vn, vc) + end + if setype == CombinedWithTipBroadbandSourceElement + se = setype(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) |> trans_theta + elseif setype == TipVortexSourceElement + se = setype(c0, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) |> trans_theta + elseif setype in (TEBVSSourceElement, CombinedNoTipBroadbandSourceElement) + se = setype(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) |> trans_theta + else + se = setype(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) |> trans_theta + end + # Adjust the angles of attack to always be between -pi and pi. + alpha_check = rem2pi(alpha_check+pi, RoundNearest) - pi + alpha = rem2pi(AcousticAnalogies.angle_of_attack(se)+pi, RoundNearest) - pi + @test alpha ≈ alpha_check + + for field in fieldnames(setype) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if field != :chord_uvec + @test getproperty(se, field) ≈ getproperty(se_0twist0theta, field) + end + end + + if twist_about_positive_y + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -ϕ) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, ϕ) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + + # Make sure we get the same thing if we specify the velocity via a velocity magnitude and angle of attack. + # But need to make sure we use vr == 0. + if setype == CombinedWithTipBroadbandSourceElement + se_no_vr = setype(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, 0.0, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + elseif setype == TipVortexSourceElement + se_no_vr = setype(c0, r, θ, Δr, chord, ϕ, vn, 0.0, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + elseif setype in (TEBVSSourceElement, CombinedNoTipBroadbandSourceElement) + se_no_vr = setype(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, 0.0, vc, τ, Δτ, bl, twist_about_positive_y) + else + se_no_vr = setype(c0, nu, r, θ, Δr, chord, ϕ, vn, 0.0, vc, τ, Δτ, bl, twist_about_positive_y) + end + # Removing vr, the radial velocity component, shouldn't change the angle of attack. + alpha_no_vr = rem2pi(AcousticAnalogies.angle_of_attack(se_no_vr)+pi, RoundNearest) - pi + @test alpha_no_vr ≈ alpha_check + # Now create a source element using the velocity magnitude and angle of attack, check that we get the same thing. + U = sqrt(vn^2 + vc^2) + if setype == CombinedWithTipBroadbandSourceElement + se_from_U_α = setype(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, alpha_no_vr, τ, Δτ, bl, blade_tip, twist_about_positive_y) + elseif setype == TipVortexSourceElement + se_from_U_α = setype(c0, r, θ, Δr, chord, ϕ, U, alpha_no_vr, τ, Δτ, bl, blade_tip, twist_about_positive_y) + elseif setype in (TEBVSSourceElement, CombinedNoTipBroadbandSourceElement) + se_from_U_α = setype(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, U, alpha_no_vr, τ, Δτ, bl, twist_about_positive_y) + else + se_from_U_α = setype(c0, nu, r, θ, Δr, chord, ϕ, U, alpha_no_vr, τ, Δτ, bl, twist_about_positive_y) + end + for field in fieldnames(setype) + @test getproperty(se_from_U_α, field) ≈ getproperty(se_no_vr, field) + end + + end + end + end + end +end + +@testset "TBLTESourceElement twist and rotation tests, CCBlade" begin + # Create the CCBlade objects. + τ = 0.1 + Δτ = 0.02 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + # ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11.jld2") + # out, section_loaded, Δr, op, rotor0precone = nothing, nothing, nothing, nothing, nothing + # jldopen(ccblade_fname, "r") do f + # out = f["outs"][1] + # section_loaded = f["sections"][1] + # Δr = f["sections"][2].r - f["sections"][1].r + # op = f["ops"][1] + # rotor0precone = f["rotor"] + # @test rotor0precone.precone ≈ 0.0 + # end + + ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11-outputs.jld2") + outs_d = load(ccblade_fname) + section_loaded = CCBlade.Section(first(ccbc.radii), first(ccbc.chord), first(ccbc.theta)*pi/180, nothing) + Δr = ccbc.radii[2] - ccbc.radii[1] + op = CCBlade.OperatingPoint(ccbc.v, outs_d["omega"]*first(ccbc.radii), ccbc.rho, ccbc.pitch, ccbc.mu, ccbc.c0) + rotor0precone = CCBlade.Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades) + out = CCBlade.Outputs(outs_d["Np"][1], outs_d["Tp"][1], outs_d["a"][1], outs_d["ap"][1], outs_d["u"][1], outs_d["v"][1], outs_d["phi"][1], outs_d["alpha"][1], outs_d["W"][1], outs_d["cl"][1], outs_d["cd"][1], outs_d["cn"][1], outs_d["ct"][1], outs_d["F"][1], outs_d["G"][1]) + @test rotor0precone.precone ≈ 0.0 + + for positive_x_rotation in [true, false] + for twist in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + section = CCBlade.Section(section_loaded.r, section_loaded.chord, twist, section_loaded.af) + se_0theta0precone = TBLTESourceElement(rotor0precone, section, op, out, 0.0, Δr, τ, Δτ, bl, positive_x_rotation) + for precone in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + rotor = CCBlade.Rotor(rotor0precone.Rhub, rotor0precone.Rtip, rotor0precone.B; turbine=rotor0precone.turbine, precone=precone) + # This is tricky: in my "normal" coordinate system, the blade is rotating around the x axis, moving axially in the positive x direction, and is initially aligned with the y axis. + # That means that the precone should be a rotation around the negative z axis. + # And so to undo it, we want a positive rotation around the positive z axis. + trans_precone = KinematicCoordinateTransformations.SteadyRotZTransformation(τ, 0.0, precone) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + # Create a transformation that reverses the theta and precone rotations. + # The precone happens first, then theta. + # So to reverse it we need to do theta, then precone. + trans = KinematicCoordinateTransformations.compose(τ, trans_precone, trans_theta) + # Create a source element with the theta and precone rotations, then undo it. + se = TBLTESourceElement(rotor, section, op, out, θ, Δr, τ, Δτ, bl, positive_x_rotation) |> trans + # Check that we got the same thing: + for field in fieldnames(TBLTESourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if !(field in (:chord_uvec, :bl)) + @test getproperty(se, field) ≈ getproperty(se_0theta0precone, field) + end + end + + if positive_x_rotation + # If we're doing a positive-x rotation, we're applying the twist about the positive y axis. + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -twist) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're doing a negative-x rotation, we're applying the twist about the negative y axis. + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, twist) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end + end +end + +@testset "CCBlade TBLTESourceElement complete test" begin + for positive_x_rotation in [true, false] + omega = 2200*(2*pi/60) + + # Create the CCBlade objects. + rotor = Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades; turbine=false) + sections = Section.(ccbc.radii, ccbc.chord, ccbc.theta, nothing) + ops = simple_op.(ccbc.v, omega, ccbc.radii, ccbc.rho; asound=ccbc.c0) + # What actually matters in the output structs are just W and phi. + phi = range(45.0, 10.0; length=length(sections)) .* (pi/180) + W = range(10.0, 11.0; length=length(sections)) + outs = Outputs.(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, phi, 0.0, W, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) + + # Set the source time stuff. + num_blade_passes = 3 + steps_per_blade_pass = 8 + num_src_times = num_blade_passes*steps_per_blade_pass + bpp = 2*pi/omega/ccbc.num_blades + src_time_range = num_blade_passes*bpp + + # Finally get all the source elements. + bls = [AcousticAnalogies.TrippedN0012BoundaryLayer()] + ses_helper = tblte_source_elements_ccblade(rotor, sections, ops, outs, bls, src_time_range, num_src_times, positive_x_rotation) + + # Now need to get the source elements the "normal" way. + # First get the transformation objects. + rot_axis = @SVector [1.0, 0.0, 0.0] + blade_axis = @SVector [0.0, 1.0, 0.0] + y0_hub = @SVector [0.0, 0.0, 0.0] # m + v0_hub = ccbc.v.*rot_axis + t0 = 0.0 + if positive_x_rotation + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, omega, 0.0) + else + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, -omega, 0.0) + end + const_vel_trans = KinematicCoordinateTransformations.ConstantVelocityTransformation(t0, y0_hub, v0_hub) + + # Need the source times. + dt = src_time_range/num_src_times + src_times = t0 .+ (0:num_src_times-1).*dt + + # This is just an array of the angular offsets of each blade. + θs = 2*pi/ccbc.num_blades.*(0:(ccbc.num_blades-1)) + + # Radial spacing. + dradii = get_dradii(ccbc.radii, ccbc.Rhub, ccbc.Rtip) + + # Need the kinematic viscosity. + nus = getproperty.(ops, :mu) ./ getproperty.(ops, :rho) + + # Also need the velocity in each direction. + if positive_x_rotation + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. -W*cos(phi) + else + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. W*cos(phi) + end + + # Reshape stuff for broadcasting. + radii_rs = reshape(ccbc.radii, 1, :, 1) + dradii_rs = reshape(dradii, 1, :, 1) + phi_rs = reshape(phi, 1, :, 1) + W_rs = reshape(W, 1, :, 1) + src_times_rs = reshape(src_times, :, 1, 1) # This isn't really necessary. + θs_rs = reshape(θs, 1, 1, :) + nus_rs = reshape(nus, 1, :, 1) + twist_rs = reshape(getproperty.(sections, :theta), 1, :, 1) + chord_rs = reshape(getproperty.(sections, :chord), 1, :, 1) + vn_rs = reshape(vn, 1, :, 1) + vr_rs = reshape(vr, 1, :, 1) + vc_rs = reshape(vc, 1, :, 1) + + # Get all the transformations. + trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + + # Transform the source elements. + ses = TBLTESourceElement.(ccbc.c0, nus_rs, radii_rs, θs_rs, dradii_rs, chord_rs, twist_rs, vn_rs, vr_rs, vc_rs, src_times_rs, dt, bls, positive_x_rotation) .|> trans + + # Now check that we got the same thing. + for field in fieldnames(TBLTESourceElement) + if !(field in (:bl,)) + @test all(getproperty.(ses_helper, field) .≈ getproperty.(ses, field)) + end + end + end +end + +@testset "LBLVSSourceElement twist and rotation tests" begin + # So, the way this should work: first do the twist, then do the theta rotation. + # The twist could be either about the positive y axis or negative y axis. + # Then the theta rotation is always about the x axis. + c0 = 1.1 + nu = 1.2 + r = 2.0 + Δr = 0.1 + chord = 1.3 + vn = 2.0 + vr = 3.0 + vc = 4.0 + τ = 0.1 + Δτ = 0.02 + bl = 2.0 # should be a boundary layer struct, but doesn't matter for these tests. + for twist_about_positive_y in [true, false] + se_0twist0theta = LBLVSSourceElement(c0, nu, r, 0.0, Δr, chord, 0.0, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + + for ϕ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + # The angle of attack depends on the twist and the fluid velocity + if twist_about_positive_y + alpha_check = ϕ - atan(-vn, -vc) + else + alpha_check = ϕ - atan(-vn, vc) + end + se = LBLVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) |> trans_theta + # Adjust the angles of attack to always be between -pi and pi. + alpha_check = rem2pi(alpha_check+pi, RoundNearest) - pi + alpha = rem2pi(AcousticAnalogies.angle_of_attack(se)+pi, RoundNearest) - pi + @test alpha ≈ alpha_check + + for field in fieldnames(LBLVSSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if field != :chord_uvec + @test getproperty(se, field) ≈ getproperty(se_0twist0theta, field) + end + end + + if twist_about_positive_y + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -ϕ) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, ϕ) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end +end + +@testset "LBLVSSourceElement twist and rotation tests, CCBlade" begin + # Create the CCBlade objects. + τ = 0.1 + Δτ = 0.02 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + # ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11.jld2") + # out, section_loaded, Δr, op, rotor0precone = nothing, nothing, nothing, nothing, nothing + # jldopen(ccblade_fname, "r") do f + # out = f["outs"][1] + # section_loaded = f["sections"][1] + # Δr = f["sections"][2].r - f["sections"][1].r + # op = f["ops"][1] + # rotor0precone = f["rotor"] + # @test rotor0precone.precone ≈ 0.0 + # end + + ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11-outputs.jld2") + outs_d = load(ccblade_fname) + section_loaded = CCBlade.Section(first(ccbc.radii), first(ccbc.chord), first(ccbc.theta)*pi/180, nothing) + Δr = ccbc.radii[2] - ccbc.radii[1] + op = CCBlade.OperatingPoint(ccbc.v, outs_d["omega"]*first(ccbc.radii), ccbc.rho, ccbc.pitch, ccbc.mu, ccbc.c0) + rotor0precone = CCBlade.Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades) + out = CCBlade.Outputs(outs_d["Np"][1], outs_d["Tp"][1], outs_d["a"][1], outs_d["ap"][1], outs_d["u"][1], outs_d["v"][1], outs_d["phi"][1], outs_d["alpha"][1], outs_d["W"][1], outs_d["cl"][1], outs_d["cd"][1], outs_d["cn"][1], outs_d["ct"][1], outs_d["F"][1], outs_d["G"][1]) + @test rotor0precone.precone ≈ 0.0 + + for positive_x_rotation in [true, false] + for twist in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + section = CCBlade.Section(section_loaded.r, section_loaded.chord, twist, section_loaded.af) + se_0theta0precone = LBLVSSourceElement(rotor0precone, section, op, out, 0.0, Δr, τ, Δτ, bl, positive_x_rotation) + for precone in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + rotor = CCBlade.Rotor(rotor0precone.Rhub, rotor0precone.Rtip, rotor0precone.B; turbine=rotor0precone.turbine, precone=precone) + # This is tricky: in my "normal" coordinate system, the blade is rotating around the x axis, moving axially in the positive x direction, and is initially aligned with the y axis. + # That means that the precone should be a rotation around the negative z axis. + # And so to undo it, we want a positive rotation around the positive z axis. + trans_precone = KinematicCoordinateTransformations.SteadyRotZTransformation(τ, 0.0, precone) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + # Create a transformation that reverses the theta and precone rotations. + # The precone happens first, then theta. + # So to reverse it we need to do theta, then precone. + trans = KinematicCoordinateTransformations.compose(τ, trans_precone, trans_theta) + # Create a source element with the theta and precone rotations, then undo it. + se = LBLVSSourceElement(rotor, section, op, out, θ, Δr, τ, Δτ, bl, positive_x_rotation) |> trans + # Check that we got the same thing: + for field in fieldnames(LBLVSSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if !(field in (:chord_uvec, :bl)) + @test getproperty(se, field) ≈ getproperty(se_0theta0precone, field) + end + end + + if positive_x_rotation + # If we're doing a positive-x rotation, we're applying the twist about the positive y axis. + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -twist) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're doing a negative-x rotation, we're applying the twist about the negative y axis. + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, twist) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end + end +end + +@testset "CCBlade LBLVSSourceElement complete test" begin + for positive_x_rotation in [true, false] + omega = 2200*(2*pi/60) + + # Create the CCBlade objects. + rotor = Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades; turbine=false) + sections = Section.(ccbc.radii, ccbc.chord, ccbc.theta, nothing) + ops = simple_op.(ccbc.v, omega, ccbc.radii, ccbc.rho; asound=ccbc.c0) + # What actually matters in the output structs are just W and phi. + phi = range(45.0, 10.0; length=length(sections)) .* (pi/180) + W = range(10.0, 11.0; length=length(sections)) + outs = Outputs.(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, phi, 0.0, W, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) + + # Set the source time stuff. + num_blade_passes = 3 + steps_per_blade_pass = 8 + num_src_times = num_blade_passes*steps_per_blade_pass + bpp = 2*pi/omega/ccbc.num_blades + src_time_range = num_blade_passes*bpp + + # Finally get all the source elements. + bls = [AcousticAnalogies.TrippedN0012BoundaryLayer()] + ses_helper = lblvs_source_elements_ccblade(rotor, sections, ops, outs, bls, src_time_range, num_src_times, positive_x_rotation) + + # Now need to get the source elements the "normal" way. + # First get the transformation objects. + rot_axis = @SVector [1.0, 0.0, 0.0] + blade_axis = @SVector [0.0, 1.0, 0.0] + y0_hub = @SVector [0.0, 0.0, 0.0] # m + v0_hub = ccbc.v.*rot_axis + t0 = 0.0 + if positive_x_rotation + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, omega, 0.0) + else + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, -omega, 0.0) + end + const_vel_trans = KinematicCoordinateTransformations.ConstantVelocityTransformation(t0, y0_hub, v0_hub) + + # Need the source times. + dt = src_time_range/num_src_times + src_times = t0 .+ (0:num_src_times-1).*dt + + # This is just an array of the angular offsets of each blade. + θs = 2*pi/ccbc.num_blades.*(0:(ccbc.num_blades-1)) + + # Radial spacing. + dradii = get_dradii(ccbc.radii, ccbc.Rhub, ccbc.Rtip) + + # Need the kinematic viscosity. + nus = getproperty.(ops, :mu) ./ getproperty.(ops, :rho) + + # Also need the velocity in each direction. + if positive_x_rotation + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. -W*cos(phi) + else + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. W*cos(phi) + end + + # Reshape stuff for broadcasting. + radii_rs = reshape(ccbc.radii, 1, :, 1) + dradii_rs = reshape(dradii, 1, :, 1) + phi_rs = reshape(phi, 1, :, 1) + W_rs = reshape(W, 1, :, 1) + src_times_rs = reshape(src_times, :, 1, 1) # This isn't really necessary. + θs_rs = reshape(θs, 1, 1, :) + nus_rs = reshape(nus, 1, :, 1) + twist_rs = reshape(getproperty.(sections, :theta), 1, :, 1) + chord_rs = reshape(getproperty.(sections, :chord), 1, :, 1) + vn_rs = reshape(vn, 1, :, 1) + vr_rs = reshape(vr, 1, :, 1) + vc_rs = reshape(vc, 1, :, 1) + + # Get all the transformations. + trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + + # Transform the source elements. + ses = LBLVSSourceElement.(ccbc.c0, nus_rs, radii_rs, θs_rs, dradii_rs, chord_rs, twist_rs, vn_rs, vr_rs, vc_rs, src_times_rs, dt, bls, positive_x_rotation) .|> trans + + # Now check that we got the same thing. + for field in fieldnames(LBLVSSourceElement) + if !(field in (:bl,)) + @test all(getproperty.(ses_helper, field) .≈ getproperty.(ses, field)) + end + end + end +end + +@testset "TEBVSSourceElement twist and rotation tests" begin + # So, the way this should work: first do the twist, then do the theta rotation. + # The twist could be either about the positive y axis or negative y axis. + # Then the theta rotation is always about the x axis. + c0 = 1.1 + nu = 1.2 + r = 2.0 + Δr = 0.1 + chord = 1.3 + vn = 2.0 + vr = 3.0 + vc = 4.0 + τ = 0.1 + Δτ = 0.02 + h = 0.1 + Psi = 0.2 + bl = 2.0 # should be a boundary layer struct, but doesn't matter for these tests. + for twist_about_positive_y in [true, false] + se_0twist0theta = TEBVSSourceElement(c0, nu, r, 0.0, Δr, chord, 0.0, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + + for ϕ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + # The angle of attack depends on the twist and the fluid velocity + if twist_about_positive_y + alpha_check = ϕ - atan(-vn, -vc) + else + alpha_check = ϕ - atan(-vn, vc) + end + se = TEBVSSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) |> trans_theta + # Adjust the angles of attack to always be between -pi and pi. + alpha_check = rem2pi(alpha_check+pi, RoundNearest) - pi + alpha = rem2pi(AcousticAnalogies.angle_of_attack(se)+pi, RoundNearest) - pi + @test alpha ≈ alpha_check + + for field in fieldnames(TEBVSSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if field != :chord_uvec + @test getproperty(se, field) ≈ getproperty(se_0twist0theta, field) + end + end + + if twist_about_positive_y + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -ϕ) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, ϕ) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end +end + +@testset "TEBVSSourceElement twist and rotation tests, CCBlade" begin + # Create the CCBlade objects. + τ = 0.1 + Δτ = 0.02 + h = 0.1 + Psi = 0.2 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + # ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11.jld2") + # out, section_loaded, Δr, op, rotor0precone = nothing, nothing, nothing, nothing, nothing + # jldopen(ccblade_fname, "r") do f + # out = f["outs"][1] + # section_loaded = f["sections"][1] + # Δr = f["sections"][2].r - f["sections"][1].r + # op = f["ops"][1] + # rotor0precone = f["rotor"] + # @test rotor0precone.precone ≈ 0.0 + # end + + ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11-outputs.jld2") + outs_d = load(ccblade_fname) + section_loaded = CCBlade.Section(first(ccbc.radii), first(ccbc.chord), first(ccbc.theta)*pi/180, nothing) + Δr = ccbc.radii[2] - ccbc.radii[1] + op = CCBlade.OperatingPoint(ccbc.v, outs_d["omega"]*first(ccbc.radii), ccbc.rho, ccbc.pitch, ccbc.mu, ccbc.c0) + rotor0precone = CCBlade.Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades) + out = CCBlade.Outputs(outs_d["Np"][1], outs_d["Tp"][1], outs_d["a"][1], outs_d["ap"][1], outs_d["u"][1], outs_d["v"][1], outs_d["phi"][1], outs_d["alpha"][1], outs_d["W"][1], outs_d["cl"][1], outs_d["cd"][1], outs_d["cn"][1], outs_d["ct"][1], outs_d["F"][1], outs_d["G"][1]) + @test rotor0precone.precone ≈ 0.0 + + for positive_x_rotation in [true, false] + for twist in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + section = CCBlade.Section(section_loaded.r, section_loaded.chord, twist, section_loaded.af) + se_0theta0precone = TEBVSSourceElement(rotor0precone, section, op, out, 0.0, Δr, h, Psi, τ, Δτ, bl, positive_x_rotation) + for precone in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + rotor = CCBlade.Rotor(rotor0precone.Rhub, rotor0precone.Rtip, rotor0precone.B; turbine=rotor0precone.turbine, precone=precone) + # This is tricky: in my "normal" coordinate system, the blade is rotating around the x axis, moving axially in the positive x direction, and is initially aligned with the y axis. + # That means that the precone should be a rotation around the negative z axis. + # And so to undo it, we want a positive rotation around the positive z axis. + trans_precone = KinematicCoordinateTransformations.SteadyRotZTransformation(τ, 0.0, precone) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + # Create a transformation that reverses the theta and precone rotations. + # The precone happens first, then theta. + # So to reverse it we need to do theta, then precone. + trans = KinematicCoordinateTransformations.compose(τ, trans_precone, trans_theta) + # Create a source element with the theta and precone rotations, then undo it. + se = TEBVSSourceElement(rotor, section, op, out, θ, Δr, h, Psi, τ, Δτ, bl, positive_x_rotation) |> trans + # Check that we got the same thing: + for field in fieldnames(TEBVSSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if !(field in (:chord_uvec, :bl)) + @test getproperty(se, field) ≈ getproperty(se_0theta0precone, field) + end + end + + if positive_x_rotation + # If we're doing a positive-x rotation, we're applying the twist about the positive y axis. + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -twist) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're doing a negative-x rotation, we're applying the twist about the negative y axis. + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, twist) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end + end +end + +@testset "CCBlade TEBVSSourceElement complete test" begin + for positive_x_rotation in [true, false] + omega = 2200*(2*pi/60) + + # Create the CCBlade objects. + rotor = Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades; turbine=false) + sections = Section.(ccbc.radii, ccbc.chord, ccbc.theta, nothing) + ops = simple_op.(ccbc.v, omega, ccbc.radii, ccbc.rho; asound=ccbc.c0) + # What actually matters in the output structs are just W and phi. + phi = range(45.0, 10.0; length=length(sections)) .* (pi/180) + W = range(10.0, 11.0; length=length(sections)) + outs = Outputs.(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, phi, 0.0, W, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) + + # Set the source time stuff. + num_blade_passes = 3 + steps_per_blade_pass = 8 + num_src_times = num_blade_passes*steps_per_blade_pass + bpp = 2*pi/omega/ccbc.num_blades + src_time_range = num_blade_passes*bpp + + # Finally get all the source elements. + bls = [AcousticAnalogies.TrippedN0012BoundaryLayer()] + hs = range(0.1, 0.2; length=length(sections)) + Psis = range(0.2, 0.3; length=length(sections)) + ses_helper = tebvs_source_elements_ccblade(rotor, sections, ops, outs, hs, Psis, bls, src_time_range, num_src_times, positive_x_rotation) + + # Now need to get the source elements the "normal" way. + # First get the transformation objects. + rot_axis = @SVector [1.0, 0.0, 0.0] + blade_axis = @SVector [0.0, 1.0, 0.0] + y0_hub = @SVector [0.0, 0.0, 0.0] # m + v0_hub = ccbc.v.*rot_axis + t0 = 0.0 + if positive_x_rotation + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, omega, 0.0) + else + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, -omega, 0.0) + end + const_vel_trans = KinematicCoordinateTransformations.ConstantVelocityTransformation(t0, y0_hub, v0_hub) + + # Need the source times. + dt = src_time_range/num_src_times + src_times = t0 .+ (0:num_src_times-1).*dt + + # This is just an array of the angular offsets of each blade. + θs = 2*pi/ccbc.num_blades.*(0:(ccbc.num_blades-1)) + + # Radial spacing. + dradii = get_dradii(ccbc.radii, ccbc.Rhub, ccbc.Rtip) + + # Need the kinematic viscosity. + nus = getproperty.(ops, :mu) ./ getproperty.(ops, :rho) + + # Also need the velocity in each direction. + if positive_x_rotation + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. -W*cos(phi) + else + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. W*cos(phi) + end + + # Reshape stuff for broadcasting. + radii_rs = reshape(ccbc.radii, 1, :, 1) + dradii_rs = reshape(dradii, 1, :, 1) + phi_rs = reshape(phi, 1, :, 1) + W_rs = reshape(W, 1, :, 1) + src_times_rs = reshape(src_times, :, 1, 1) # This isn't really necessary. + θs_rs = reshape(θs, 1, 1, :) + nus_rs = reshape(nus, 1, :, 1) + twist_rs = reshape(getproperty.(sections, :theta), 1, :, 1) + chord_rs = reshape(getproperty.(sections, :chord), 1, :, 1) + vn_rs = reshape(vn, 1, :, 1) + vr_rs = reshape(vr, 1, :, 1) + vc_rs = reshape(vc, 1, :, 1) + h_rs = reshape(hs, 1, :, 1) + Psi_rs = reshape(Psis, 1, :, 1) + + # Get all the transformations. + trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + + # Transform the source elements. + ses = TEBVSSourceElement.(ccbc.c0, nus_rs, radii_rs, θs_rs, dradii_rs, chord_rs, twist_rs, h_rs, Psi_rs, vn_rs, vr_rs, vc_rs, src_times_rs, dt, bls, positive_x_rotation) .|> trans + + # Now check that we got the same thing. + for field in fieldnames(TEBVSSourceElement) + if !(field in (:bl,)) + @test all(getproperty.(ses_helper, field) .≈ getproperty.(ses, field)) + end + end + end +end + +@testset "TipVortexSourceElement twist and rotation tests" begin + # So, the way this should work: first do the twist, then do the theta rotation. + # The twist could be either about the positive y axis or negative y axis. + # Then the theta rotation is always about the x axis. + c0 = 1.1 + # nu = 1.2 + r = 2.0 + Δr = 0.1 + chord = 1.3 + vn = 2.0 + vr = 3.0 + vc = 4.0 + τ = 0.1 + Δτ = 0.02 + bl = 2.0 # should be a boundary layer struct, but doesn't matter for these tests. + blade_tip = 3.0 # should be a blade tip struct, but doesn't matter for these tests. + for twist_about_positive_y in [true, false] + se_0twist0theta = TipVortexSourceElement(c0, r, 0.0, Δr, chord, 0.0, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + + for ϕ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + # The angle of attack depends on the twist and the fluid velocity + if twist_about_positive_y + alpha_check = ϕ - atan(-vn, -vc) + else + alpha_check = ϕ - atan(-vn, vc) + end + se = TipVortexSourceElement(c0, r, θ, Δr, chord, ϕ, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) |> trans_theta + # Adjust the angles of attack to always be between -pi and pi. + alpha_check = rem2pi(alpha_check+pi, RoundNearest) - pi + alpha = rem2pi(AcousticAnalogies.angle_of_attack(se)+pi, RoundNearest) - pi + @test alpha ≈ alpha_check + + for field in fieldnames(TipVortexSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if field != :chord_uvec + @test getproperty(se, field) ≈ getproperty(se_0twist0theta, field) + end + end + + if twist_about_positive_y + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -ϕ) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, ϕ) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end +end + +@testset "TipVortexSourceElement twist and rotation tests, CCBlade" begin + # Create the CCBlade objects. + τ = 0.1 + Δτ = 0.02 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + blade_tip = AcousticAnalogies.RoundedTip() + # ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11.jld2") + # out, section_loaded, Δr, op, rotor0precone = nothing, nothing, nothing, nothing, nothing + # jldopen(ccblade_fname, "r") do f + # out = f["outs"][1] + # section_loaded = f["sections"][1] + # Δr = f["sections"][2].r - f["sections"][1].r + # op = f["ops"][1] + # rotor0precone = f["rotor"] + # @test rotor0precone.precone ≈ 0.0 + # end + + ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11-outputs.jld2") + outs_d = load(ccblade_fname) + section_loaded = CCBlade.Section(first(ccbc.radii), first(ccbc.chord), first(ccbc.theta)*pi/180, nothing) + Δr = ccbc.radii[2] - ccbc.radii[1] + op = CCBlade.OperatingPoint(ccbc.v, outs_d["omega"]*first(ccbc.radii), ccbc.rho, ccbc.pitch, ccbc.mu, ccbc.c0) + rotor0precone = CCBlade.Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades) + out = CCBlade.Outputs(outs_d["Np"][1], outs_d["Tp"][1], outs_d["a"][1], outs_d["ap"][1], outs_d["u"][1], outs_d["v"][1], outs_d["phi"][1], outs_d["alpha"][1], outs_d["W"][1], outs_d["cl"][1], outs_d["cd"][1], outs_d["cn"][1], outs_d["ct"][1], outs_d["F"][1], outs_d["G"][1]) + @test rotor0precone.precone ≈ 0.0 + + for positive_x_rotation in [true, false] + for twist in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + section = CCBlade.Section(section_loaded.r, section_loaded.chord, twist, section_loaded.af) + se_0theta0precone = TipVortexSourceElement(rotor0precone, section, op, out, 0.0, Δr, τ, Δτ, bl, blade_tip, positive_x_rotation) + for precone in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + rotor = CCBlade.Rotor(rotor0precone.Rhub, rotor0precone.Rtip, rotor0precone.B; turbine=rotor0precone.turbine, precone=precone) + # This is tricky: in my "normal" coordinate system, the blade is rotating around the x axis, moving axially in the positive x direction, and is initially aligned with the y axis. + # That means that the precone should be a rotation around the negative z axis. + # And so to undo it, we want a positive rotation around the positive z axis. + trans_precone = KinematicCoordinateTransformations.SteadyRotZTransformation(τ, 0.0, precone) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + # Create a transformation that reverses the theta and precone rotations. + # The precone happens first, then theta. + # So to reverse it we need to do theta, then precone. + trans = KinematicCoordinateTransformations.compose(τ, trans_precone, trans_theta) + # Create a source element with the theta and precone rotations, then undo it. + se = TipVortexSourceElement(rotor, section, op, out, θ, Δr, τ, Δτ, bl, blade_tip, positive_x_rotation) |> trans + # Check that we got the same thing: + for field in fieldnames(TipVortexSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if !(field in (:chord_uvec, :bl, :blade_tip)) + @test getproperty(se, field) ≈ getproperty(se_0theta0precone, field) + end + end + + if positive_x_rotation + # If we're doing a positive-x rotation, we're applying the twist about the positive y axis. + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -twist) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're doing a negative-x rotation, we're applying the twist about the negative y axis. + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, twist) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end + end +end + +@testset "CCBlade TipVortexSourceElement complete test" begin + for positive_x_rotation in [true, false] + omega = 2200*(2*pi/60) + + # Create the CCBlade objects. + rotor = Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades; turbine=false) + sections = Section.(ccbc.radii, ccbc.chord, ccbc.theta, nothing) + ops = simple_op.(ccbc.v, omega, ccbc.radii, ccbc.rho; asound=ccbc.c0) + # What actually matters in the output structs are just W and phi. + phi = range(45.0, 10.0; length=length(sections)) .* (pi/180) + W = range(10.0, 11.0; length=length(sections)) + outs = Outputs.(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, phi, 0.0, W, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) + + # Radial spacing. + dradii = get_dradii(ccbc.radii, ccbc.Rhub, ccbc.Rtip) + + # Set the source time stuff. + num_blade_passes = 3 + steps_per_blade_pass = 8 + num_src_times = num_blade_passes*steps_per_blade_pass + bpp = 2*pi/omega/ccbc.num_blades + src_time_range = num_blade_passes*bpp + + # Finally get all the source elements. + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + blade_tip = AcousticAnalogies.RoundedTip() + ses_helper = tip_vortex_source_elements_ccblade(rotor, sections[end], ops[end], outs[end], dradii[end], bl, blade_tip, src_time_range, num_src_times, positive_x_rotation) + + # Now need to get the source elements the "normal" way. + # First get the transformation objects. + rot_axis = @SVector [1.0, 0.0, 0.0] + blade_axis = @SVector [0.0, 1.0, 0.0] + y0_hub = @SVector [0.0, 0.0, 0.0] # m + v0_hub = ccbc.v.*rot_axis + t0 = 0.0 + if positive_x_rotation + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, omega, 0.0) + else + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, -omega, 0.0) + end + const_vel_trans = KinematicCoordinateTransformations.ConstantVelocityTransformation(t0, y0_hub, v0_hub) + + # Need the source times. + dt = src_time_range/num_src_times + src_times = t0 .+ (0:num_src_times-1).*dt + + # This is just an array of the angular offsets of each blade. + θs = 2*pi/ccbc.num_blades.*(0:(ccbc.num_blades-1)) + + # Need the kinematic viscosity. + # nus = getproperty.(ops, :mu) ./ getproperty.(ops, :rho) + + # Also need the velocity in each direction. + if positive_x_rotation + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. -W*cos(phi) + else + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. W*cos(phi) + end + + # Reshape stuff for broadcasting. + θs_rs = reshape(θs, 1, 1, :) + + # Get all the transformations. + trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + + # Transform the source elements. + ses = TipVortexSourceElement.(ccbc.c0, ccbc.radii[end], θs_rs, dradii[end], sections[end].chord, sections[end].theta, vn[end], vr[end], vc[end], src_times, dt, Ref(bl), Ref(blade_tip), positive_x_rotation) .|> trans + + # Now check that we got the same thing. + for field in fieldnames(TipVortexSourceElement) + if !(field in (:bl, :blade_tip)) + @test all(getproperty.(ses_helper, field) .≈ getproperty.(ses, field)) + end + end + end +end + +@testset "CombinedNoTipBroadbandSourceElement twist and rotation tests" begin + # So, the way this should work: first do the twist, then do the theta rotation. + # The twist could be either about the positive y axis or negative y axis. + # Then the theta rotation is always about the x axis. + c0 = 1.1 + nu = 1.2 + r = 2.0 + Δr = 0.1 + chord = 1.3 + vn = 2.0 + vr = 3.0 + vc = 4.0 + τ = 0.1 + Δτ = 0.02 + h = 0.1 + Psi = 0.2 + bl = 2.0 # should be a boundary layer struct, but doesn't matter for these tests. + for twist_about_positive_y in [true, false] + se_0twist0theta = CombinedNoTipBroadbandSourceElement(c0, nu, r, 0.0, Δr, chord, 0.0, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + + for ϕ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + # The angle of attack depends on the twist and the fluid velocity + if twist_about_positive_y + alpha_check = ϕ - atan(-vn, -vc) + else + alpha_check = ϕ - atan(-vn, vc) + end + se = CombinedNoTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, twist_about_positive_y) |> trans_theta + # Adjust the angles of attack to always be between -pi and pi. + alpha_check = rem2pi(alpha_check+pi, RoundNearest) - pi + alpha = rem2pi(AcousticAnalogies.angle_of_attack(se)+pi, RoundNearest) - pi + @test alpha ≈ alpha_check + + for field in fieldnames(CombinedNoTipBroadbandSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if field != :chord_uvec + @test getproperty(se, field) ≈ getproperty(se_0twist0theta, field) + end + end + + if twist_about_positive_y + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -ϕ) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, ϕ) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end +end + +@testset "CombinedNoTipBroadbandSourceElement twist and rotation tests, CCBlade" begin + # Create the CCBlade objects. + τ = 0.1 + Δτ = 0.02 + h = 0.1 + Psi = 0.2 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + # ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11.jld2") + # out, section_loaded, Δr, op, rotor0precone = nothing, nothing, nothing, nothing, nothing + # jldopen(ccblade_fname, "r") do f + # out = f["outs"][1] + # section_loaded = f["sections"][1] + # Δr = f["sections"][2].r - f["sections"][1].r + # op = f["ops"][1] + # rotor0precone = f["rotor"] + # @test rotor0precone.precone ≈ 0.0 + # end + + ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11-outputs.jld2") + outs_d = load(ccblade_fname) + section_loaded = CCBlade.Section(first(ccbc.radii), first(ccbc.chord), first(ccbc.theta)*pi/180, nothing) + Δr = ccbc.radii[2] - ccbc.radii[1] + op = CCBlade.OperatingPoint(ccbc.v, outs_d["omega"]*first(ccbc.radii), ccbc.rho, ccbc.pitch, ccbc.mu, ccbc.c0) + rotor0precone = CCBlade.Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades) + out = CCBlade.Outputs(outs_d["Np"][1], outs_d["Tp"][1], outs_d["a"][1], outs_d["ap"][1], outs_d["u"][1], outs_d["v"][1], outs_d["phi"][1], outs_d["alpha"][1], outs_d["W"][1], outs_d["cl"][1], outs_d["cd"][1], outs_d["cn"][1], outs_d["ct"][1], outs_d["F"][1], outs_d["G"][1]) + @test rotor0precone.precone ≈ 0.0 + + for positive_x_rotation in [true, false] + for twist in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + section = CCBlade.Section(section_loaded.r, section_loaded.chord, twist, section_loaded.af) + se_0theta0precone = CombinedNoTipBroadbandSourceElement(rotor0precone, section, op, out, 0.0, Δr, h, Psi, τ, Δτ, bl, positive_x_rotation) + for precone in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + rotor = CCBlade.Rotor(rotor0precone.Rhub, rotor0precone.Rtip, rotor0precone.B; turbine=rotor0precone.turbine, precone=precone) + # This is tricky: in my "normal" coordinate system, the blade is rotating around the x axis, moving axially in the positive x direction, and is initially aligned with the y axis. + # That means that the precone should be a rotation around the negative z axis. + # And so to undo it, we want a positive rotation around the positive z axis. + trans_precone = KinematicCoordinateTransformations.SteadyRotZTransformation(τ, 0.0, precone) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + # Create a transformation that reverses the theta and precone rotations. + # The precone happens first, then theta. + # So to reverse it we need to do theta, then precone. + trans = KinematicCoordinateTransformations.compose(τ, trans_precone, trans_theta) + # Create a source element with the theta and precone rotations, then undo it. + se = CombinedNoTipBroadbandSourceElement(rotor, section, op, out, θ, Δr, h, Psi, τ, Δτ, bl, positive_x_rotation) |> trans + # Check that we got the same thing: + for field in fieldnames(CombinedNoTipBroadbandSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if !(field in (:chord_uvec, :bl)) + @test getproperty(se, field) ≈ getproperty(se_0theta0precone, field) + end + end + + if positive_x_rotation + # If we're doing a positive-x rotation, we're applying the twist about the positive y axis. + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -twist) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're doing a negative-x rotation, we're applying the twist about the negative y axis. + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, twist) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end + end +end + +@testset "CombinedWithTipBroadbandSourceElement twist and rotation tests" begin + # So, the way this should work: first do the twist, then do the theta rotation. + # The twist could be either about the positive y axis or negative y axis. + # Then the theta rotation is always about the x axis. + c0 = 1.1 + nu = 1.2 + r = 2.0 + Δr = 0.1 + chord = 1.3 + vn = 2.0 + vr = 3.0 + vc = 4.0 + τ = 0.1 + Δτ = 0.02 + h = 0.1 + Psi = 0.2 + bl = 2.0 # should be a boundary layer struct, but doesn't matter for these tests. + blade_tip = 3.0 # should be a blade tip struct, but doesn't matter for these tests. + for twist_about_positive_y in [true, false] + se_0twist0theta = CombinedWithTipBroadbandSourceElement(c0, nu, r, 0.0, Δr, chord, 0.0, h, Psi, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + + for ϕ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + # The angle of attack depends on the twist and the fluid velocity + if twist_about_positive_y + alpha_check = ϕ - atan(-vn, -vc) + else + alpha_check = ϕ - atan(-vn, vc) + end + se = CombinedWithTipBroadbandSourceElement(c0, nu, r, θ, Δr, chord, ϕ, h, Psi, vn, vr, vc, τ, Δτ, bl, blade_tip, twist_about_positive_y) |> trans_theta + # Adjust the angles of attack to always be between -pi and pi. + alpha_check = rem2pi(alpha_check+pi, RoundNearest) - pi + alpha = rem2pi(AcousticAnalogies.angle_of_attack(se)+pi, RoundNearest) - pi + @test alpha ≈ alpha_check + + for field in fieldnames(CombinedWithTipBroadbandSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if field != :chord_uvec + @test getproperty(se, field) ≈ getproperty(se_0twist0theta, field) + end + end + + if twist_about_positive_y + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -ϕ) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, ϕ) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end +end + +@testset "CombinedWithTipBroadbandSourceElement twist and rotation tests, CCBlade" begin + # Create the CCBlade objects. + τ = 0.1 + Δτ = 0.02 + h = 0.1 + Psi = 0.2 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + blade_tip = AcousticAnalogies.RoundedTip() + # ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11.jld2") + # out, section_loaded, Δr, op, rotor0precone = nothing, nothing, nothing, nothing, nothing + # jldopen(ccblade_fname, "r") do f + # out = f["outs"][1] + # section_loaded = f["sections"][1] + # Δr = f["sections"][2].r - f["sections"][1].r + # op = f["ops"][1] + # rotor0precone = f["rotor"] + # @test rotor0precone.precone ≈ 0.0 + # end + + ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11-outputs.jld2") + outs_d = load(ccblade_fname) + section_loaded = CCBlade.Section(first(ccbc.radii), first(ccbc.chord), first(ccbc.theta)*pi/180, nothing) + Δr = ccbc.radii[2] - ccbc.radii[1] + op = CCBlade.OperatingPoint(ccbc.v, outs_d["omega"]*first(ccbc.radii), ccbc.rho, ccbc.pitch, ccbc.mu, ccbc.c0) + rotor0precone = CCBlade.Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades) + out = CCBlade.Outputs(outs_d["Np"][1], outs_d["Tp"][1], outs_d["a"][1], outs_d["ap"][1], outs_d["u"][1], outs_d["v"][1], outs_d["phi"][1], outs_d["alpha"][1], outs_d["W"][1], outs_d["cl"][1], outs_d["cd"][1], outs_d["cn"][1], outs_d["ct"][1], outs_d["F"][1], outs_d["G"][1]) + @test rotor0precone.precone ≈ 0.0 + + for positive_x_rotation in [true, false] + for twist in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + section = CCBlade.Section(section_loaded.r, section_loaded.chord, twist, section_loaded.af) + se_0theta0precone = CombinedWithTipBroadbandSourceElement(rotor0precone, section, op, out, 0.0, Δr, h, Psi, τ, Δτ, bl, blade_tip, positive_x_rotation) + for precone in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + rotor = CCBlade.Rotor(rotor0precone.Rhub, rotor0precone.Rtip, rotor0precone.B; turbine=rotor0precone.turbine, precone=precone) + # This is tricky: in my "normal" coordinate system, the blade is rotating around the x axis, moving axially in the positive x direction, and is initially aligned with the y axis. + # That means that the precone should be a rotation around the negative z axis. + # And so to undo it, we want a positive rotation around the positive z axis. + trans_precone = KinematicCoordinateTransformations.SteadyRotZTransformation(τ, 0.0, precone) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + # Create a transformation that reverses the theta and precone rotations. + # The precone happens first, then theta. + # So to reverse it we need to do theta, then precone. + trans = KinematicCoordinateTransformations.compose(τ, trans_precone, trans_theta) + # Create a source element with the theta and precone rotations, then undo it. + se = CombinedWithTipBroadbandSourceElement(rotor, section, op, out, θ, Δr, h, Psi, τ, Δτ, bl, blade_tip, positive_x_rotation) |> trans + # Check that we got the same thing: + for field in fieldnames(CombinedWithTipBroadbandSourceElement) + # The twist changes the unit vector in the chord direction, but nothing else, so ignore that for now. + if !(field in (:chord_uvec, :bl, :blade_tip)) + @test getproperty(se, field) ≈ getproperty(se_0theta0precone, field) + end + end + + if positive_x_rotation + # If we're doing a positive-x rotation, we're applying the twist about the positive y axis. + # If we're applying the twist about the positive y axis, then we need to do a negative rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, -twist) + chord_uvec_check = @SVector [0.0, 0.0, -1.0] + else + # If we're doing a negative-x rotation, we're applying the twist about the negative y axis. + # If we're applying the twist about the negative y axis, then we need to do a positive rotation about the y axis to undo it. + trans_phi = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, twist) + chord_uvec_check = @SVector [0.0, 0.0, 1.0] + end + se_no_twist = se |> trans_phi + @test se_no_twist.chord_uvec ≈ chord_uvec_check + end + end + end + end +end + +@testset "CCBlade combined broadband source elements complete test" begin + for positive_x_rotation in [true, false] + omega = 2200*(2*pi/60) + + # Create the CCBlade objects. + rotor = Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades; turbine=false) + sections = Section.(ccbc.radii, ccbc.chord, ccbc.theta, nothing) + ops = simple_op.(ccbc.v, omega, ccbc.radii, ccbc.rho; asound=ccbc.c0) + # What actually matters in the output structs are just W and phi. + phi = range(45.0, 10.0; length=length(sections)) .* (pi/180) + W = range(10.0, 11.0; length=length(sections)) + outs = Outputs.(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, phi, 0.0, W, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) + + # Set the source time stuff. + num_blade_passes = 3 + steps_per_blade_pass = 8 + num_src_times = num_blade_passes*steps_per_blade_pass + bpp = 2*pi/omega/ccbc.num_blades + src_time_range = num_blade_passes*bpp + + # Finally get all the source elements. + # bls = [AcousticAnalogies.TrippedN0012BoundaryLayer()] + # bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + # bls = Fill(AcousticAnalogies.TrippedN0012BoundaryLayer(), num_radial) + bls = fill(AcousticAnalogies.TrippedN0012BoundaryLayer(), length(sections)) + hs = range(0.1, 0.2; length=length(sections)) + Psis = range(0.2, 0.3; length=length(sections)) + blade_tip = AcousticAnalogies.RoundedTip() + ses_no_tip_helper, ses_with_tip_helper = combined_broadband_source_elements_ccblade(rotor, sections, ops, outs, hs, Psis, bls, blade_tip, src_time_range, num_src_times, positive_x_rotation) + + # Now need to get the source elements the "normal" way. + # First get the transformation objects. + rot_axis = @SVector [1.0, 0.0, 0.0] + blade_axis = @SVector [0.0, 1.0, 0.0] + y0_hub = @SVector [0.0, 0.0, 0.0] # m + v0_hub = ccbc.v.*rot_axis + t0 = 0.0 + if positive_x_rotation + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, omega, 0.0) + else + rot_trans = KinematicCoordinateTransformations.SteadyRotXTransformation(t0, -omega, 0.0) + end + const_vel_trans = KinematicCoordinateTransformations.ConstantVelocityTransformation(t0, y0_hub, v0_hub) + + # Need the source times. + dt = src_time_range/num_src_times + src_times = t0 .+ (0:num_src_times-1).*dt + + # This is just an array of the angular offsets of each blade. + θs = 2*pi/ccbc.num_blades.*(0:(ccbc.num_blades-1)) + + # Radial spacing. + dradii = get_dradii(ccbc.radii, ccbc.Rhub, ccbc.Rtip) + + # Need the kinematic viscosity. + nus = getproperty.(ops, :mu) ./ getproperty.(ops, :rho) + + # Also need the velocity in each direction. + if positive_x_rotation + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. -W*cos(phi) + else + vn = @. -W*sin(phi) + vr = zeros(eltype(vn), length(vn)) + vc = @. W*cos(phi) + end + + # Reshape stuff for broadcasting. + radii_rs = reshape(ccbc.radii, 1, :, 1) + dradii_rs = reshape(dradii, 1, :, 1) + phi_rs = reshape(phi, 1, :, 1) + W_rs = reshape(W, 1, :, 1) + # src_times_rs = reshape(src_times, :, 1, 1) # This isn't really necessary. + θs_rs = reshape(θs, 1, 1, :) + nus_rs = reshape(nus, 1, :, 1) + twist_rs = reshape(getproperty.(sections, :theta), 1, :, 1) + chord_rs = reshape(getproperty.(sections, :chord), 1, :, 1) + hs_rs = reshape(hs, 1, :, 1) + Psis_rs = reshape(Psis, 1, :, 1) + vn_rs = reshape(vn, 1, :, 1) + vr_rs = reshape(vr, 1, :, 1) + vc_rs = reshape(vc, 1, :, 1) + bls_rs = reshape(bls, 1, :, 1) + + # Get all the transformations. + trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + + # Now need to split things into the with tip and no tip stuff. + radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] + dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] + phi_rs_no_tip = @view phi_rs[:, begin:end-1, :] + W_rs_no_tip = @view W_rs[:, begin:end-1, :] + nus_rs_no_tip = @view nus_rs[:, begin:end-1, :] + twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] + chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] + hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] + Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] + vn_rs_no_tip = @view vn_rs[:, begin:end-1, :] + vr_rs_no_tip = @view vr_rs[:, begin:end-1, :] + vc_rs_no_tip = @view vc_rs[:, begin:end-1, :] + bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + + radii_rs_with_tip = @view radii_rs[:, end:end, :] + dradii_rs_with_tip = @view dradii_rs[:, end:end, :] + phi_rs_with_tip = @view phi_rs[:, end:end, :] + W_rs_with_tip = @view W_rs[:, end:end, :] + nus_rs_with_tip = @view nus_rs[:, end:end, :] + twist_rs_with_tip = @view twist_rs[:, end:end, :] + chord_rs_with_tip = @view chord_rs[:, end:end, :] + hs_rs_with_tip = @view hs_rs[:, end:end, :] + Psis_rs_with_tip = @view Psis_rs[:, end:end, :] + vn_rs_with_tip = @view vn_rs[:, end:end, :] + vr_rs_with_tip = @view vr_rs[:, end:end, :] + vc_rs_with_tip = @view vc_rs[:, end:end, :] + bls_rs_with_tip = @view bls_rs[:, end:end, :] + + # Transform the source elements. + ses_no_tip = CombinedNoTipBroadbandSourceElement.(ccbc.c0, nus_rs_no_tip, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord_rs_no_tip, twist_rs_no_tip, hs_rs_no_tip, Psis_rs_no_tip, vn_rs_no_tip, vr_rs_no_tip, vc_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans + + ses_with_tip = CombinedWithTipBroadbandSourceElement.(ccbc.c0, nus_rs_with_tip, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord_rs_with_tip, twist_rs_with_tip, hs_rs_with_tip, Psis_rs_with_tip, vn_rs_with_tip, vr_rs_with_tip, vc_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + + # Now check that we got the same thing. + for field in fieldnames(CombinedNoTipBroadbandSourceElement) + if !(field in (:bl,)) + @test all(getproperty.(ses_no_tip_helper, field) .≈ getproperty.(ses_no_tip, field)) + end + end + for field in fieldnames(CombinedWithTipBroadbandSourceElement) + if !(field in (:bl, :blade_tip)) + @test all(getproperty.(ses_with_tip_helper, field) .≈ getproperty.(ses_with_tip, field)) + end + end + end +end + +@testset "directivity function tests" begin + # None of this stuff matters for the directivity functions. + c0 = 2.0 + nu = 3.0 + dr = 0.1 + chord = 1.1 + τ = 0.2 + dτ = 0.01 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + chord_cross_span_to_get_top_uvec = true + + # This stuff actually matters. + # Need the fluid velocity to be zero so we can ignore the denominator. + y1dot = @SVector [0.0, 0.0, 0.0] + y1dot_fluid = @SVector [0.0, 0.0, 0.0] + y0dot = @SVector [0.0, 0.0, 0.0] + chord_uvec = [1.0, 0.0, 0.0] + span_uvec = [0.0, 1.0, 0.0] + + # Create a source element. + se = AcousticAnalogies.TBLTESourceElement(c0, nu, dr, chord, y0dot, y1dot, y1dot_fluid, τ, dτ, span_uvec, chord_uvec, bl, chord_cross_span_to_get_top_uvec) + + # Now, create an observer at different places, and check that we get the correct directivity function. + for x_er in [-5.0, -3.0, 1.5, 4.0] + for y_er in [-5.0, -3.0, 1.5, 4.0] + for z_er in [-5.0, -3.0, 1.5, 4.0] + x = @SVector [x_er, y_er, z_er] + obs = AcousticAnalogies.StationaryAcousticObserver(x) + r_er_check = sqrt(x_er^2 + y_er^2 + z_er^2) + Θ_er = acos(x_er/r_er_check) + Φ_er = acos(y_er/sqrt(y_er^2 + z_er^2)) + + # Observer time doesn't matter since the observer is stationary. + t_obs = 7.0 + x_obs = obs(t_obs) + Dl_check = (sin(Θ_er)^2) * (sin(Φ_er)^2) + Dh_check = 2*(sin(0.5*Θ_er)^2) * (sin(Φ_er)^2) + top_is_suction = true + r_er, Dl, Dh = AcousticAnalogies.directivity(se, obs(t_obs), top_is_suction) + @test r_er ≈ r_er_check + @test Dl ≈ Dl_check + @test Dh ≈ Dh_check + + # Now, rotate and translate both the source and the observer. + # The directivity functions should be the same. + # Time parameter for the steady rotations doesn't matter because the rotation rate is zero. + trans1 = KinematicCoordinateTransformations.SteadyRotXTransformation(t_obs, 0.0, 3.0*pi/180) + trans2 = KinematicCoordinateTransformations.SteadyRotYTransformation(t_obs, 0.0, 4.0*pi/180) + trans3 = KinematicCoordinateTransformations.SteadyRotZTransformation(t_obs, 0.0, 5.0*pi/180) + # Time parameter for the constant velocity transformations doesn't matter because the velocity is zero. + x_trans = @SVector [2.0, 3.0, 4.0] + v_trans = @SVector [0.0, 0.0, 0.0] + trans4 = KinematicCoordinateTransformations.ConstantVelocityTransformation(t_obs, x_trans, v_trans) + + # Transform the source and observer. + trans = compose(t_obs, trans4, compose(t_obs, trans3, compose(t_obs, trans2, trans1))) + se_trans = trans(se) + obs_trans = AcousticAnalogies.StationaryAcousticObserver(trans(t_obs, obs(t_obs))) + + # Check that the directivity functions didn't change. + r_er, Dl, Dh = AcousticAnalogies.directivity(se_trans, obs_trans(t_obs), top_is_suction) + @test r_er ≈ r_er_check + @test Dl ≈ Dl_check + @test Dh ≈ Dh_check + end + end + end + +end + +@testset "angle of attack test" begin + + @testset "TBLTESourceElement" begin + for twist_about_positive_y in [true, false] + # None of this stuff matters for the angle of attack. + c0 = 2.0 + nu = 3.0 + dr = 0.1 + chord = 1.1 + dτ = 0.01 + r = 0.5 + omega = 101.0 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + # We'll create a random transformation to check that rotating and displacing the source doesn't change the angle of attack. + # Time parameter for the steady rotations doesn't matter because the rotation rate is zero. + τ = 0.2 + trans1 = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, 3.0*pi/180) + trans2 = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, 4.0*pi/180) + trans3 = KinematicCoordinateTransformations.SteadyRotZTransformation(τ, 0.0, 5.0*pi/180) + # Time parameter for the constant velocity transformations doesn't matter because the velocity is zero. + x_trans = @SVector [2.0, 3.0, 4.0] + v_trans = @SVector [0.0, 0.0, 0.0] + trans4 = KinematicCoordinateTransformations.ConstantVelocityTransformation(τ, x_trans, v_trans) + # Combine all the transformations into one. + trans = compose(τ, trans4, compose(τ, trans3, compose(τ, trans2, trans1))) + + # This stuff does matter for angle of attack. + Vx = 5.5 + u = 0.1*Vx + Vy = omega*r + v = 0.05*Vy + # So, let's say I'm in the usual frame of reference: moving axially in the positive x direction, rotating about the positive x axis if `twist_about_positive_y` is `true`, negative x axis if `twist_about_positive_y` is `false`, initially aligned with the y axis. + # Then, from the perspective of the blade element, the fluid velocity in the axial direction (`x`) is `-(Vx + u)`, and the velocity in the tangential direction is `(-Vy + v)`. + # + # vr shouldn't matter at all, so check that. + for use_induction in [true, false] + for vr in [0.0, 2.1, -2.1] + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + for twist in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + for vn_sign in [1, -1] + for vc_sign in [1, -1] + vn = -(Vx + u)*vn_sign + vc = (-Vy + v)*vc_sign + se = AcousticAnalogies.TBLTESourceElement{AcousticAnalogies.BrooksBurleyDirectivity,use_induction,AcousticAnalogies.NoMachCorrection,true}(c0, nu, r, θ, dr, chord, twist, vn, vr, vc, τ, dτ, bl, twist_about_positive_y) + # And then the angle of attack will be `twist - atan(-vn, -vc)`, where `twist` is the twist of the blade, `vn` is the velocity in the axial direction, and `vc` is the velocity in the circumferential/tangential direction. + # But we need to switch the direction of the velocity vector, since I'm thinking of them in opposite directions (eg the angle of attack is zero when the velocity and chordwise vector from trailing edge to leading edge are exactly opposite). + # The rem2pi will give us back an equivalent angle in the interval [-π, π]. + if twist_about_positive_y + # If the twist is about the positive y axis, then the assumption is that the twist and velocity angles are zero when they are aligned with positive z axis. + # In the "usual" operation, the axial component of the blade-fixed frame velocity will be in the negative x direction, and the circumferential component of the blade-fixed frame velocity will be in the negative z direction. + # So we need to switch both of those signs to get the correct angle. + angle_of_attack_check = rem2pi(twist - atan(-vn, -vc), RoundNearest) + else + # If the twist is about the negative y axis, then the assumption is the twist and velocity angles are zero when they are aligned with the negative z axis. + # In then "usual" operation, the axial component of the blade-fixed frame velocity will be in the negative x direction, and the circumferential component of the blade fixed frame velocity will be in the positive z direction. + # So we need to switch the sign of the axial component, but not the circumferential. + angle_of_attack_check = rem2pi(twist - atan(-vn, vc), RoundNearest) + end + + @test AcousticAnalogies.angle_of_attack(se) ≈ angle_of_attack_check + + if use_induction + # Flow speed normal to span, including induction: + U_check = sqrt(vn^2 + vc^2) + else + # Flow speed normal to span, not including induction: + U_check = sqrt(Vx^2 + Vy^2) + end + + if use_induction + # If we're including induction in the flow speed normal to span calculation, we can check it now. + @test AcousticAnalogies.speed_normal_to_span(se) ≈ U_check + end + + # Apply the random transformation we created. + se_trans = trans(se) + + # Make sure we get the same angle of attack as before. + @test AcousticAnalogies.angle_of_attack(se_trans) ≈ angle_of_attack_check + + # Now, instead of doing a transformation that just displaces the source element, let's do one that changes the velocity. + # So, how are we going to transform the source element into the fluid frame? + # Well, first we say we're rotating around the x axix at a rate ω or -ω, depending on the value of `twist_about_positive_y` + # Oh, but wait. + # We're switching the sign. + # Hmm... what to do about that? + # Well, the definition of the fluid frame is one that has the "freestream velocity" as zero. + # So that, I think, means we need to remove the axial and circumferential (rotational) velocity. + # So remove Vx and Vy. + # I should be able to do that. + # So, first, let's think about getting rid of Vy. + # If we rotate about the positive x axis, then that will increase the velocity in the z direction (since the blade is initially aligned with the y axis). + # If we rotate about the negative x axis, then that will decrease the velocity in the z direction (again, since the blade is initially aligned with the y axis). + # OK, then. + trans_rot = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, omega*vc_sign, 0.0) + + # Now, for the x velocity, we just want to remove the Vx. + x0 = @SVector [0.0, 0.0, 0.0] + v0 = @SVector [Vx*vn_sign, 0.0, 0.0] + trans_freestream = KinematicCoordinateTransformations.ConstantVelocityTransformation(τ, x0, v0) + + # Now compose the two transformations, and apply them to the source element. + trans_global = compose(τ, trans_freestream, trans_rot) + se_global = trans_global(se) + + # The angle of attack should be the same. + @test AcousticAnalogies.angle_of_attack(se_global) ≈ angle_of_attack_check + + # Also, we should know what the source element and fluid velocities are, right? + y1dot_check = @SVector [Vx*vn_sign, Vy*vc_sign*(-sin(θ)), Vy*vc_sign*(cos(θ))] + y1dot_fluid_check = @SVector [-u*vn_sign, vr*cos(θ) + v*vc_sign*(-sin(θ)), vr*sin(θ) + v*vc_sign*(cos(θ))] + + @test se_global.y1dot ≈ y1dot_check + @test se_global.y1dot_fluid ≈ y1dot_fluid_check + + # The flow speed normal to span, including induction or not, shouldn't have changed, so check that. + @test AcousticAnalogies.speed_normal_to_span(se_global) ≈ U_check + end + end + end + end + end + end + end + end + + @testset "TBLTESourceElement, CCBlade" begin + # Create the CCBlade objects. + τ = 0.1 + Δτ = 0.02 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + # ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11.jld2") + # out, section, Δr, op, rotor = nothing, nothing, nothing, nothing, nothing + # jldopen(ccblade_fname, "r") do f + # out = f["outs"][1] + # section = f["sections"][1] + # Δr = f["sections"][2].r - f["sections"][1].r + # op = f["ops"][1] + # rotor = f["rotor"] + # @test rotor.precone ≈ 0.0 + # @test op.pitch ≈ 0.0 + # end + + ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11-outputs.jld2") + outs_d = load(ccblade_fname) + section = CCBlade.Section(first(ccbc.radii), first(ccbc.chord), first(ccbc.theta)*pi/180, nothing) + Δr = ccbc.radii[2] - ccbc.radii[1] + op = CCBlade.OperatingPoint(ccbc.v, outs_d["omega"]*first(ccbc.radii), ccbc.rho, ccbc.pitch, ccbc.mu, ccbc.c0) + rotor = CCBlade.Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades) + out = CCBlade.Outputs(outs_d["Np"][1], outs_d["Tp"][1], outs_d["a"][1], outs_d["ap"][1], outs_d["u"][1], outs_d["v"][1], outs_d["phi"][1], outs_d["alpha"][1], outs_d["W"][1], outs_d["cl"][1], outs_d["cd"][1], outs_d["cn"][1], outs_d["ct"][1], outs_d["F"][1], outs_d["G"][1]) + @test rotor.precone ≈ 0.0 + @test op.pitch ≈ 0.0 + + for positive_x_rotation in [true, false] + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + se = AcousticAnalogies.TBLTESourceElement(rotor, section, op, out, θ, Δr, τ, Δτ, bl, positive_x_rotation) + # The `chord_uvec` vector points from leading edge to trailing edge. + # So we should be able to use that to figure out the angle it makes with the tangential/rotation direction. + # The tangential/rotation direction can be found by crossing the the rotation axis with the position vector. + # Then I can dot the chord with that direction, and the forward velocity axis, then use the arctan function to get the angle. + if positive_x_rotation + rot_axis = @SVector [1, 0, 0] + else + rot_axis = @SVector [-1, 0, 0] + end + tan_axis_tmp = cross(rot_axis, se.y0dot) + tan_axis = tan_axis_tmp / norm(tan_axis_tmp) + forward_axis = @SVector [1, 0, 0] + # I'm visualizing the chord vector as going from trailing edge to leading edge, but it's leading edge to trailing edge in the TBLTESourceElement struct, so switch that. + te_to_le = -se.chord_uvec + twist_check = atan(dot(te_to_le, forward_axis), dot(te_to_le, tan_axis)) + @test twist_check ≈ section.theta + + # The angle of attack that AcousticAnalogies.jl calculates should match what CCBlade.jl has. + @test AcousticAnalogies.angle_of_attack(se) ≈ out.alpha + + # Now, rotate and translate the source, which shouldn't change the twist or angle of attack, as long as we don't do anything that would change the velocity. + # Time parameter for the steady rotations doesn't matter because the rotation rate is zero. + trans1 = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, 3.0*pi/180) + trans2 = KinematicCoordinateTransformations.SteadyRotYTransformation(τ, 0.0, 4.0*pi/180) + trans3 = KinematicCoordinateTransformations.SteadyRotZTransformation(τ, 0.0, 5.0*pi/180) + # Time parameter for the constant velocity transformations doesn't matter because the velocity is zero. + x_trans = @SVector [2.0, 3.0, 4.0] + v_trans = @SVector [0.0, 0.0, 0.0] + trans4 = KinematicCoordinateTransformations.ConstantVelocityTransformation(τ, x_trans, v_trans) + + # Transform the source. + trans = compose(τ, trans4, compose(τ, trans3, compose(τ, trans2, trans1))) + se_trans = trans(se) + + # Angle of attack should still be the same. + @test AcousticAnalogies.angle_of_attack(se_trans) ≈ out.alpha + + # It'd be nice to check the twist too, but if that was wrong, the angle of attack would be wrong too. + # And there are other tests already for `chord_uvec`. + + # Could I put the source element in the "fluid/global" frame now? + # I'd need to know the forward velocity and rotation rate. + # Well, the forward velocity would be Vx. + Vx = op.Vx + # And the rotation rate would be Vy/r. + omega = op.Vy / section.r + # Now, need to undo the rotation, which depends on `positive_x_rotation`. + if positive_x_rotation + # If we're rotating about the positive x axis, need to apply a rotation around the negative x axis to undo it. + trans_rot = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, -omega, 0.0) + else + # If we're rotating about the negative x axis, need to apply a rotation around the positive x axis to undo it. + trans_rot = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, omega, 0.0) + end + # Now, I'm assuming that the freestream/axial velocity is in the -x direction, so to undo that, move it in the positive x direction. + x0 = @SVector [0.0, 0.0, 0.0] + v0 = @SVector [Vx, 0.0, 0.0] + trans_freestream = KinematicCoordinateTransformations.ConstantVelocityTransformation(τ, x0, v0) + + # Now compose the two transformations, and apply them to the original source element. + trans_global = compose(τ, trans_freestream, trans_rot) + se_global = trans_global(se) + + # The angle of attack should be the same. + @test AcousticAnalogies.angle_of_attack(se_global) ≈ out.alpha + end + end + end +end + +@testset "BPM Report tests" begin + + @testset "BPM Figure 11a" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 30.48e-2 # chord in meters + U = 71.3 # freestream velocity in m/s + M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + M_c = 0.8*M + alphastar = 0.0 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure11-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] # This is in kHz. + SPL_s = bpm[:, 2] + + # At zero angle of attack the pressure and suction side predictions are the same. + f_p = f_s + SPL_p = SPL_s + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.029 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.029 + + # These should all be very negative, since alphastar is zero: + @test all(SPL_alpha_jl .< -100) + end + end + end + + @testset "BPM Figure 11d" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 30.48e-2 # chord in meters + U = 31.7 # freestream velocity in m/s + M = 0.093 # Mach number, corresponds to U = 31.7 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure11-d-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] # This is in kHz. + SPL_s = bpm[:, 2] + + # At zero angle of attack the pressure and suction side predictions are the same. + f_p = f_s + SPL_p = SPL_s + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.015 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.015 + + # These should all be very negative, since alphastar is zero: + @test all(SPL_alpha_jl .< -100) + end + end + end + + @testset "BPM Figure 12a" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 30.48e-2 # chord in meters + U = 71.3 # freestream velocity in m/s + M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 1.5*pi/180 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure12-U71.3-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure12-U71.3-TBL-TE-pressure.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure12-U71.3-separation.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_alpha = bpm[:, 1] + SPL_alpha = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.022 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.017 + + SPL_alpha_jl_interp = linear(freqs, SPL_alpha_jl, f_alpha.*1e3) + vmin, vmax = extrema(SPL_alpha) + err = abs.(SPL_alpha_jl_interp .- SPL_alpha)./(vmax - vmin) + @test maximum(err) < 0.037 + end + end + end + + @testset "BPM Figure 26a" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 10.16e-2 # chord in meters + U = 71.3 # freestream velocity in m/s + M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure26-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + # At zero angle of attack the pressure and suction side predictions are the same. + f_p = f_s + SPL_p = SPL_s + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.015 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.015 + + # These should all be very negative, since alphastar is zero: + @test all(SPL_alpha_jl .< -100) + end + end + end + + @testset "BPM Figure 26d" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 10.16e-2 # chord in meters + U = 31.7 # freestream velocity in m/s + M = 0.093 # Mach number, corresponds to U = 31.7 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure26-d-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + # At zero angle of attack the pressure and suction side predictions are the same. + f_p = f_s + SPL_p = SPL_s + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.032 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.032 + + # These should all be very negative, since alphastar is zero: + @test all(SPL_alpha_jl .< -100) + end + end + end + + @testset "BPM Figure 28a" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 10.16e-2 # chord in meters + U = 71.3 # freestream velocity in m/s + M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 6.7*pi/180 + # Using the tripped boundary layer in this case. + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-a-TBL-TE-pressure.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-a-separation.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_alpha = bpm[:, 1] + SPL_alpha = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.036 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.075 + + SPL_alpha_jl_interp = linear(freqs, SPL_alpha_jl, f_alpha.*1e3) + vmin, vmax = extrema(SPL_alpha) + err = abs.(SPL_alpha_jl_interp .- SPL_alpha)./(vmax - vmin) + @test maximum(err) < 0.039 + end + end + end + + @testset "BPM Figure 28d" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 10.16e-2 # chord in meters + U = 31.7 # freestream velocity in m/s + M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 6.7*pi/180 + # Using the tripped boundary layer in this case. + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-d-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-d-TBL-TE-pressure.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure28-d-separation.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_alpha = bpm[:, 1] + SPL_alpha = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.021 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.042 + + SPL_alpha_jl_interp = linear(freqs, SPL_alpha_jl, f_alpha.*1e3) + vmin, vmax = extrema(SPL_alpha) + err = abs.(SPL_alpha_jl_interp .- SPL_alpha)./(vmax - vmin) + @test maximum(err) < 0.040 + end + end + end + + @testset "BPM Figure 38d" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 2.54e-2 # chord in meters + U = 31.7 # freestream velocity in m/s + M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0*pi/180 + # Using the tripped boundary layer in this case. + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure38-d-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + # At zero angle of attack the pressure and suction side predictions are the same. + f_p = f_s + SPL_p = SPL_s + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.026 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.026 + + # These should all be very negative, since alphastar is zero: + @test all(SPL_alpha_jl .< -100) + end + end + end + + + @testset "BPM Figure 39d" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 2.54e-2 # chord in meters + U = 31.7 # freestream velocity in m/s + M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 4.8*pi/180 + # Using the tripped boundary layer in this case. + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure39-d-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure39-d-TBL-TE-pressure.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure39-d-separation.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_alpha = bpm[:, 1] + SPL_alpha = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.036 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.043 + + SPL_alpha_jl_interp = linear(freqs, SPL_alpha_jl, f_alpha.*1e3) + vmin, vmax = extrema(SPL_alpha) + err = abs.(SPL_alpha_jl_interp .- SPL_alpha)./(vmax - vmin) + @test maximum(err) < 0.039 + end + end + end + + @testset "BPM Figure 45a" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 30.48e-2 # chord in meters + U = 71.3 # freestream velocity in m/s + M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 1.5*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure45-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure45-a-TBL-TE-pressure.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure45-a-separation.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_alpha = bpm[:, 1] + SPL_alpha = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure45-a-LBL-VS.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_lbl_vs = bpm[:, 1] + SPL_lbl_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_lblvs=true, use_Ualpha=use_Ualpha) + + # Now compare... + # The agreement with these ones aren't so great. + # Might be better if I grabbed the listing in the BPM appendix? + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.037 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.058 + + SPL_alpha_jl_interp = linear(freqs, SPL_alpha_jl, f_alpha.*1e3) + vmin, vmax = extrema(SPL_alpha) + err = abs.(SPL_alpha_jl_interp .- SPL_alpha)./(vmax - vmin) + @test maximum(err) < 0.091 + + SPL_lbl_vs_jl_interp = linear(freqs, SPL_lbl_vs_jl, f_lbl_vs.*1e3) + vmin, vmax = extrema(SPL_lbl_vs) + err = abs.(SPL_lbl_vs_jl_interp .- SPL_lbl_vs)./(vmax - vmin) + @test maximum(err) < 0.053 + end + end + end + + @testset "BPM Figure 48c" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 22.86e-2 # chord in meters + U = 39.6 # freestream velocity in m/s + M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure48-c-LBL-VS.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_lbl_vs = bpm[:, 1] + SPL_lbl_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_lblvs=true, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_lbl_vs_jl_interp = linear(freqs, SPL_lbl_vs_jl, f_lbl_vs.*1e3) + vmin, vmax = extrema(SPL_lbl_vs) + err = abs.(SPL_lbl_vs_jl_interp .- SPL_lbl_vs)./(vmax - vmin) + @test maximum(err) < 0.083 + end + end + end + + @testset "BPM Figure 54a" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 15.24e-2 # chord in meters + U = 71.3 # freestream velocity in m/s + M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 2.7*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure54-a-LBL-VS.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_lbl_vs = bpm[:, 1] + SPL_lbl_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_lblvs=true, use_Ualpha=use_Ualpha) + + SPL_lbl_vs_jl_interp = linear(freqs, SPL_lbl_vs_jl, f_lbl_vs.*1e3) + vmin, vmax = extrema(SPL_lbl_vs) + err = abs.(SPL_lbl_vs_jl_interp .- SPL_lbl_vs)./(vmax - vmin) + @test maximum(err) < 0.026 + end + end + end + + @testset "BPM Figure 59c" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 10.16e-2 # chord in meters + U = 39.6 # freestream velocity in m/s + M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure59-c-LBL-VS.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_lbl_vs = bpm[:, 1] + SPL_lbl_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_lblvs=true, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_lbl_vs_jl_interp = linear(freqs, SPL_lbl_vs_jl, f_lbl_vs.*1e3) + vmin, vmax = extrema(SPL_lbl_vs) + err = abs.(SPL_lbl_vs_jl_interp .- SPL_lbl_vs)./(vmax - vmin) + @test maximum(err) < 0.11 + end + end + end + + @testset "BPM Figure 60c" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 10.16e-2 # chord in meters + U = 39.6 # freestream velocity in m/s + M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 3.3*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure60-c-LBL-VS.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_lbl_vs = bpm[:, 1] + SPL_lbl_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_lblvs=true, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_lbl_vs_jl_interp = linear(freqs, SPL_lbl_vs_jl, f_lbl_vs.*1e3) + vmin, vmax = extrema(SPL_lbl_vs) + err = abs.(SPL_lbl_vs_jl_interp .- SPL_lbl_vs)./(vmax - vmin) + @test maximum(err) < 0.12 + end + end + end + + @testset "BPM Figure 60d" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 10.16e-2 # chord in meters + U = 31.7 # freestream velocity in m/s + M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 3.3*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure60-d-LBL-VS.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_lbl_vs = bpm[:, 1] + SPL_lbl_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_lblvs=true, use_Ualpha=use_Ualpha) + + SPL_lbl_vs_jl_interp = linear(freqs, SPL_lbl_vs_jl, f_lbl_vs.*1e3) + vmin, vmax = extrema(SPL_lbl_vs) + err = abs.(SPL_lbl_vs_jl_interp .- SPL_lbl_vs)./(vmax - vmin) + @test maximum(err) < 0.026 + end + end + end + + @testset "BPM Figure 65d" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 5.08e-2 # chord in meters + U = 31.7 # freestream velocity in m/s + M = 0.093 # mach number, corresponds to u = 31.7 m/s in bpm report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure65-d-LBL-VS.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_lbl_vs = bpm[:, 1] + SPL_lbl_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_lblvs=true, use_Ualpha=use_Ualpha) + + SPL_lbl_vs_jl_interp = linear(freqs, SPL_lbl_vs_jl, f_lbl_vs.*1e3) + vmin, vmax = extrema(SPL_lbl_vs) + err = abs.(SPL_lbl_vs_jl_interp .- SPL_lbl_vs)./(vmax - vmin) + @test maximum(err) < 0.021 + end + end + end + + @testset "BPM Figure 66b" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 5.08e-2 # chord in meters + U = 39.6 # freestream velocity in m/s + M = 0.116 # Mach number, corresponds to U = 39.6 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 4.2*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure66-b-LBL-VS.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_lbl_vs = bpm[:, 1] + SPL_lbl_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_lbl_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_lblvs=true, use_Ualpha=use_Ualpha) + + SPL_lbl_vs_jl_interp = linear(freqs, SPL_lbl_vs_jl, f_lbl_vs.*1e3) + vmin, vmax = extrema(SPL_lbl_vs) + err = abs.(SPL_lbl_vs_jl_interp .- SPL_lbl_vs)./(vmax - vmin) + @test length(err) == 3 + @test err[1] < 0.089 + @test err[2] < 0.373 + @test err[3] < 0.746 + end + end + end + + @testset "BPM Figure 69a" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 5.08e-2 # chord in meters + U = 71.3 # freestream velocity in m/s + M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 15.4*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure69-a-separation.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_alpha = bpm[:, 1] + SPL_alpha = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl) + + # Now compare... + @test all(SPL_s_jl .≈ -100) + @test all(SPL_p_jl .≈ -100) + + SPL_alpha_jl_interp = linear(freqs, SPL_alpha_jl, f_alpha.*1e3) + vmin, vmax = extrema(SPL_alpha) + err = abs.(SPL_alpha_jl_interp .- SPL_alpha)./(vmax - vmin) + @test maximum(err) < 0.033 + end + end + + @testset "BPM Figure 91" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 30.48e-2 # span in meters + chord = 15.24e-2 # chord in meters + speedofsound = 340.46 + U = 71.3 # freestream velocity in m/s + # M = 0.209 # Mach number, corresponds to U = 71.3 m/s in BPM report + M = U/speedofsound + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + # alphatip = 0.71*10.8*pi/180 + alphastar = 10.8*pi/180 + bl = AcousticAnalogies.UntrippedN0012BoundaryLayer() + # blade_tip = AcousticAnalogies.RoundedTip{AcousticAnalogies.BPMTipAlphaCorrection}() + blade_tip = AcousticAnalogies.RoundedTip(AcousticAnalogies.BPMTipAlphaCorrection(), 0.0) + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure91-tip.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_tip = bpm[:, 1] + SPL_tip = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_tip_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_tip_vortex=true, blade_tip=blade_tip, use_Ualpha=use_Ualpha) + + SPL_tip_jl_interp = linear(freqs, SPL_tip_jl, f_tip.*1e3) + vmin, vmax = extrema(SPL_tip) + err = abs.(SPL_tip_jl_interp .- SPL_tip)./(vmax - vmin) + @test maximum(err) < 0.047 + end + end + end + + @testset "BPM Figure 98b" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 60.96e-2 # chord in meters + U = 69.5 # freestream velocity in m/s + M = U/340.46 + h = 1.1e-3 # trailing edge bluntness in meters + Psi = 14*pi/180 # bluntness angle in radians + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0*pi/180 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + # Figures 98 a-d only differ in trailing edge bluntness, so the other sources are all the same. + # And TBL-TE is the only significant source, other than bluntness. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + # Suction and pressure are the same for zero angle of attack. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-b-bluntness.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_teb_vs = bpm[:, 1] + SPL_teb_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_tebvs=true, h=h, Psi=Psi, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.053 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.053 + + SPL_teb_vs_jl_interp = linear(freqs, SPL_teb_vs_jl, f_teb_vs.*1e3) + vmin, vmax = extrema(SPL_teb_vs) + err = abs.(SPL_teb_vs_jl_interp .- SPL_teb_vs)./(vmax - vmin) + # Last two points are off. + # Not sure why. + @test maximum(err[1:end-2]) < 0.052 + @test maximum(err[1:end-2]) < 0.052 + @test maximum(err[1:end-1]) < 0.060 + @test maximum(err) < 0.171 + end + end + end + + @testset "BPM Figure 98c" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 60.96e-2 # chord in meters + U = 69.5 # freestream velocity in m/s + M = U/340.46 + h = 1.9e-3 # trailing edge bluntness in meters + Psi = 14*pi/180 # bluntness angle in radians + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + M_c = 0.8*M + alphastar = 0.0*pi/180 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + # Figures 98 a-d only differ in trailing edge bluntness, so the other sources are all the same. + # And TBL-TE is the only significant source, other than bluntness. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + # Suction and pressure are the same for zero angle of attack. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-c-bluntness.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_teb_vs = bpm[:, 1] + SPL_teb_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_tebvs=true, h=h, Psi=Psi, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.053 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.053 + + SPL_teb_vs_jl_interp = linear(freqs, SPL_teb_vs_jl, f_teb_vs.*1e3) + vmin, vmax = extrema(SPL_teb_vs) + err = abs.(SPL_teb_vs_jl_interp .- SPL_teb_vs)./(vmax - vmin) + # Last two points are off. + # Not sure why. + @test maximum(err[1:end-2]) < 0.040 + @test maximum(err[1:end-1]) < 0.189 + @test err[end] < 0.111 + end + end + end + + @testset "BPM Figure 98d" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 60.96e-2 # chord in meters + U = 69.5 # freestream velocity in m/s + M = U/340.46 + h = 2.5e-3 # trailing edge bluntness in meters + Psi = 14*pi/180 # bluntness angle in radians + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0*pi/180 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + # Figures 98 a-d only differ in trailing edge bluntness, so the other sources are all the same. + # And TBL-TE is the only significant source, other than bluntness. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + # Suction and pressure are the same for zero angle of attack. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-a-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure98-d-bluntness.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_teb_vs = bpm[:, 1] + SPL_teb_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_tebvs=true, h=h, Psi=Psi, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.053 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.053 + + SPL_teb_vs_jl_interp = linear(freqs, SPL_teb_vs_jl, f_teb_vs.*1e3) + vmin, vmax = extrema(SPL_teb_vs) + err = abs.(SPL_teb_vs_jl_interp .- SPL_teb_vs)./(vmax - vmin) + # Last two points are off. + # Not sure why. + @test maximum(err[1:end-2]) < 0.044 + @test err[end-1] < 0.089 + @test err[end] < 0.089 + end + end + end + + @testset "BPM Figure 99b" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 60.96e-2 # chord in meters + U = 38.6 # freestream velocity in m/s + M = U/340.46 + h = 1.1e-3 # trailing edge bluntness in meters + Psi = 14*pi/180 # bluntness angle in radians + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0*pi/180 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + # Suction and pressure are the same for zero angle of attack. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-bluntness.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_teb_vs = bpm[:, 1] + SPL_teb_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_tebvs=true, h=h, Psi=Psi, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.077 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.077 + + SPL_teb_vs_jl_interp = linear(freqs, SPL_teb_vs_jl, f_teb_vs.*1e3) + vmin, vmax = extrema(SPL_teb_vs) + err = abs.(SPL_teb_vs_jl_interp .- SPL_teb_vs)./(vmax - vmin) + # Last two points are off. + # Not sure why. + @test maximum(err[1:end-2]) < 0.091 + @test err[ end-1] < 0.251 + @test err[ end ] < 0.400 + end + end + end + + @testset "BPM Figure 99c" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 60.96e-2 # chord in meters + U = 38.6 # freestream velocity in m/s + M = U/340.46 + h = 1.9e-3 # trailing edge bluntness in meters + Psi = 14*pi/180 # bluntness angle in radians + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0*pi/180 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + # Figures 99 a-d only differ in trailing edge bluntness, so the other sources are all the same. + # And TBL-TE is the only significant source, other than bluntness. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + # Suction and pressure are the same for zero angle of attack. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-c-bluntness.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_teb_vs = bpm[:, 1] + SPL_teb_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_tebvs=true, h=h, Psi=Psi, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.077 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.077 + + SPL_teb_vs_jl_interp = linear(freqs, SPL_teb_vs_jl, f_teb_vs.*1e3) + vmin, vmax = extrema(SPL_teb_vs) + err = abs.(SPL_teb_vs_jl_interp .- SPL_teb_vs)./(vmax - vmin) + # Last two points are off. + # Not sure why. + @test maximum(err[1:end-2]) < 0.057 + @test err[ end-1] < 0.070 + @test err[ end ] < 0.256 + end + end + end + + @testset "BPM Figure 99d" begin + nu = 1.4529e-5 # kinematic viscosity, m^2/s + L = 45.72e-2 # span in meters + chord = 60.96e-2 # chord in meters + U = 38.6 # freestream velocity in m/s + M = U/340.46 + h = 2.5e-3 # trailing edge bluntness in meters + Psi = 14*pi/180 # bluntness angle in radians + r_e = 1.22 # radiation distance in meters + θ_e = 90*pi/180 + Φ_e = 90*pi/180 + alphastar = 0.0*pi/180 + bl = AcousticAnalogies.TrippedN0012BoundaryLayer() + + # Now, need to get the data from the BPM report. + # Figures 99 a-d only differ in trailing edge bluntness, so the other sources are all the same. + # And TBL-TE is the only significant source, other than bluntness. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_s = bpm[:, 1] + SPL_s = bpm[:, 2] + + # Suction and pressure are the same for zero angle of attack. + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-b-TBL-TE-suction.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_p = bpm[:, 1] + SPL_p = bpm[:, 2] + + fname = joinpath(@__DIR__, "bpm_data", "brooks_airfoil_self_noise_and_prediction_1989", "19890016302-figure99-d-bluntness.csv") + bpm = DelimitedFiles.readdlm(fname, ',') + f_teb_vs = bpm[:, 1] + SPL_teb_vs = bpm[:, 2] + + for angle_of_attack_sign in [1, -1] + for use_Ualpha in [false, true] + freqs, SPL_s_jl, SPL_p_jl, SPL_alpha_jl, SPL_teb_vs_jl = calculate_bpm_test(nu, L, chord, U, M, r_e, θ_e, Φ_e, angle_of_attack_sign*alphastar, bl; do_tebvs=true, h=h, Psi=Psi, use_Ualpha=use_Ualpha) + + # Now compare... + SPL_s_jl_interp = linear(freqs, SPL_s_jl, f_s.*1e3) + vmin, vmax = extrema(SPL_s) + err = abs.(SPL_s_jl_interp .- SPL_s)./(vmax - vmin) + @test maximum(err) < 0.077 + + SPL_p_jl_interp = linear(freqs, SPL_p_jl, f_p.*1e3) + vmin, vmax = extrema(SPL_p) + err = abs.(SPL_p_jl_interp .- SPL_p)./(vmax - vmin) + @test maximum(err) < 0.077 + + SPL_teb_vs_jl_interp = linear(freqs, SPL_teb_vs_jl, f_teb_vs.*1e3) + vmin, vmax = extrema(SPL_teb_vs) + err = abs.(SPL_teb_vs_jl_interp .- SPL_teb_vs)./(vmax - vmin) + # Last two points are off. + # Not sure why. + @test maximum(err[1:end-3]) < 0.047 + @test err[end-2] < 0.068 + @test err[end-1] < 0.213 + @test err[end] < 0.225 + end + end + end +end + +end # module diff --git a/test/ccblade_helper_tests.jl b/test/ccblade_helper_tests.jl deleted file mode 100644 index 669dcbcd..00000000 --- a/test/ccblade_helper_tests.jl +++ /dev/null @@ -1,94 +0,0 @@ -module CCBladeHelperTests - -using AcousticAnalogies -using CCBlade -using DelimitedFiles -using KinematicCoordinateTransformations -using StaticArrays -using Test - -include("gen_test_data/gen_ccblade_data/constants.jl") -using .CCBladeTestCaseConstants -ccbc = CCBladeTestCaseConstants - -@testset "CCBlade private utils tests" begin - - Δr = (ccbc.Rtip - ccbc.Rhub)/10 - r = (ccbc.Rhub+0.5*Δr):Δr:(ccbc.Rtip-0.5*Δr) - precone = 3*pi/180 - rotor = Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades; precone=precone, turbine=false) - - dummy = similar(r) - sections = Section.(r, dummy, dummy, dummy) - - @test all(AcousticAnalogies.get_ccblade_dradii(rotor, sections) .≈ Δr) -end - -@testset "CCBlade CompactSourceElement test" begin - - omega = 2200*(2*pi/60) - # Read in the loading data. - data = readdlm("gen_test_data/gen_ccblade_data/ccblade_omega11.csv", ',') - fn = data[:, 1] - fc = data[:, 2] - - # Create the CCBlade objects. - rotor = Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades; turbine=false) - sections = Section.(ccbc.radii, ccbc.chord, ccbc.theta, nothing) - ops = simple_op.(ccbc.v, omega, ccbc.radii, ccbc.rho; asound=ccbc.c0) - # Only care about getting the loading into the CCBlade Output structs. - dummies = fill(0.0, 13) - outs = Outputs.(fn, fc, dummies...) - - # Set the source time stuff. - num_blade_passes = 3 - steps_per_blade_pass = 8 - num_src_times = num_blade_passes*steps_per_blade_pass - bpp = 2*pi/omega/ccbc.num_blades - src_time_range = num_blade_passes*bpp - - # Finally get all the source elements. - aoc2 = fill(ccbc.area_over_chord_squared, length(sections)) - ses_helper = source_elements_ccblade(rotor, sections, ops, outs, aoc2, src_time_range, num_src_times) - - # Now need to get the source elements the "normal" way. First get the - # transformation objects. - rot_axis = @SVector [1.0, 0.0, 0.0] - blade_axis = @SVector [0.0, 1.0, 0.0] - y0_hub = @SVector [0.0, 0.0, 0.0] # m - v0_hub = ccbc.v.*rot_axis - t0 = 0.0 - rot_trans = SteadyRotXTransformation(t0, omega, 0.0) - const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) - - # Need the source times. - dt = src_time_range/num_src_times - src_times = t0 .+ (0:num_src_times-1).*dt - - # This is just an array of the angular offsets of each blade. - θs = 2*pi/ccbc.num_blades.*(0:(ccbc.num_blades-1)) - - # Radial spacing. - dradii = get_dradii(ccbc.radii, ccbc.Rhub, ccbc.Rtip) - - # Reshape stuff for broadcasting. - radii = reshape(ccbc.radii, 1, :, 1) - dradii = reshape(dradii, 1, :, 1) - cs_area = reshape(ccbc.area_over_chord_squared.*ccbc.chord.^2, 1, :, 1) - fn = reshape(fn, 1, :, 1) - fc = reshape(fc, 1, :, 1) - src_times = reshape(src_times, :, 1, 1) # This isn't really necessary. - θs = reshape(θs, 1, 1, :) - - # Get all the transformations. - trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) - - # Transform the source elements. - ses = CompactSourceElement.(ccbc.rho, ccbc.c0, radii, θs, dradii, cs_area, -fn, 0.0, fc, src_times) .|> trans - - for field in fieldnames(CompactSourceElement) - @test all(getproperty.(ses_helper, field) .≈ getproperty.(ses, field)) - end -end - -end 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/compact_f1a_constructor_tests.jl b/test/compact_f1a_constructor_tests.jl new file mode 100644 index 00000000..9537a6f2 --- /dev/null +++ b/test/compact_f1a_constructor_tests.jl @@ -0,0 +1,182 @@ +module CompactF1AConstructorTests + +using AcousticAnalogies +using CCBlade +using FileIO: load +using KinematicCoordinateTransformations +using StaticArrays +using JLD2 +using Test + +include("gen_test_data/gen_ccblade_data/constants.jl") +using .CCBladeTestCaseConstants +ccbc = CCBladeTestCaseConstants + +@testset "CCBlade private utils tests" begin + + Δr = (ccbc.Rtip - ccbc.Rhub)/10 + r = (ccbc.Rhub+0.5*Δr):Δr:(ccbc.Rtip-0.5*Δr) + precone = 3*pi/180 + rotor = Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades; precone=precone, turbine=false) + + dummy = similar(r) + sections = Section.(r, dummy, dummy, dummy) + + @test all(AcousticAnalogies.get_ccblade_dradii(rotor, sections) .≈ Δr) +end + +@testset "Constructor rotation tests" begin + @testset "CompactF1ASourceElement" begin + ρ0 = 1.1 + c0 = 1.2 + r = 2.0 + Δr = 0.1 + Λ = 0.2 + fn = 2.0 + fr = 3.0 + fc = 4.0 + τ = 0.1 + se_0theta = CompactF1ASourceElement(ρ0, c0, r, 0.0, Δr, Λ, fn, fr, fc, τ) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + # Create a transformation that will undo the θ rotation. + trans = KinematicCoordinateTransformations.SteadyRotXTransformation(τ, 0.0, -θ) + # Create a source element with the theta rotation, then undo it. + se = CompactF1ASourceElement(ρ0, c0, r, θ, Δr, Λ, fn, fr, fc, τ) |> trans + # Check that we got the same thing: + for field in fieldnames(CompactF1ASourceElement) + @test getproperty(se, field) ≈ getproperty(se_0theta, field) + end + end + end + + @testset "CompactF1ASourceElement, CCBlade" begin + + # Create the CCBlade objects. + area_per_chord2 = 0.1 + τ = 0.1 + + ccblade_fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11-outputs.jld2") + outs_d = load(ccblade_fname) + section = CCBlade.Section(first(ccbc.radii), first(ccbc.chord), first(ccbc.theta)*pi/180, nothing) + Δr = ccbc.radii[2] - ccbc.radii[1] + op = CCBlade.OperatingPoint(ccbc.v, outs_d["omega"]*first(ccbc.radii), ccbc.rho, ccbc.pitch, ccbc.mu, ccbc.c0) + rotor0precone = CCBlade.Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades) + out = CCBlade.Outputs(outs_d["Np"][1], outs_d["Tp"][1], outs_d["a"][1], outs_d["ap"][1], outs_d["u"][1], outs_d["v"][1], outs_d["phi"][1], outs_d["alpha"][1], outs_d["W"][1], outs_d["cl"][1], outs_d["cd"][1], outs_d["cn"][1], outs_d["ct"][1], outs_d["F"][1], outs_d["G"][1]) + + @test rotor0precone.precone ≈ 0.0 + Rhub = rotor0precone.Rhub + Rtip = rotor0precone.Rtip + num_blades = rotor0precone.B + turbine = rotor0precone.turbine + for positive_x_rotation in [true, false] + se_0theta0precone = CompactF1ASourceElement(rotor0precone, section, op, out, 0.0, Δr, area_per_chord2, τ, positive_x_rotation) + for precone in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + rotor = CCBlade.Rotor(Rhub, Rtip, num_blades; turbine=turbine, precone=precone) + # This is tricky: in my "normal" coordinate system, the blade is rotating around the x axis, moving axially in the positive x direction, and is initially aligned with the y axis. + # That means that the precone should be a rotation around the negative z axis. + # And so to undo it, we want a positive rotation around the positive z axis. + trans_precone = SteadyRotZTransformation(τ, 0.0, precone) + for θ in [5, 10, 65, 95, 260, 270, 290].*(pi/180) + trans_theta = SteadyRotXTransformation(τ, 0.0, -θ) + # Create a transformation that reverses the theta and precone rotations. + # The precone happens first, then theta. + # So to reverse it we need to do theta, then precone. + trans = KinematicCoordinateTransformations.compose(τ, trans_precone, trans_theta) + # Create a source element with the theta and precone rotations, then undo it. + se = CompactF1ASourceElement(rotor, section, op, out, θ, Δr, area_per_chord2, τ, positive_x_rotation) |> trans + # Check that we got the same thing: + for field in fieldnames(CompactF1ASourceElement) + @test getproperty(se, field) ≈ getproperty(se_0theta0precone, field) + end + end + end + end + + end +end + +@testset "CCBlade CompactF1ASourceElement complete test" begin + + for positive_x_rotation in [true, false] + # omega = 2200*(2*pi/60) + # Read in the loading data. + # data = readdlm("gen_test_data/gen_ccblade_data/ccblade_omega11.csv", ',') + # Np = data[:, 1] + # Tp = data[:, 2] + + # Read in the loading data. + fname = joinpath(@__DIR__, "gen_test_data", "gen_ccblade_data", "ccblade_omega11-outputs.jld2") + data_d = load(fname) + omega = data_d["omega"] + Np = data_d["Np"] + Tp = data_d["Tp"] + + # Create the CCBlade objects. + rotor = Rotor(ccbc.Rhub, ccbc.Rtip, ccbc.num_blades; turbine=false) + sections = Section.(ccbc.radii, ccbc.chord, ccbc.theta, nothing) + ops = simple_op.(ccbc.v, omega, ccbc.radii, ccbc.rho; asound=ccbc.c0) + # Only care about getting the loading into the CCBlade Output structs. + dummies = fill(0.0, 13) + outs = Outputs.(Np, Tp, dummies...) + + # Set the source time stuff. + num_blade_passes = 3 + steps_per_blade_pass = 8 + num_src_times = num_blade_passes*steps_per_blade_pass + bpp = 2*pi/omega/ccbc.num_blades + src_time_range = num_blade_passes*bpp + + # Finally get all the source elements. + aoc2 = fill(ccbc.area_over_chord_squared, length(sections)) + ses_helper = f1a_source_elements_ccblade(rotor, sections, ops, outs, aoc2, src_time_range, num_src_times, positive_x_rotation) + + # Now need to get the source elements the "normal" way. First get the + # transformation objects. + rot_axis = @SVector [1.0, 0.0, 0.0] + blade_axis = @SVector [0.0, 1.0, 0.0] + y0_hub = @SVector [0.0, 0.0, 0.0] # m + v0_hub = ccbc.v.*rot_axis + t0 = 0.0 + if positive_x_rotation + rot_trans = SteadyRotXTransformation(t0, omega, 0.0) + else + rot_trans = SteadyRotXTransformation(t0, -omega, 0.0) + end + const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + + # Need the source times. + dt = src_time_range/num_src_times + src_times = t0 .+ (0:num_src_times-1).*dt + + # This is just an array of the angular offsets of each blade. + θs = 2*pi/ccbc.num_blades.*(0:(ccbc.num_blades-1)) + + # Radial spacing. + dradii = get_dradii(ccbc.radii, ccbc.Rhub, ccbc.Rtip) + + # Reshape stuff for broadcasting. + radii = reshape(ccbc.radii, 1, :, 1) + dradii = reshape(dradii, 1, :, 1) + cs_area = reshape(ccbc.area_over_chord_squared.*ccbc.chord.^2, 1, :, 1) + Np = reshape(Np, 1, :, 1) + Tp = reshape(Tp, 1, :, 1) + src_times = reshape(src_times, :, 1, 1) # This isn't really necessary. + θs = reshape(θs, 1, 1, :) + + # Get all the transformations. + trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + + # Transform the source elements. + if positive_x_rotation + ses = CompactF1ASourceElement.(ccbc.rho, ccbc.c0, radii, θs, dradii, cs_area, -Np, 0.0, Tp, src_times) .|> trans + else + ses = CompactF1ASourceElement.(ccbc.rho, ccbc.c0, radii, θs, dradii, cs_area, -Np, 0.0, -Tp, src_times) .|> trans + end + + for field in fieldnames(CompactF1ASourceElement) + @test all(getproperty.(ses_helper, field) .≈ getproperty.(ses, field)) + end + end +end + +end diff --git a/test/doppler_tests.jl b/test/doppler_tests.jl new file mode 100644 index 00000000..98c719c3 --- /dev/null +++ b/test/doppler_tests.jl @@ -0,0 +1,184 @@ +module DopplerTests + +using AcousticAnalogies: AcousticAnalogies +using KinematicCoordinateTransformations: KinematicTransformation, SteadyRotXTransformation, SteadyRotYTransformation, SteadyRotZTransformation, ConstantVelocityTransformation, compose +using StaticArrays: SVector +using Test + +struct DummyElement{TDoppler,Ty0dot,Ty1dot,Ttime,TSoS} <: AcousticAnalogies.AbstractBroadbandSourceElement{AcousticAnalogies.BPMDirectivity,false, AcousticAnalogies.NoMachCorrection,TDoppler} + # Source position and its time derivatives. + y0dot::Ty0dot + y1dot::Ty1dot + # Source time. + τ::Ttime + # speed of sound + c0::TSoS +end + +function DummyElement{TDoppler}(y0dot, y1dot, τ, c0) where {TDoppler} + return DummyElement{TDoppler,typeof(y0dot),typeof(y1dot),typeof(τ),typeof(c0)}(y0dot, y1dot, τ, c0) +end + +function DummyElement{TDoppler}(se::DummyElement) where {TDoppler} + return DummyElement{TDoppler,typeof(se.y0dot),typeof(se.y1dot),typeof(se.τ),typeof(se.c0)}(se.y0dot, se.y1dot, se.τ, se.c0) +end + +""" + (trans::KinematicTransformation)(se::DummyElement) + +Transform the position and orientation of a source element according to the coordinate system transformation `trans`. +""" +function (trans::KinematicTransformation)(se::DummyElement{TDoppler,Ty0dot,Ty1dot,Ttime,TSoS}) where {TDoppler,Ty0dot,Ty1dot,Ttime,TSoS} + linear_only = false + y0dot, y1dot = trans(se.τ, se.y0dot, se.y1dot, linear_only) + + return DummyElement{TDoppler,Ty0dot,Ty1dot,Ttime,TSoS}(y0dot, y1dot, se.τ, se.c0) +end + +@testset "Doppler shift" begin + @testset "no motion" begin + @testset "stationary observer" begin + obs = AcousticAnalogies.StationaryAcousticObserver(SVector(1.2, 2.3, 3.4)) + se = DummyElement{true}(SVector(3.0, 4.3, 5.0), SVector(0.0, 0.0, 0.0), 10.0, 340.0) + @test AcousticAnalogies.doppler_factor(se, obs) ≈ 1.0 + + @test AcousticAnalogies.doppler_factor(DummyElement{false}(se), obs) ≈ 1.0 + end + + @testset "\"moving\" observer" begin + # Should get the same thing with a `ConstVelocityAcousticObserver` that's not moving. + obs = AcousticAnalogies.ConstVelocityAcousticObserver(8.0, SVector(1.2, 2.3, 3.4), SVector(0.0, 0.0, 0.0)) + se = DummyElement{true}(SVector(3.0, 4.3, 5.0), SVector(0.0, 0.0, 0.0), 10.0, 340.0) + @test AcousticAnalogies.doppler_factor(se, obs) ≈ 1.0 + @test AcousticAnalogies.doppler_factor(DummyElement{false}(se), obs) ≈ 1.0 + end + end + + @testset "moving source" begin + @testset "stationary observer" begin + for mach_vector in -0.9:0.1:0.9 + c0 = 343.0 + + # Observer time doesn't matter since the observer isn't moving. + t_obs = 6.5 + x_obs = SVector(1.2, 2.3, 3.4) + obs = AcousticAnalogies.StationaryAcousticObserver(x_obs) + + y0dot = SVector(1.2, 2.3, -3.4) + y1dot = SVector(0.0, 0.0, mach_vector*c0) + τ = 10.0 + se = DummyElement{true}(y0dot, y1dot, τ, c0) + + doppler_factor_expected = 1/(1 - mach_vector) + @test AcousticAnalogies.doppler_factor(se, obs) ≈ doppler_factor_expected + @test AcousticAnalogies.doppler_factor(DummyElement{false}(se), obs) ≈ 1.0 + + # Now, rotate and translate both the source and the observer. + # The Doppler shift factor should be the same, assuming we don't change the motion of the source and observer. + # Time parameter for the steady rotations doesn't matter because the rotation rate is zero. + trans1 = SteadyRotXTransformation(t_obs, 0.0, 3.0*pi/180) + trans2 = SteadyRotYTransformation(t_obs, 0.0, 4.0*pi/180) + trans3 = SteadyRotZTransformation(t_obs, 0.0, 5.0*pi/180) + x_trans = SVector(2.0, 3.0, 4.0) + v_trans = SVector(0.0, 0.0, 0.0) + # Time parameter for the constant velocity transformations doesn't matter because the velocity is zero. + trans4 = ConstantVelocityTransformation(t_obs, x_trans, v_trans) + + # Transform the source and observer. + trans = compose(t_obs, trans4, compose(t_obs, trans3, compose(t_obs, trans2, trans1))) + se_trans = trans(se) + obs_trans = AcousticAnalogies.StationaryAcousticObserver(trans(t_obs, obs(t_obs))) + + # Now we should still get the same Doppler factor. + @test AcousticAnalogies.doppler_factor(se_trans, obs_trans) ≈ doppler_factor_expected + @test AcousticAnalogies.doppler_factor(DummyElement{false}(se_trans), obs_trans) ≈ 1.0 + end + end + + @testset "\"moving\" observer" begin + for mach_vector in -0.9:0.1:0.9 + c0 = 343.0 + + # Observer time doesn't matter since the observer isn't moving. + t_obs = 6.5 + x_obs = SVector(1.2, 2.3, 3.4) + v_obs = SVector(0.0, 0.0, 0.0) + obs = AcousticAnalogies.ConstVelocityAcousticObserver(t_obs, x_obs, v_obs) + + y0dot = SVector(1.2, 2.3, -3.4) + y1dot = SVector(0.0, 0.0, mach_vector*c0) + τ = 10.0 + se = DummyElement{true}(y0dot, y1dot, τ, c0) + + doppler_factor_expected = 1/(1 - mach_vector) + @test AcousticAnalogies.doppler_factor(se, obs) ≈ doppler_factor_expected + @test AcousticAnalogies.doppler_factor(DummyElement{false}(se), obs) ≈ 1.0 + + # Now, rotate and translate both the source and the observer. + # The Doppler shift factor should be the same, assuming we don't change the motion of the source and observer. + # Time parameter for the steady rotations doesn't matter because the rotation rate is zero. + trans1 = SteadyRotXTransformation(t_obs, 0.0, 3.0*pi/180) + trans2 = SteadyRotYTransformation(t_obs, 0.0, 4.0*pi/180) + trans3 = SteadyRotZTransformation(t_obs, 0.0, 5.0*pi/180) + x_trans = SVector(2.0, 3.0, 4.0) + v_trans = SVector(0.0, 0.0, 0.0) + # Time parameter for the constant velocity transformations doesn't matter because the velocity is zero. + trans4 = ConstantVelocityTransformation(t_obs, x_trans, v_trans) + + # Transform the source and observer. + trans = compose(t_obs, trans4, compose(t_obs, trans3, compose(t_obs, trans2, trans1))) + se_trans = trans(se) + obs_trans = AcousticAnalogies.ConstVelocityAcousticObserver(t_obs, trans(t_obs, obs(t_obs), AcousticAnalogies.velocity(t_obs, obs))...) + + # Now we should still get the same Doppler factor. + @test AcousticAnalogies.doppler_factor(se_trans, obs_trans) ≈ doppler_factor_expected + @test AcousticAnalogies.doppler_factor(DummyElement{false}(se_trans), obs_trans) ≈ 1.0 + end + end + + @testset "actual moving observer" begin + for mach_vector_obs in -0.9:0.1:0.9 + for mach_vector_src in -0.9:0.1:0.9 + c0 = 343.0 + + t_obs = 10.0 + # Need to move the observer farther from the source for cases where they're moving towards each other, since the Doppler factor will change if they cross and move past each other. + x_obs = SVector(1.2, 2.3, 340.0) + v_obs = SVector(0.0, 0.0, mach_vector_obs*c0) + obs = AcousticAnalogies.ConstVelocityAcousticObserver(t_obs, x_obs, v_obs) + + y0dot = SVector(1.2, 2.3, -3.4) + y1dot = SVector(0.0, 0.0, mach_vector_src*c0) + τ = 10.0 + se = DummyElement{true}(y0dot, y1dot, τ, c0) + + doppler_factor_expected = (1 - mach_vector_obs)/(1 - mach_vector_src) + @test AcousticAnalogies.doppler_factor(se, obs) ≈ doppler_factor_expected + @test AcousticAnalogies.doppler_factor(DummyElement{false}(se), obs) ≈ 1.0 + + # Now, rotate and translate both the source and the observer. + # The Doppler shift factor should be the same, assuming we don't change the motion of the source and observer. + # Time parameter for the steady rotations doesn't matter because the rotation rate is zero. + trans1 = SteadyRotXTransformation(t_obs, 0.0, 3.0*pi/180) + trans2 = SteadyRotYTransformation(t_obs, 0.0, 4.0*pi/180) + trans3 = SteadyRotZTransformation(t_obs, 0.0, 5.0*pi/180) + x_trans = SVector(2.0, 3.0, 4.0) + v_trans = SVector(0.0, 0.0, 0.0) + # Time parameter for the constant velocity transformations doesn't matter because the velocity is zero. + trans4 = ConstantVelocityTransformation(t_obs, x_trans, v_trans) + + # Transform the source and observer. + trans = compose(t_obs, trans4, compose(t_obs, trans3, compose(t_obs, trans2, trans1))) + se_trans = trans(se) + obs_trans = AcousticAnalogies.ConstVelocityAcousticObserver(t_obs, trans(t_obs, obs(t_obs), AcousticAnalogies.velocity(t_obs, obs))...) + + # Now we should still get the same Doppler factor. + @test AcousticAnalogies.doppler_factor(se_trans, obs_trans) ≈ doppler_factor_expected + @test AcousticAnalogies.doppler_factor(DummyElement{false}(se_trans), obs_trans) ≈ 1.0 + end + end + end + end +end + +end # module diff --git a/test/f1a_tests.jl b/test/f1a_tests.jl index c7a67ddd..18d3c978 100644 --- a/test/f1a_tests.jl +++ b/test/f1a_tests.jl @@ -79,14 +79,14 @@ end f0dot(τ) = [-fn, -sin(omega*τ)*fc, cos(omega*τ)*fc] f1dot(τ) = [0, -omega*cos(omega*τ)*fc, -omega*sin(omega*τ)*fc] u(τ) = y0dot(τ)./radii - sef1 = CompactSourceElement(rho, c0, dradii, Λ, y0dot, y1dot, nothing, nothing, f0dot, nothing, 0.0, u) + sef1 = CompactF1ASourceElement(rho, c0, dradii, Λ, y0dot, y1dot, nothing, nothing, f0dot, nothing, 0.0, u) t = 0.0 dt = period*0.5^4 τ0, pmi0, pdiff0, pdinf0 = f1_integrand(sef1, obs, t) - sef1a = CompactSourceElement(rho, c0, dradii, Λ, y0dot(τ0), y1dot(τ0), y2dot(τ0), y3dot(τ0), f0dot(τ0), f1dot(τ0), τ0, u(τ0)) - apth = f1a(sef1a, obs) + sef1a = CompactF1ASourceElement(rho, c0, dradii, Λ, y0dot(τ0), y1dot(τ0), y2dot(τ0), y3dot(τ0), f0dot(τ0), f1dot(τ0), τ0, u(τ0)) + apth = noise(sef1a, obs) err_prev_pm = nothing err_prev_pd = nothing diff --git a/test/forwarddiff_test.jl b/test/forwarddiff_test.jl index 66fc699b..d421c6a6 100644 --- a/test/forwarddiff_test.jl +++ b/test/forwarddiff_test.jl @@ -76,7 +76,7 @@ function guided_example(x) fc = reshape(fc, 1, :, 1) src_times = reshape(src_times, :, 1, 1) # This isn't really necessary. - ses = CompactSourceElement.(rho, c0, radii, θs, dradii, cs_area, -fn, 0.0, fc, src_times) + ses = CompactF1ASourceElement.(rho, c0, radii, θs, dradii, cs_area, -fn, 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 cooridante systems at t0. @@ -99,7 +99,7 @@ function guided_example(x) obs_time = adv_time.(ses, Ref(obs)) - apth = f1a.(ses, Ref(obs), obs_time) + apth = noise.(ses, Ref(obs), obs_time) bpp = period/num_blades # blade passing period obs_time_range = 2 * bpp diff --git a/test/gen_bpmjl_data/Project.toml b/test/gen_bpmjl_data/Project.toml new file mode 100644 index 00000000..b3e7f83f --- /dev/null +++ b/test/gen_bpmjl_data/Project.toml @@ -0,0 +1,7 @@ +[deps] +Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +AcousticMetrics = "046f749b-9c1e-43ca-86bc-6902340f753e" +BPM = "f91b385c-3ede-44c9-92c8-2a04f762ef2f" +CCBlade = "e1828068-15df-11e9-03e4-ef195ea46fa4" +FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" diff --git a/test/gen_bpmjl_data/airfoils/README.md b/test/gen_bpmjl_data/airfoils/README.md new file mode 100644 index 00000000..1afca4f6 --- /dev/null +++ b/test/gen_bpmjl_data/airfoils/README.md @@ -0,0 +1 @@ +Airfoil data is from http://airfoiltools.com/polar/details?polar=xf-n0012-il-500000 diff --git a/test/gen_bpmjl_data/airfoils/xf-n0012-il-500000.dat b/test/gen_bpmjl_data/airfoils/xf-n0012-il-500000.dat new file mode 100644 index 00000000..9866b76b --- /dev/null +++ b/test/gen_bpmjl_data/airfoils/xf-n0012-il-500000.dat @@ -0,0 +1,147 @@ +From http://airfoiltools.com/polar/details?polar=xf-n0012-il-500000 +500000.0 +0.0 + -17.750 -1.0298 0.12468 0.12173 0.0079 1.0000 0.0199 + -17.500 -1.0693 0.11191 0.10877 0.0002 1.0000 0.0198 + -17.250 -1.0995 0.10168 0.09835 -0.0060 1.0000 0.0198 + -17.000 -1.1249 0.09280 0.08929 -0.0113 1.0000 0.0198 + -16.750 -1.1466 0.08496 0.08127 -0.0159 1.0000 0.0198 + -16.500 -1.1653 0.07799 0.07413 -0.0199 1.0000 0.0198 + -16.250 -1.1812 0.07170 0.06767 -0.0235 1.0000 0.0199 + -16.000 -1.1949 0.06606 0.06186 -0.0265 1.0000 0.0200 + -15.750 -1.2058 0.06100 0.05662 -0.0291 1.0000 0.0201 + -15.500 -1.2144 0.05648 0.05192 -0.0313 1.0000 0.0202 + -15.250 -1.2215 0.05237 0.04764 -0.0331 1.0000 0.0204 + -15.000 -1.2315 0.04811 0.04324 -0.0338 1.0000 0.0206 + -14.750 -1.2349 0.04484 0.03986 -0.0342 1.0000 0.0209 + -14.500 -1.2347 0.04212 0.03707 -0.0345 1.0000 0.0212 + -14.250 -1.2325 0.03975 0.03462 -0.0345 1.0000 0.0215 + -14.000 -1.2291 0.03762 0.03240 -0.0342 1.0000 0.0218 + -13.750 -1.2249 0.03570 0.03037 -0.0337 1.0000 0.0222 + -13.500 -1.2199 0.03394 0.02850 -0.0328 1.0000 0.0226 + -13.250 -1.2139 0.03236 0.02680 -0.0316 1.0000 0.0230 + -13.000 -1.2065 0.03098 0.02531 -0.0303 1.0000 0.0236 + -12.750 -1.1977 0.02979 0.02397 -0.0288 1.0000 0.0240 + -12.500 -1.1907 0.02837 0.02243 -0.0268 1.0000 0.0245 + -12.250 -1.1850 0.02684 0.02086 -0.0246 1.0000 0.0251 + -12.000 -1.1748 0.02586 0.01984 -0.0225 1.0000 0.0257 + -11.750 -1.1622 0.02501 0.01893 -0.0207 1.0000 0.0264 + -11.500 -1.1470 0.02416 0.01801 -0.0192 1.0000 0.0271 + -11.250 -1.1306 0.02336 0.01712 -0.0178 1.0000 0.0279 + -11.000 -1.1126 0.02267 0.01632 -0.0165 1.0000 0.0287 + -10.750 -1.0994 0.02143 0.01504 -0.0147 1.0000 0.0297 + -10.500 -1.0815 0.02069 0.01429 -0.0135 1.0000 0.0308 + -10.250 -1.0618 0.02009 0.01364 -0.0124 1.0000 0.0320 + -10.000 -1.0416 0.01951 0.01300 -0.0113 1.0000 0.0333 + -9.750 -1.0223 0.01882 0.01223 -0.0100 1.0000 0.0344 + -9.500 -1.0053 0.01794 0.01135 -0.0085 1.0000 0.0360 + -9.250 -0.9846 0.01743 0.01081 -0.0074 1.0000 0.0377 + -9.000 -0.9632 0.01700 0.01032 -0.0064 1.0000 0.0395 + -8.750 -0.9450 0.01628 0.00958 -0.0048 1.0000 0.0416 + -8.500 -0.9250 0.01577 0.00908 -0.0035 1.0000 0.0439 + -8.250 -0.9040 0.01537 0.00864 -0.0023 1.0000 0.0463 + -8.000 -0.8851 0.01479 0.00804 -0.0007 1.0000 0.0492 + -7.750 -0.8647 0.01437 0.00763 0.0006 1.0000 0.0526 + -7.500 -0.8439 0.01400 0.00722 0.0019 1.0000 0.0561 + -7.250 -0.8245 0.01350 0.00677 0.0034 1.0000 0.0609 + -7.000 -0.8036 0.01316 0.00640 0.0047 1.0000 0.0657 + -6.750 -0.7836 0.01275 0.00603 0.0061 1.0000 0.0723 + -6.500 -0.7633 0.01237 0.00568 0.0075 1.0000 0.0799 + -6.250 -0.7424 0.01204 0.00537 0.0087 1.0000 0.0888 + -6.000 -0.7216 0.01171 0.00509 0.0100 1.0000 0.1000 + -5.750 -0.7007 0.01136 0.00482 0.0112 1.0000 0.1141 + -5.500 -0.6797 0.01102 0.00458 0.0124 1.0000 0.1312 + -5.250 -0.6582 0.01072 0.00437 0.0134 1.0000 0.1513 + -5.000 -0.6274 0.01036 0.00414 0.0125 0.9985 0.1775 + -4.750 -0.5903 0.01000 0.00393 0.0102 0.9957 0.2096 + -4.500 -0.5529 0.00966 0.00374 0.0080 0.9931 0.2444 + -4.250 -0.5172 0.00932 0.00354 0.0061 0.9892 0.2791 + -4.000 -0.4798 0.00900 0.00338 0.0039 0.9858 0.3152 + -3.750 -0.4410 0.00869 0.00322 0.0014 0.9832 0.3524 + -3.500 -0.4066 0.00840 0.00307 -0.0001 0.9779 0.3872 + -3.250 -0.3690 0.00813 0.00293 -0.0022 0.9740 0.4226 + -3.000 -0.3306 0.00786 0.00279 -0.0044 0.9707 0.4575 + -2.750 -0.2994 0.00761 0.00267 -0.0050 0.9628 0.4893 + -2.500 -0.2655 0.00737 0.00254 -0.0062 0.9565 0.5214 + -2.250 -0.2374 0.00715 0.00243 -0.0060 0.9458 0.5510 + -2.000 -0.2089 0.00696 0.00233 -0.0059 0.9351 0.5802 + -1.750 -0.1812 0.00678 0.00223 -0.0055 0.9233 0.6091 + -1.500 -0.1552 0.00662 0.00215 -0.0048 0.9088 0.6370 + -1.250 -0.1293 0.00648 0.00209 -0.0040 0.8929 0.6642 + -1.000 -0.1034 0.00638 0.00203 -0.0032 0.8757 0.6915 + -0.750 -0.0777 0.00628 0.00198 -0.0024 0.8571 0.7177 + -0.500 -0.0517 0.00622 0.00195 -0.0016 0.8366 0.7435 + -0.250 -0.0259 0.00618 0.00193 -0.0008 0.8148 0.7683 + 0.000 0.0000 0.00618 0.00192 0.0000 0.7923 0.7923 + 0.250 0.0259 0.00618 0.00193 0.0008 0.7683 0.8148 + 0.500 0.0517 0.00622 0.00195 0.0016 0.7435 0.8367 + 0.750 0.0777 0.00628 0.00198 0.0024 0.7178 0.8571 + 1.000 0.1034 0.00638 0.00203 0.0032 0.6915 0.8757 + 1.250 0.1293 0.00648 0.00209 0.0040 0.6642 0.8929 + 1.500 0.1552 0.00662 0.00215 0.0048 0.6371 0.9088 + 1.750 0.1812 0.00678 0.00223 0.0055 0.6091 0.9233 + 2.000 0.2089 0.00696 0.00233 0.0059 0.5801 0.9351 + 2.250 0.2374 0.00716 0.00243 0.0060 0.5509 0.9458 + 2.500 0.2655 0.00737 0.00254 0.0062 0.5215 0.9566 + 2.750 0.2995 0.00761 0.00267 0.0050 0.4893 0.9628 + 3.000 0.3307 0.00786 0.00279 0.0044 0.4576 0.9707 + 3.250 0.3690 0.00813 0.00293 0.0022 0.4225 0.9740 + 3.500 0.4066 0.00840 0.00307 0.0001 0.3871 0.9779 + 3.750 0.4410 0.00869 0.00322 -0.0014 0.3524 0.9832 + 4.000 0.4798 0.00900 0.00338 -0.0039 0.3152 0.9858 + 4.250 0.5172 0.00932 0.00354 -0.0061 0.2791 0.9892 + 4.500 0.5530 0.00966 0.00374 -0.0080 0.2443 0.9931 + 4.750 0.5904 0.01000 0.00392 -0.0103 0.2096 0.9957 + 5.000 0.6275 0.01036 0.00414 -0.0125 0.1775 0.9985 + 5.250 0.6581 0.01072 0.00436 -0.0134 0.1513 1.0000 + 5.500 0.6796 0.01102 0.00457 -0.0123 0.1312 1.0000 + 5.750 0.7007 0.01136 0.00482 -0.0112 0.1141 1.0000 + 6.000 0.7215 0.01170 0.00509 -0.0100 0.1001 1.0000 + 6.250 0.7424 0.01204 0.00537 -0.0087 0.0889 1.0000 + 6.500 0.7632 0.01236 0.00568 -0.0074 0.0799 1.0000 + 6.750 0.7835 0.01275 0.00603 -0.0061 0.0724 1.0000 + 7.000 0.8036 0.01316 0.00640 -0.0047 0.0657 1.0000 + 7.250 0.8244 0.01350 0.00676 -0.0034 0.0608 1.0000 + 7.500 0.8439 0.01399 0.00721 -0.0019 0.0561 1.0000 + 7.750 0.8646 0.01437 0.00763 -0.0006 0.0526 1.0000 + 8.000 0.8851 0.01479 0.00804 0.0007 0.0492 1.0000 + 8.250 0.9040 0.01537 0.00863 0.0023 0.0463 1.0000 + 8.500 0.9250 0.01577 0.00908 0.0035 0.0439 1.0000 + 8.750 0.9450 0.01628 0.00958 0.0048 0.0416 1.0000 + 9.000 0.9632 0.01699 0.01032 0.0064 0.0395 1.0000 + 9.250 0.9847 0.01743 0.01081 0.0074 0.0377 1.0000 + 9.500 1.0054 0.01794 0.01135 0.0085 0.0360 1.0000 + 9.750 1.0224 0.01882 0.01223 0.0100 0.0344 1.0000 + 10.000 1.0417 0.01951 0.01299 0.0113 0.0333 1.0000 + 10.250 1.0620 0.02009 0.01364 0.0124 0.0320 1.0000 + 10.500 1.0817 0.02069 0.01428 0.0134 0.0308 1.0000 + 10.750 1.0995 0.02144 0.01504 0.0147 0.0297 1.0000 + 11.000 1.1128 0.02267 0.01631 0.0165 0.0287 1.0000 + 11.250 1.1309 0.02336 0.01711 0.0177 0.0279 1.0000 + 11.500 1.1474 0.02416 0.01801 0.0191 0.0271 1.0000 + 11.750 1.1626 0.02500 0.01893 0.0206 0.0263 1.0000 + 12.000 1.1753 0.02586 0.01984 0.0224 0.0257 1.0000 + 12.250 1.1855 0.02684 0.02086 0.0245 0.0251 1.0000 + 12.500 1.1912 0.02838 0.02244 0.0267 0.0245 1.0000 + 12.750 1.1984 0.02980 0.02398 0.0286 0.0240 1.0000 + 13.000 1.2072 0.03098 0.02530 0.0302 0.0235 1.0000 + 13.250 1.2147 0.03236 0.02681 0.0315 0.0230 1.0000 + 13.500 1.2208 0.03392 0.02849 0.0326 0.0226 1.0000 + 13.750 1.2259 0.03568 0.03036 0.0335 0.0222 1.0000 + 14.000 1.2302 0.03761 0.03239 0.0341 0.0218 1.0000 + 14.250 1.2337 0.03973 0.03459 0.0343 0.0215 1.0000 + 14.500 1.2360 0.04209 0.03703 0.0343 0.0212 1.0000 + 14.750 1.2363 0.04481 0.03983 0.0341 0.0209 1.0000 + 15.000 1.2327 0.04811 0.04324 0.0336 0.0206 1.0000 + 15.250 1.2219 0.05247 0.04774 0.0329 0.0203 1.0000 + 15.500 1.2159 0.05646 0.05191 0.0311 0.0202 1.0000 + 15.750 1.2073 0.06100 0.05662 0.0289 0.0201 1.0000 + 16.000 1.1964 0.06607 0.06187 0.0262 0.0200 1.0000 + 16.250 1.1828 0.07171 0.06768 0.0232 0.0199 1.0000 + 16.500 1.1669 0.07801 0.07415 0.0196 0.0198 1.0000 + 16.750 1.1482 0.08501 0.08133 0.0156 0.0198 1.0000 + 17.000 1.1265 0.09286 0.08936 0.0109 0.0197 1.0000 + 17.250 1.1011 0.10176 0.09843 0.0056 0.0197 1.0000 + 17.500 1.0705 0.11207 0.10894 -0.0006 0.0198 1.0000 + 17.750 1.0302 0.12505 0.12212 -0.0085 0.0199 1.0000 + 18.000 0.7725 0.21140 0.20887 -0.0516 0.0252 1.0000 diff --git a/test/gen_bpmjl_data/figure22b.jld2 b/test/gen_bpmjl_data/figure22b.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..5b55b1072e0edeb6edc7e7f197c6b52002618efa GIT binary patch literal 7094 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 literal 0 HcmV?d00001 diff --git a/test/gen_bpmjl_data/figure24b.jld2 b/test/gen_bpmjl_data/figure24b.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..28d09a9ca1ece508500e6f9287ee83d26aac2f69 GIT binary patch literal 7094 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 O%nv_tMab#*&i?}_l}(iZ literal 0 HcmV?d00001 diff --git a/test/gen_bpmjl_data/itr_with_bpmjl.jl b/test/gen_bpmjl_data/itr_with_bpmjl.jl new file mode 100644 index 00000000..20cc1a03 --- /dev/null +++ b/test/gen_bpmjl_data/itr_with_bpmjl.jl @@ -0,0 +1,983 @@ +module ITRWithBPMJL + +using Accessors: Accessors +using AcousticMetrics: AcousticMetrics +using BPM: BPM +using CCBlade: CCBlade +# using DelimitedFiles: writedlm +using JLD2: JLD2 +using FileIO: save + +function get_airfoil(; af_fname, cr75, Re_exp) + (info, Re, Mach, alpha, cl, cd) = CCBlade.parsefile(af_fname, false) + + # Extend the angle of attack with the Viterna method. + (alpha, cl, cd) = CCBlade.viterna(alpha, cl, cd, cr75) + af = CCBlade.AlphaAF(alpha, cl, cd, info, Re, Mach) + + # Reynolds number correction. The 0.6 factor seems to match the NACA 0012 + # drag data from airfoiltools.com. + reynolds = CCBlade.SkinFriction(Re, Re_exp) + + # Mach number correction. + mach = CCBlade.PrandtlGlauert() + + # Rotational stall delay correction. Need some parameters from the CL curve. + m, alpha0 = CCBlade.linearliftcoeff(af, 1.0, 1.0) # dummy values for Re and Mach + # Create the Du Selig and Eggers correction. + rotation = CCBlade.DuSeligEggers(1.0, 1.0, 1.0, m, alpha0) + + # The usual hub and tip loss correction. + tip = CCBlade.PrandtlTipHub() + + return af, mach, reynolds, rotation, tip +end + +function from_cell_centers_to_interfaces(cc_vals::Vector) + N = length(cc_vals) + + b = cc_vals[:] + b[1] = 0.25*cc_vals[1] + 0.25*cc_vals[2] + + A = zeros(N, N) + for i in 1:N-1 + A[i, i] = 0.5 + A[i+1, i] = 0.5 + end + A[N, N] = 0.5 + + a = A\b + + @assert all(A*a .≈ b) + + interface_vals = zeros(N+1) + interface_vals[1] = 1.5*cc_vals[1] - 0.5*cc_vals[2] + interface_vals[2:end] .= a + + @assert all(0.5.*(interface_vals[1:end-1] .+ interface_vals[2:end]) .≈ cc_vals) + + return interface_vals +end + +function do_figure22b() + # Pettingill et al., "Acoustic And Performance Characteristics of an Ideally Twisted Rotor in Hover", 2021 + # Parameters from Table 1 + B = 4 # number of blades + Rtip = 0.1588 # meters + chord = 0.2*Rtip + # Standard day: + Tamb = 15 + 273.15 # 15°C in Kelvin + pamb = 101325.0 # Pa + R = 287.052874 # J/(kg*K) + rho = pamb/(R*Tamb) + asound = sqrt(1.4*R*Tamb) + + # CCBlade.jl defines pitch/collective as "the thing added to the twist to get the orientation of the chord line," but the paper appears to use "the angle of the chord line at the tip." + collective0 = 6.9*pi/180 + # The Figure 23 caption says Θ_tip = 7 deg, but I think that "actually" means 6.9°. + # And yes, collective is 0 here, which is a bit silly, I guess, but is consistent with the definition of twist down below. + collective = 6.9 .* (pi/180) .- collective0 + + mu = rho*1.4502e-5 + Vinf = 0.001*asound + + # Figure 22 caption says Ω_c = 5465 RPM. + rpm = 5465.0 + omega = rpm * (2*pi/60) + + # Get "cell-centered" radial locations. + num_radial = 50 + r_Rtip_ = range(0.2, 1.0; length=num_radial+1) + r_Rtip = 0.5 .* (r_Rtip_[2:end] .+ r_Rtip_[1:end-1]) + radii = r_Rtip .* Rtip + + Rhub = r_Rtip_[1]*Rtip + + # From Pettingill Equation (1), and value for Θ_tip in Table 1. + Θ_tip = 6.9 * pi/180 + twist = Θ_tip ./ (r_Rtip) + + # NACA 0012 airfoil stuff. + af_fname = joinpath(@__DIR__, "airfoils", "xf-n0012-il-500000.dat") + Re_exp = 0.6 + cr75 = chord / Rtip + af, mach_correction, reynolds_correction, rotation_correction, tip_correction = get_airfoil(; af_fname, cr75, Re_exp) + tip_correction = nothing + + precone = 0.0 + turbine = false + rotor = CCBlade.Rotor(Rhub, Rtip, B; precone=precone, turbine=turbine, mach=mach_correction, re=reynolds_correction, rotation=rotation_correction, tip=tip_correction) + + sections = CCBlade.Section.(radii, chord, twist, Ref(af)) + + ops = CCBlade.OperatingPoint.(Vinf, omega.*radii, rho, collective, mu, asound) + outs = CCBlade.solve.(Ref(rotor), sections, ops) + + # BPM.jl uses the M_c = 0.8*M assumption from the BPM report, so modify the W field of each CCBlade.Outputs struct to match that. + lens = Accessors.@optic _.W + outs_bpm_Mc = Accessors.set.(outs, Ref(lens), 0.8.*sqrt.(getproperty.(ops, :Vx).^2 .+ getproperty.(ops, :Vy).^2)) + @assert all(getproperty.(outs_bpm_Mc, :W) .≈ 0.8.*sqrt.(getproperty.(ops, :Vx).^2 .+ getproperty.(ops, :Vy).^2)) + + # Paper doesn't specify the microphone used for Figure 22, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: + # > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). + # So I'll just assume that holds for Figure 22. + # The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane. + r_obs = 2.27 # meters + theta_obs = -35*pi/180 + # So, the docstring for BPM.jl says that `V` argument is the wind velocity in the y direction. + # So I guess we should assume that the blades are rotating about the y axis. + # And if the freestream velocity is in the positive y axis, then, from the perspective of the fluid, the blades are translating in the negative y direction. + # And I want the observer to be downstream/behind the blades, so that would mean they would have a positive y position. + # So I want to rotate the observer around the positive x axis, so I'm going to switch the sign on `theta_obs`. + t0_obs = 0.0 + x0_obs = [0.0, r_obs*sin(-theta_obs), r_obs*cos(-theta_obs)] + + # Get the components of the observer position in a form that BPM.jl uses. + ox = x0_obs[1] + oy = x0_obs[2] + oz = x0_obs[3] + + # Radial locations. + rs = getproperty.(sections, :r) + + # BPM.jl docstring says we need the angle of attack in degrees. + # But it expects them at the interfaces, not cell centers. + alphas_deg = getproperty.(outs_bpm_Mc, :alpha) .* (180/pi) + rs_interface = from_cell_centers_to_interfaces(rs) + alphas_deg_interface = from_cell_centers_to_interfaces(alphas_deg) + + # Do the same thing for the chord. + # What other inputs do we need? + # So the distance from the pitch axis to the leading edge is used, apparently, to locate the trailing edge. + # Let's make sure that's true. + # Here's the relevant code + # + # # Calculate the trailing edge position relative to the hub + # xs = sin(beta)*d - cos(beta)*(c - c1) + # zs = cos(beta)*d + sin(beta)*(c - c1) + # + # `beta` is an azimuthal angle, and `d` is the radial distance of the blade element relative to the hub. + # So let's say that's zero. + # Then, I guess, `xs = (c - c1)` and `zs = r` + # So it looks like the twist is being ignored, I think. + # But, at any rate, if I set c1 = c, that effect is ignored. + chords = getproperty.(sections, :chord) + chords_interface = from_cell_centers_to_interfaces(chords) + c1s = chords_interface + + # In the text describing Figure 22, "For these predictions, the trip flag was set to “tripped”, due to the rough surface quality of the blade." + tripped_flags = true + + # In the Figure 22 caption, "for these predictions, bluntness thickness H was set to 0.8 mm and trailing edge angle Ψ was set to 16 degrees." + h = 0.8e-3 # meters + Psi = 16*pi/180 # radians + hs = fill(h, length(rs_interface)) + Psis = fill(Psi, length(rs_interface)) + Psis_deg = Psis .* 180/pi + + # Also need kinematic viscosity. + nu = mu/rho + + # Number of azimuthal stations per blade pass, I think. + num_betas = 20 + + # Save the inputs. + data = Dict( + "rho"=>rho, "asound"=>asound, "mu"=>mu, + "Vinf"=>Vinf, "omega"=>omega, + "B"=>B, + "Rhub"=>rotor.Rhub, + "Rtip"=>rotor.Rtip, + "radii"=>getproperty.(sections, :r), + "chord"=>getproperty.(sections, :chord), + "twist"=>getproperty.(sections, :theta), + "alpha"=>getproperty.(outs, :alpha), + "U"=>getproperty.(outs, :W), + "hs"=>hs[begin:end-1], + "Psis"=>Psis[begin:end-1], + "tripped_flags"=>fill(tripped_flags, length(sections)), + "num_src_times_blade_pass"=>num_betas) + # save("figure22b-inputs.jld2", data_inputs) + + # Now we can start doing the predictions. + oaspl_pressure, spl_pressure = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=true, + turbulent_suction=false, + turbulent_separation=false, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_suction, spl_suction = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=true, + turbulent_separation=false, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_separation, spl_separation = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=true, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_lblvs, spl_lblvs = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=false, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=true, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_blunt, spl_blunt = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=false, + blunt=true, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_tip, spl_tip = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, B, rs_interface, chords_interface, c1s, hs, alphas_deg_interface, Psis_deg, nu, asound; + blunt=false, + weighted=false, + trip=tripped_flags, + tip=true, + laminar=false, + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=false, + round=false, + nbeta=num_betas, + smooth=false) + + # header = "BPM.default_f,spl_pressure,spl_suction,spl_separation,spl_lblvs,spl_blunt,spl_tip\n" + # data = hcat(BPM.default_f, spl_pressure, spl_suction, spl_separation, spl_lblvs, spl_blunt, spl_tip) + + # fname = joinpath(@__DIR__, "figure22b.csv") + # open(fname, "w") do f + # write(f, header) + # writedlm(f, data, ',') + # end + + # Now I'd like to do the narrowband SPL like the Pettingill et al. paper does, instead of 1/3 octave SPL. + # So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. + # (Dividing the MSP by Δf_pbs aka the 1/3 octave spacing is like getting a power-spectral density, then multiplying by the narrowband spacing Δf_nb gives us the MSP associated with the narrowband.) + # I think the paper describes that, right? + # Right, here's something: + # + # > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. + # > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. + # + # So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. + # And then I'm dividing by that. + # So that seems like the right thing. + # First, I'll confirm that the frequencies BPM.jl are using are the ApproximateThirdOctaveCenterBands. + # This will give me those center bands: + cbands_approx3rdcenter = AcousticMetrics.ApproximateThirdOctaveCenterBands(first(BPM.default_f), last(BPM.default_f)) + @assert maximum(abs.(BPM.default_f .- cbands_approx3rdcenter)) < 1e-10 + + # So then I need to get the spacing associated with the proportional bands. + # So get the lower and upper "edges" of the bands. + freqs_l = AcousticMetrics.lower_bands(cbands_approx3rdcenter) + freqs_u = AcousticMetrics.upper_bands(cbands_approx3rdcenter) + # And then the spacing for each band. + df_pbs = freqs_u .- freqs_l + # Also need the experimental narrowband spacing, which is 20 Hz. + df_nb = 20.0 + # So, if spl = 10*log10(msp/pref^2), and I want to multiply the msp by df_nb/df_pbs, then + # + # spl_nb = 10*log10((msp*df_nb/df_pbs)/pref^2) = 10*(log10(msp/pref^2) + log10(df_nb/df_pbs)) + # spl_nb = 10*log10(msp/pref^2) + 10*log10(df_nb/df_pbs) + # spl_nb = spl + 10*log10(df_nb/df_pbs) + # + # That's easy. + spl_nb_pressure = @. spl_pressure + 10*log10(df_nb/df_pbs) + spl_nb_suction = @. spl_suction + 10*log10(df_nb/df_pbs) + spl_nb_separation = @. spl_separation + 10*log10(df_nb/df_pbs) + spl_nb_lblvs = @. spl_lblvs + 10*log10(df_nb/df_pbs) + spl_nb_blunt = @. spl_blunt + 10*log10(df_nb/df_pbs) + spl_nb_tip = @. spl_tip + 10*log10(df_nb/df_pbs) + + data["freqs"] = BPM.default_f + data["spl_nb_pressure"] = spl_nb_pressure + data["spl_nb_suction"] = spl_nb_suction + data["spl_nb_separation"] = spl_nb_separation + data["spl_nb_lblvs"] = spl_nb_lblvs + data["spl_nb_blunt"] = spl_nb_blunt + data["spl_nb_tip"] = spl_nb_tip + save(joinpath(@__DIR__, "figure22b.jld2"), data) + + return nothing +end + +function do_figure23c() + # Pettingill et al., "Acoustic And Performance Characteristics of an Ideally Twisted Rotor in Hover", 2021 + # Parameters from Table 1 + B = 4 # number of blades + Rtip = 0.1588 # meters + chord = 0.2*Rtip + # Standard day: + Tamb = 15 + 273.15 # 15°C in Kelvin + pamb = 101325.0 # Pa + R = 287.052874 # J/(kg*K) + rho = pamb/(R*Tamb) + asound = sqrt(1.4*R*Tamb) + + # CCBlade.jl defines pitch/collective as "the thing added to the twist to get the orientation of the chord line," but the paper appears to use "the angle of the chord line at the tip." + collective0 = 6.9*pi/180 + # The Figure 23 caption says Θ_tip = 7 deg, but I think that "actually" means 6.9°. + # And yes, collective is 0 here, which is a bit silly, I guess, but is consistent with the definition of twist down below. + collective = 6.9 .* (pi/180) .- collective0 + + mu = rho*1.4502e-5 + Vinf = 0.001*asound + + # Figure 23 caption says Ω_c = 5510 RPM. + rpm = 5510.0 + omega = rpm * (2*pi/60) + + # Get "cell-centered" radial locations. + num_radial = 50 + r_Rtip_ = range(0.2, 1.0; length=num_radial+1) + r_Rtip = 0.5 .* (r_Rtip_[2:end] .+ r_Rtip_[1:end-1]) + radii = r_Rtip .* Rtip + + Rhub = r_Rtip_[1]*Rtip + + # From Pettingill Equation (1), and value for Θ_tip in Table 1. + Θ_tip = 6.9 * pi/180 + twist = Θ_tip ./ (r_Rtip) + + # NACA 0012 airfoil stuff. + af_fname = joinpath(@__DIR__, "airfoils", "xf-n0012-il-500000.dat") + Re_exp = 0.6 + cr75 = chord / Rtip + af, mach_correction, reynolds_correction, rotation_correction, tip_correction = get_airfoil(; af_fname, cr75, Re_exp) + tip_correction = nothing + + precone = 0.0 + turbine = false + rotor = CCBlade.Rotor(Rhub, Rtip, B; precone=precone, turbine=turbine, mach=mach_correction, re=reynolds_correction, rotation=rotation_correction, tip=tip_correction) + + sections = CCBlade.Section.(radii, chord, twist, Ref(af)) + + ops = CCBlade.OperatingPoint.(Vinf, omega.*radii, rho, collective, mu, asound) + outs = CCBlade.solve.(Ref(rotor), sections, ops) + + # BPM.jl uses the M_c = 0.8*M assumption from the BPM report, so modify the W field of each CCBlade.Outputs struct to match that. + lens = Accessors.@optic _.W + outs_bpm_Mc = Accessors.set.(outs, Ref(lens), 0.8.*sqrt.(getproperty.(ops, :Vx).^2 .+ getproperty.(ops, :Vy).^2)) + @assert all(getproperty.(outs_bpm_Mc, :W) .≈ 0.8.*sqrt.(getproperty.(ops, :Vx).^2 .+ getproperty.(ops, :Vy).^2)) + + # Paper doesn't specify the microphone used for Figure 23, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: + # > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). + # So I'll just assume that holds for Figure 23. + # The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane. + r_obs = 2.27 # meters + theta_obs = -35*pi/180 + # So, the docstring for BPM.jl says that `V` argument is the wind velocity in the y direction. + # So I guess we should assume that the blades are rotating about the y axis. + # And if the freestream velocity is in the positive y axis, then, from the perspective of the fluid, the blades are translating in the negative y direction. + # And I want the observer to be downstream/behind the blades, so that would mean they would have a positive y position. + # So I want to rotate the observer around the positive x axis, so I'm going to switch the sign on `theta_obs`. + t0_obs = 0.0 + x0_obs = [0.0, r_obs*sin(-theta_obs), r_obs*cos(-theta_obs)] + + # Get the components of the observer position in a form that BPM.jl uses. + ox = x0_obs[1] + oy = x0_obs[2] + oz = x0_obs[3] + + # Radial locations. + rs = getproperty.(sections, :r) + + # BPM.jl docstring says we need the angle of attack in degrees. + # But it expects them at the interfaces, not cell centers. + rs_interface = from_cell_centers_to_interfaces(rs) + alphas_deg = getproperty.(outs_bpm_Mc, :alpha) .* (180/pi) + alphas_deg_interface = from_cell_centers_to_interfaces(alphas_deg) + + # Do the same thing for the chord. + # What other inputs do we need? + # So the distance from the pitch axis to the leading edge is used, apparently, to locate the trailing edge. + # Let's make sure that's true. + # Here's the relevant code + # + # # Calculate the trailing edge position relative to the hub + # xs = sin(beta)*d - cos(beta)*(c - c1) + # zs = cos(beta)*d + sin(beta)*(c - c1) + # + # `beta` is an azimuthal angle, and `d` is the radial distance of the blade element relative to the hub. + # So let's say that's zero. + # Then, I guess, `xs = (c - c1)` and `zs = r` + # So it looks like the twist is being ignored, I think. + # But, at any rate, if I set c1 = c, that effect is ignored. + chords = getproperty.(sections, :chord) + chords_interface = from_cell_centers_to_interfaces(chords) + c1s = chords_interface + + # So, for the boundary layer, we want to use untripped for the 95% of the blade from the hub to almost tip, and then tripped for the last 5% of the blade at the tip. + # So what are those section indices? + num_untripped = Int(round(0.95*num_radial)) + num_tripped = num_radial - num_untripped + _tripped_flags = vcat(fill(false, num_untripped), fill(true, num_tripped)) + @assert length(_tripped_flags) == num_radial + # This is working with num_radial, the number of cell-centers, not interfaces. + # I think this is the right thing to do though, because it looks like the last value of the `trip` argument is not used by BPM.jl. + # But I'll add an extra `true` just to be consistent. + tripped_flags = vcat(_tripped_flags, _tripped_flags[end:end]) + + # Now, the other trick: need to only include LBLVS noise for elements where the Reynolds number is < 160000. + # So, we need the Reynolds number for each section. + Re_c = rho * getproperty(outs_bpm_Mc, :W) .* getproperty.(sections, :chord) / mu + # So now we just need to decide which radial stations have the low or high Re_c values. + low_Re_c = 160000 + _lblvs_flags = Re_c .< low_Re_c + # Again, this is working with num_radial-length arrays, which are dealing with cell-centered quantities. + # Again, the last value is ignored, but I'll add a value to be consistent. + lblvs_flags = vcat(_lblvs_flags, _lblvs_flags[end:end]) + + # In the Figure 23 caption, "for these predictions, bluntness thickness H was set to 0.5 mm and trailing edge angle Ψ was set to 14 degrees." + h = 0.5e-3 # meters + Psi = 14*pi/180 # radians + hs = fill(h, length(rs_interface)) + Psis = fill(Psi, length(rs_interface)) + Psis_deg = Psis .* 180/pi + + # Also need kinematic viscosity. + nu = mu/rho + + # Number of azimuthal stations per blade pass, I think. + num_betas = 20 + + # Save the inputs. + data = Dict( + "rho"=>rho, "asound"=>asound, "mu"=>mu, + "Vinf"=>Vinf, "omega"=>omega, + "B"=>B, + "Rhub"=>rotor.Rhub, + "Rtip"=>rotor.Rtip, + "radii"=>getproperty.(sections, :r), + "chord"=>getproperty.(sections, :chord), + "twist"=>getproperty.(sections, :theta), + "alpha"=>getproperty.(outs, :alpha), + "U"=>getproperty.(outs, :W), + "hs"=>hs[begin:end-1], + "Psis"=>Psis[begin:end-1], + "tripped_flags"=>tripped_flags[begin:end-1], + "lblvs_flags"=>lblvs_flags[begin:end-1], + "num_src_times_blade_pass"=>num_betas) + + # Now we can start doing the predictions. + oaspl_pressure, spl_pressure = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=true, + turbulent_suction=false, + turbulent_separation=false, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_suction, spl_suction = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=true, + turbulent_separation=false, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_separation, spl_separation = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=true, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_lblvs, spl_lblvs = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=false, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=lblvs_flags, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_blunt, spl_blunt = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=false, + blunt=true, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_tip, spl_tip = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, B, rs_interface, chords_interface, c1s, hs, alphas_deg_interface, Psis_deg, nu, asound; + blunt=false, + weighted=false, + trip=tripped_flags, + tip=true, + laminar=false, + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=false, + round=false, + nbeta=num_betas, + smooth=false) + + # Now I'd like to do the narrowband SPL like the Pettingill et al. paper does, instead of 1/3 octave SPL. + # So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. + # (Dividing the MSP by Δf_pbs aka the 1/3 octave spacing is like getting a power-spectral density, then multiplying by the narrowband spacing Δf_nb gives us the MSP associated with the narrowband.) + # I think the paper describes that, right? + # Right, here's something: + # + # > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. + # > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. + # + # So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. + # And then I'm dividing by that. + # So that seems like the right thing. + # First, I'll confirm that the frequencies BPM.jl are using are the ApproximateThirdOctaveCenterBands. + # This will give me those center bands: + cbands_approx3rdcenter = AcousticMetrics.ApproximateThirdOctaveCenterBands(first(BPM.default_f), last(BPM.default_f)) + @assert maximum(abs.(BPM.default_f .- cbands_approx3rdcenter)) < 1e-10 + + # So then I need to get the spacing associated with the proportional bands. + # So get the lower and upper "edges" of the bands. + freqs_l = AcousticMetrics.lower_bands(cbands_approx3rdcenter) + freqs_u = AcousticMetrics.upper_bands(cbands_approx3rdcenter) + # And then the spacing for each band. + df_pbs = freqs_u .- freqs_l + # Also need the experimental narrowband spacing, which is 20 Hz. + df_nb = 20.0 + # So, if spl = 10*log10(msp/pref^2), and I want to multiply the msp by df_nb/df_pbs, then + # + # spl_nb = 10*log10((msp*df_nb/df_pbs)/pref^2) = 10*(log10(msp/pref^2) + log10(df_nb/df_pbs)) + # spl_nb = 10*log10(msp/pref^2) + 10*log10(df_nb/df_pbs) + # spl_nb = spl + 10*log10(df_nb/df_pbs) + # + # That's easy. + spl_nb_pressure = @. spl_pressure + 10*log10(df_nb/df_pbs) + spl_nb_suction = @. spl_suction + 10*log10(df_nb/df_pbs) + spl_nb_separation = @. spl_separation + 10*log10(df_nb/df_pbs) + spl_nb_lblvs = @. spl_lblvs + 10*log10(df_nb/df_pbs) + spl_nb_blunt = @. spl_blunt + 10*log10(df_nb/df_pbs) + spl_nb_tip = @. spl_tip + 10*log10(df_nb/df_pbs) + + data["freqs"] = BPM.default_f + data["spl_nb_pressure"] = spl_nb_pressure + data["spl_nb_suction"] = spl_nb_suction + data["spl_nb_separation"] = spl_nb_separation + data["spl_nb_lblvs"] = spl_nb_lblvs + data["spl_nb_blunt"] = spl_nb_blunt + data["spl_nb_tip"] = spl_nb_tip + save(joinpath(@__DIR__, "figure23c.jld2"), data) + + return nothing +end + +function do_figure24b() + # Pettingill et al., "Acoustic And Performance Characteristics of an Ideally Twisted Rotor in Hover", 2021 + # Parameters from Table 1 + B = 4 # number of blades + Rtip = 0.1588 # meters + chord = 0.2*Rtip + # From the first paragraph on page 3, the rotor was designed to produce 11.12 N of thrust. + # Using that and the value of the design thrust coefficient in Table 1 to get the density and speed of sound. + # omega_target = 5500.0 * (2*pi/60) + # thrust_target = 11.12 # Newtons + # CT_target = 0.0137 + # Mtip_target = 0.27 + # asound = omega_target*Rtip/Mtip_target + # rho = thrust_target/(CT_target * (pi*Rtip^2) * (omega_target*Rtip)^2) + # Standard day: + Tamb = 15 + 273.15 # 15°C in Kelvin + pamb = 101325.0 # Pa + R = 287.052874 # J/(kg*K) + rho = pamb/(R*Tamb) + asound = sqrt(1.4*R*Tamb) + + # CCBlade.jl defines pitch/collective as "the thing added to the twist to get the orientation of the chord line," but the paper appears to use "the angle of the chord line at the tip." + collective0 = 6.9*pi/180 + # The Figure 24 caption says Θ_tip = 7 deg, but I think that "actually" means 6.9°. + # And yes, collective is 0 here, which is a bit silly, I guess, but is consistent with the definition of twist down below. + collective = 6.9 .* (pi/180) .- collective0 + + mu = rho*1.4502e-5 + Vinf = 0.001*asound + + # Figure 24 caption says Ω_c = 2938 RPM. + rpm = 2938.0 + omega = rpm * (2*pi/60) + + # Get "cell-centered" radial locations. + num_radial = 50 + r_Rtip_ = range(0.2, 1.0; length=num_radial+1) + r_Rtip = 0.5 .* (r_Rtip_[2:end] .+ r_Rtip_[1:end-1]) + radii = r_Rtip .* Rtip + + Rhub = r_Rtip_[1]*Rtip + + # From Pettingill Equation (1), and value for Θ_tip in Table 1. + Θ_tip = 6.9 * pi/180 + twist = Θ_tip ./ (r_Rtip) + + # NACA 0012 airfoil stuff. + af_fname = joinpath(@__DIR__, "airfoils", "xf-n0012-il-500000.dat") + Re_exp = 0.6 + cr75 = chord / Rtip + af, mach_correction, reynolds_correction, rotation_correction, tip_correction = get_airfoil(; af_fname, cr75, Re_exp) + tip_correction = nothing + + precone = 0.0 + turbine = false + rotor = CCBlade.Rotor(Rhub, Rtip, B; precone=precone, turbine=turbine, mach=mach_correction, re=reynolds_correction, rotation=rotation_correction, tip=tip_correction) + + sections = CCBlade.Section.(radii, chord, twist, Ref(af)) + + ops = CCBlade.OperatingPoint.(Vinf, omega.*radii, rho, collective, mu, asound) + outs = CCBlade.solve.(Ref(rotor), sections, ops) + + # BPM.jl uses the M_c = 0.8*M assumption from the BPM report, so modify the W field of each CCBlade.Outputs struct to match that. + lens = Accessors.@optic _.W + outs_bpm_Mc = Accessors.set.(outs, Ref(lens), 0.8.*sqrt.(getproperty.(ops, :Vx).^2 .+ getproperty.(ops, :Vy).^2)) + @assert all(getproperty.(outs_bpm_Mc, :W) .≈ 0.8.*sqrt.(getproperty.(ops, :Vx).^2 .+ getproperty.(ops, :Vy).^2)) + + # Paper doesn't specify the microphone used for Figure 24, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: + # > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). + # So I'll just assume that holds for Figure 24. + # The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane. + r_obs = 2.27 # meters + theta_obs = -35*pi/180 + # So, the docstring for BPM.jl says that `V` argument is the wind velocity in the y direction. + # So I guess we should assume that the blades are rotating about the y axis. + # And if the freestream velocity is in the positive y axis, then, from the perspective of the fluid, the blades are translating in the negative y direction. + # And I want the observer to be downstream/behind the blades, so that would mean they would have a positive y position. + # So I want to rotate the observer around the positive x axis, so I'm going to switch the sign on `theta_obs`. + t0_obs = 0.0 + x0_obs = [0.0, r_obs*sin(-theta_obs), r_obs*cos(-theta_obs)] + + # Get the components of the observer position in a form that BPM.jl uses. + ox = x0_obs[1] + oy = x0_obs[2] + oz = x0_obs[3] + + # Radial locations. + rs = getproperty.(sections, :r) + + # BPM.jl docstring says we need the angle of attack in degrees. + # But it expects them at the interfaces, not cell centers. + alphas_deg = getproperty.(outs_bpm_Mc, :alpha) .* (180/pi) + rs_interface = from_cell_centers_to_interfaces(rs) + alphas_deg_interface = from_cell_centers_to_interfaces(alphas_deg) + + # Do the same thing for the chord. + # What other inputs do we need? + # So the distance from the pitch axis to the leading edge is used, apparently, to locate the trailing edge. + # Let's make sure that's true. + # Here's the relevant code + # + # # Calculate the trailing edge position relative to the hub + # xs = sin(beta)*d - cos(beta)*(c - c1) + # zs = cos(beta)*d + sin(beta)*(c - c1) + # + # `beta` is an azimuthal angle, and `d` is the radial distance of the blade element relative to the hub. + # So let's say that's zero. + # Then, I guess, `xs = (c - c1)` and `zs = r` + # So it looks like the twist is being ignored, I think. + # But, at any rate, if I set c1 = c, that effect is ignored. + chords = getproperty.(sections, :chord) + chords_interface = from_cell_centers_to_interfaces(chords) + c1s = chords_interface + + # So, for the boundary layer, we want to use untripped for the 95% of the blade from the hub to almost tip, and then tripped for the last 5% of the blade at the tip. + # So what are those section indices? + num_untripped = Int(round(0.95*num_radial)) + num_tripped = num_radial - num_untripped + _tripped_flags = vcat(fill(false, num_untripped), fill(true, num_tripped)) + @assert length(_tripped_flags) == num_radial + # This is working with num_radial, the number of cell-centers, not interfaces. + # I think this is the right thing to do though, because it looks like the last value of the `trip` argument is not used by BPM.jl. + # But I'll add an extra entry at the end, just to be consistent. + tripped_flags = vcat(_tripped_flags, _tripped_flags[end:end]) + + # In the Figure 24 caption, "for these predictions, bluntness thickness H was set to 0.5 mm and trailing edge angle Ψ was set to 14 degrees." + h = 0.5e-3 # meters + Psi = 14*pi/180 # radians + hs = fill(h, length(rs_interface)) + Psis_deg = fill(Psi*180/pi, length(rs_interface)) + + # Also need kinematic viscosity. + nu = mu/rho + + # Number of azimuthal stations per blade pass, I think. + num_betas = 20 + + # Save the inputs in a dict that we'll write out later. + data = Dict( + "rho"=>rho, "asound"=>asound, "mu"=>mu, + "Vinf"=>Vinf, "omega"=>omega, + "B"=>B, + "Rhub"=>rotor.Rhub, + "Rtip"=>rotor.Rtip, + "radii"=>getproperty.(sections, :r), + "chord"=>getproperty.(sections, :chord), + "twist"=>getproperty.(sections, :theta), + "alpha"=>getproperty.(outs, :alpha), + "U"=>getproperty.(outs, :W), + "hs"=>hs[begin:end-1], + "Psis"=>fill(Psi, length(sections)), + "tripped_flags"=>tripped_flags[begin:end-1], + "num_src_times_blade_pass"=>num_betas) + # save(joinpath(@__DIR__, "figure24b-inputs.jld2"), data_inputs) + + # Now we can start doing the predictions. + oaspl_pressure, spl_pressure = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=true, + turbulent_suction=false, + turbulent_separation=false, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_suction, spl_suction = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=true, + turbulent_separation=false, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_separation, spl_separation = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=true, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_lblvs, spl_lblvs = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=false, + blunt=false, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=true, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_blunt, spl_blunt = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, + B, rs_interface, chords_interface, c1s, hs, + alphas_deg_interface, Psis_deg, nu, + asound; + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=false, + blunt=true, + weighted=false, + trip=tripped_flags, + tip=false, + laminar=false, + round=false, + nbeta=num_betas, + smooth=false) + + oaspl_tip, spl_tip = BPM.sound_pressure_levels( + ox, oy, oz, Vinf, omega, B, rs_interface, chords_interface, c1s, hs, alphas_deg_interface, Psis_deg, nu, asound; + blunt=false, + weighted=false, + trip=tripped_flags, + tip=true, + laminar=false, + turbulent_pressure=false, + turbulent_suction=false, + turbulent_separation=false, + round=false, + nbeta=num_betas, + smooth=false) + + # Now I'd like to do the narrowband SPL like the Pettingill et al. paper does, instead of 1/3 octave SPL. + # So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. + # (Dividing the MSP by Δf_pbs aka the 1/3 octave spacing is like getting a power-spectral density, then multiplying by the narrowband spacing Δf_nb gives us the MSP associated with the narrowband.) + # I think the paper describes that, right? + # Right, here's something: + # + # > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. + # > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. + # + # So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. + # And then I'm dividing by that. + # So that seems like the right thing. + # First, I'll confirm that the frequencies BPM.jl are using are the ApproximateThirdOctaveCenterBands. + # This will give me those center bands: + cbands_approx3rdcenter = AcousticMetrics.ApproximateThirdOctaveCenterBands(first(BPM.default_f), last(BPM.default_f)) + @assert maximum(abs.(BPM.default_f .- cbands_approx3rdcenter)) < 1e-10 + + # So then I need to get the spacing associated with the proportional bands. + # So get the lower and upper "edges" of the bands. + freqs_l = AcousticMetrics.lower_bands(cbands_approx3rdcenter) + freqs_u = AcousticMetrics.upper_bands(cbands_approx3rdcenter) + # And then the spacing for each band. + df_pbs = freqs_u .- freqs_l + # Also need the experimental narrowband spacing, which is 20 Hz. + df_nb = 20.0 + # So, if spl = 10*log10(msp/pref^2), and I want to multiply the msp by df_nb/df_pbs, then + # + # spl_nb = 10*log10((msp*df_nb/df_pbs)/pref^2) = 10*(log10(msp/pref^2) + log10(df_nb/df_pbs)) + # spl_nb = 10*log10(msp/pref^2) + 10*log10(df_nb/df_pbs) + # spl_nb = spl + 10*log10(df_nb/df_pbs) + # + # That's easy. + spl_nb_pressure = @. spl_pressure + 10*log10(df_nb/df_pbs) + spl_nb_suction = @. spl_suction + 10*log10(df_nb/df_pbs) + spl_nb_separation = @. spl_separation + 10*log10(df_nb/df_pbs) + spl_nb_lblvs = @. spl_lblvs + 10*log10(df_nb/df_pbs) + spl_nb_blunt = @. spl_blunt + 10*log10(df_nb/df_pbs) + spl_nb_tip = @. spl_tip + 10*log10(df_nb/df_pbs) + + data["freqs"] = BPM.default_f + data["spl_nb_pressure"] = spl_nb_pressure + data["spl_nb_suction"] = spl_nb_suction + data["spl_nb_separation"] = spl_nb_separation + data["spl_nb_lblvs"] = spl_nb_lblvs + data["spl_nb_blunt"] = spl_nb_blunt + data["spl_nb_tip"] = spl_nb_tip + save(joinpath(@__DIR__, "figure24b.jld2"), data) + + return nothing +end + +function doit() + do_figure22b() + do_figure23c() + do_figure24b() +end + +end # module diff --git a/test/gen_test_data/gen_ccblade_data/GenCCBladeData.jl b/test/gen_test_data/gen_ccblade_data/GenCCBladeData.jl index b8c0ede7..16ca718c 100644 --- a/test/gen_test_data/gen_ccblade_data/GenCCBladeData.jl +++ b/test/gen_test_data/gen_ccblade_data/GenCCBladeData.jl @@ -1,6 +1,8 @@ module GenCCBladeData -import CCBlade, DelimitedFiles +using CCBlade: CCBlade +using FileIO: save +using JLD2: JLD2 using Printf: @sprintf include("constants.jl") @@ -21,24 +23,25 @@ function omega_sweep() DCL_STALL=0.1, MCRIT=0.8, CDMIN=0.13e-1, CLDMIN=0.5, DCDCL2=0.4e-2, REREF=0.2e6, REXP=-0.4) airfoil_interp(a, r, m) = af_xrotor(a, r, m, xrotor_config) - theta_rad = theta .* pi/180.0 + theta_rad = CCBladeTestCaseConstants.theta .* pi/180.0 - rotor = CCBlade.Rotor(Rhub, Rtip, num_blades) - sections = CCBlade.Section.(radii, chord, theta_rad, airfoil_interp) + rotor = CCBlade.Rotor(CCBladeTestCaseConstants.Rhub, CCBladeTestCaseConstants.Rtip, CCBladeTestCaseConstants.num_blades) + sections = CCBlade.Section.(CCBladeTestCaseConstants.radii, CCBladeTestCaseConstants.chord, theta_rad, airfoil_interp) rpm = 200.0:200.0:2200.0 # rev/min for i in eachindex(rpm) omega = rpm[i]*(2*pi/60.0) - ops = CCBlade.OperatingPoint.(v, omega.*radii, rho, pitch, mu, c0) + ops = CCBlade.OperatingPoint.(CCBladeTestCaseConstants.v, omega.*CCBladeTestCaseConstants.radii, CCBladeTestCaseConstants.rho, CCBladeTestCaseConstants.pitch, CCBladeTestCaseConstants.mu, CCBladeTestCaseConstants.c0) outs = CCBlade.solve.(Ref(rotor), sections, ops) - # Get the normal and circumferential loading from the CCBlade output. - fn = getproperty.(outs, :Np) # N/m - fc = getproperty.(outs, :Tp) # N/m + outs_d = Dict{String,Any}(string(f)=>getproperty.(outs, f) for f in fieldnames(eltype(outs))) + outs_d["omega"] = omega + save("ccblade_omega$(@sprintf "%02d" i)-outputs.jld2", outs_d) - data = hcat(fn, fc) - DelimitedFiles.writedlm("ccblade_omega$(@sprintf "%02d" i).csv", data, ',') + # data = DelimitedFiles.readdlm("ccblade_omega$(@sprintf "%02d" i).csv", ',') + # @show maximum(abs.(getproperty.(outs, :Np) .- data[:, 1])) + # @show maximum(abs.(getproperty.(outs, :Tp) .- data[:, 2])) end return nothing diff --git a/test/gen_test_data/gen_ccblade_data/Project.toml b/test/gen_test_data/gen_ccblade_data/Project.toml index ef3611f1..4e3d352a 100644 --- a/test/gen_test_data/gen_ccblade_data/Project.toml +++ b/test/gen_test_data/gen_ccblade_data/Project.toml @@ -1,2 +1,4 @@ [deps] CCBlade = "e1828068-15df-11e9-03e4-ef195ea46fa4" +FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega01-outputs.jld2 b/test/gen_test_data/gen_ccblade_data/ccblade_omega01-outputs.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..375eb123da4fd86b330a30989801224f14e46a27 GIT binary patch literal 5564 zcmeI0c{o-7x5tk$Q!-XWNyr=`O7%I)RH;aOGbN!62PH{DgGdsJOp*B*kCJ(69Yf|L zE!HS;UX>MYVCZ(*2z&wPF7x49wQ|FCq!QMpsb?M0Y#b1wk|?C8WNcQ zxBs&Q9&4*>Zf4%>t^8PtC=lbJAXGe9*RGtgC)W0Ve zg2UZxzHfO8l`}PGud2R*$3bao7=8lW-bZ~W@ih(lr`o+={l){USV4T}sU&E)|A9qo zBp%8HGSW2SV?n~_QfetpG?=`l7q0D$fcNAv!W?TD;Fwt%jqZg2-}Mv2(L0~Pv(09g z$oQwgt8{a4hsa}S-R8#3iGK*$E5crblJ{U@Nwe{m$1NB*T<)DT?Ev580vojFP2uSM z*CI@}55SdE{tq`sjFc!cVQ29XYy!{bWA0L*TkA>7U_Ax=2YC(at0>@mH~fKi8U-2| zGGj>o6u4Ku(`LYt0weE^1W6fEfY4|ABlsucMSW^w?OYiVTX%m?5C zZThAsPy1mxkx}n~XCIjSJZGS)-3yPL<8)QndLTe?Gou=%3uG?`9iz5%!j1-y-;&f0 zc#>t;oi5S=Jcg+sNj~k6A+XKIgQ*>^8_C2yNF~GJOVOlU3o>L4*J}vuBSU})YuX$u z8Bzp&Ta;$ofGK8w=X_rq)II2!H7IU_B}RTld(Jjk(Bp2{7_pbxK1!Tf&(Mi4L6Rha zY&7F;t;+wS93^cf;6?VABi5*X38`Hr$Wr*5d)}#Bgwx2qbK_1Hs_Ql!^p8qGEa#KD zZG{t&tHG;+w|a5tYW%^>^C~fjx^l7G_25e+l^bnD&l81A4|!sbUX4Vz)m8*~e?%bB z>=Z58>6W3dihYkmxxRHx)MO2(lQ=M1Yl$pp0I#9MFb zm5lP+da=e5xN)4oZ+XuHC_Vyipn2O!AoJI z-|;vGCCFflKaUhhJlluGr%Z}s3gxhJ>3h0OUddyh(~W+}bXUN>T}&U`q_ZCzi~p?> z$f=0Et@>UovR)CZG0-ex@2Z5=s@Wdu&T|0kFW1w#C+ProI_fAdgQzmrQeb>BC`=hE zLhzLJSyIN1X6t0#JgI{Hp<58JBR~bqwVzjZXPF8%LDaaot5*ek|HZZ8FH{w5HLH>4 z#)!?#3RvAAN&{0_cCl9GCfK^!S7zVWHkiS4_3pjZ24)VfLR8&Wcvxotl6T+(h@^>% zSv_iirZ%SG<;EJAyS{MTAgc;k#PLsjw^l#^-H(j;VF0_g1`khPEQQdLl*WQPMNsO0 zFu-DW0bqP|;vXsHftaa!L1c0cV4s(IJiPQ47$xgDhc0A8;B0>P;KMiYsp*Qzy~5WZ zBI&9-{5lKbE{5AGejf%FhRV z@JqTuUm&#~R<39D?aJr}C-1IHKZE)q!u!p!+$a68^rB9U64?(exo&>c%znu6xcTx@ zPCp#EowTnwtRF}wT9a3g_Jitau=0P|2L?hb913~8a9i}+;k$`Fpqe1T!|l@zJT#RI zr>=LwaA-35v1=!MV>oJ^9Nhtr4&pAbd})V6PNP!odhOs_5$_k&M+Uzhqrm4rWbh8x zex#yFhKzJYHh~>vct1VbEP)|ITg#D7tAFqK>wlPAN88}Dtp&|cPa9+ljVz{KXoEXK z$`czSb}~@BxQdU2rlMXwc~7OFH_lq=osm?O{%owpdU*o9$n+hboR~uVIsWw)_oor% z#BDjxN7IN4ue#6LbQ;;{aLRHDOrzs2j>_HjQ>aT^f0Xm;6rwLM?5UlcL=5Df*UcuA zC^~xin0VF%I@-lLDm*lfSoigWIn9qD!XuSWhrW!WtQ<{8y&Nj?6%^MUGZ{fo6x~^s zDW4Jh%>FCG*iY!U;9_Fy-62$|Oef42OF!o9axAI34cW;Z z)f+t{=Wea(J(@j8DxiZ>)~keDE$$uf1Y4df&r3{-j5!UDdU zz{*hy?6~9%aLs|yEN4BbI_yK!D71=3ya zxK)(mp?b;GH_{dl&vn(R6t>}EK%?I}Iwu(f1CvzBk0!&eiW0We_es$Af|Dd?k_1%? z@$(9slYp#9r;#$82(XVRaC0yb+?{E?*cg)Fz^xSW^Akysl%E;WpOOSkrgCq;ZA%9C zo;aNIvt%gmx{vFyy9tMM}1jFc4K#H|tx!jC6LAyA$-{R-nTTA0=aXY~ zScrmL9~jPEWFykD587?ZVkd@Nqdt`n;vnuhSf&wG!%5_i$0$^da}npQ{|QkY<|f_@ zQo*W5@(^oI$|cBc;w2U&vb&KKd5KJs3#14IUgG;JxAy+p%u5{l$@|2qiHB&?k`g)P z!b7axJrjn0aT5>h6*azN%uS@IX7YM^a}ilyG7)y#a}vG2^cu1-aS#Vv5-OC_*@zP> zjrl3bOvJ%3R2xGy(z9yrVEqYVKQ&J} znk)gozL$%Bz#=3*t;S7zEW!uOHXmxtA{=?tFJ6|n2%l;rt(OUlFvvsY+_8E-eS#ER z&%Fo}6oT`d%>ul)I5hIYZ5~*kydG~oI|m$g*K0T#XJNqS@d?@7uMjb!6vbpW1Ah6& zVxDGGaNn_%4Z|=2!WO&sI+u?EE&w-O;ynW97k!<3RX@XMh@81_&k!(Y^n5vUfdb>F zj7z1>d*GB+6mEAt8D8POvgxrkL*Z$Mtc=%HAd(p_CM}x_%Z25$RF5FotM$WgW5kXe z#=gcg41>jaa!~?PD_on(?&QWuTkQx@jRo!kr1ZEdBt zhiV8uTK>L_*A3vYRbx}3{CP-3Mep=D^x>Cqn0xN59wg}+P((o&nmxpP4@I2;&+y1N z&BBu)IPufzL#{eVyN+AgF)DyWaY*XMh*e(vWw|&%f>d-Q;&IVq$fd(_*KzqVM6{!k zD7-s@!Xr5Mel7TfaAd=QJ!glISZ}mmsV)U=Qzfvsnf9SKrN#p?0$jD=l#T2RNBT}5Xp<(s16)79qpJu_gAo{HzKcm)WB<`M}c#gjr zNqopH>YHss!js8KdOak>y;YHC?sFp=Vse?v+|r1O3ql^=HE2NkkqRrVx%J4VqvB|{ zR6Szu=Q>zlScd|y8;9YH>rk`(4&v!8bx7xml7bnz7AaxP=_K&ANVrIm*2$n2P4o5b z+!!$h7uN9P(hdmv{+&7}v-&%wT4DTVu^X~ho*h5U+77X5o(mTWTVdokPC)*3Go*W* zo}TG#0_r^-EB0d~xKUf|#wpbZznJtz%#9jA%kk;0UorJySkoMF>th{Ak}4kS4A+9> z_YrL=QVmQTjJh`$TMa^q>GU;D?;+{zC3lq*RUkZloKhxN39Rhvw^ zK~meY=L;JVtW}9#hTUZ_*Q%qw)2ak6#I-Rcrxt?l;#XW_Y#w-s3D2jVcnbp&Ni%uo z1PJa4Y7!zP!%V&S4MxjoxcBa-y-`>oSV3jR#)!35MKlBmuAarrrtwb>w-ao zW)j%5Sh?2w7#js|lSRMUrOq&DF}2h*wUT%)UH@Tw3(?js2!k z-a{9U$fwijO^wd;BUaPsVk4tih}bmZ*dAa+=$u0L1dp@yxJ@CMhTpQH^iyacFi1l4 z)+EXd!}#p}FoFE$dLtK^CeY3l-mx3PCw=xjgbBhmi~H{wSg1k zW(0e{yTwBCofxBj7v9$VG zUladka+G9TSJsPZnQr<|!6NX_&Yc{swt993;_4+sKR@biyf4AuJb2WNRSr5^aS*^Qf9P9pnxFCmw G!v6xdr$*TT literal 0 HcmV?d00001 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega01.csv b/test/gen_test_data/gen_ccblade_data/ccblade_omega01.csv deleted file mode 100644 index 8acb923a..00000000 --- a/test/gen_test_data/gen_ccblade_data/ccblade_omega01.csv +++ /dev/null @@ -1,30 +0,0 @@ --1.4356148551649774,-1.1892665533272921 --2.4033835404694757,-2.035227010210563 --2.714224004941967,-1.690391363173225 --2.90053695932714,-1.522321977754197 --3.0725006780721773,-1.4717592764402014 --3.287413875239289,-1.4680017708823037 --3.5460548833673458,-1.476051826364756 --3.8350056028300523,-1.4818698498206253 --4.139837472259518,-1.4799789398935497 --4.444924440073268,-1.4677992534137092 --4.7302406132587524,-1.4423318535253125 --4.971906950196616,-1.4006237487465638 --5.149640086605236,-1.3419398338647721 --5.2570214597678335,-1.2694882589791543 --5.301565051930928,-1.1889817991965437 --5.2994110280763,-1.1064894554659686 --5.263657204306303,-1.0258871101236533 --5.201597378937523,-0.9489122151478151 --5.114191437595163,-0.8756103752852625 --4.996336325079433,-0.8048640026200113 --4.838361176030778,-0.7348308254480691 --4.62840684760792,-0.6635572659315122 --4.354609206819768,-0.5892497882056179 --4.007851941330612,-0.51077981080502 --3.5831141668261215,-0.42768400567837145 --3.080886295443626,-0.34046207052012273 --2.5088939840160127,-0.25075174583407456 --1.8831189920553497,-0.16161104218427425 --1.236388506612615,-0.07882953588675484 --0.6696509540756329,-0.01537496560942175 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega02-outputs.jld2 b/test/gen_test_data/gen_ccblade_data/ccblade_omega02-outputs.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..284c355a3a8cf62db804f6d3d1a5d3c782f9f50d GIT binary patch literal 5564 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 UG{ot1f5(!!{6ErF`{?Zd0>qWIH2?qr literal 0 HcmV?d00001 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega03.csv b/test/gen_test_data/gen_ccblade_data/ccblade_omega03.csv deleted file mode 100644 index f2932c2d..00000000 --- a/test/gen_test_data/gen_ccblade_data/ccblade_omega03.csv +++ /dev/null @@ -1,30 +0,0 @@ -0.4062878172353916,0.6251509857828307 -1.5978989964604244,1.3540472035922286 -3.8913502391854315,2.2905860611711315 -6.945985729008861,3.1534038061456005 -10.479003902316219,3.8960418563191657 -14.34894782994682,4.537416204342948 -18.402036991663472,5.082389239846945 -22.506250052316915,5.53839925491329 -26.534691759671894,5.90995288490889 -30.41717825906992,6.209808478726682 -34.08573573367564,6.446046111831672 -37.47756463384888,6.6244788781528925 -40.559521232410646,6.753328055020695 -43.28343098321236,6.836006156600791 -45.619656130594755,6.877191483178978 -47.51164511214904,6.876253014262575 -48.913888122692434,6.833357865873524 -49.77218720011957,6.7466932990738835 -50.008361824561,6.610481951643511 -49.54263209784511,6.418293965028741 -48.29672214148976,6.162877558176648 -46.209431060555204,5.8379841439449045 -43.2517359206161,5.439596728895308 -39.439799251492275,4.9672663589018144 -34.83947523739131,4.424285187734197 -29.56017587995048,3.81674934816248 -23.747647978489834,3.1528561804441075 -17.58814648042165,2.442958514061069 -11.378229417662023,1.7076794539297087 -5.991833729822369,1.0459768699010352 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega04-outputs.jld2 b/test/gen_test_data/gen_ccblade_data/ccblade_omega04-outputs.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..3e61dd9d484ed44bf041d81514dfeae48ce7407f GIT binary patch literal 5564 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 Wm8}wONlM?%VBO09Cxtnsm;VnC@UEQz literal 0 HcmV?d00001 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega04.csv b/test/gen_test_data/gen_ccblade_data/ccblade_omega04.csv deleted file mode 100644 index 91897bef..00000000 --- a/test/gen_test_data/gen_ccblade_data/ccblade_omega04.csv +++ /dev/null @@ -1,30 +0,0 @@ -2.2365741156263845,2.18294132276027 -6.877041676137847,4.669659741633142 -13.97331389675828,6.903373660822529 -21.6610632624273,8.359060398529284 -29.59539968225063,9.400317995715618 -37.794676084014924,10.22934595201654 -46.077454125343436,10.896604139582324 -54.267026971018225,11.430655501585763 -62.185105613817925,11.845472524093445 -69.74273239461903,12.163837329708747 -76.84513013369599,12.398362407304605 -83.39907454057138,12.556945430221512 -89.35764780351631,12.65111026145649 -94.6416220204346,12.684345294574925 -99.19807680530114,12.662175195168297 -102.92021941928408,12.581367707790111 -105.7111847284934,12.439845939599982 -107.44945492150208,12.232228432863373 -107.95887688597793,11.946222163730726 -107.05032522066317,11.568403482062449 -104.52984073398608,11.083876303471936 -100.23312775908603,10.47966689200192 -94.06102106777949,9.747011488052964 -86.01188965656647,8.883934924220467 -76.19546078437365,7.895705290776532 -64.82449233992364,6.793197380493197 -52.20389409005738,5.591970561924484 -38.74037411116123,4.312488050355793 -25.09607145400904,2.995383729685258 -13.212900926321305,1.8242658966324687 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega05-outputs.jld2 b/test/gen_test_data/gen_ccblade_data/ccblade_omega05-outputs.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..501b6cf396c1cb1cc3917a34da13c49aae997a3d GIT binary patch literal 5564 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 L|G-tByOsX~XdR?9 literal 0 HcmV?d00001 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega06.csv b/test/gen_test_data/gen_ccblade_data/ccblade_omega06.csv deleted file mode 100644 index 1fd5b563..00000000 --- a/test/gen_test_data/gen_ccblade_data/ccblade_omega06.csv +++ /dev/null @@ -1,30 +0,0 @@ -7.790083157191316,6.677279307500257 -23.302592372949945,14.204482059964265 -45.377840063288275,19.935959636993214 -67.15088117860891,22.888888357223205 -88.42492742751725,24.681838872582965 -109.71151163690413,25.975769859178715 -130.74579972621063,26.939147076026742 -151.2539013983942,27.66076983563699 -170.9362600826506,28.180073212940254 -189.66928819869855,28.546139859356497 -207.29329749576377,28.782183754524336 -223.63371511671428,28.899814824993964 -238.60614236770184,28.91792986222974 -252.03873681900134,28.83829348125378 -263.8041484634278,28.66710417182947 -273.637094113485,28.392034495974293 -281.27206307715375,28.003179865344173 -286.3635670848133,27.483800282544166 -288.4097925101639,26.802030709763866 -286.84873283684294,25.92382999410158 -281.08205903991603,24.81218906779605 -270.56846926836295,23.434966677397714 -254.9294970251297,21.770286483445293 -234.0495644292605,19.81249692788044 -208.13088561872092,17.573628122296 -177.6848449841105,15.07945690173419 -143.51575437881908,12.368236114734877 -106.74783980086505,9.491452502131095 -69.24475535733974,6.549926978621265 -36.414669064650596,3.9718307722253385 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega07-outputs.jld2 b/test/gen_test_data/gen_ccblade_data/ccblade_omega07-outputs.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..f38314b2b4272ec107cc0419657d92e461f333c9 GIT binary patch literal 5564 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 J#_e(GzW`5Oo)7>4 literal 0 HcmV?d00001 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega07.csv b/test/gen_test_data/gen_ccblade_data/ccblade_omega07.csv deleted file mode 100644 index 2be37f69..00000000 --- a/test/gen_test_data/gen_ccblade_data/ccblade_omega07.csv +++ /dev/null @@ -1,30 +0,0 @@ -11.523224603748753,9.622847210337504 -34.477148033989984,20.458289670155835 -66.73774668831341,28.426497086839532 -97.98829390306733,32.31136373480983 -128.23949205832352,34.56995082553851 -158.33738037978765,36.150411863683345 -187.9734757038718,37.298818556910426 -216.82813967892113,38.14404278824167 -244.53618209090493,38.741685736147055 -270.96141213977774,39.157069162107874 -295.9078228069052,39.41924669916611 -319.149997316757,39.54107427335061 -340.5786489565897,39.545113321968756 -359.95675178543377,39.43074004148009 -377.1002936742519,39.20333998127648 -391.62679210053375,38.84317621911263 -403.14164353647476,38.33372022665292 -411.1271067625122,37.64917520104268 -414.83338517350376,36.74300587687395 -413.4101670570284,35.56571441951477 -405.9423130185103,34.06387457543358 -391.5845022443514,32.191025049174655 -369.72096442678975,29.91543336862272 -340.11694678896134,27.2284118925134 -303.0103601100828,24.146761344899193 -259.1070391234548,20.707194402524518 -209.5651012971376,16.965003242838968 -156.03497128479887,12.995229335052125 -101.2691387291243,8.94329707012189 -53.207655451375146,5.408935551689907 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega08-outputs.jld2 b/test/gen_test_data/gen_ccblade_data/ccblade_omega08-outputs.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..b87afde6774030650f2bb8a991356bce28aa7314 GIT binary patch literal 5564 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 P&EVeB{~@s#(<=W9FlL$< literal 0 HcmV?d00001 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega08.csv b/test/gen_test_data/gen_ccblade_data/ccblade_omega08.csv deleted file mode 100644 index 68eaef8b..00000000 --- a/test/gen_test_data/gen_ccblade_data/ccblade_omega08.csv +++ /dev/null @@ -1,30 +0,0 @@ -15.897318919171543,13.036819145368296 -47.635422116807966,27.71317308980833 -91.8862661843894,38.25403217833602 -134.25746845063415,43.20275176807124 -175.05690269261575,45.99512935092161 -215.52898982226392,47.908257920990636 -255.32727624494677,49.279179839427016 -294.093637232352,50.28365684292668 -331.39846954859166,50.995766891174554 -367.1003720045839,51.499153127009535 -400.96785513313046,51.82900057604185 -432.7201218159274,51.99883588403286 -462.2202305993945,52.03469583519743 -489.1525413948306,51.93219046882265 -513.2605903243614,51.69469517940693 -534.0127975436181,51.29241596281952 -550.8452758956379,50.699473109144016 -563.0123222927978,49.877526341431164 -569.4373647727299,48.760411579166444 -568.8851203506586,47.277637853293356 -560.0130251025791,45.35335954600304 -541.5568751942911,42.92104365244562 -512.5620953539424,39.93453693885331 -472.6024510814552,36.379483724639734 -421.92551567795965,32.27755796703787 -361.4571022485447,27.67898581722471 -292.7915036389308,22.66144140799136 -218.24913615459198,17.331798286607462 -141.72404028631422,11.89497664268284 -74.37299177664342,7.168778293352193 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega09-outputs.jld2 b/test/gen_test_data/gen_ccblade_data/ccblade_omega09-outputs.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..e9d37bf789e7c69587b7aa79ed8c3814e4161f26 GIT binary patch literal 5564 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 UimoE3?_%&T;s1f?Q>n%O126!?J^%m! literal 0 HcmV?d00001 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega09.csv b/test/gen_test_data/gen_ccblade_data/ccblade_omega09.csv deleted file mode 100644 index d625ac61..00000000 --- a/test/gen_test_data/gen_ccblade_data/ccblade_omega09.csv +++ /dev/null @@ -1,30 +0,0 @@ -20.913832602014793,16.920318658562007 -62.78166555747269,35.97332639714413 -120.83448197533615,49.428104980698095 -175.9866211178062,55.57893794026472 -228.9354379380376,58.98084718908416 -281.3933099009674,61.2828888324899 -332.98764192622446,62.92684469279654 -383.3348906983963,64.1424027241161 -431.94791504250026,65.02458883081594 -478.69340494324507,65.67766992162446 -523.3108884073284,66.14342549699305 -565.4647179212063,66.43557447774836 -604.9921798914909,66.58354512450524 -641.488393553667,66.57771561215637 -674.6095313793375,66.41806885428879 -703.6397047063278,66.0615407037923 -727.7974276531905,65.46931961230113 -746.0380609529624,64.5856957459517 -756.8547645308932,63.317860962199845 -758.49511103516,61.56600248397873 -749.0330888327105,59.222369869767135 -726.6171392277746,56.19056692935537 -689.7974361641361,52.40140158651094 -637.8336701390824,47.82860725322723 -570.9213756370386,42.49651629122281 -490.21588542376946,36.4707070465552 -397.8398326540626,29.85794856193851 -296.9665300868296,22.808935914683147 -192.9653588356733,15.610331861903123 -101.09907699711354,9.363778868441113 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega10-outputs.jld2 b/test/gen_test_data/gen_ccblade_data/ccblade_omega10-outputs.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..433bb2be3030623ecd8aa7ce244cd195dfceb7a6 GIT binary patch literal 5564 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 L{vU{SODq2$GWVCZ literal 0 HcmV?d00001 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega10.csv b/test/gen_test_data/gen_ccblade_data/ccblade_omega10.csv deleted file mode 100644 index 2688223a..00000000 --- a/test/gen_test_data/gen_ccblade_data/ccblade_omega10.csv +++ /dev/null @@ -1,30 +0,0 @@ -26.573824121609768,21.274122011752425 -79.9192918860314,45.241915341761555 -153.59355226551614,61.95678022746453 -223.2061471909869,69.45471015983934 -289.9402262763528,73.55082097524024 -356.0527555418802,76.31020115429922 -421.1644802787604,78.29362068362332 -484.88750509189,79.79216291834884 -546.6925048718949,80.9247003584436 -606.4771120341865,81.81899122997311 -663.9685228310613,82.52444688743715 -718.7871787929266,83.05504873557044 -770.7574228295007,83.44415748789865 -819.3841354003197,83.67588413088328 -864.2291821504015,83.74577035810148 -904.3600391117399,83.59408539629209 -938.7253821994404,83.16484775283627 -965.895455691519,82.37864047639822 -983.7982962173398,81.10616174562696 -989.9802804016997,79.2055460781565 -981.7028710050221,76.52158319153712 -956.2650375835127,72.91050378711373 -911.4614832892426,68.26295805413253 -846.0115305702118,62.52606044005395 -759.9127457524788,55.72165031287891 -654.5050727690351,47.9536126763203 -532.5302365006334,39.35518980072539 -398.25864334818607,30.097992862365306 -259.01196901398475,20.553982904797852 -135.4074918582125,12.216259973569786 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega11-outputs.jld2 b/test/gen_test_data/gen_ccblade_data/ccblade_omega11-outputs.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..fb22c924fcbb425d432eae69abe0218187f59836 GIT binary patch literal 5564 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 Pqw8xP>h$N&$6 ze#Y&;(!qJZsQG|uIW7i5^Ua`H$DSMsiYN`hcBxB6Au@ z9~c^pa8CoSS)(5D9qGVZ_kE8>cRF}IE3Z10odMkoa#>QLZ(+!7?{vFbCj34)p>|az z6Sf~2fb}UBf6s$6Te1bJDDJ|hX9fU0kTf_yHVSo*d?gecsnD#yx!MkE(8L|P>L##; zEkQa~eiTFTaDBgK4AU$*h96?6=O<^r2gB$f{1z$9-&=6t#<4{zbdL^68qHFnqi>%w zb({)^_jH?y_EKR*iQ6~kBNg}}h3;#`Q(@{t{%bp|k(2GSQ-3%z2B(c@KVLgJ20JZ3 zW(R7FLI52e(w9cyQK6Zl?ulVQp;85EOhe$6R$CvS-wzif=!s4Te?auGl*f?Xcc`=9 z-&Ymi0>3-Wa!fgDAn&x|rfBbMP|wp8{iB!`o@RA~^mnlI7g<&ZP7G`~9G(M@cavC~ zA~CS95;T`>FX8`C|IL`)Tboh+4brQ?#!LSi1LtZGy{Rq9(sUO4tgn)PGuiKBSYy_T zoibwlPr@|x&(I3@x0X7ogn7+nEwzK4`4!U%mNjxMwGQb3>whw)By+55_}3UVuAYgO sWN8(R)m^35>bq8B@vFq&Bf2bL-mA=-i;^f-chxx7@PEJ^yTqLT0`Cj9g8%>k literal 0 HcmV?d00001 diff --git a/test/gen_test_data/gen_ccblade_data/ccblade_omega11.csv b/test/gen_test_data/gen_ccblade_data/ccblade_omega11.csv deleted file mode 100644 index aaa67983..00000000 --- a/test/gen_test_data/gen_ccblade_data/ccblade_omega11.csv +++ /dev/null @@ -1,30 +0,0 @@ -32.87810395677037,26.09881302938423 -99.05130471878633,55.5216259955307 -190.1751697055377,75.84767780212506 -275.9492967565419,84.84509232798283 -358.14423433748146,89.73045068624886 -439.64679797145624,93.02999477395113 -520.1002808148281,95.4384273852926 -599.1445046901513,97.31647535460424 -676.2358818769462,98.81063179767507 -751.3409657831587,100.07617771995163 -824.2087672338118,101.17251941705561 -894.4465814696498,102.11543878532882 -961.9015451678036,102.94453631586998 -1026.0112737521583,103.63835661864168 -1086.2610633094212,104.18877957193807 -1141.4900032393818,104.51732850056433 -1190.3376703335655,104.54735678589765 -1230.8999662260915,104.1688287897138 -1260.375390697363,103.20319203286938 -1275.354422403355,101.46246817378582 -1271.8827617273287,99.11692436681635 -1245.9059108698596,96.49009546562475 -1193.9967137923225,93.45834266417528 -1113.9397490286995,89.49783586366624 -1005.273267675585,83.87176811707455 -869.4101036003673,75.83190739325453 -709.8100230053759,64.88004605331857 -532.1946243370355,50.98243352318318 -346.53986082379265,34.85525518071079 -180.66763939805125,19.358679206883078 diff --git a/test/itr_figure22b_barc.jl b/test/itr_figure22b_barc.jl new file mode 100644 index 00000000..2dc263f5 --- /dev/null +++ b/test/itr_figure22b_barc.jl @@ -0,0 +1,234 @@ +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using DelimitedFiles: readdlm +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, ConstantVelocityTransformation +using FileIO: load +using FLOWMath: akima +using StaticArrays: @SVector +using Test + +data = load(joinpath(@__DIR__, "gen_bpmjl_data", "figure22b.jld2")) +rho = data["rho"] +asound = data["asound"] +mu = data["mu"] +Vinf = data["Vinf"] +omega = data["omega"] +B = data["B"] +Rhub = data["Rhub"] +Rtip = data["Rtip"] +radii = data["radii"] +chord = data["chord"] +twist = data["twist"] +alpha = data["alpha"] +U = data["U"] +hs = data["hs"] +num_src_times_blade_pass = data["num_src_times_blade_pass"] +Psis = data["Psis"] + +nu = mu/rho +num_radial = length(radii) +dradii = AcousticAnalogies.get_dradii(radii, Rhub, Rtip) + +# Get the source time, which will be one blade pass worth of time, each blade pass with `num_src_times_blade_pass` steps per blade pass. +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +num_blade_pass = 1 +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# Now let's define the coordinate system. +# I'm going to do my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# And the blades will be rotating about the positive x axis at a rate of `omega`. +rot_trans = SteadyRotXTransformation(t0, omega, 0.0) + +# The hub/rotation axis of the blades will start at the origin at time `t0`, and translate in the positive x direction at a speed of `Vinf`. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] # m/s +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Now I can put the two transformations together: +trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) + +# Paper doesn't specify the microphone used for Figure 22, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: +# > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). +# So I'll just assume that holds for Figure 22. +# For the coordinate system, I'm doing my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane, so this should be good. +# But it will of course be moving with the same freestream in the positive x direction. +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# The observer is moving in the positive x direction at Vinf, at the origin at time t0. +t0_obs = 0.0 +x0_obs = @SVector [r_obs*sin(theta_obs), r_obs*cos(theta_obs), 0.0] +v_obs = @SVector [Vinf, 0.0, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# In the text describing Figure 22, "For these predictions, the trip flag was set to “tripped”, due to the rough surface quality of the blade." +bl = AcousticAnalogies.TrippedN0012BoundaryLayer() +# In the Figure 22 caption, "for these predictions, bluntness thickness H was set to 0.8 mm and trailing edge angle Ψ was set to 16 degrees." +h = 0.8e-3 # meters +Psi = 16*pi/180 # radians + +# I don't see any discussion for what type of tip was used for the tip vortex noise. +# The flat tip seems to match the PAS+ROTONET+BARC predictions well. +blade_tip = AcousticAnalogies.FlatTip() + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +hs_rs = reshape(hs, 1, :, 1) +Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +# bls_rs = reshape(bls, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] +Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +# bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +chord_rs_with_tip = @view chord_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +hs_rs_with_tip = @view hs_rs[:, end:end, :] +Psis_rs_with_tip = @view Psis_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +# bls_rs_with_tip = @view bls_rs[:, end:end, :] + +positive_x_rotation = true +ses_no_tip = CombinedNoTipBroadbandSourceElement.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord_rs_no_tip, twist_rs_no_tip, hs_rs_no_tip, Psis_rs_no_tip, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, Ref(bl), positive_x_rotation) .|> trans + +ses_with_tip = CombinedWithTipBroadbandSourceElement.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord_rs_with_tip, twist_rs_with_tip, hs_rs_with_tip, Psis_rs_with_tip, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, Ref(bl), Ref(blade_tip), positive_x_rotation) .|> trans + +# It's more convinient to cat all the sources together. +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# The predictions in Figure 22b appear to be on 1/3 octave, ranging from about 200 Hz to 60,000 Hz. +# But let's expand the range of source frequencies to account for Doppler shifting. +freqs_src = AcousticMetrics.ExactProportionalBands{3, :center}(10.0, 200000.0) +freqs_obs = AcousticMetrics.ExactProportionalBands{3, :center}(200.0, 60000.0) + +# Now we can do a noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) + +# This seperates out the noise prediction for each source-observer combination into the different sources. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_lblvss = AcousticAnalogies.pbs_lblvs.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Now, need to combine each broadband noise prediction. +# The time axis the axis over which the time varies for each source. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 22b is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l + +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_lblvs = pbs_lblvs .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_lblvs = 10 .* log10.(nb_lblvs./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) + +# Now I should be able to compare to the BARC data. +# Need to read it in first. +data_pressure_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-TBL-TE-pressure-2.csv"), ',') +freq_pressure_barc = data_pressure_barc[:, 1] +spl_pressure_barc = data_pressure_barc[:, 2] + +data_suction_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-TBL-TE-suction-2.csv"), ',') +freq_suction_barc = data_suction_barc[:, 1] +spl_suction_barc = data_suction_barc[:, 2] + +data_separation_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-separation-2.csv"), ',') +freq_separation_barc = data_separation_barc[:, 1] +spl_separation_barc = data_separation_barc[:, 2] + +data_lblvs_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-LBLVS.csv"), ',') +freq_lblvs_barc = data_lblvs_barc[:, 1] +spl_lblvs_barc = data_lblvs_barc[:, 2] + +data_teb_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-BVS.csv"), ',') +freq_teb_barc = data_teb_barc[:, 1] +spl_teb_barc = data_teb_barc[:, 2] + +data_tip_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure22b-tip_vortex_shedding.csv"), ',') +freq_tip_barc = data_tip_barc[:, 1] +spl_tip_barc = data_tip_barc[:, 2] + +# Interpolate the AcousticAnalogies.jl data onto the frequencies from the BARC CSV file. +spl_pressure_interp = akima(freqs_obs, spl_pressure, freq_pressure_barc) +spl_suction_interp = akima(freqs_obs, spl_suction, freq_suction_barc) +spl_separation_interp = akima(freqs_obs, spl_alpha, freq_separation_barc) +spl_lblvs_interp = akima(freqs_obs, spl_lblvs, freq_lblvs_barc) +spl_teb_interp = akima(freqs_obs, spl_teb, freq_teb_barc) +spl_tip_interp = akima(freqs_obs, spl_tip, freq_tip_barc) + +# Now compare. +@test maximum(abs.(spl_pressure_interp .- spl_pressure_barc)) < 0.543 + +# Lower frequencies don't line up as well as higher. +# Not sure why. +@test abs(spl_suction_interp[1] - spl_suction_barc[1]) < 3.59 +@test abs(spl_suction_interp[2] - spl_suction_barc[2]) < 2.71 +@test abs(spl_suction_interp[3] - spl_suction_barc[3]) < 1.24 +@test maximum(abs.(spl_suction_interp[4:end] .- spl_suction_barc[4:end])) < 0.462 + +# Lower frequencies don't line up as well as higher. +# Not sure why. +@test all(abs.(spl_separation_interp[1:12] .- spl_separation_barc[1:12]) .< [8.54, 7.63, 7.48, 6.82, 6.51, 6.60, 5.99, 4.87, 4.21, 2.58, 1.29, 0.299]) +@test maximum(abs.(spl_separation_interp[13:end] .- spl_separation_barc[13:end])) < 0.466 + +@test all(abs.(spl_teb_interp .- spl_teb_barc) .< [0.134, 0.349, 0.424, 0.133, 0.187, 0.603, 0.244, 2.60]) +@test all(abs.(spl_tip_interp .- spl_tip_barc) .< [0.0641, 0.0426, 0.170, 0.0923, 0.116, 0.231, 0.228, 0.160, 0.121]) + diff --git a/test/itr_figure22b_bpmjl.jl b/test/itr_figure22b_bpmjl.jl new file mode 100644 index 00000000..0b199fb2 --- /dev/null +++ b/test/itr_figure22b_bpmjl.jl @@ -0,0 +1,292 @@ +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, SteadyRotYTransformation, SteadyRotZTransformation, ConstantVelocityTransformation +using FileIO: load +using FLOWMath: Akima +using StaticArrays +using Test + +# tip vortex noise correction data based on "Airfoil Tip Vortex Formation Noise" +# Copied from BPM.jl (would like to add BPM.jl as a dependency if it's registered in General some day). +const bm_tip_alpha_aspect_data = [2.0,2.67,4.0,6.0,12.0,24.0] +const bm_tip_alpha_aratio_data = [0.54,0.62,0.71,0.79,0.89,0.95] +const bm_tip_alpha_aspect_ratio_correction = Akima(bm_tip_alpha_aspect_data, bm_tip_alpha_aratio_data) + +function bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + # compute tip lift curve slope + if aspect_ratio < 2.0 + aratio = 0.5*one(aspect_ratio) + elseif 2.0 <= aspect_ratio <= 24.0 + aratio = bm_tip_alpha_aspect_ratio_correction(aspect_ratio) + elseif aspect_ratio > 24.0 + aratio = 1.0*one(aspect_ratio) + end + + return aratio +end + +struct BMTipAlphaCorrection{TCorrection} <: AbstractTipAlphaCorrection + correction::TCorrection + + function BMTipAlphaCorrection(aspect_ratio) + # correction = BPM._tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + correction = bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + return new{typeof(correction)}(correction) + end +end + +function AcousticAnalogies.tip_vortex_alpha_correction(blade_tip::AbstractBladeTip{<:BMTipAlphaCorrection}, alphatip) + a0l = AcousticAnalogies.alpha_zerolift(blade_tip) + correction_factor = AcousticAnalogies.tip_alpha_correction(blade_tip).correction + return correction_factor * (alphatip - a0l) + a0l +end + +data = load(joinpath(@__DIR__, "gen_bpmjl_data", "figure22b.jld2")) +rho = data["rho"] +asound = data["asound"] +mu = data["mu"] +Vinf = data["Vinf"] +omega = data["omega"] +B = data["B"] +Rhub = data["Rhub"] +Rtip = data["Rtip"] +radii = data["radii"] +chord = data["chord"] +twist = data["twist"] +alpha = data["alpha"] +U = data["U"] +hs = data["hs"] +Psis = data["Psis"] +num_src_times_blade_pass = data["num_src_times_blade_pass"] +tripped_flags = data["tripped_flags"] + +num_radial = length(radii) + +nu = mu/rho +dradii = AcousticAnalogies.get_dradii(radii, Rhub, Rtip) + +# Get some transform stuff. +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +num_blade_pass = 1 +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# I don't see any discussion for what type of tip was used for the tip vortex noise. +# FlatTip with no CCBlade.jl tip correction or BPM-style tip correction seems to match the BARC predictions well. +# blade_tip = AcousticAnalogies.FlatTip(AcousticAnalogies.NoTipAlphaCorrection()) +# BPM.jl uses a different tip alpha correction which appears to require the blade aspect ratio, defined as the blade radius divided by the average chord. +cbar = sum(chord .* dradii) / (Rtip - Rhub) +aspect_ratio = Rtip/cbar +alpha0lift = 0.0 +blade_tip = AcousticAnalogies.FlatTip(BMTipAlphaCorrection(aspect_ratio), alpha0lift) + +# Getting the coordinate system consistent with BPM.jl is a bit tricky. +# Here's a bit of code from BPM.jl: +# +# # Calculate the trailing edge position relative to the hub +# xs = sin(beta)*d - cos(beta)*(c - c1) +# zs = cos(beta)*d + sin(beta)*(c - c1) +# +# OK, so that shows me that the blade is initially aligned with the z axis, rotating to the positive x direction. +# And I know the blades are rotating about the positive y axis. +# So that's the answer for the BPM.jl coordinate system: +# +# * freestream in the positive y axis direction. +# * first blade initially aligned with the positive z axis, rotating about the positive y axis. +# +# Now, what do I need to do with AcousticAnalogies to make that happen? +# I want the blades to be translating in the negative y direction, rotating about the positive y axis. +# I usually start with the blades rotating about either the positive or negative x axis, moving in the direction of the positive x axis. +# I think the answer is, +# +# * start out with the blades rotating about the negative x axis, moving in the direction of the positive x axis +# * rotate 90° about the negative z axis. +# After this, the blades will be moving in the negative y direction, rotating about the positive y axis, which is good. +# But I want the first blade to be aligned with the positive z axis, and stopping here would mean it's aligned with the positive x axis. +# * rotate 90° about the negative y axis. +# This will put the first blade in line with the positive z axis. + +# So, let's do what we said we need to do. +# Start with a rotation about the negative x axis. +positive_x_rotation = false +rot_trans = SteadyRotXTransformation(t0, omega*ifelse(positive_x_rotation, 1, -1), 0) + +# Then translate along the positive x axis. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Then a 90° rotation about the negative z axis. +trans_z90deg = SteadyRotZTransformation(0.0, 0.0, -0.5*pi) + +# Then a 90° rotation about the negative y axis. +trans_y90deg = SteadyRotYTransformation(0.0, 0.0, -0.5*pi) + +# Put them all together: +trans = compose.(src_times, Ref(trans_y90deg), + compose.(src_times, Ref(trans_z90deg), + compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)))) + +# Use the M_c = 0.8*M that BPM.jl and the BPM report use. +U = @. 0.8*sqrt(Vinf^2 + (omega*radii)^2) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) .* ifelse(positive_x_rotation, 1, -1) + +bls = [ifelse(tf, + AcousticAnalogies.TrippedN0012BoundaryLayer(), + AcousticAnalogies.UntrippedN0012BoundaryLayer()) for tf in tripped_flags] + +# Need to do the LBLVS with the untripped boundary layer to match what BPM.jl is doing. +# bls_lblvs = fill(AcousticAnalogies.UntrippedN0012BoundaryLayer(), num_radial) +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# So, the docstring for BPM.jl says that `V` argument is the wind velocity in the y direction. +# So I guess we should assume that the blades are rotating about the y axis. +# And if the freestream velocity is in the positive y axis, then, from the perspective of the fluid, the blades are translating in the negative y direction. +# And I want the observer to be downstream/behind the blades, so that would mean they would have a positive y position. +# So I want to rotate the observer around the positive x axis, so I'm going to switch the sign on `theta_obs`. +t0_obs = 0.0 +x0_obs = [0.0, r_obs*sin(-theta_obs), r_obs*cos(-theta_obs)] +# The observer is moving in the same direction as the blades, which is the negative y axis. +v_obs = @SVector [0.0, -Vinf, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +hs_rs = reshape(hs, 1, :, 1) +Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +bls_rs = reshape(bls, 1, :, 1) +# bls_untripped_rs = reshape(bls_lblvs, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] +Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +chord_rs_with_tip = @view chord_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +hs_rs_with_tip = @view hs_rs[:, end:end, :] +Psis_rs_with_tip = @view Psis_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +bls_rs_with_tip = @view bls_rs[:, end:end, :] + +direct = AcousticAnalogies.BPMDirectivity +use_UInduction = false +use_Doppler = false +mach_correction = AcousticAnalogies.NoMachCorrection +ses_no_tip = CombinedNoTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord_rs_no_tip, twist_rs_no_tip, hs_rs_no_tip, Psis_rs_no_tip, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans + +ses_with_tip = CombinedWithTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord_rs_with_tip, twist_rs_with_tip, hs_rs_with_tip, Psis_rs_with_tip, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + +# Need to do the LBLVS with the untripped boundary layer to match what BPM.jl is doing. +lblvs_ses_untripped = AcousticAnalogies.LBLVSSourceElement{direct,use_UInduction,use_Doppler}.(asound, nu, radii_rs, θs_rs, dradii_rs, chord_rs, twist_rs, Us_rs, alphas_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# # Write out the source elements. +# pvd_no_tip = AcousticAnalogies.to_paraview_collection(joinpath(@__DIR__, "figure22b-no_tip"), ses_no_tip) +# pvd_with_tip = AcousticAnalogies.to_paraview_collection(joinpath(@__DIR__, "figure22b-with_tip"), ses_with_tip) +# pvd_all = AcousticAnalogies.to_paraview_collection(joinpath(@__DIR__, "figure22b-all"), (ses_no_tip, ses_with_tip); observers=(obs,)) + +# Put the source elements together: +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Define the frequencies we'd like to evaluate. +# BPM.jl uses the approximate 1/3rd-octave bands. +freqs_obs = AcousticMetrics.ApproximateThirdOctaveCenterBands(100.0, 40000.0) +freqs_src = freqs_obs + +# Now do the noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss_untripped = AcousticAnalogies.noise.(lblvs_ses_untripped, Ref(obs), Ref(freqs_src)) + +# Separate out each source. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Combine each noise prediction. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs_untripped = AcousticMetrics.combine(pbs_lblvss_untripped, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 22b is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# (Dividing the MSP by Δf_pbs aka the 1/3 octave spacing is like getting a power-spectral density, then multiplying by the narrowband spacing Δf_nb gives us the MSP associated with the narrowband.) +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs +nb_lblvs_untripped = pbs_lblvs_untripped .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) +spl_lblvs_untripped = 10 .* log10.(nb_lblvs_untripped./(pref^2)) + +# Read in the BPM.jl data. +freq_bpmjl = data["freqs"] +spl_pressure_bpmjl = data["spl_nb_pressure"] +spl_suction_bpmjl = data["spl_nb_suction"] +spl_separation_bpmjl = data["spl_nb_separation"] +spl_lblvs_bpmjl = data["spl_nb_lblvs"] +spl_blunt_bpmjl = data["spl_nb_blunt"] +spl_tip_bpmjl = data["spl_nb_tip"] + +# The frequencies in the CSV file should match the observer frequencies we're using. +@test all(freqs_obs .≈ freq_bpmjl) + +# Only look at the SPLs that are actually significant, i.e. greater than 10 dB. +@test maximum(abs.(spl_pressure[spl_pressure_bpmjl .> 10] .- spl_pressure_bpmjl[spl_pressure_bpmjl .> 10])) < 0.77 +@test maximum(abs.(spl_suction[spl_suction_bpmjl .> 10] .- spl_suction_bpmjl[spl_suction_bpmjl .> 10])) < 0.78 +@test maximum(abs.(spl_alpha[spl_separation_bpmjl .> 10] .- spl_separation_bpmjl[spl_separation_bpmjl .> 10])) < 0.78 +@test maximum(abs.(spl_lblvs_untripped[spl_lblvs_bpmjl .> 10] .- spl_lblvs_bpmjl[spl_lblvs_bpmjl .> 10])) < 0.81 +@test maximum(abs.(spl_teb[spl_blunt_bpmjl .> 10] .- spl_blunt_bpmjl[spl_blunt_bpmjl .> 10])) < 0.81 +@test maximum(abs.(spl_tip[spl_tip_bpmjl .> 10] .- spl_tip_bpmjl[spl_tip_bpmjl .> 10])) < 1.25 + diff --git a/test/itr_figure23c_barc.jl b/test/itr_figure23c_barc.jl new file mode 100644 index 00000000..7860d8df --- /dev/null +++ b/test/itr_figure23c_barc.jl @@ -0,0 +1,261 @@ +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using DelimitedFiles: readdlm +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, ConstantVelocityTransformation +using FileIO: load +using FLOWMath: akima +using StaticArrays: @SVector +using Test + +data = load(joinpath(@__DIR__, "gen_bpmjl_data", "figure23c.jld2")) +rho = data["rho"] +asound = data["asound"] +mu = data["mu"] +Vinf = data["Vinf"] +omega = data["omega"] +B = data["B"] +Rhub = data["Rhub"] +Rtip = data["Rtip"] +radii = data["radii"] +chord = data["chord"] +twist = data["twist"] +alpha = data["alpha"] +U = data["U"] +hs = data["hs"] +num_src_times_blade_pass = data["num_src_times_blade_pass"] +Psis = data["Psis"] + +nu = mu/rho +num_radial = length(radii) +dradii = AcousticAnalogies.get_dradii(radii, Rhub, Rtip) + +# Get the source time, which will be one blade pass worth of time, each blade pass with `num_src_times_blade_pass` steps per blade pass. +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +num_blade_pass = 1 +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# Now let's define the coordinate system. +# I'm going to do my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# And the blades will be rotating about the positive x axis at a rate of `omega`. +rot_trans = SteadyRotXTransformation(t0, omega, 0.0) + +# The hub/rotation axis of the blades will start at the origin at time `t0`, and translate in the positive x direction at a speed of `Vinf`. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] # m/s +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Now I can put the two transformations together: +trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) + +# Paper doesn't specify the microphone used for Figure 23, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: +# > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). +# So I'll just assume that holds for Figure 23. +# For the coordinate system, I'm doing my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane, so this should be good. +# But it will of course be moving with the same freestream in the positive x direction. +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# The observer is moving in the positive x direction at Vinf, at the origin at time t0. +t0_obs = 0.0 +x0_obs = @SVector [r_obs*sin(theta_obs), r_obs*cos(theta_obs), 0.0] +v_obs = @SVector [Vinf, 0.0, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# So, for the boundary layer, we want to use untripped for the 95% of the blade from the hub to almost tip, and then tripped for the last 5% of the blade at the tip. +num_untripped = Int(round(0.95*num_radial)) +num_tripped = num_radial - num_untripped +bls_untripped = fill(AcousticAnalogies.UntrippedN0012BoundaryLayer(), num_untripped) +bls_tripped = fill(AcousticAnalogies.TrippedN0012BoundaryLayer(), num_tripped) +bls = vcat(bls_untripped, bls_tripped) + +# Now, the other trick: need to only include LBLVS noise for elements where the Reynolds number is < 160000. +# So, we need the Reynolds number for each section. +Re_c = @. U * chord / nu +# So now we want to extract the radial stations that meet that < 160000 condition. +low_Re_c = 160000 +mask_low_Re_c = Re_c .< low_Re_c + +# And we're also going to use the untripped boundary layer for the LBLVS source. +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +# In the Figure 23 caption, "for these predictions, bluntness thickness H was set to 0.5 mm and trailing edge angle Ψ was set to 14 degrees." +h = 0.5e-3 # meters +Psi = 14*pi/180 # radians + +# I don't see any discussion for what type of tip was used for the tip vortex noise. +# The flat tip seems to match the PAS+ROTONET+BARC predictions well. +blade_tip = AcousticAnalogies.FlatTip() + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +hs_rs = reshape(hs, 1, :, 1) +Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +bls_rs = reshape(bls, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] +Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +chord_rs_with_tip = @view chord_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +hs_rs_with_tip = @view hs_rs[:, end:end, :] +Psis_rs_with_tip = @view Psis_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +bls_rs_with_tip = @view bls_rs[:, end:end, :] + +positive_x_rotation = true +ses_no_tip = CombinedNoTipBroadbandSourceElement.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord_rs_no_tip, twist_rs_no_tip, hs_rs_no_tip, Psis_rs_no_tip, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans +ses_with_tip = CombinedWithTipBroadbandSourceElement.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord_rs_with_tip, twist_rs_with_tip, hs_rs_with_tip, Psis_rs_with_tip, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + +# It's more convinient to cat all the sources together. +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Need to do the LBLVS stuff separately. +# Grab the parts of the inputs that correspond to the low Reynolds number stations. +radii_lblvs = @view radii[mask_low_Re_c] +dradii_lblvs = @view dradii[mask_low_Re_c] +chord_lblvs = @view chord[mask_low_Re_c] +twist_lblvs = @view twist[mask_low_Re_c] +hs_lblvs = @view hs[mask_low_Re_c] +Psis_lblvs = @view Psis[mask_low_Re_c] +Us_lblvs = @view U[mask_low_Re_c] +alphas_lblvs = @view alpha[mask_low_Re_c] + +# And do the reshaping. +radii_lblvs_rs = reshape(radii_lblvs, 1, :, 1) +dradii_lblvs_rs = reshape(dradii_lblvs, 1, :, 1) +chord_lblvs_rs = reshape(chord_lblvs, 1, :, 1) +twist_lblvs_rs = reshape(twist_lblvs, 1, :, 1) +hs_lblvs_rs = reshape(hs_lblvs, 1, :, 1) +Psis_lblvs_rs = reshape(Psis_lblvs, 1, :, 1) +Us_lblvs_rs = reshape(Us_lblvs, 1, :, 1) +alphas_lblvs_rs = reshape(alphas_lblvs, 1, :, 1) + +# Now we can create the source elements. +ses_lblvs = LBLVSSourceElement.(asound, nu, radii_lblvs_rs, θs_rs, dradii_lblvs_rs, chord_lblvs_rs, twist_lblvs_rs, Us_lblvs_rs, alphas_lblvs_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# The predictions in Figure 23c appear to be on 1/3 octave, ranging from about 200 Hz to 60,000 Hz. +# But let's expand the range of source frequencies to account for Doppler shifting. +freqs_src = AcousticMetrics.ExactProportionalBands{3, :center}(10.0, 200000.0) +freqs_obs = AcousticMetrics.ExactProportionalBands{3, :center}(200.0, 60000.0) + +# Now we can do a noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(ses_lblvs, Ref(obs), Ref(freqs_src)) + +# This seperates out the noise prediction for each source-observer combination into the different sources. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Now, need to combine each broadband noise prediction. +# The time axis the axis over which the time varies for each source. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 23c is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l + +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_lblvs = pbs_lblvs .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_lblvs = 10 .* log10.(nb_lblvs./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) + +# Now I should be able to compare to the BARC data. +# Need to read it in first. +data_pressure_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-TBL-TE-pressure.csv"), ',') +freq_pressure_barc = data_pressure_barc[:, 1] +spl_pressure_barc = data_pressure_barc[:, 2] + +data_suction_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-TBL-TE-suction.csv"), ',') +freq_suction_barc = data_suction_barc[:, 1] +spl_suction_barc = data_suction_barc[:, 2] + +data_separation_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-separation.csv"), ',') +freq_separation_barc = data_separation_barc[:, 1] +spl_separation_barc = data_separation_barc[:, 2] + +data_lblvs_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-LBLVS.csv"), ',') +freq_lblvs_barc = data_lblvs_barc[:, 1] +spl_lblvs_barc = data_lblvs_barc[:, 2] + +data_teb_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-BVS.csv"), ',') +freq_teb_barc = data_teb_barc[:, 1] +spl_teb_barc = data_teb_barc[:, 2] + +data_tip_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure23c-tip_vortex_shedding.csv"), ',') +freq_tip_barc = data_tip_barc[:, 1] +spl_tip_barc = data_tip_barc[:, 2] + +# Interpolate the AcousticAnalogies.jl data onto the frequencies from the BARC CSV file. +spl_pressure_interp = akima(freqs_obs, spl_pressure, freq_pressure_barc) +spl_suction_interp = akima(freqs_obs, spl_suction, freq_suction_barc) +spl_separation_interp = akima(freqs_obs, spl_alpha, freq_separation_barc) +spl_lblvs_interp = akima(freqs_obs, spl_lblvs, freq_lblvs_barc) +spl_teb_interp = akima(freqs_obs, spl_teb, freq_teb_barc) +spl_tip_interp = akima(freqs_obs, spl_tip, freq_tip_barc) + +# Now compare. +@test all(abs.(spl_pressure_interp .- spl_pressure_barc) .< [1.918, 1.880, 1.484, 1.65, 1.496, 1.170, 1.043, 0.729, 0.406, 0.406, 1.49, 1.142, 1.131]) +@test all(abs.(spl_suction_interp .- spl_suction_barc) .< [2.193, 2.066, 1.984, 1.961, 1.686, 1.423, 1.255, 1.060, 0.339, 0.101, 0.149, 0.749, 1.363, 1.220, 1.547, 1.979]) +@test all(abs.(spl_separation_interp .- spl_separation_barc) .< [17.002, 14.84, 12.09, 10.20, 9.42, 8.371, 7.763, 7.504, 7.099, 6.124, 5.307, 2.843, 2.326, 2.560, 2.583, 2.088, 1.448, 0.628, 0.112, 0.873, 1.971]) +@test all(abs.(spl_lblvs_interp .- spl_lblvs_barc) .< [3.369, 3.795, 3.758, 3.797, 3.765, 3.749, 3.545, 3.927, 3.922, 3.652, 3.571]) +@test all(abs.(spl_teb_interp .- spl_teb_barc) .< [0.274, 0.135, 0.211, 0.127, 0.0584, 2.200, 2.981]) +@test all(abs.(spl_tip_interp .- spl_tip_barc) .< [0.590, 0.659, 0.625, 0.460, 0.240, 0.467, 0.434, 0.0235, 0.0468]) diff --git a/test/itr_figure23c_bpmjl.jl b/test/itr_figure23c_bpmjl.jl new file mode 100644 index 00000000..4eac5cb2 --- /dev/null +++ b/test/itr_figure23c_bpmjl.jl @@ -0,0 +1,312 @@ +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, SteadyRotYTransformation, SteadyRotZTransformation, ConstantVelocityTransformation +using FileIO: load +using FLOWMath: Akima +using StaticArrays: @SVector +using Test + +# tip vortex noise correction data based on "Airfoil Tip Vortex Formation Noise" +# Copied from BPM.jl (would like to add BPM.jl as a dependency if it's registered in General some day). +const bm_tip_alpha_aspect_data = [2.0,2.67,4.0,6.0,12.0,24.0] +const bm_tip_alpha_aratio_data = [0.54,0.62,0.71,0.79,0.89,0.95] +const bm_tip_alpha_aspect_ratio_correction = Akima(bm_tip_alpha_aspect_data, bm_tip_alpha_aratio_data) + +function bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + # compute tip lift curve slope + if aspect_ratio < 2.0 + aratio = 0.5*one(aspect_ratio) + elseif 2.0 <= aspect_ratio <= 24.0 + aratio = bm_tip_alpha_aspect_ratio_correction(aspect_ratio) + elseif aspect_ratio > 24.0 + aratio = 1.0*one(aspect_ratio) + end + + return aratio +end + +struct BMTipAlphaCorrection{TCorrection} <: AbstractTipAlphaCorrection + correction::TCorrection + + function BMTipAlphaCorrection(aspect_ratio) + # correction = BPM._tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + correction = bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + return new{typeof(correction)}(correction) + end +end + +function AcousticAnalogies.tip_vortex_alpha_correction(blade_tip::AbstractBladeTip{<:BMTipAlphaCorrection}, alphatip) + a0l = AcousticAnalogies.alpha_zerolift(blade_tip) + correction_factor = AcousticAnalogies.tip_alpha_correction(blade_tip).correction + return correction_factor * (alphatip - a0l) + a0l +end + + +data = load(joinpath(@__DIR__, "gen_bpmjl_data", "figure23c.jld2")) +rho = data["rho"] +asound = data["asound"] +mu = data["mu"] +Vinf = data["Vinf"] +omega = data["omega"] +B = data["B"] +Rhub = data["Rhub"] +Rtip = data["Rtip"] +radii = data["radii"] +chord = data["chord"] +twist = data["twist"] +alpha = data["alpha"] +U = data["U"] +hs = data["hs"] +Psis = data["Psis"] +num_src_times_blade_pass = data["num_src_times_blade_pass"] +tripped_flags = data["tripped_flags"] +lblvs_flags = data["lblvs_flags"] + +num_radial = length(radii) + +nu = mu/rho +dradii = AcousticAnalogies.get_dradii(radii, Rhub, Rtip) + +# Get some transform stuff. +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +num_blade_pass = 1 +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# I don't see any discussion for what type of tip was used for the tip vortex noise. +# FlatTip with no CCBlade.jl tip correction or BPM-style tip correction seems to match the BARC predictions well. +# blade_tip = AcousticAnalogies.FlatTip(AcousticAnalogies.NoTipAlphaCorrection()) +# BPM.jl uses a different tip alpha correction which appears to require the blade aspect ratio, defined as the blade radius divided by the average chord. +cbar = sum(chord .* dradii) / (Rtip - Rhub) +aspect_ratio = Rtip/cbar +alpha0lift = 0.0 +blade_tip = AcousticAnalogies.FlatTip(BMTipAlphaCorrection(aspect_ratio), alpha0lift) + +# Getting the coordinate system consistent with BPM.jl is a bit tricky. +# Here's a bit of code from BPM.jl: +# +# # Calculate the trailing edge position relative to the hub +# xs = sin(beta)*d - cos(beta)*(c - c1) +# zs = cos(beta)*d + sin(beta)*(c - c1) +# +# OK, so that shows me that the blade is initially aligned with the z axis, rotating to the positive x direction. +# And I know the blades are rotating about the positive y axis. +# So that's the answer for the BPM.jl coordinate system: +# +# * freestream in the positive y axis direction. +# * first blade initially aligned with the positive z axis, rotating about the positive y axis. +# +# Now, what do I need to do with AcousticAnalogies to make that happen? +# I want the blades to be translating in the negative y direction, rotating about the positive y axis. +# I usually start with the blades rotating about either the positive or negative x axis, moving in the direction of the positive x axis. +# I think the answer is, +# +# * start out with the blades rotating about the negative x axis, moving in the direction of the positive x axis +# * rotate 90° about the negative z axis. +# After this, the blades will be moving in the negative y direction, rotating about the positive y axis, which is good. +# But I want the first blade to be aligned with the positive z axis, and stopping here would mean it's aligned with the positive x axis. +# * rotate 90° about the negative y axis. +# This will put the first blade in line with the positive z axis. + +# So, let's do what we said we need to do. +# Start with a rotation about the negative x axis. +positive_x_rotation = false +rot_trans = SteadyRotXTransformation(t0, omega*ifelse(positive_x_rotation, 1, -1), 0) + +# Then translate along the positive x axis. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Then a 90° rotation about the negative z axis. +trans_z90deg = SteadyRotZTransformation(0.0, 0.0, -0.5*pi) + +# Then a 90° rotation about the negative y axis. +trans_y90deg = SteadyRotYTransformation(0.0, 0.0, -0.5*pi) + +# Put them all together: +trans = compose.(src_times, Ref(trans_y90deg), + compose.(src_times, Ref(trans_z90deg), + compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)))) + +# Use the M_c = 0.8*M that BPM.jl and the BPM report use. +U = @. 0.8*sqrt(Vinf^2 + (omega*radii)^2) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) .* ifelse(positive_x_rotation, 1, -1) + +bls = [ifelse(tf, + AcousticAnalogies.TrippedN0012BoundaryLayer(), + AcousticAnalogies.UntrippedN0012BoundaryLayer()) for tf in tripped_flags] + +# Need to do the LBLVS with the untripped boundary layer to match what BPM.jl is doing. +# bls_lblvs = fill(AcousticAnalogies.UntrippedN0012BoundaryLayer(), num_radial) +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# So, the docstring for BPM.jl says that `V` argument is the wind velocity in the y direction. +# So I guess we should assume that the blades are rotating about the y axis. +# And if the freestream velocity is in the positive y axis, then, from the perspective of the fluid, the blades are translating in the negative y direction. +# And I want the observer to be downstream/behind the blades, so that would mean they would have a positive y position. +# So I want to rotate the observer around the positive x axis, so I'm going to switch the sign on `theta_obs`. +t0_obs = 0.0 +x0_obs = [0.0, r_obs*sin(-theta_obs), r_obs*cos(-theta_obs)] +# The observer is moving in the same direction as the blades, which is the negative y axis. +v_obs = @SVector [0.0, -Vinf, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +hs_rs = reshape(hs, 1, :, 1) +Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +bls_rs = reshape(bls, 1, :, 1) +# bls_untripped_rs = reshape(bls_lblvs, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] +Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +chord_rs_with_tip = @view chord_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +hs_rs_with_tip = @view hs_rs[:, end:end, :] +Psis_rs_with_tip = @view Psis_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +bls_rs_with_tip = @view bls_rs[:, end:end, :] + +direct = AcousticAnalogies.BPMDirectivity +use_UInduction = false +use_Doppler = false +mach_correction = AcousticAnalogies.NoMachCorrection +ses_no_tip = CombinedNoTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord_rs_no_tip, twist_rs_no_tip, hs_rs_no_tip, Psis_rs_no_tip, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans + +ses_with_tip = CombinedWithTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord_rs_with_tip, twist_rs_with_tip, hs_rs_with_tip, Psis_rs_with_tip, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + +# Need to do the LBLVS with the untripped boundary layer to match what BPM.jl is doing, and only where `lblvs_flags` is true. +# So extract the radial locations where that's true. +radii_lblvs = @view radii[lblvs_flags] +dradii_lblvs = @view dradii[lblvs_flags] +chord_lblvs = @view chord[lblvs_flags] +twist_lblvs = @view twist[lblvs_flags] +Us_lblvs = @view U[lblvs_flags] +alphas_lblvs = @view alpha[lblvs_flags] +# bls_lblvs = @view bls_lblvs[lblvs_flags] + +# Now do the usual reshaping. +radii_lblvs_rs = reshape(radii_lblvs, 1, :, 1) +dradii_lblvs_rs = reshape(dradii_lblvs, 1, :, 1) +chord_lblvs_rs = reshape(chord_lblvs, 1, :, 1) +twist_lblvs_rs = reshape(twist_lblvs, 1, :, 1) +Us_lblvs_rs = reshape(Us_lblvs, 1, :, 1) +alphas_lblvs_rs = reshape(alphas_lblvs, 1, :, 1) +# bls_lblvs_rs = reshape(bls_lblvs, 1, :, 1) + +# Now we can construct the lblvs source elements. +lblvs_ses = AcousticAnalogies.LBLVSSourceElement{direct,use_UInduction,use_Doppler}.(asound, nu, radii_lblvs_rs, θs_rs, dradii_lblvs_rs, chord_lblvs_rs, twist_lblvs_rs, Us_lblvs_rs, alphas_lblvs_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# Write out the source elements. +# pvd_no_tip = AcousticAnalogies.to_paraview_collection(joinpath(@__DIR__, "figure23c-no_tip"), ses_no_tip) +# pvd_with_tip = AcousticAnalogies.to_paraview_collection(joinpath(@__DIR__, "figure23c-with_tip"), ses_with_tip) +# pvd_all = AcousticAnalogies.to_paraview_collection(joinpath(@__DIR__, "figure23c-all"), (ses_no_tip, ses_with_tip, lblvs_ses); observers=(obs,)) + +# Put the source elements together: +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Define the frequencies we'd like to evaluate. +# BPM.jl uses the approximate 1/3rd-octave bands. +freqs_obs = AcousticMetrics.ApproximateThirdOctaveCenterBands(100.0, 40000.0) +freqs_src = freqs_obs + +# Now do the noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(lblvs_ses, Ref(obs), Ref(freqs_src)) + +# Separate out each source. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Combine each noise prediction. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 23c is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# (Dividing the MSP by Δf_pbs aka the 1/3 octave spacing is like getting a power-spectral density, then multiplying by the narrowband spacing Δf_nb gives us the MSP associated with the narrowband.) +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs +nb_lblvs = pbs_lblvs .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) +spl_lblvs = 10 .* log10.(nb_lblvs./(pref^2)) + +# Read in the BPM.jl data. +freq_bpmjl = data["freqs"] +spl_pressure_bpmjl = data["spl_nb_pressure"] +spl_suction_bpmjl = data["spl_nb_suction"] +spl_separation_bpmjl = data["spl_nb_separation"] +spl_lblvs_bpmjl = data["spl_nb_lblvs"] +spl_blunt_bpmjl = data["spl_nb_blunt"] +spl_tip_bpmjl = data["spl_nb_tip"] + +# The frequencies in the CSV file should match the observer frequencies we're using. +@test all(freqs_obs .≈ freq_bpmjl) + +# Only look at the SPLs that are actually significant, i.e. greater than 10 dB. +@test maximum(abs.(spl_pressure[spl_pressure_bpmjl .> 10] .- spl_pressure_bpmjl[spl_pressure_bpmjl .> 10])) < 0.826 +@test maximum(abs.(spl_suction[spl_suction_bpmjl .> 10] .- spl_suction_bpmjl[spl_suction_bpmjl .> 10])) < 0.774 +@test maximum(abs.(spl_alpha[spl_separation_bpmjl .> 10] .- spl_separation_bpmjl[spl_separation_bpmjl .> 10])) < 0.771 +@test maximum(abs.(spl_teb[spl_blunt_bpmjl .> 10] .- spl_blunt_bpmjl[spl_blunt_bpmjl .> 10])) < 0.792 +@test maximum(abs.(spl_tip[spl_tip_bpmjl .> 10] .- spl_tip_bpmjl[spl_tip_bpmjl .> 10])) < 1.26 +@test maximum(abs.(spl_lblvs[spl_lblvs_bpmjl .> 10] .- spl_lblvs_bpmjl[spl_lblvs_bpmjl .> 10])) < 0.811 diff --git a/test/itr_figure24b_barc.jl b/test/itr_figure24b_barc.jl new file mode 100644 index 00000000..73a3bd1e --- /dev/null +++ b/test/itr_figure24b_barc.jl @@ -0,0 +1,233 @@ +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using DelimitedFiles: readdlm +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, ConstantVelocityTransformation +using FileIO: load +using FLOWMath: akima +using StaticArrays: @SVector +using Test + +data = load(joinpath(@__DIR__, "gen_bpmjl_data", "figure24b.jld2")) +rho = data["rho"] +asound = data["asound"] +mu = data["mu"] +Vinf = data["Vinf"] +omega = data["omega"] +B = data["B"] +Rhub = data["Rhub"] +Rtip = data["Rtip"] +radii = data["radii"] +chord = data["chord"] +twist = data["twist"] +alpha = data["alpha"] +U = data["U"] +hs = data["hs"] +num_src_times_blade_pass = data["num_src_times_blade_pass"] +Psis = data["Psis"] + +nu = mu/rho +num_radial = length(radii) +dradii = AcousticAnalogies.get_dradii(radii, Rhub, Rtip) + +# Get the source time, which will be one blade pass worth of time, each blade pass with `num_src_times_blade_pass` steps per blade pass. +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +num_blade_pass = 1 +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# Now let's define the coordinate system. +# I'm going to do my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# And the blades will be rotating about the positive x axis at a rate of `omega`. +rot_trans = SteadyRotXTransformation(t0, omega, 0.0) + +# The hub/rotation axis of the blades will start at the origin at time `t0`, and translate in the positive x direction at a speed of `Vinf`. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] # m/s +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Now I can put the two transformations together: +trans = compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) + +# Paper doesn't specify the microphone used for Figure 24, but earlier at the beginning of "C. Noise Characteristics and Trends" there is this: +# > For the purposes of this paper, presented acoustic spectra will correspond to an observer located −35° below the plane of the rotor (microphone 5). +# So I'll just assume that holds for Figure 23. +# For the coordinate system, I'm doing my usual thing, which is to have the freestream velocity pointed in the negative x direction, and thus the blades will be translating in the positive x direction. +# The observer (microphone 5) is 35 deg behind/downstream of the rotor rotation plane, so this should be good. +# But it will of course be moving with the same freestream in the positive x direction. +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# The observer is moving in the positive x direction at Vinf, at the origin at time t0. +t0_obs = 0.0 +x0_obs = @SVector [r_obs*sin(theta_obs), r_obs*cos(theta_obs), 0.0] +v_obs = @SVector [Vinf, 0.0, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# So, for the boundary layer, we want to use untripped for the 95% of the blade from the hub to almost tip, and then tripped for the last 5% of the blade at the tip. +num_untripped = Int(round(0.95*num_radial)) +num_tripped = num_radial - num_untripped +bls_untripped = fill(AcousticAnalogies.UntrippedN0012BoundaryLayer(), num_untripped) +bls_tripped = fill(AcousticAnalogies.TrippedN0012BoundaryLayer(), num_tripped) +bls = vcat(bls_untripped, bls_tripped) + +# And we're also going to use the untripped boundary layer for the LBLVS source. +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +# In the Figure 24 caption, "for these predictions, bluntness thickness H was set to 0.5 mm and trailing edge angle Ψ was set to 14 degrees." +h = 0.5e-3 # meters +Psi = 14*pi/180 # radians + +# I don't see any discussion for what type of tip was used for the tip vortex noise. +# The flat tip seems to match the PAS+ROTONET+BARC predictions well. +blade_tip = AcousticAnalogies.FlatTip() + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +hs_rs = reshape(hs, 1, :, 1) +Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +bls_rs = reshape(bls, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] +Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +chord_rs_with_tip = @view chord_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +hs_rs_with_tip = @view hs_rs[:, end:end, :] +Psis_rs_with_tip = @view Psis_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +bls_rs_with_tip = @view bls_rs[:, end:end, :] + +positive_x_rotation = true +ses_no_tip = CombinedNoTipBroadbandSourceElement.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord_rs_no_tip, twist_rs_no_tip, hs_rs_no_tip, Psis_rs_no_tip, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans +ses_with_tip = CombinedWithTipBroadbandSourceElement.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord_rs_with_tip, twist_rs_with_tip, hs_rs_with_tip, Psis_rs_with_tip, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + +# It's more convinient to cat all the sources together. +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# The LBLVS uses a different boundary layer, and all radial stations. +ses_lblvs = LBLVSSourceElement.(asound, nu, radii_rs, θs_rs, dradii_rs, chord_rs, twist_rs, Us_rs, alphas_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# The predictions in Figure 24b appear to be on 1/3 octave, ranging from about 200 Hz to 60,000 Hz. +# But let's expand the range of source frequencies to account for Doppler shifting. +freqs_src = AcousticMetrics.ExactProportionalBands{3, :center}(10.0, 200000.0) +freqs_obs = AcousticMetrics.ExactProportionalBands{3, :center}(200.0, 60000.0) + +# Now we can do a noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(ses_lblvs, Ref(obs), Ref(freqs_src)) + +# This seperates out the noise prediction for each source-observer combination into the different sources. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Now, need to combine each broadband noise prediction. +# The time axis the axis over which the time varies for each source. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 24b is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l + +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_lblvs = pbs_lblvs .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_lblvs = 10 .* log10.(nb_lblvs./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) + +# Now I should be able to compare to the BARC data. +# Need to read it in first. +data_pressure_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-TBL-TE-pressure.csv"), ',') +freq_pressure_barc = data_pressure_barc[:, 1] +spl_pressure_barc = data_pressure_barc[:, 2] + +data_suction_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-TBL-TE-suction.csv"), ',') +freq_suction_barc = data_suction_barc[:, 1] +spl_suction_barc = data_suction_barc[:, 2] + +data_separation_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-separation.csv"), ',') +freq_separation_barc = data_separation_barc[:, 1] +spl_separation_barc = data_separation_barc[:, 2] + +data_lblvs_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-LBLVS.csv"), ',') +freq_lblvs_barc = data_lblvs_barc[:, 1] +spl_lblvs_barc = data_lblvs_barc[:, 2] + +data_teb_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-BVS.csv"), ',') +freq_teb_barc = data_teb_barc[:, 1] +spl_teb_barc = data_teb_barc[:, 2] + +data_tip_barc = readdlm(joinpath(@__DIR__, "bpm_data", "pettingill_acoustic_performance_characteristics_of_ideally_twisted_rotor_in_hover_2021", "figure24b-tip_vortex_shedding.csv"), ',') +freq_tip_barc = data_tip_barc[:, 1] +spl_tip_barc = data_tip_barc[:, 2] + +# Interpolate the AcousticAnalogies.jl data onto the frequencies from the BARC CSV file. +spl_pressure_interp = akima(freqs_obs, spl_pressure, freq_pressure_barc) +spl_suction_interp = akima(freqs_obs, spl_suction, freq_suction_barc) +spl_separation_interp = akima(freqs_obs, spl_alpha, freq_separation_barc) +spl_lblvs_interp = akima(freqs_obs, spl_lblvs, freq_lblvs_barc) +spl_teb_interp = akima(freqs_obs, spl_teb, freq_teb_barc) +spl_tip_interp = akima(freqs_obs, spl_tip, freq_tip_barc) + +# Now compare. +@test all(abs.(spl_pressure_interp .- spl_pressure_barc) .< [2.839, 2.365, 1.971, 1.892, 1.368, 0.801, 0.567, 0.145, 0.571, 0.746, 0.925, 0.760]) +@test all(abs.(spl_suction_interp .- spl_suction_barc) .< [0.291, 0.527, 0.447, 0.854, 0.818, 0.503, 0.247, 0.229, 0.105, 0.469, 0.563, 0.702, 0.947, 1.224]) +@test all(abs.(spl_separation_interp .- spl_separation_barc) .< [12.876, 10.398, 8.513, 7.067, 6.679, 5.426, 4.791, 4.325, 3.330, 1.307, 1.565, 1.437, 0.881, 0.384, 0.0727, 0.643, 1.357, 1.596, 1.886]) +@test all(abs.(spl_lblvs_interp .- spl_lblvs_barc) .< [28.442, 24.625, 20.380, 16.315, 12.763, 8.731, 5.498, 2.812, 0.964, 0.390, 0.628, 0.743, 0.903, 0.0362, 0.0262, 1.801, 3.430, 5.011, 4.375, 3.376]) +@test all(abs.(spl_teb_interp .- spl_teb_barc) .< [0.134, 0.306, 0.459, 0.106, 0.139, 0.809]) +@test all(abs.(spl_tip_interp .- spl_tip_barc) .< [0.862, 0.839, 0.843, 0.545, 0.429, 0.616, 0.382, 0.135]) diff --git a/test/itr_figure24b_bpmjl.jl b/test/itr_figure24b_bpmjl.jl new file mode 100644 index 00000000..234f52e9 --- /dev/null +++ b/test/itr_figure24b_bpmjl.jl @@ -0,0 +1,290 @@ +using AcousticAnalogies +using AcousticMetrics: AcousticMetrics +using KinematicCoordinateTransformations: compose, SteadyRotXTransformation, SteadyRotYTransformation, SteadyRotZTransformation, ConstantVelocityTransformation +using FileIO: load +using FLOWMath: Akima +using StaticArrays: @SVector +using Test + +# tip vortex noise correction data based on "Airfoil Tip Vortex Formation Noise" +# Copied from BPM.jl (would like to add BPM.jl as a dependency if it's registered in General some day). +const bm_tip_alpha_aspect_data = [2.0,2.67,4.0,6.0,12.0,24.0] +const bm_tip_alpha_aratio_data = [0.54,0.62,0.71,0.79,0.89,0.95] +const bm_tip_alpha_aspect_ratio_correction = Akima(bm_tip_alpha_aspect_data, bm_tip_alpha_aratio_data) + +function bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + # compute tip lift curve slope + if aspect_ratio < 2.0 + aratio = 0.5*one(aspect_ratio) + elseif 2.0 <= aspect_ratio <= 24.0 + aratio = bm_tip_alpha_aspect_ratio_correction(aspect_ratio) + elseif aspect_ratio > 24.0 + aratio = 1.0*one(aspect_ratio) + end + + return aratio +end + +struct BMTipAlphaCorrection{TCorrection} <: AbstractTipAlphaCorrection + correction::TCorrection + + function BMTipAlphaCorrection(aspect_ratio) + # correction = BPM._tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + correction = bm_tip_vortex_alpha_correction_nonsmooth(aspect_ratio) + return new{typeof(correction)}(correction) + end +end + +function AcousticAnalogies.tip_vortex_alpha_correction(blade_tip::AbstractBladeTip{<:BMTipAlphaCorrection}, alphatip) + a0l = AcousticAnalogies.alpha_zerolift(blade_tip) + correction_factor = AcousticAnalogies.tip_alpha_correction(blade_tip).correction + return correction_factor * (alphatip - a0l) + a0l +end + +data = load(joinpath(@__DIR__, "gen_bpmjl_data", "figure24b.jld2")) +rho = data["rho"] +asound = data["asound"] +mu = data["mu"] +Vinf = data["Vinf"] +omega = data["omega"] +B = data["B"] +Rhub = data["Rhub"] +Rtip = data["Rtip"] +radii = data["radii"] +chord = data["chord"] +twist = data["twist"] +alpha = data["alpha"] +U = data["U"] +hs = data["hs"] +Psis = data["Psis"] +num_src_times_blade_pass = data["num_src_times_blade_pass"] +tripped_flags = data["tripped_flags"] + +num_radial = length(radii) + +nu = mu/rho +dradii = AcousticAnalogies.get_dradii(radii, Rhub, Rtip) + +# Get some transform stuff. +bpp = 1/(B/(2*pi)*omega) # 1/(B blade_passes/rev * 1 rev / (2*pi rad) * omega rad/s) +num_blade_pass = 1 +period_src = num_blade_pass*bpp +num_src_times = num_src_times_blade_pass * num_blade_pass +t0 = 0.0 +dt = period_src/num_src_times +src_times = t0 .+ (0:num_src_times-1).*dt + +# I don't see any discussion for what type of tip was used for the tip vortex noise. +# FlatTip with no CCBlade.jl tip correction or BPM-style tip correction seems to match the BARC predictions well. +# blade_tip = AcousticAnalogies.FlatTip(AcousticAnalogies.NoTipAlphaCorrection()) +# BPM.jl uses a different tip alpha correction which appears to require the blade aspect ratio, defined as the blade radius divided by the average chord. +cbar = sum(chord .* dradii) / (Rtip - Rhub) +aspect_ratio = Rtip/cbar +alpha0lift = 0.0 +blade_tip = AcousticAnalogies.FlatTip(BMTipAlphaCorrection(aspect_ratio), alpha0lift) + +# Getting the coordinate system consistent with BPM.jl is a bit tricky. +# Here's a bit of code from BPM.jl: +# +# # Calculate the trailing edge position relative to the hub +# xs = sin(beta)*d - cos(beta)*(c - c1) +# zs = cos(beta)*d + sin(beta)*(c - c1) +# +# OK, so that shows me that the blade is initially aligned with the z axis, rotating to the positive x direction. +# And I know the blades are rotating about the positive y axis. +# So that's the answer for the BPM.jl coordinate system: +# +# * freestream in the positive y axis direction. +# * first blade initially aligned with the positive z axis, rotating about the positive y axis. +# +# Now, what do I need to do with AcousticAnalogies to make that happen? +# I want the blades to be translating in the negative y direction, rotating about the positive y axis. +# I usually start with the blades rotating about either the positive or negative x axis, moving in the direction of the positive x axis. +# I think the answer is, +# +# * start out with the blades rotating about the negative x axis, moving in the direction of the positive x axis +# * rotate 90° about the negative z axis. +# After this, the blades will be moving in the negative y direction, rotating about the positive y axis, which is good. +# But I want the first blade to be aligned with the positive z axis, and stopping here would mean it's aligned with the positive x axis. +# * rotate 90° about the negative y axis. +# This will put the first blade in line with the positive z axis. + +# So, let's do what we said we need to do. +# Start with a rotation about the negative x axis. +positive_x_rotation = false +rot_trans = SteadyRotXTransformation(t0, omega*ifelse(positive_x_rotation, 1, -1), 0) + +# Then translate along the positive x axis. +y0_hub = @SVector [0.0, 0.0, 0.0] # m +v0_hub = @SVector [Vinf, 0.0, 0.0] +const_vel_trans = ConstantVelocityTransformation(t0, y0_hub, v0_hub) + +# Then a 90° rotation about the negative z axis. +trans_z90deg = SteadyRotZTransformation(0.0, 0.0, -0.5*pi) + +# Then a 90° rotation about the negative y axis. +trans_y90deg = SteadyRotYTransformation(0.0, 0.0, -0.5*pi) + +# Put them all together: +trans = compose.(src_times, Ref(trans_y90deg), + compose.(src_times, Ref(trans_z90deg), + compose.(src_times, Ref(const_vel_trans), Ref(rot_trans)))) + +# Use the M_c = 0.8*M that BPM.jl and the BPM report use. +U = @. 0.8*sqrt(Vinf^2 + (omega*radii)^2) + +# Azimuthal offset for each blade. +θs = (0:(B-1)) .* (2*pi/B) .* ifelse(positive_x_rotation, 1, -1) + +bls = [ifelse(tf, + AcousticAnalogies.TrippedN0012BoundaryLayer(), + AcousticAnalogies.UntrippedN0012BoundaryLayer()) for tf in tripped_flags] + +# Need to do the LBLVS with the untripped boundary layer to match what BPM.jl is doing. +bl_lblvs = AcousticAnalogies.UntrippedN0012BoundaryLayer() + +r_obs = 2.27 # meters +theta_obs = -35*pi/180 +# So, the docstring for BPM.jl says that `V` argument is the wind velocity in the y direction. +# So I guess we should assume that the blades are rotating about the y axis. +# And if the freestream velocity is in the positive y axis, then, from the perspective of the fluid, the blades are translating in the negative y direction. +# And I want the observer to be downstream/behind the blades, so that would mean they would have a positive y position. +# So I want to rotate the observer around the positive x axis, so I'm going to switch the sign on `theta_obs`. +t0_obs = 0.0 +x0_obs = [0.0, r_obs*sin(-theta_obs), r_obs*cos(-theta_obs)] +# The observer is moving in the same direction as the blades, which is the negative y axis. +v_obs = @SVector [0.0, -Vinf, 0.0] +obs = AcousticAnalogies.ConstVelocityAcousticObserver(t0_obs, x0_obs, v_obs) + +# Reshape the inputs to the source element constructors so that everything will line up with (num_times, num_radial, num_blades). +θs_rs = reshape(θs, 1, 1, :) +radii_rs = reshape(radii, 1, :, 1) +dradii_rs = reshape(dradii, 1, :, 1) +chord_rs = reshape(chord, 1, :, 1) +twist_rs = reshape(twist, 1, :, 1) +hs_rs = reshape(hs, 1, :, 1) +Psis_rs = reshape(Psis, 1, :, 1) +Us_rs = reshape(U, 1, :, 1) +alphas_rs = reshape(alpha, 1, :, 1) +bls_rs = reshape(bls, 1, :, 1) +# bls_untripped_rs = reshape(bls_lblvs, 1, :, 1) + +# Separate things into tip and no-tip. +radii_rs_no_tip = @view radii_rs[:, begin:end-1, :] +dradii_rs_no_tip = @view dradii_rs[:, begin:end-1, :] +chord_rs_no_tip = @view chord_rs[:, begin:end-1, :] +twist_rs_no_tip = @view twist_rs[:, begin:end-1, :] +hs_rs_no_tip = @view hs_rs[:, begin:end-1, :] +Psis_rs_no_tip = @view Psis_rs[:, begin:end-1, :] +Us_rs_no_tip = @view Us_rs[:, begin:end-1, :] +alphas_rs_no_tip = @view alphas_rs[:, begin:end-1, :] +bls_rs_no_tip = @view bls_rs[:, begin:end-1, :] + +radii_rs_with_tip = @view radii_rs[:, end:end, :] +dradii_rs_with_tip = @view dradii_rs[:, end:end, :] +chord_rs_with_tip = @view chord_rs[:, end:end, :] +twist_rs_with_tip = @view twist_rs[:, end:end, :] +hs_rs_with_tip = @view hs_rs[:, end:end, :] +Psis_rs_with_tip = @view Psis_rs[:, end:end, :] +Us_rs_with_tip = @view Us_rs[:, end:end, :] +alphas_rs_with_tip = @view alphas_rs[:, end:end, :] +bls_rs_with_tip = @view bls_rs[:, end:end, :] + +direct = AcousticAnalogies.BPMDirectivity +use_UInduction = false +use_Doppler = false +mach_correction = AcousticAnalogies.NoMachCorrection +ses_no_tip = CombinedNoTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_no_tip, θs_rs, dradii_rs_no_tip, chord_rs_no_tip, twist_rs_no_tip, hs_rs_no_tip, Psis_rs_no_tip, Us_rs_no_tip, alphas_rs_no_tip, src_times, dt, bls_rs_no_tip, positive_x_rotation) .|> trans + +ses_with_tip = CombinedWithTipBroadbandSourceElement{direct,use_UInduction,mach_correction,use_Doppler}.(asound, nu, radii_rs_with_tip, θs_rs, dradii_rs_with_tip, chord_rs_with_tip, twist_rs_with_tip, hs_rs_with_tip, Psis_rs_with_tip, Us_rs_with_tip, alphas_rs_with_tip, src_times, dt, bls_rs_with_tip, Ref(blade_tip), positive_x_rotation) .|> trans + +# Now we can construct the lblvs source elements. +lblvs_ses = AcousticAnalogies.LBLVSSourceElement{direct,use_UInduction,use_Doppler}.(asound, nu, radii_rs, θs_rs, dradii_rs, chord_rs, twist_rs, Us_rs, alphas_rs, src_times, dt, Ref(bl_lblvs), positive_x_rotation) .|> trans + +# Write out the source elements. +# pvd_no_tip = AcousticAnalogies.to_paraview_collection(joinpath(@__DIR__, "figure24b-no_tip"), ses_no_tip) +# pvd_with_tip = AcousticAnalogies.to_paraview_collection(joinpath(@__DIR__, "figure24b-with_tip"), ses_with_tip) +# pvd_all = AcousticAnalogies.to_paraview_collection(joinpath(@__DIR__, "figure24b-all"), (ses_no_tip, ses_with_tip, lblvs_ses); observers=(obs,)) + +# Put the source elements together: +ses = cat(ses_no_tip, ses_with_tip; dims=2) + +# Define the frequencies we'd like to evaluate. +# BPM.jl uses the approximate 1/3rd-octave bands. +freqs_obs = AcousticMetrics.ApproximateThirdOctaveCenterBands(100.0, 40000.0) +freqs_src = freqs_obs + +# Now do the noise prediction. +bpm_outs = AcousticAnalogies.noise.(ses, Ref(obs), Ref(freqs_src)) +pbs_lblvss = AcousticAnalogies.noise.(lblvs_ses, Ref(obs), Ref(freqs_src)) + +# Separate out each source. +pbs_tblte_ps = AcousticAnalogies.pbs_pressure.(bpm_outs) +pbs_tblte_ss = AcousticAnalogies.pbs_suction.(bpm_outs) +pbs_tblte_alphas = AcousticAnalogies.pbs_alpha.(bpm_outs) +pbs_tebs = AcousticAnalogies.pbs_teb.(bpm_outs) +pbs_tips = AcousticAnalogies.pbs_tip.(bpm_outs[:, end:end, :]) + +# Combine each noise prediction. +time_axis = 1 +pbs_pressure = AcousticMetrics.combine(pbs_tblte_ps, freqs_obs, time_axis) +pbs_suction = AcousticMetrics.combine(pbs_tblte_ss, freqs_obs, time_axis) +pbs_alpha = AcousticMetrics.combine(pbs_tblte_alphas, freqs_obs, time_axis) +pbs_teb = AcousticMetrics.combine(pbs_tebs, freqs_obs, time_axis) +pbs_tip = AcousticMetrics.combine(pbs_tips, freqs_obs, time_axis) +pbs_lblvs = AcousticMetrics.combine(pbs_lblvss, freqs_obs, time_axis) + +# Now I need to account for the fact that Figure 23c is actually comparing to narrowband experimental data with a frequency spacing of 20 Hz. +# So, to do that, I need to multiply the mean-squared pressure by Δf_nb/Δf_pbs, where `Δf_nb` is the 20 Hz narrowband and `Δf_pbs` is the bandwidth of each 1/3-octave proportional band. +# (Dividing the MSP by Δf_pbs aka the 1/3 octave spacing is like getting a power-spectral density, then multiplying by the narrowband spacing Δf_nb gives us the MSP associated with the narrowband.) +# I think the paper describes that, right? +# Right, here's something: +# +# > The current prediction method is limited to one-third octave bands, but it is compared to the narrowband experiment with Δf = 20 Hz. +# > This is done by dividing the energy from the one-third octave bands by the number of bands in Δf = 20 Hz. +# +# So, `Δf_pbs/Δf_nb` would represent the number of `Δf_nb`-width bands that could fit in a proportional band of bin width `Δf_pbs`. +# And then I'm dividing by that. +# So that seems like the right thing. +# So, first thing is to get the proportional band spacing. +freqs_l = AcousticMetrics.lower_bands(freqs_obs) +freqs_u = AcousticMetrics.upper_bands(freqs_obs) +df_pbs = freqs_u .- freqs_l +# Also need the experimental narrowband spacing. +df_nb = 20.0 +# Now multiply each by that. +nb_pressure = pbs_pressure .* df_nb ./ df_pbs +nb_suction = pbs_suction .* df_nb ./ df_pbs +nb_alpha = pbs_alpha .* df_nb ./ df_pbs +nb_teb = pbs_teb .* df_nb ./ df_pbs +nb_tip = pbs_tip .* df_nb ./ df_pbs +nb_lblvs = pbs_lblvs .* df_nb ./ df_pbs + +# Now I want the SPL, which should just be this: +pref = 20e-6 +spl_pressure = 10 .* log10.(nb_pressure./(pref^2)) +spl_suction = 10 .* log10.(nb_suction./(pref^2)) +spl_alpha = 10 .* log10.(nb_alpha./(pref^2)) +spl_teb = 10 .* log10.(nb_teb./(pref^2)) +spl_tip = 10 .* log10.(nb_tip./(pref^2)) +spl_lblvs = 10 .* log10.(nb_lblvs./(pref^2)) + +# Read in the BPM.jl data. +freq_bpmjl = data["freqs"] +spl_pressure_bpmjl = data["spl_nb_pressure"] +spl_suction_bpmjl = data["spl_nb_suction"] +spl_separation_bpmjl = data["spl_nb_separation"] +spl_lblvs_bpmjl = data["spl_nb_lblvs"] +spl_blunt_bpmjl = data["spl_nb_blunt"] +spl_tip_bpmjl = data["spl_nb_tip"] + +# The frequencies in the CSV file should match the observer frequencies we're using. +@test all(freqs_obs .≈ freq_bpmjl) + +# Only look at the SPLs that are actually significant, i.e. greater than 0 dB. +@test maximum(abs.(spl_pressure[spl_pressure_bpmjl .> 0] .- spl_pressure_bpmjl[spl_pressure_bpmjl .> 0])) < 0.496 +@test maximum(abs.(spl_suction[spl_suction_bpmjl .> 0] .- spl_suction_bpmjl[spl_suction_bpmjl .> 0])) < 0.476 +@test maximum(abs.(spl_alpha[spl_separation_bpmjl .> 0] .- spl_separation_bpmjl[spl_separation_bpmjl .> 0])) < 0.479 +@test maximum(abs.(spl_teb[spl_blunt_bpmjl .> 0] .- spl_blunt_bpmjl[spl_blunt_bpmjl .> 0])) < 0.489 +@test maximum(abs.(spl_tip[spl_tip_bpmjl .> 0] .- spl_tip_bpmjl[spl_tip_bpmjl .> 0])) < 0.874 +@test maximum(abs.(spl_lblvs[spl_lblvs_bpmjl .> 0] .- spl_lblvs_bpmjl[spl_lblvs_bpmjl .> 0])) < 0.499 diff --git a/test/runtests.jl b/test/runtests.jl index 507fdfc8..f88d9b7f 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -3,9 +3,14 @@ module AcousticAnalogiesTests include("adv_time_tests.jl") include("combine_tests.jl") include("f1a_tests.jl") -include("ccblade_helper_tests.jl") +include("compact_f1a_constructor_tests.jl") include("anopp2_comparison.jl") include("forwarddiff_test.jl") +include("doppler_tests.jl") +include("boundary_layer_tests.jl") +include("bpm_shape_function_tests.jl") +include("broadband_source_element_tests.jl") include("writevtk_tests.jl") +include("bpm_itr_tests.jl") end # module diff --git a/test/writevtk/cf1a_mb_with_observers-00000001.vtm b/test/writevtk/cf1a_mb_with_observers-00000001.vtm new file mode 100755 index 00000000..8644bf54 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000001.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000002.vtm b/test/writevtk/cf1a_mb_with_observers-00000002.vtm new file mode 100755 index 00000000..fe917eff --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000002.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000003.vtm b/test/writevtk/cf1a_mb_with_observers-00000003.vtm new file mode 100755 index 00000000..10829502 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000003.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000004.vtm b/test/writevtk/cf1a_mb_with_observers-00000004.vtm new file mode 100755 index 00000000..c61738db --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000004.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000005.vtm b/test/writevtk/cf1a_mb_with_observers-00000005.vtm new file mode 100755 index 00000000..96bf3fda --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000005.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000006.vtm b/test/writevtk/cf1a_mb_with_observers-00000006.vtm new file mode 100755 index 00000000..a0a00ac8 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000006.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000007.vtm b/test/writevtk/cf1a_mb_with_observers-00000007.vtm new file mode 100755 index 00000000..f7badc45 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000007.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000008.vtm b/test/writevtk/cf1a_mb_with_observers-00000008.vtm new file mode 100755 index 00000000..12335f6f --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000008.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000009.vtm b/test/writevtk/cf1a_mb_with_observers-00000009.vtm new file mode 100755 index 00000000..ce92a14a --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000009.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000010.vtm b/test/writevtk/cf1a_mb_with_observers-00000010.vtm new file mode 100755 index 00000000..ffa344d1 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000010.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000011.vtm b/test/writevtk/cf1a_mb_with_observers-00000011.vtm new file mode 100755 index 00000000..f8962bfb --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000011.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000012.vtm b/test/writevtk/cf1a_mb_with_observers-00000012.vtm new file mode 100755 index 00000000..1a351912 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000012.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000013.vtm b/test/writevtk/cf1a_mb_with_observers-00000013.vtm new file mode 100755 index 00000000..0dc4ed0a --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000013.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000014.vtm b/test/writevtk/cf1a_mb_with_observers-00000014.vtm new file mode 100755 index 00000000..eb29547e --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000014.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000015.vtm b/test/writevtk/cf1a_mb_with_observers-00000015.vtm new file mode 100755 index 00000000..b9fb75ea --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000015.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000016.vtm b/test/writevtk/cf1a_mb_with_observers-00000016.vtm new file mode 100755 index 00000000..74dc7a34 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000016.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000017.vtm b/test/writevtk/cf1a_mb_with_observers-00000017.vtm new file mode 100755 index 00000000..2543c7a7 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000017.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000018.vtm b/test/writevtk/cf1a_mb_with_observers-00000018.vtm new file mode 100755 index 00000000..e46dbfc5 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000018.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000019.vtm b/test/writevtk/cf1a_mb_with_observers-00000019.vtm new file mode 100755 index 00000000..3a3ae09d --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000019.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000020.vtm b/test/writevtk/cf1a_mb_with_observers-00000020.vtm new file mode 100755 index 00000000..7a37b341 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000020.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000021.vtm b/test/writevtk/cf1a_mb_with_observers-00000021.vtm new file mode 100755 index 00000000..937758d1 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000021.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000022.vtm b/test/writevtk/cf1a_mb_with_observers-00000022.vtm new file mode 100755 index 00000000..fde9ee85 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000022.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000023.vtm b/test/writevtk/cf1a_mb_with_observers-00000023.vtm new file mode 100755 index 00000000..5c96d458 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000023.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000024.vtm b/test/writevtk/cf1a_mb_with_observers-00000024.vtm new file mode 100755 index 00000000..fa228894 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000024.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000025.vtm b/test/writevtk/cf1a_mb_with_observers-00000025.vtm new file mode 100755 index 00000000..3ecc06ad --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000025.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000026.vtm b/test/writevtk/cf1a_mb_with_observers-00000026.vtm new file mode 100755 index 00000000..a204c771 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000026.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000027.vtm b/test/writevtk/cf1a_mb_with_observers-00000027.vtm new file mode 100755 index 00000000..5e8bc6d2 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000027.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000028.vtm b/test/writevtk/cf1a_mb_with_observers-00000028.vtm new file mode 100755 index 00000000..b91961b1 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000028.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000029.vtm b/test/writevtk/cf1a_mb_with_observers-00000029.vtm new file mode 100755 index 00000000..f3135966 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000029.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000030.vtm b/test/writevtk/cf1a_mb_with_observers-00000030.vtm new file mode 100755 index 00000000..50fcaaf2 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000030.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000031.vtm b/test/writevtk/cf1a_mb_with_observers-00000031.vtm new file mode 100755 index 00000000..6781773e --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000031.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000032.vtm b/test/writevtk/cf1a_mb_with_observers-00000032.vtm new file mode 100755 index 00000000..aad15a02 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000032.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000033.vtm b/test/writevtk/cf1a_mb_with_observers-00000033.vtm new file mode 100755 index 00000000..7e761f87 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000033.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000034.vtm b/test/writevtk/cf1a_mb_with_observers-00000034.vtm new file mode 100755 index 00000000..ee77b09b --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000034.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000035.vtm b/test/writevtk/cf1a_mb_with_observers-00000035.vtm new file mode 100755 index 00000000..a61152e6 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000035.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000036.vtm b/test/writevtk/cf1a_mb_with_observers-00000036.vtm new file mode 100755 index 00000000..b6724499 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000036.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000037.vtm b/test/writevtk/cf1a_mb_with_observers-00000037.vtm new file mode 100755 index 00000000..b919d168 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000037.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000038.vtm b/test/writevtk/cf1a_mb_with_observers-00000038.vtm new file mode 100755 index 00000000..e9a63246 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000038.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000039.vtm b/test/writevtk/cf1a_mb_with_observers-00000039.vtm new file mode 100755 index 00000000..8da72d8f --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000039.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000040.vtm b/test/writevtk/cf1a_mb_with_observers-00000040.vtm new file mode 100755 index 00000000..b83bbc6c --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000040.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000041.vtm b/test/writevtk/cf1a_mb_with_observers-00000041.vtm new file mode 100755 index 00000000..aac3f738 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000041.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000042.vtm b/test/writevtk/cf1a_mb_with_observers-00000042.vtm new file mode 100755 index 00000000..62b566f9 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000042.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000043.vtm b/test/writevtk/cf1a_mb_with_observers-00000043.vtm new file mode 100755 index 00000000..a5faea33 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000043.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000044.vtm b/test/writevtk/cf1a_mb_with_observers-00000044.vtm new file mode 100755 index 00000000..72d6bb9e --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000044.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000045.vtm b/test/writevtk/cf1a_mb_with_observers-00000045.vtm new file mode 100755 index 00000000..b8f57366 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000045.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000046.vtm b/test/writevtk/cf1a_mb_with_observers-00000046.vtm new file mode 100755 index 00000000..715d9d5e --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000046.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000047.vtm b/test/writevtk/cf1a_mb_with_observers-00000047.vtm new file mode 100755 index 00000000..b53a3df5 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000047.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000048.vtm b/test/writevtk/cf1a_mb_with_observers-00000048.vtm new file mode 100755 index 00000000..58776900 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000048.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000049.vtm b/test/writevtk/cf1a_mb_with_observers-00000049.vtm new file mode 100755 index 00000000..f5602dd8 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000049.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000050.vtm b/test/writevtk/cf1a_mb_with_observers-00000050.vtm new file mode 100755 index 00000000..5778542e --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000050.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000051.vtm b/test/writevtk/cf1a_mb_with_observers-00000051.vtm new file mode 100755 index 00000000..21113068 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000051.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000052.vtm b/test/writevtk/cf1a_mb_with_observers-00000052.vtm new file mode 100755 index 00000000..681e1f6a --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000052.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000053.vtm b/test/writevtk/cf1a_mb_with_observers-00000053.vtm new file mode 100755 index 00000000..b8ba5fb1 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000053.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000054.vtm b/test/writevtk/cf1a_mb_with_observers-00000054.vtm new file mode 100755 index 00000000..98ce4231 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000054.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000055.vtm b/test/writevtk/cf1a_mb_with_observers-00000055.vtm new file mode 100755 index 00000000..f4b92e97 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000055.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000056.vtm b/test/writevtk/cf1a_mb_with_observers-00000056.vtm new file mode 100755 index 00000000..5ae65a6d --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000056.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000057.vtm b/test/writevtk/cf1a_mb_with_observers-00000057.vtm new file mode 100755 index 00000000..9ab96a34 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000057.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000058.vtm b/test/writevtk/cf1a_mb_with_observers-00000058.vtm new file mode 100755 index 00000000..4a670559 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000058.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000059.vtm b/test/writevtk/cf1a_mb_with_observers-00000059.vtm new file mode 100755 index 00000000..fa11fd70 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000059.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000060.vtm b/test/writevtk/cf1a_mb_with_observers-00000060.vtm new file mode 100755 index 00000000..1ca1fbbb --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000060.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000061.vtm b/test/writevtk/cf1a_mb_with_observers-00000061.vtm new file mode 100755 index 00000000..d35cf81d --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000061.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000062.vtm b/test/writevtk/cf1a_mb_with_observers-00000062.vtm new file mode 100755 index 00000000..2425a0c0 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000062.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000063.vtm b/test/writevtk/cf1a_mb_with_observers-00000063.vtm new file mode 100755 index 00000000..9160e1ad --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000063.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-00000064.vtm b/test/writevtk/cf1a_mb_with_observers-00000064.vtm new file mode 100755 index 00000000..09c69914 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers-00000064.vtm @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000001.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000001.vtp new file mode 100644 index 0000000000000000000000000000000000000000..1f52dd6d257cfb3d01737e3f9dfc72ef63ab5a59 GIT binary patch literal 4640 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 NK>E1{y!^cf{U1F~eMA5N literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000002.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000002.vtp new file mode 100644 index 0000000000000000000000000000000000000000..1eac8045d9da630f85ae5c341311e364d6b2d504 GIT binary patch literal 6360 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 ZbPoj>^S?df`s-7zt=ANiKi*S7{tpS4`x^iN literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000003.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000003.vtp new file mode 100644 index 0000000000000000000000000000000000000000..ce277c96c755f690f7a5d0fd90a17949f0046e97 GIT binary patch literal 6360 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 Kz`nkxF#jI~t`a5y literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000004.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000004.vtp new file mode 100644 index 0000000000000000000000000000000000000000..3aa16eae06e42d1886d7c375ba9952f65ccbcd31 GIT binary patch literal 6360 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000007.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000007.vtp new file mode 100644 index 0000000000000000000000000000000000000000..4f259f3faaeadf7c9e3fbf400ebc4411f95a11e7 GIT binary patch literal 6356 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 F{{WXf3VZ+n literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000009.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000009.vtp new file mode 100644 index 0000000000000000000000000000000000000000..a6c22f191c61ad8f3058d675c5d2062bb1282602 GIT binary patch literal 5207 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000010.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000010.vtp new file mode 100644 index 0000000000000000000000000000000000000000..d087924a3339f6765123bb1a5fdc6b65ebcb5f9c GIT binary patch literal 6356 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 U`SN({=OOxcbk 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 b4-EowD}#4`dC&FptF85K707QND=_~DOGL=S literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000012.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000012.vtp new file mode 100644 index 0000000000000000000000000000000000000000..84152a2bd9d340f37096c3eef1d161106f86d1aa GIT binary patch literal 6354 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%0DC!19D~$7?VG~|%Nec`+R!6a4 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000017.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000017.vtp new file mode 100644 index 0000000000000000000000000000000000000000..b40b39799223c6f5b98f33ff6c9d6e86cac7eae4 GIT binary patch literal 6528 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000018.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000018.vtp new file mode 100644 index 0000000000000000000000000000000000000000..c659bdd33a1c7d795e0eddd8b29d65e2b92c04f3 GIT binary patch literal 6360 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 a8(VVyvf7tdTz`J6weguk`P+92=>Gvl;rem_ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000019.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000019.vtp new file mode 100644 index 0000000000000000000000000000000000000000..50a69691c01a73fb7a82a37ceca6b0fed4166048 GIT binary patch literal 6361 zcmbVRcUTkKx21>(NU>l!}A0@INQ735M$P>)P3v9!Gj3r2TPdgdW%m<&8TA_lJZ3w(=~_ z9|1#QJP;T?uo=?d-y31%>w$#(f~C(R;A^w6ugh&u`ueM@f~DP2K4=UAi$$%S9_a6N z#teCOJ*(l5X|O)Ow6yMbwDn*;L?YY~(iQD=dfNX@xn2{>7x5JeEPW1z@qzp6 zf#GO0!q)@g0hUIcJBLNA%_xEuzN6?Wd@b%r{H3n%(HfJ#*YK?^Un_7&`T8Q<{gHu4 zf82ksV~z2z>rhuz{@+UeFRZV{|AOvsVKjb*(N*{lhPs9bZ|`-EzoGoMwwob*J^j!B z3%Z($s=uZCHylIjqZq`Re7~#c=ga$BzM7i9Z|mQ1tWa2_|Ju&_??@`YyMRhc>T3Ul zk{!Yu<^D^p{2od}Rr8-f9d&m{cq1_If5}W)Mfo2wGeKay{zU_owSLy-f7t?myH;i> z_`2);3nUd)^?%gAZ%D^b{{I3@Re8vu=;;J8s>6zS{Jc=;$}ATHlaA zSv&?FwC0j9PL8j?5w8CnwZFx|8BTpgW#hy@i1PwmqN`&|cV0jrsfYLM8qJ)?=g{uv zp5s%y+D2ME`(Bx_y)+Wdh>gy$eww>u%Kk!Xz-ODF?GV@C$r0Tfw@l|75SGQ>3*lQK zEA@|%L;6h7MNc+%_l#&pB)+VnTy+KEgaohn1;ePo?R#9e$P|uR#xj>_2DU`GOM!RZ!Yn6A2$*SunoX?D(*Z zLaQZ_O{OHtr8SVjziI>p=m2rxg5jft&p{K}0p6nodJz2;F}09vLzXP{if9&(yuc>$ zq8VPoJZI={rh2j^8d>egIm7bugcISZ)b{Gd0ygR9pP8W>KyCgyz2wq!t1C$Zay9;lkPqX+2NeNzKLjuX6W5 z+XgWFxU-aCJNlA_X_n{6xFb=xMo*v`q-tepmZX2+S4kyAa( zciZH=GKH5tggGiUrwM*n7UkQ)_wm>_#RX@$5KA~C*CNHfBBL|2t14n{Cbu`d+B+EM zZlO7pfQ6I~UiI=VA4&?5T&ROd;%Moh6-Kr_DR?;2@+ApnaE?3rJI3_4oZrXeKQQEp zNBP$gkDN^2cQRT1%m3gi{bOW$Q`9Rt%*5-5D#H-xO3Y+^QN&bV$n?nDXCMOU#p3j6 zQ<+rF3b*d?i9_p<}DRiK+_Z@Co%l%T0ui!b^t6`&CYFk6(?VQAK# zOX*pm2cY~{-4@ekWuX(VyPP&f?Sl%)h#7Hi2SYbEP_7q2q@b;`)w;o;T~MDm(%cr- zc4(BNi~QY5Vd#gbKeni5Y=lbmehRD_UDDTfVU&dy(Di4>2VMa#p9L=_J?Bt;IAPN8n>%M*aJ$*KeO$WyzZ4LoRTBVqI%2u7` z=#(TSC$;*U50$*FbF~t9rDfe6mBrt~w=R}lMFV#fytm zs)o_so31TKSJd^~AIWG`klwK%{}9ze?C$?GY`J;>24S& zd*b<1`tpX0#O{>n&rO-v-F=YVeFKJN-Z8b|CK{VYxU^C=qF>h2jGkW6v--0~&bqVt z-mpsqqoCEBhv(Jud9I}q<+=IpiT?2Oshu|YOX-GmKY=ntv5!b$Ua{j%-0b=7v~k+R zlh&(_3dP(bFZ>U}JC}FSZs%bO@HKygC|j!TW0H?t$sw5T<@+Ocp((^=Gq06t$6>25 zL-MK4PKR_#R6_2e0(U04Y(*+dPKKbfhaM>%mKwyFNw})6Bj7Epr>JJIH#w?c#NKo& zJvsd1z2}*lw<{}$g!er(i$!fPC{Z#>@)zu%?&$UFRp+;@oz{XV)v|dfW+QWdC8Iq* zWaRF~!MP=to1ewy^vO{o_qn!#1vx z)NESt+PeznDG%K%J`tc|;8lx)|gYI7McwbD2%tKHAK^s&d%^p^EsR9YB0Wlr5! zKok9TWO=DXm2VUQfY*CE?ptXL~TX)&sE%?U*@41V%Id( z#I?3yrRg1at6^E`uZS*Nj|E9WC4zuKdV!11?!y$CC_T_VH&0HSq8eOLZPCaN3AY$7 zdc#b3&8?7}h4Lev6$IJ8z1^F3mND?@gQNYABs!dP`YWSfd+}`;z9@_tb?Y8 zu(}6s9y8FxqG?cQ0+xIyaLqlmcXrP$6vo-+<-vg?qAHRkAE9Ek58JZ5tJWSZ!W8uu z3?>74nWahB{Ct9_v|T;#d8|p3XpxL*wUKipVda`_8Wp6t1s5T5=w?(=#w-UUyo~zZ zBwe6NLeeF)^_J_L2;^l4ipbjvfllNUFDvNh$IjO4^c@j$ZBTighHC*&pk zibG^Pg)?@DuMaycrhgfKDAsn?Tn7ih8`~p2@5^M@66H>i?=bH(?isq<5utqbo@hpm zaG|}iqXgzn2q8aWlE*;TtEVqBL|+0E2f^)vvTN6#vZ5ze8;0zp0@15lAqGGa2<-=| zd+jCo)>zzZ?26C~B$y9GUYLBBV*J5aVtbkvH1k3P4=AE&Yg(PV$4IU5(6pY{ot&YxL$!?!3uVcn*%bU%kggH3ojJeRi63~vH9Ox29D(H?9 zdC^QlVbUri{~=^#ljynN6h(7Ii|%@*z0(_duP7>&FQjMG4;qt_lAH-MGsKU%R2t?` z3oCxULQ`96uu*HrpBx~Cu+Mh2%qvv`&ZKgl#O#|CTK@Lb?OmI2IxiFYf{A&iq7aA# zD8M%?F8e-Bc}J_%)m>;m0dmrT=zMPRCTMi8FX6&MM92T+v1$T zj9+D4lLCvA)4L9LRKqueG~j2dqe4#Ky#J>9&(6MsYlfxCQz~scu+upIHq#z9cy~{q zd+Gvt%B0Xer?YLzy{d&uyL)!NFn)hx&_wmU*CkQ?TOnCxsZL!_bzb@5(%X{j-42xp zKWnr2h<$iO{4(by*h z311j~HJ|b9ZBo`!HZEMXr;bPn8f;k3xJxV7dql_BRdPEo6_pnvom?Lc9Ox$sfN>I3 zT0)bhpFnTEmMfzB#(1&V9*D0U zdj>J9t%71nU|aIzxWfT4_*i}46Iici|C_8K*Vhx1T%b0{hiBE|X+!6W?p<`SU5x655r+YHFr zuR8A&APWS_Y?FaKy$m!Y4{A_d%z#CD&Hm9FvOp|Dt^9o66<~wJbbrBGoqDlBxcap^ zr=<#=vQr}gL%owJ19@fu@$Sn#9L=%-Yim9HNq7{1=uWH5DKi5ezji!-x+TT4VwKe6>ei+%dqIRc~H3!VHktY;io8CJP8GF+;o~V}Nk} zr}I4@5+?sOn?l(`$1C}8NeMnTL``t1MrbQnpJ0< z1iA>db^UJpfM)&C(QIZk(Ae^UJy2r|xNx~D1`dINgXN80Go?{LR0s7b#L5WZ+1QFy zo0A4?8k8kZm0tmpR-S)|Pc{IS&^D(A6D0tQL#k6xY6S40V@mb${v*K7Guu{*OT~aB z;5eI56a?tKdqB3+(*=4@v!r-}cL0re{ewH6`2f#HvaDmQH2@hg+%>&xTY-2wYT;MX z7yKc8cehI%;|US%V7XSTNIXS2qn}>$8vgc5Uc`>cO^hfl4dGI*{sU~c@erczCdTWf=v7Cj+nVC) zPO{7M8w_-N89R3~qhy2xO)F_DF2-?qkHdFZ8y|!(CX~V07JFWM?w_BQje_{0-NG8j z+haw7T5fhgnaJY0b^)ote7-%eQ5{p-_LEiJdsrs>+70rzp&4r0c}|2_dCZe%MM93X zSaHY{@gU(=Yxz6)=b|%Bc?d%}M6p^85gn$w0vUIyz7 zFno9^Gz@ZlNX#Zr$AK{$^w-s?Xgo}WO?UNBB2t&GEbfp}4yq-3(aoRh*5J4lB{l{u dv8#qSI10F@l)t>=`uVli+II?tZyzf3{|9;(8&?1T literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000020.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000020.vtp new file mode 100644 index 0000000000000000000000000000000000000000..68225f507fd332b67f08bb078c40c9ef12a91144 GIT binary patch literal 6366 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 An*aa+ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000021.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000021.vtp new file mode 100644 index 0000000000000000000000000000000000000000..9e38bbdc915ca82484b9a82367202dd723dd3403 GIT binary patch literal 6359 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 bXl7?38?W|#dBXMAhgzF&DWt!>rhxqiOkMZ+ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000022.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000022.vtp new file mode 100644 index 0000000000000000000000000000000000000000..0124cff000228bcd0212a02000eb9d8bb2507722 GIT binary patch literal 6362 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 MK2oTB|4IS-KLtwdkdYGjmD9GzVs=xK-}Zms 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000025.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000025.vtp new file mode 100644 index 0000000000000000000000000000000000000000..016db7596220c52437c8bfed91d7965d021dca18 GIT binary patch literal 5195 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 V#=f3!{qaa^^&18F`$r1+{{bN73SR&K literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000028.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000028.vtp new file mode 100644 index 0000000000000000000000000000000000000000..8cea531f52812454e26f9ec6e45b2ed0b927add2 GIT binary patch literal 6354 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 Q$LCq=FDMkhzM;_jKc)-`rT_o{ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000029.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000029.vtp new file mode 100644 index 0000000000000000000000000000000000000000..228a1921bf73a171804155a25b94245c3a4c639d GIT binary patch literal 6353 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 X!dmE;XIno%&f0uGA@}VC1^oX2V&?;2 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000030.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000030.vtp new file mode 100644 index 0000000000000000000000000000000000000000..4ab4ef5c82b27246c7d6486118fd54a5c3e0c8bb GIT binary patch literal 6363 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 b(#OKGdx>%L%TunOA8c*BsgVEnssi>ec5EH_ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000031.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000031.vtp new file mode 100644 index 0000000000000000000000000000000000000000..1f0b218203bacc32ca31b5365db7a12e7fa19129 GIT binary patch literal 6359 zcmbVRd00|u`_^nRE3KwtEKQ@*G6nZs5VEqyB(+5;MbQwKR6xOf%QUShEwij~t8BC~ zb4$Vf7?GJl_#&*w;rj z5a&k3aYIEt+HU_a443%a;zY1Uw#x zC3^*WkwgA>A9IX<+=rpI?teS^|FFI^{{y-|h1vOM7#Q>~3}Jh4K0fmte?s|h%Z|k1 zJ;FXeh#%$-{_w}nPagyADqAIzhtJXr)&66;11yYz5m4m>Kbe7{1X@? z!FAsC{soer{y*EQuSk0d?# zvUq>jpgEVsNK1XW-Y@v;X!11d=lP&};)R4TMHt2+}(~z8a zshhv1G)B1dx2Dx6*JQ2$p-!d*%p46O&(e1{Z$Ex`Ss$C%c|>zVb!LwWY4knp@>Q!| zww}0b#k5@WsK+C`Ls?7sBDCo0ovgE%dWKk$KU(Uhk47_D5Nl@pb}pr#FK%E(z`3u2 zWg(GnCG-uvSddUq0F@6-_5T$Tx!nTNP(C&&>5wx=<%B6kQxKQLd>FntSG?T*!YXT% z{e5hehi{R-T@#@-{vYEU2~&x+jM)i7ROR^7R58SuSJ;Nw{3HaHqn06>42%lh!IG&P zuIpnLAsGVJ*-93|o5{Shv%(r+He;w zL~iMlkuq)axA~^5-mgEtjeEZ;E;!AJQ6e2P7ist8SvZW(>M6P$xVEr%^T1iGwb9@O z5`;Ez-WyLFObFXJMaOImVc!5rc$p|>@KB6RHIuO0UFOU;jE`SyejE3F$IxP!%grP1 zvP{}ynPm9+J}}Gein-AcTdVFr^5mZ05CmQBKl(H;YOE*ht2?CGb{juF#m5P1u>f4Gz!j_6tBXP*%6hv3+m8gcKqBXn^uH&CD$ zMC?kHTZB}5M43u_NigUTLQk>e4YTF|0}nSq&l2w8T$jCOzyA|*pu*<%AmMD51d5sWnv8JkYs$Ozw# zkUQ@pygsgm7y&4v23fNh4dOQVtHNfr96lVqFJp977SXC@IA|%SS474h&}G4 zl{%_`XpOzSN~0ULOkx21XU z)qK8<>i@@#B2ThQ%IuF!j&-~VOc96Hk%hb)U?k3$=#nZY3#AF%(ltrK@+D za4NEXD@RX&KraO4mkkp_d!`yCW=a}Xy34NBG6?EhY}({13NQwOT9dxn9er#BwEmz* z8rf_11BDbgHtMtt1R_)A?w3Z3EWwi_mcYe_4c%21@5`ucL=#-sDsC6sv;%=X;aT< z-pO$g0)Yn-D+$Z-R7Z>a&QxB#)kqf)S#Qx*JU$vni82&bm_7OMGV&!$*x9W(XFiG; zmTunJ;7XPqDnZbEE`sP6z17sP1rk;il~V1L6I&-uqoGIi>Ea_9V^L$gYr=v_a~kd8 zvHF?)sTrf7gTJ?>G(^cl@Fcix$|##J?t0BUy*hIho2fjLYrv{`qhc`FF|emYp3c~; z9AXd=f*EbWR2R3e!ewvSJkb8vTW|B2eWKUIQ5qU*T>PNGKt2=9^;T4Uyo??l- z_B0%&G^gfm)M#C4i1EES?>S=UxCT$H?rzzXoV{%z%Zp#NL znWH_8>>#+{C`ZQBh}t+V8xTw3x{69J&t^WB-t_JOWY!Z!3wD~JzSdh|C+{XH%#%Mj z9!ue8iXR;{wi5$=`AEX;wunBq=>=vB#&pl{E|$Qp>SFhTUbe5EbBjJAD-5_laIEWE zy16V#5(S^W$?OIA3hVh)?$SA*HxQA1?%jDAU0?RLBWP41hQhU;CK`Dc^Q46+!n8p7 z{3*&#o2Z~&td4PD_>oj%%>Jxi_NpA_i1<_E2yme;b$vqG*=S1GY($B-M+`%HXyMEB zI-9y$#?|G{`1~tHCbm3$kj2T+1!&RnR=!rV;{%1XwvZj4V4GJ#s!x7syQmady5wll zprO0l)>?*odT`~~2&qEGZihGmgHxw71Y+^Z(AL^M;LOkpXff$XFWaBJ2xZSV*=URE zel=qVT?>J~?v1czY1PRXY)@RvU)I{o#=!WHb(%pY#E{F+suj*~h`gx*s-$*n^AdfP z@_lR9dH@WY_JK6L0J5Zr(;*`l|7g)N_od?fWtZa!X~B)?(3>BULYV3be9@d&TQXwgkxw!0ODE>8ie zByet+C_tRwGyAiH#MkK$hM=ut^152a>#R1Ts}0u1*JqnB!54$Jqeb=^bVa|HB>DW< zYS#I%8YRdW`^|83;P7es#)~GGhd}nVjKQj?JkMhx^_yxFUPGhW9B5N5m&gxUYf(zH zM+wT3(K6||{}N*d0`Jus#H%}+sEn{m=C)al&Kn8iZIDkLjhHp`Cd5&wYxCL~LL=L5 z36f7G*QIF@dDqu-mfDoQ4fK?)I`NcVu>yi`Z|CVe9DTTFJcd&XI!UE77O97?C|3++ znVXrGyF9N@Ch`dIII6vMXzxc(E}F1c1ffl3QCiAcb2pmw;Da9>e)kwpo9ZkGY1gn! zR7xO0O(y|YC^}p)dMPbFBT-om*$`go)(@vm6)hYq<1f!N8p%{`cL4`WLEwX&+Txc< zHp2QXTruaZ;K=SKNv|w_5+f+R$ z!_*CuT0v@2kEM0DbpEm+u#y;@ES{zHe4rEku9V-5sa)o4Vzfcc+50#60uajOorrv2 ze3c$Yh|ho}!R0_hqi^zGU7qbS4@`XSk+MUUrvk&(KI|hXx$BqeK)A+>K~eBSIcMr6 zd2|ITNR;-lPC-ga$!;P3NAg+o7x_?3*9>{xUuIHX`QpMf)8m8eTKC_U!D>rYk&V2A zkM(PfTsP3Bgef7@CwyBIJp9*RQ3)}9%!rZqA5@|oCMG+1RogsjSp;D+Hc)T!t|VbO zZPe8npq@T93cS;~kaIWy_6O|_ZQrvE5Pac3c_giBtu=^9#B`ieb*;ABUmgC8$yb~Wh z8y|%(72MfIqhTASbD^J_l=|1aIeqjZwwHa#0l`lkH4GXlv=R}5wyuLPN#^Igmsb4I zpMBlT8+@RDl|+Moy!BU~!Rr+%jvYm&bHYBD-3W=SF2NSJSii%*JV*4)pz{fDDog#+ zB27o_FIlffqjmUhmy^rV`@1wRUlh!$K6yKh;EOzqf?y)POIUNK8*QreZgs8Jk4=7Z6c%vVm8s!1I$d3m%4UXIQhXptg40iDs09)0!Rcr?7PpZzunlj| z^Mps4fMF>JH7kb1ug$0D0*x^bLX&z`cZ^fP)@TAosVrM@uV@0KtEhyovWX3B;zYWZN5R1C~a= zUOwP*6u7!PZS|)}Jm6f{&djdT0j&5Un+WyDx7G$W$o7ZKx!mgtxJP>AVeSUv~4M$t`Q3{m%Nn zgL?yj@?E?8w63TFTRS`U8s9nyn5Zx9y1)zsD8c1r;Y-zl3llO!8skVH9|hGYhzka& zT52X91!}YHnu}Glq>W$qejG7>OVoy0}eMF2d{E&&mx21Fc)ec-kR3D`a`dX}Fa1?=}dx=_YN4LEd7 z(NseP2`n_~U!+=d3b?sVf6_NV4S+6Pk6mkm1Om7IvK3Pl4GeH=ws9`20nd^KcJ?_T zfq0$)%`^Kn0E-U_c{Wh0 zmg3l%5(R)9evuTGDgt+3jp;w!whKrA_D$#K1pyxq3se>buLEE&?y~I7V8C+1B+)E!HSp+t#*w%qI{|eC;*uXpU;exFu`Z{iE>H1W+mH&T$J|A!>x})F(s#9E zEVBBzPxpY72O5)ZmXy-?l8kXu@^1jNW5@43i+og znGeLz?*|Cd=pqY@hhQS_6ou66!K(StsklUuAodnYv|=dg)eh}&(qpgqOFe_rN0?e? zDBg&XwL2XHp7$}gv}mA6vBAyj-ZiWZ&rv$?>WRbcAZRpYe{yoFk7G!yd0FMD2GtFl z;D=tnZ@iLrMIL4`BJc5FCHr9o#`-GHjPs&wGtT!4csER2yT9c6u;r3&FI2n6Z=0VC z6;zIz^aZu{p-xmX1GdIaIdpsCvd6E;Un7xo-I`Xit=8#_i#-vXoA!=c$+Z#6lgLU1tfYyvZG` zdspN?C{o^4nIGl?Gszt}+&gqKV9QnMz>J(sVMhKKT`b@1=u=2@Y&&+nw`^ ze1~^XdhVpf+3rsJc+EcJu>yxW^6*4~1(D}PJ*kz-PBhtD_}u#sJxDCYD$VGmOLowk z=qRw&K#%?2ayd+8I&Z2}Mt&AWw7^`~Sq8x~+E{iw$~(*reXC$G&&jl@vPA+dxZ4;x zSo0IB>e&f7bfwkKyZtRJE%_3GnnMN))+Z$;yP2!?`3={fUuw;LrGS3@OacE7G0;J! literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000032.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000032.vtp new file mode 100644 index 0000000000000000000000000000000000000000..30858c1e83cde1b1a23dded5c85ce97bdbfc7b9c GIT binary patch literal 6358 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 U*9Tm`KGWKKNg@6HErrH^0Qvj-yZ`_I literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000033.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000033.vtp new file mode 100644 index 0000000000000000000000000000000000000000..16d2316e45f836530b2f0ffc3d1dc70b990b7fc9 GIT binary patch literal 6530 zcmbVRdpwi<`&T+i5rqnk6+&$eIc3~WO3B$%bZ}S>BVn6i!x-h17WGt8j+IKKn!|%( z;}#=wsFdYw6CP(XZ8V3Uj?dxut?%pm?2mnRU9bCdy|4GR_vd}TUiXavg8h6I@F-k> zHwJA4)r4t46;Nn*jE6Vc%Lp12=($@T3K*|NI2^S&=~sqWL?JOa4;0P_YUv#q=!-H%dw9E|p$ex_u1i_um+kh4(Sf>qpbG97KP(Ov5P(^_ z93SX&($d@QQ`P<7(@^8J3JQpCXrF>lp*PAMrC=T8=Z3=Bc-msT(SZR*&^S3v zG-@fOt?_yPmrb89`%>X^;uFw59L_c5E2V?J7}w8DS-bjuX85V>pCv!_gh8V|Luo@5 zJTW*w*FYnvD;A4Fd!Rg^3K&n%0Mt@O0}B6!f`ET%?tA>XuW!*3lYjQ`bu3>xaL1t0 zDEB~bymw&8f9^x`XMN~t8~oYHf5ZCH{152<6h>cH?@t&6{BH~q`%%8WpE&-6@;}CI zi9&k?p8gkf4Rn7__a8X>kL<&tmgM_QMSuN!f67-=W6xg*|A)E$1IQK=;2pShwEi>H zPnD#py(Hl8V*2k;4k%xY`wzwPb0`B%t^WmTpSwHC7lm{Em&~;G=@coGW3;CXvg8zI^mo{C%xj{v{4hQ!n{LZJT5MD^jcFhIb_ue;l9mvF?yd zm3%;*9pA{V%@QAH`W7(_9-Uk#gQQNGy{t`4qs_8`Aq~_xFe3E_Hce@h}98P2>w8-$2 zHAA&k;J&eBxaLKixKw#QFu^`*;Q3aUI-~VKzb}6=tYzSFG`Z(B^|t`k;dW9BC^XWu z+ef3iMcO#miFQXA2D`OEw=UvU!n{aK`|YN^U08n^j(SHkjaCRe%X{3*`RGComO{RC zwy7!;91BF~huY$nJB7)Qti0bR#plCkUxtRbO&_2JzXEh5?yVN*!Oy=W-OwjU#?FkY z#~9g;1GQFWXCAK_8J^N6_OeZEq5M&Bb?5<6%y;f!Ar=tIj>6l=|a0+U^1n7z_{FtGbgrMjE-uXjR|6VF+J!_#tIE zeS+s$f6c&(7O%Q6TG%?IrxV9w8y~_HW%f*x7Ns?bn!4QWo7n?02!wi$G?Z;r8OJml zsUo#V4@DjrGR6AG5p$~EEQGzo_;O$k0pccUDzU_6K0USbu^6%Htu@do3CK~WGoc^& z;2Zbzfh6sb{*ALXf=u~QLj83hQ4yVc3U}c>5N)9T%w~&x+l+UGi`hxtzBwgbA@L;1 z)!!uE`}N1S_0$)I3k9b+GwPO`2nm_m#XLuNn4#9*URV_DD$OD2)@m$RPo2OzTBujDWH=It-T=9cNp%29AaRAkGIoIWmcn=473P4G=JvB! zE|>x#_3O{CWb6a>Dju{=7%>9YyvZitzij}V^fnMAWa}S zLqO}afddgHNPCRIE+9iO@@7VuDzNs#DZ!0tWni?L>9{6(2Oz4n#dO&wD6p=!_wo}M z1ZYyGBZ6hN0)FSaKS=O50nsO%cc+et1Fxg+NbE^l1;}>{;LC>QjQ2Woio$lJzk7JEX&^ZS;Z z_z8|FF32`+Z{A!A7s^W-FV zz?B-@{LEkr>jH$A>g_ibLOi4Bg!px#`CvigQl`^Kq&y|TOyx{KRs^|})QQ=niZ}yr zcB9V7JnVuYDdC+xxv@d$&fD%-PL%fDk54_q+9``8HldUrNm-#gk|!5_q@r!#Rpfq3 zXqiM@le6_xElBtHkVx?hH~TzeP)Mqn*#~<-5zxH0kZG4^w;rNW-!5LELynV1y(`p{ zGs7FC6wxV9%CqfUF&}kHw7HPrXAG|u4<3iKRpv6Ykk;IKIFd?z(BG(VPur4cYB`hc zNL|ii!;gi%h9|VX>$vk0sc(bW41#A66r(z}zRZ>Ui4<9M7z>Gp!?6J6w+3)Hn$Aai@vKz-Yu9xvzJ95422|Sn3VO+kG z@%%WIIu#$gk};}Gv_HlVI-bp_ViaU$XC4;U?jp9A&GR0mi(on7sh;sRH=wlSwxJmn zu5dh-Q*j1a5LgsHT3B>yaBt`?5g6L2BcdmMEJ&vuMCUo^mS#`H#?s%oo`HkP#V>e9E%z(~%2G%jAcD#e2t z1YG2*A-6frr8ZkO3aecpVjyluEF~M`$gAfBZX2A(@{83EhBOhnmq%BKk)Fo;A89Y! zHJ4l3Reera$bZ|1_#df9;V1-+$Ww9~MkmMVBeYsKTwQ^&qfF(oPx5^7M#zTz1oXPKN%X<>QViT2}QUbV4)zu>h z4`o@!onf)-A(Yy1WOx$`)}#8+fU>oh9e3=#)gQ0R{s7;;l<%GnRdt#>binoY4go6e z!CNhyd4yvxdvBW3KJ{^=|BYGhgD^EmLnj2u>t^0;qK}wfCs*p&B;gq&+r#04Tq?F| zA1)<&$|oL8o$;?rp(x%gmV;)<9es6VIEEYnoFI(l^~tZUXhAF&@lEYzx7#OlknfHg zY@XRh!gdF1J0bSvpjPz_3dEe7C#+_TFi@vXLw;^!e73lp!v{a<^s-<{Cq(~)7bh1i z#O1A1@RkLRnpQCwz#^x>%ENgvFL^%9!B? zwr`AkwB~762&}A^oo!E_3QEn~OGTFIaGyUN!g8_;vnP_@0|90fCwNj(#44w`9{bEl zqgT!H?VC<|7C>%_$RxisBt*9L#Z=|@Noc9tG@K*L7R}0rrqTjuj`s=%(k7Qtsm*jz zQ597hE?BL82Y-MqM-6^-;_}Pg8BDQVL`vfbJ=RPmC_FiJQ$#u5*80S5N(6D+vx;UD zV=qK_U+z7RV-uyc{a8*To_R&jDQx7_<`Q!-|8%8`P}=_av>)kb>tFQ~nQoG4gKMwI zO)~WHw;wHjxc%r2MHF*o%$>RkKbxnickh;gt6)vu!CfEyI9`sjmoObNFkCdbY+Nnx zUFo6vL?(`7lum(RIlJ|WEY})wUhqmhg+{~(;?!W~*8cEx(?wst`TSdaM*n)5icRec zqdnHBGM91teS_UIm5h51I#_#S&wTBtj&!etFa@VH`)U){DKY7?ke`D&U3-}zcT7*|8G`^Rlo@jLMeDh{HQbxx?Vtu9@riv|u+y%L>(w@B#@JECP=D;? zL3U=09xu_&9@jBDOCBswW}ed6P+Wi`x7eJriXp4OXZ_x&E4e23RL@==k~W#E-Sp&^ z-h|(%^jHV(^ib&@DizY>d8vOwX$(DoVS;noI*x1z85h+pQ9{*Xn&f$V5yCLE%WqPI z$@9ObTX1w|jngfu!R*e|M5`9L(R!vz`JPitf>Z~7-Bn_Aq!nG|lhK$=@ibU2xJJ}gWhm9j;)6Yao+qL#DP1~^b>m3z@n@#XYaEg!43khY+3 znVhjraR8X2XC_=bvYk#sy_IU)YXi34-O92$5CrbaldBGRC`5n8=`L>3u?F|5h_qkq z#)DiSX%K2AL_dSBKI0l=1yYW|)pBEl!IBjVwYx-w=$C%E0yWrZ1=c3rymr$t6kKO= zPV{)qB26Z0KFzMl61?i{Uz{Z%g0@??E@oyd(!2>lsWy)+K|=)|Dxx+Vyc*+o3%(yp zzi=Rtt$*7Rw0*4qoRS^^f*R|jHO-;)5m7zDp2wEp3jMy73Kfyy^VxXC`SL|t+HT6N z`?Z!JUTLEeGXE@?iL?s@1{Z1TwRX)bjaq_n93ATE`{zIr%l%uhOMMP)tI{Y~>T?qE z*fBFX3Pb|amH0bQI;U&l+;v?mkS|%|noEiXryfI0H!BO#Tcw)sJUC&9{pI zWmB>Z&9b0$gLOuO-FjBw+H9RiOyOAYgNjj|^yDJ#TBll@>a-;&I>#mYM#X}=eYYl*NLH+;eg_>=tM(%&<6Am<8w#Oh1Mu#e$(JH7w1hIodcV zo~S8r4mKDM4P|m;zy)L>Kji&3dYp*iV<9~=P>oveGgTA~Hom@U<~PHq1(ZU~H>O_?wOamSM#+ma)|5iq&s%&sXKcR+o8Nysl?B6x6? z@`M0J2bYVya+ahohX(o2)FZ%pvayGUi;1 z`Z)0Jv^NkT{N;ZcDyjC<#Z3Mhmnb6R$bJS|IRpi}v zz$cD7o!g-2s1;P-U!@{{GKvz!7=TBTD~|eC{QhC|@am|nR_7cG33etVjdYVUdbf%! zn%yLyabCkKg57F+h<8M6n`Y6mML*N?0f#8$5|O~c0Ro(4&~17iUY z8OmD2Jx1>g$K&6t#ud6QCQ(Eb=48wCi!>Vr*Q(A2`HWx`9u6{FNVZLcdPNj|;bSvV zVj#2OZHs+6_O+reNor7Td-O~tTzaUSXs!QdG5EuH`XL>YPM$%WbCv&U5tfd;F-DEW zR@oHV>SrAE=JxY5IfTf84aG zk|8S=J8TN?8JX;T|8bF@wYHb7ob9W7zr1q@EXRI$b(trE^-oPx# literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000034.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000034.vtp new file mode 100644 index 0000000000000000000000000000000000000000..4495400dd827a961610f6f6e5439b114e04bf34f GIT binary patch literal 6351 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000035.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000035.vtp new file mode 100644 index 0000000000000000000000000000000000000000..4d9679f812994cae2a12ae931eaa7440c1edd2f6 GIT binary patch literal 6359 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000036.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000036.vtp new file mode 100644 index 0000000000000000000000000000000000000000..3b7e2ef08982c3e9c4d33db95e4bd7fa2bcb9ee7 GIT binary patch literal 6360 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000037.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000037.vtp new file mode 100644 index 0000000000000000000000000000000000000000..094f9e2c607cdf0542b79485d806011c5a216e01 GIT binary patch literal 6357 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000040.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000040.vtp new file mode 100644 index 0000000000000000000000000000000000000000..58a6c8709b6083531c5239020481508eb763df33 GIT binary patch literal 6351 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000041.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000041.vtp new file mode 100644 index 0000000000000000000000000000000000000000..2d7688ce05ad33e41d8e5c209e4ef4cbd72132d0 GIT binary patch literal 5259 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 dU@juXjA>~AyA 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000044.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000044.vtp new file mode 100644 index 0000000000000000000000000000000000000000..c60c7545fca1a77edec22225f0ece652eb0dad24 GIT binary patch literal 6360 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000045.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000045.vtp new file mode 100644 index 0000000000000000000000000000000000000000..402e1d64f83d8cf7fc56162a28196e679cca26f9 GIT binary patch literal 6355 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000047.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000047.vtp new file mode 100644 index 0000000000000000000000000000000000000000..836c512256582e10c7683c8c60d9a2fe5bdce388 GIT binary patch literal 6354 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 U*Oyy=eV?`Vfdcyd3kB@|03Y845&!@I literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000048.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000048.vtp new file mode 100644 index 0000000000000000000000000000000000000000..6f432299841e0fb69ceb1589368771603b3d190c GIT binary patch literal 6358 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000049.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000049.vtp new file mode 100644 index 0000000000000000000000000000000000000000..932969ccef5393e30b7648fa2c651e4f63231151 GIT binary patch literal 6568 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000050.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000050.vtp new file mode 100644 index 0000000000000000000000000000000000000000..1e310052e6f3af960b03140a8e547aa10630bfb1 GIT binary patch literal 6364 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 S%=PCdTWhZ>6u-Z#(EDHO&I%U* literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000051.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000051.vtp new file mode 100644 index 0000000000000000000000000000000000000000..53247057d7b966dedeb49e5b65d72e9316236446 GIT binary patch literal 6363 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 R{djk4_HhOL>+=fK{{Y(R7UTc` literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000053.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000053.vtp new file mode 100644 index 0000000000000000000000000000000000000000..46c97f1b08ceaa7ebf4b1e961636bf03b9f9284e GIT binary patch literal 6368 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 l>;>};Eo?J$979CeLnVjgR8$g@q*lTt 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 W;;t{xxc>TBYvnx!?Awb9{r>|l(A(4i literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000055.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000055.vtp new file mode 100644 index 0000000000000000000000000000000000000000..3cc5cd8f949fc21a13c4d382716fcbf4d64425d8 GIT binary patch literal 6363 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000058.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000058.vtp new file mode 100644 index 0000000000000000000000000000000000000000..e178acc511b590881603c0fe667c07d663cec093 GIT binary patch literal 6350 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 M!wJaOrxVcs03PVyr2qf` literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000059.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000059.vtp new file mode 100644 index 0000000000000000000000000000000000000000..1bae7bcdfc8cfef9ab8f8c328b04f18ac4d59697 GIT binary patch literal 6360 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 XxwxbC%N5t3Z?!gFQ^3Bxr$GJ>`6Tuo literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000060.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000060.vtp new file mode 100644 index 0000000000000000000000000000000000000000..ccc8faca5667b7b0b5ceefa580b44ff22f4fe63a GIT binary patch literal 6360 zcmbVxc|4Ts|GqWa&^mFfbBa<%_F*uOq!L04VHg@?$ujok%rJIkLP?ggRpOM8BqNMb zCfO^p4#wDJCo>t$m$uLOoZqK@uXE;)x#xYqp8I{hulIf3*Yld^(S!%Mxk~z>y}X?< z?pk04$WgE)+8u?lcXoHw0{i+n$U(ty?Jb&S=M7FcyP_q10zJ@LU=xgM;Bh-2JMiCD zUJCR5xvP5H0I{fNKR^*vf=^7k6PwdHFCD2%&1 z8s+2c=j;>szw20M{PQ|g)S>^W{+r++~gdh{=i{~vV!hNF8<#|ynK-|s5=>-PSVFI4TXTZzQE( zZJ>gJs=_aK@NZCNXjcsCr&{?nl$!EC>Yfe?g?2@I+5Jmqib@Lqh}mhhm&?CspdwWL zAHf)6>^5BQUmz(d|Ff<7hIAa`^Dn@Z6&02LqYF*>|2|~vp0i<(8z*kVe!klDmq_QE zRc#!|zgWDNo&UN^A~`v}e#W@|dsO`v2c+$amn$2S4JMOhhF#n4*7Z!bmW;BgS?1JGd-rDIN@AHpX^DAW>AbG;5hAOL$8~eI*JLlPzWE%Z!{bou_ruH-Z zjIHp!yFS7Y61&TccW^X*a^{if7B!_xE>Jv@5>zlvL9wu+eeWRR<~s(Gk}n2L4DVt^ zV<5G>dPrSjtw(uO=f~WoQAo}H14Gu)g!16wvLxn6>goeI<8uol7%~Mped@9eYpHCt zPdG4D<(&IV3hT1pz7-tfWw1*VBduV#lt$kqfMX!EE1n^5zBM_D>Tn}64~!&EZ$PS)QG$bH;iC3kRkUwEzK_ShsVyMQno`0Uz8)Q==IdE5vXz8wPbcwI|2}jD zbp|?o%^N}-ig9r#4##1|nXi!If%H_++FYi2U%+U%F{ux8%z-=dJI3s{oZrV2KQQDd zI$Jgn0sVyi`U$FEzK7T|-QlSX5!EtYlQj>OMj?n7UQ@60@zYf7>{wkfsIaesH9Ou= zDp9q@t;*)U|1%WG4-~7Sg~}y^k9tdovlc~^wIP3SC)xnnnngGt&tvmP*LV&FaYP5F zKsow~qQ!oejrAiN=PZXHJM1;5RnX^1cs|#miR+0tIF;AaEDq-hAHM*D&SX2l718g0 zBgiA+5keAoF?Y=1WfIXP0U%Sjl5k09U)5wXoWZJ~8q34+$B-8=>PO%iQX#1s zxI^$QF}AFfMQQkCO@|eK#D4hJ1HyWoyTR~nwY2N`5D9p*bfsnhNCfV7rSH=Y#%_3o zg|*zBDM9%AhB4ydPe-p$5*s9tmjH`c{AFJqI-5&j&^G+R_!Ta`jNHS$&R1C zx906Pp+zSp6((*U4GLZ}U~QlA8{I6@ z7e!E#oubY^qTO1JF@WgJL;Pv1^AEf=p>j?Hn_7}_j1ow3?S z4ds*-FIO*=b9)fVZC=&pxk(I5WX2|B4Z2N93v^u65{@-W8=yxzIEXf!lM@|^d(voJ zIkX8>wP5{zfmj@?>)FbAN0`^fWA2mxn%L(fG@8eoyCdy~wBf{n!M?EE#%*T=rfLeiE%MKYRBvD6Q^p@duM>ob%swW{UD~l%EV!lX z1wGMwAEKhB8r+MH&keuaG&B<*38v9=V)D9m&9E@$3DAqxpnaP`Ao~Q18;T7bQnmH? zN1d;oh|F6jD`ie=tcvBFn$UiSxe`f`2)>Aif~gNRxiKp#7JGPF{ewPnvJ z^5#$rhGAoc=BR9u(Pw?Qin)C%9_?*pVr^-4@A2D#8TC6^`zQKCOsP9_E!qZMUKx0M z$?-rT6DozLS+nOF9CT5K<%G(QroneB&<@{&bk$YtI5nPHC2q&19XXiWv=f!pYlSXf z{1AaDr~^6is6w;jQMeh=nkt=(%k>BSQtZ_(oWI)06rJFdWkqsF^wzbbAM&iVRAjXF z2SBbAwcSCt>N0O*o#nBP)U4_H>yHDM1&~9ovHHWit~ZHD?mqB}>3sFspvAb&ld(AW z&J@is_Hd&Zx=~}ZOv)hLZ{{HBY3wtno%jd|UPHFV$9=)I$Jp(mmJ-*bj}P`vFqqqo z%;U3nGw;50vxg^i&GHJDA1Hm!N29KaXtP)Na0RgW09la`H{R%v&poD?+s2g^s!KC% zLrIn(d+2Pk%$}Bq;yl%3PqF9iWrE2mr*ipovkE>-S?pe6M}cdD?M9SmjrYuStB<|J zSa_M+UKOmC*0}FMYKld6HM>v;HtTe%dl#4gAzF1bn%bYWw#|Br+sVLpJlcmBHIAAK zZwd@9Q}WK_!v|F+{&7T&OVe`ixPL-iKh-==au$Ehl?YW%$k~G%A^X?hdEo5mS^dTySUe_MWkxM_=UQ} z87vmNXNOnE`MC>3gu*Y#9;A7mQ8YTa~uTWPr9-r&ILH8~#0ny2-qg^J8+ zJ`3~dh0P7y!wG7oS`(8q^O{Z-cTuSNn;t~yNyIha{xe2(+my~F%DWpLbHS}HtugIP z(X=AtoELLvcOwu4H9(cpK0^z=-!jd>z9v(QHPy?Yi)rlYWJgtEBTQ&3$hN~d_ z60T_e$gDsiKAM2n5(Y_~+Y#VlT5uNY8o-6X^|W`rKPMI@(7pTl3=W*g4=O|k42sJ; z&Q>=Zz}Pru>Ru^l#6T{W@53F<1Di~HJMKiJRVg0)#BRJEeodu^>k;DS0A29hvWjfN zF~KtrlieNc4MPd?{LqEvaI;RG)sd)tF{}_>ST*gV53Fg;ZAR3P9|kmzI^D+V>jON{L0-wK5b^`TBNvW0 zq}LtyDh38jiGh=%Ug-mjov-bl1V@lx*S#$0xeWuX?;a>he6J52O1dD&FpVU$Mmi3C zCcpqC<7Y~L*60IUa#bF6a7U4?R3sk%ZU_T>^QKznuIK|>R~E3Y;ZbD0yL*QkYc+s^ zTT33&+x3A*EYs5slA>3FFpp}iXsd8n7ypdfC6@m;6L8- zodg=S$Hy}lBFTlvGIrawsRF0{5&?cIJwTRN?=t^9g1mh3Af*kb3>3bE)hfv90_STL z#Z8G}WJ<1WiFLOEAg;K-^F%QKcwJ1k>Pp6w1EMrQbRl`5A^WD3gP;}=M?UenFyEgX zNC~}Sbl@<6^+%?p+p7ch1Z~;9#ct$nZ>ITGU8R8u36qti&&oig`1!z}Nq^T5>2H{( znQE*`ytSY>aqqyrBNn7OPT9t+vH>%6U-Sas&NWc_=^YyUpiB=<3*h0>%TU4g+9NJ| zC2JV{cig%!bO;r_Pvp3 zCZh=cm}2P1!1rx2_a78Wcb}Pn@*2!slBL0Je z4*y)nsT>g7Ulf*A;8|H(y;VvZRcS+C3a=G#o&R&BZ1*)G?m%39*ZVGh z&%2jDKc1Jb6|hfAtK8ofDO45QS2d^lHeDuxD+hAiYczUjD^+W`R*-4*{8W+lRiXaR z4FCLysX6YR;Ed;8!D3RuR+YBBJmG_U(;~u8dD4$v!CN*kmgfsme9y0tsJ?ivV>rg0 ztlqBPT7jWcYbb5VRUvrU_`9KTP@MR6rZ_20%?XCU87Nn+)i+%_3f5FcVFV{%l8$^ja+ ztwek>aO((ti9Ex1oKz4+=<(_mJo}<#3ivp8`<`0a;r0Jo6sCmZ@#4Uhe?` Z4(Gv@%rB3){`ypF{WXRBxAzp<{|6`7{RRL4 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block1-00000061.vtp b/test/writevtk/cf1a_mb_with_observers-block1-00000061.vtp new file mode 100644 index 0000000000000000000000000000000000000000..c8cb83e45ef9d55128443db77bdf7b6c783acedf GIT binary patch literal 6368 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000002.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000002.vtp new file mode 100644 index 0000000000000000000000000000000000000000..888acbdba55d59eff49d8d7dc6a6bc12b5a7683f GIT binary patch literal 6358 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 Sy7kuwT5E48WWT?n(EbmlM+i6o literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000004.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000004.vtp new file mode 100644 index 0000000000000000000000000000000000000000..8cbcee60746c2bf5bfb193030d2ff7954ca620e7 GIT binary patch literal 6360 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000006.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000006.vtp new file mode 100644 index 0000000000000000000000000000000000000000..03df0b82ef113cc0185013a300bf79a16150c746 GIT binary patch literal 6356 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 U`to?|&rh^AUr|86y`#|jKLu>{6#xJL literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000007.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000007.vtp new file mode 100644 index 0000000000000000000000000000000000000000..fdd4676402f40234e4678b498b63793fed855a61 GIT binary patch literal 6358 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 aH&=e+lJA!rTtDB_T6stz`|T-(=Kle8OCj_C literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000008.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000008.vtp new file mode 100644 index 0000000000000000000000000000000000000000..06f0044b882cf5839f855f4740f0b9a65a0d853f GIT binary patch literal 6356 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 bg&b^cX(Q%e9&i2pL~H#Oh0M2i6v+PrZ6NX< literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000009.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000009.vtp new file mode 100644 index 0000000000000000000000000000000000000000..785a2a99ffb96efab1bfe081b23c0d6b38d9074b GIT binary patch literal 5265 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000010.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000010.vtp new file mode 100644 index 0000000000000000000000000000000000000000..dd1fcfb49cc7b872c8bbd9766197329b976d1542 GIT binary patch literal 6354 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 T%ge2w-)F6Uppg6ag#z|}l#=g1 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000011.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000011.vtp new file mode 100644 index 0000000000000000000000000000000000000000..050f05a5606d0bc9794dcc21c5a08e924844aefd GIT binary patch literal 6356 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000015.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000015.vtp new file mode 100644 index 0000000000000000000000000000000000000000..5523bd5f39caf6cd2ba79c598c2c0f9fe7c195be GIT binary patch literal 6355 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000016.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000016.vtp new file mode 100644 index 0000000000000000000000000000000000000000..e19b01b7fcd8743a03901f1747bbc09ec03eb228 GIT binary patch literal 6355 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 a1C{^#Nx?5qw|;)0weyBT=-Vp_h5rLH8s~Wc literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000017.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000017.vtp new file mode 100644 index 0000000000000000000000000000000000000000..db0ffdc9a9ccc041cf5cb2edc213af22dfd364a3 GIT binary patch literal 6517 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000018.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000018.vtp new file mode 100644 index 0000000000000000000000000000000000000000..f7b074b17486b4a8a626450c135f457c6418aade GIT binary patch literal 6359 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000019.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000019.vtp new file mode 100644 index 0000000000000000000000000000000000000000..3854e49980b5f10a2de9ab6b8bae84782b582acd GIT binary patch literal 6359 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 MUn!tpKU2W|1=7+T(f|Me literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000020.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000020.vtp new file mode 100644 index 0000000000000000000000000000000000000000..31cbbc42e0bfe21a33c229d9298fbf6b922af292 GIT binary patch literal 6370 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 P{npF}3+UG`7O4LM5ZwJS literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000021.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000021.vtp new file mode 100644 index 0000000000000000000000000000000000000000..2dcc4315caffa69cf3814bae8098224938a12c45 GIT binary patch literal 6365 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 Y4?~&T{pAtY&rh|MUQQi#eHg%**rlyzj85o3=x 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000024.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000024.vtp new file mode 100644 index 0000000000000000000000000000000000000000..a355d9c94fe82cf31219ad9ef0cf2e1f26bbd813 GIT binary patch literal 6354 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 Rt-n6cT6sYM`~HRk`9H?N-T?pr literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000025.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000025.vtp new file mode 100644 index 0000000000000000000000000000000000000000..1a7d59ccb45c3a41ee31808caa2b2f22dc862efd GIT binary patch literal 5259 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000027.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000027.vtp new file mode 100644 index 0000000000000000000000000000000000000000..bd08f0fb48dedb2b88e38f3467a849c1e886bfd9 GIT binary patch literal 6361 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 J&o3&B{sYuB@VEc~ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000028.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000028.vtp new file mode 100644 index 0000000000000000000000000000000000000000..579dfd048d5e5f5df32d94d2dd28a109cf244a17 GIT binary patch literal 6356 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 ZPbzIO^UI5_zrNdA{a7LY?P~?<{{W?n0x|#q literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000030.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000030.vtp new file mode 100644 index 0000000000000000000000000000000000000000..919a8c1f8ee5747a16626294028398c07dee46c5 GIT binary patch literal 6362 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 P&$U)xRKUNzsnGlnIK2I@ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000033.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000033.vtp new file mode 100644 index 0000000000000000000000000000000000000000..ee8bc8bb0030c6ab67ba0af6e46d5293680c505e GIT binary patch literal 6529 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 Crbzez literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000034.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000034.vtp new file mode 100644 index 0000000000000000000000000000000000000000..9d7c55bc0516b9b3d8930d1613380a767f2b6383 GIT binary patch literal 6356 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 V@}J*u{rFOA^(%$y*UuEt{{vY>0~Y`Q literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000037.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000037.vtp new file mode 100644 index 0000000000000000000000000000000000000000..8d01879fa7fd0fe566c4f4e1ab5b2fd4daf72520 GIT binary patch literal 6367 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 W-aTL5bp83|*5=m=rEi}rp#KN&y%UoF literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000038.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000038.vtp new file mode 100644 index 0000000000000000000000000000000000000000..8a51fed3a6c1cb559c926becb00194d374aa0107 GIT binary patch literal 6361 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 Y)l=LBU+;1K^|sdfa|-$I4=UjQ1CgBh8UO$Q literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000039.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000039.vtp new file mode 100644 index 0000000000000000000000000000000000000000..d1167ac16a053385f473d73191165dc0e6be73b0 GIT binary patch literal 6355 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 U*QZ;5eW11VhC=lFD+;Cm1IS6*DF6Tf literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000040.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000040.vtp new file mode 100644 index 0000000000000000000000000000000000000000..e511f462500c66add4c32fe04aebbad9bf5c1d4c GIT binary patch literal 6351 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 DG4&0R literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000041.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000041.vtp new file mode 100644 index 0000000000000000000000000000000000000000..f4c95bd68b8a1584517e1afe6a6dc5718843daf4 GIT binary patch literal 5269 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000042.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000042.vtp new file mode 100644 index 0000000000000000000000000000000000000000..3f9b2656c2ff964460b1efe72fa427ac4bb6a1a5 GIT binary patch literal 6355 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 ZAl~7|dF#v5t-n6d+I&L+`Sywe_Aj!X@zMYQ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000043.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000043.vtp new file mode 100644 index 0000000000000000000000000000000000000000..d017d528e12513286940f5764eac8bab8ed3c6b1 GIT binary patch literal 6361 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000047.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000047.vtp new file mode 100644 index 0000000000000000000000000000000000000000..130316599f065843bc5e03d04d214f031525c344 GIT binary patch literal 6356 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 P(OUULA@}VYh4%jd$r&Z@ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000048.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000048.vtp new file mode 100644 index 0000000000000000000000000000000000000000..f569a0d489bc8b520a52df3bf1d337752ae4fd25 GIT binary patch literal 6362 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 RuD`z5TK`a?^6g6n^gqDT0t5g6 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000049.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000049.vtp new file mode 100644 index 0000000000000000000000000000000000000000..093dd09ec53d3cd59cd8b7ec72850b3c7b6fa536 GIT binary patch literal 6572 zcmbVRdpMK*8z+$xl1jzU3Y8c+4zrXF&Xtfb4NG#^Y;zt{j<1E66y;PDMM4X67>~mo z5(+98d$fa-ng

S?~z|Pq1{klp_IUqSI}5j zBpwDvVlXH-2b2R?5`EdSu%kqtZJ=)C;Wsi6A zbi(`mZyt(&$3sm`@xM&|AJ#YWzmWU4Fi?d*z-U4Kq)_Vw%Ejf2#=nvLm$Dn8+#K;& z|Akyd1qG$Q)%zEq6Q(*?)VhCv*yxY{@81emR8aqe;{Q?DzW|*@Db$&Tu@l#zf^WqMN$2q!0Dr~&i|r-N(xZu zKY=ksBfreOe}kl|_K)iK9Z46B{}*7&%1SE#m8AvwbDOPCoi79OOV527K;H)S*GT94 zu=>)He;D#uq}TeKwB_XZ_DR_I=XG$yx7a%g)$DYp&0Va{{fyK;NUL@52c0Hguv3~` z#juXkhprkc%R_e8#LxI#2o147#GJZ%tr?o@W88~hWbgi{h0}=sfYrzyoz}PCcWJxM za`2kApsk5Ex~-Z2QlV33)9A6}v6`%osV5)%)KxRqRvg3qZVbEeT=d`<;^CsyOT}2) z2&hfpFDry6EctURaILH=Y{}f1&R8x}A!@egikZreJAc&QtCNB~=#U+N+(5Ug=gWS} zPz^V!6S$Z~7}|qO_$@^Z!Ji;O| z6_*;}v7gBK6#KNOeBB$%=gkjS2Q_e&1))Mgx0N?u3v)Kx{s=Xs-G~k;?Lj_{Y12bV z%hvl@Z9#N~Dc#>Yl9c%(X*OLWubXcV9~J>y$oWl1Vuz<)p}JrhXy>3FkhdUbAAxwa z7kfvFj6YDsIYr06?tYBy+{h9&@Jk~cn%*+H)XKf)&dqFIyNoQU3L|H?w}a<2u(|g= zUYb>0d0kcPXfkW>XfNFkInP_3#y=E;N_U1m-OO$Bd#S=By<7cL6W|lvV7;aJ+fVCT|W+RI_S9nM+@|S|M6qB z``#MfNj5Z<4OJZ5IP%hH56-wlo~;oL{NOh)6tFm41Ycd;bi0>3{Re}o z?}$IvQ$HEV(R8-xu1Cl8Vh`xWs($?*T4TNsy4x6BDT5uad7?BTZ(V|&sLdfx_V`VG zY#@u|(#w{nMjMMHDpt8v*SLO(BL5S`Du0GLXE1hhPWJxnUS(~0U#>XBv4>ju1ibt4 zX@%8|2mLw10ut0Y==ouwUvXagc^c;whv3?cT23qfg%EhohC`ozk0Zc)xZTa82=4Gv zGfj2o!z=Kks5hb{h%G#Lo5TZjqB*=+BCNn$I{aV=y>xdnPI40Th0H&Ok|7PZhrOBt6wLRSC|^Xy8)tP=v>)ES2?`K;XpV zwq|JP5qQeJz`H4gL+~vTmzNS|rQzc>9ag--2jF~Cdrorh0K>P|_5YqDF9C0srfPYM z?1j6A(?1Kbcff-!ZR8Rs1mUg0X+p|LJaAC=2hY;cWo-=`RuLhasXZ&UQ|Qvjd+nnY zI}7GL0qwPT$Im}X^ZNS?{jq|7&eXQ<&vxgE=<-VyZ2l7+$=C9cqX~-+&ug{)V2|gs zN1#gV&0gI@E?BaMC1JOG0Dv1j{>F8NZEe-xj&#Itkk`g_x%P#>Zc>d}@r;)fNV!g8 zE|oSsT7KCIvzTyLlCrQ4B#m8_d)!8)*a^mWjmx#sZEui7pAr3gU-(By20a^+L(XJl zSbnF~X7Ib^@(!8ZT_qmx^`Oi*&7FAe7*a`%ld$VkG*xzpw4cWe zU8l1#ZTB|zpK39Xgfmsvlu_Z_HCWl%z>moj;~x#}+SNu1+iT zN(E?YMnxCrq+ODmUOvs(S+OUjlBU+l>-fAOwa8r$_k#XtT5JGhrF|I(n&v=xP87Ga~pPU8&DH{|PSl z`I01CTt2{|k-8x3Qq(njBhCYwKJ;&WQZBnEb(~YR(e=fz93=VE zLH3t9IEBJeFr`P#caCwH7I{D0)l=)x$g$J577TGHuVn!Xsb$*J?qV3$Tq$;;tIk>w z-&`IWaNqO_#8AsWvFGlBpqAkHJ8cK~lq$%qpI^GlZk-t9G@Ky7{IMaIu=hAAu-JGZ$p3;hY_ zB4YA4Y3C-SOxn9{6|u1C?La2)BK9ZfS9oXMlp5Ud#}k^(JR7~ z`BRDj_5<+QF8EW-Cnp<$D>Ocbp!C z&+ZAh*z0Cjc|9YN2d8bTM&{y6T50@lu*&T$)tj4g~IvOofwqC4ItM4Dr=}oB{ zV8m?4qW5&jz35dMXiZA2Fs`JbkHl+<94@XgUl{yMVP?0iXVCo9T9O6+%z>Rg!X>lv zRW$x*a)^5-*#Z_l>1W>kQvYqY^T0)Impw+QheLjlKLJKL)}mV@sE1D5yqmW5U-TiBxOyYGAs3JUnR~h_LSyfVyk2+l-Rpg6h@ih>hvrJKoM#U(|$Hb%$o~%^O znK{bvRB%T$(%AU&5_RJ^-%&LilTFW7i?48u33v(CT});Bo5v3gd}8aby!A{Op73Th z>V|All%jY;*je{+=w-3o@-o8bhC{*>Xst&!`)Q0IK8bj;QjHL$ZcU)8)drf#+z_*r z>P5H^r8kR=yo&aALF`~8fD(I;AP;hhKzz!dJvG;O#UkchP3koPQK;-e%VGhE&0f~{ zQ+kIXWdA?WwFrIo_!oa2*kepvwZ$kmBRe>~DIGm`66P0Q(F%nDyL1;G&6qKeBpHTD6*BPJPE zPom7IrJwkBtdBO*oGbJN-sYY?M5Iown+Hyr&#`5}#G6K=BoIUF6a|$)(o7;Qj4IHA z8G7-&Cl<3|-{ko+qjD3OwsTJsN9Upso}hRyEY`&H+_a3!Y(9iuF$M98^iAD!oEgrx zjCxRFs-i4cE3iSTQuguf^(>$E7H$YZg5gmc<21dXHr5EZ}eG;I%Bj56G5P%7A z9;g;&+W~=n=9jr7E&%+O_m&~bMPc5L3Od6auK`E(I=Bh77XX9jLFuL%veesKleSL> zxB*`H7;`-VQ=sQD8A?xu!umlzQ`|HRFuwDw?R&p-K$lEH`0}VUHL|enx-k?BylGpk zIcj?r0IJy{<9I15SE-n`Nf8bRK)v1BrC|cRPOyDov!)Dt_i*okk*)_&#iAFrsTcz> zz55GZx9xyw$ZURplkN#zbE~ z4n?f<2O@N%80rrUfh*!_F70q7*x9G*^|{GJV2n@AOZllGfVF!3O7*l7Y@_-hw`4^i zkR+FTKcmhN0BOxBBRYg(o>Ib6w$HBv{6~+hNR1l;vNf#-88cvN7)yn6HRA>_DqgKX zUgyat5hw9#o#&LqQ>)bYAb{1odgG3&5#WszO4E6$1Y>WnMdk$r1MhaWq&+@u1jr{i znx{Z^zz*FplVhI?0iau9BXl(*U~k_OSMf(muq~M?Ssh%VKwQt^u0ykiz=C=$OkhqJ z#S{ zw?lzRKrl)Xqz~Mb6qD=Y*baN8Jvy2?69R;7)_lsLb_Qr#)RP)NtpGbrdFeb|7!2S_ z!1}_aCxO5^%DwP8e%OV&qvGc%H-IzYZEm^DA~5qomcQ8N z7$BAJA0AS~1B(JqE#&5S0UN*`?(;9T00--e`WpcKdogSxMtVgm$~-&l^mQ;#A`uSrEqaHgX#wI2Ss6ifasuse!1vMMU>d*pDKX9_2X3 zyn;H!AN25J&|3tJD_(hrZX+VWFQ75#2NSC`IS-=7dD*)SsaFRZRGc7Qvn2_MXC}8& zeQYlIPSjFKXqn{~GsnZ7O|mQAWvMtZv*Jrznxk~X$q$E9h`bjhO4SP$n?(1?dtsh1 zqtL?a=`knx!I2Z;EmRJ2Y;4G3Y_IM_T>aNr9vaW^;K7 z-Mfk&RM-L?-y2m;V=8y1b`6wzGB<~$tT!Ymgfz287Fn6eaYm1is!{j&hvVN~x}e%b zF862przbX%DFRir{d2EY;nX}7y1Mc#_2aPL0K-s%4qa|SP&$UZnfM`|eFg|83o{`j13{nZQP`@0wI{{YNBfh7O{ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000050.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000050.vtp new file mode 100644 index 0000000000000000000000000000000000000000..70e92dabff45b800d191e35c4369a60d5ff6c14a GIT binary patch literal 6358 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000052.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000052.vtp new file mode 100644 index 0000000000000000000000000000000000000000..2f27d90a67fcb1d752fdcdea3efd560596125818 GIT binary patch literal 6362 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 Xab$t->qD+TKi67*Q33t_rULmNjhqfA literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000055.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000055.vtp new file mode 100644 index 0000000000000000000000000000000000000000..0ffe2bda2863b4dc87e7dcc16733885ade3cff02 GIT binary patch literal 6360 zcmbVRc{r49`zBkdkYbc2luByGzRWOV-?#Eg_QYU{*$iXfmuiGaC=3bNvJ@ukQ?eux zk}O$pp}Fr zz~aJ!NVGl10flx_5_Tszo|P9yz*!Y9{Gq3bazP3bys$_mVPlMom%1InPWUf7FMAP? zwivtv60anzk0KCUkQ!(QlpR`F&>3mBowfb8-Bbrnkd+n|w8yw&@klo}%=YCTgsT?% zsLMN5)qbXh;jDs!ia*eHf}IeBv_}dWy1QOR;*A`QF(@>_O-WcvLilG+AB9Hlq{P4O z|F-GtW#1}%P3!=v;PG}|-zjOjVC=p&WoYO6mElg=|CHS634=y{gAx{W#Nb`+2ui|s zSS%9lfOHTR#5g*-A-6N)!jK;*ijZ&3{fxi%^&{G5^4A`|kL6nj_82r8X-`0Tpa@?7 zyN_+gzwbj<{FhGtKdf)f|Ay}0!pQv!qX_vghKg!P7ndE5e?$2%W7kKboe0kVg08%{ zqurK>lL!cst^@ zOWM-Yefx~>`tMc#d+eF4@y1-Ala2?#-P5v1gUe!%@H*a(FH8K02Zy25LYqokb?(cO z?i6LlH6I&G>?pQ)WN}lwY)(Zq$?`~u#$q~Cx`WU|+)L}kSa9?{r-E#_Z2)Gg*7LRw zm9%!4WnLk(_Ua#L`#Ukl@2`X}*OKn;B|lyZ95LsbJTaKoClgg-qImXN?sAe3p1ED5 z*xbxMY~zg&+^mP=sye1;B?#HZ8@T*<^mh6!p@q3)q_XM;qOozsT+DG^mF%vp3)-Zc zm&Un8rUFnZl07s$BE?%+So2yN6HcjPR_6#7KU=;K^v?+Kr0m zIyjz0Q|+`WWAfymAd!Zo`m9eUb}n9e>PtG&CJA)*VvX_~HuDDN zOQGK}j@485_{81fT2@xzf&Pz_M4G|4=X9^Q(Orz~(VcAKU@@yVcd(WfD;mxP#27KZ zPs9+wSlP5RKx5Fmq{C%kI4J)emr}+wFVrqKmEzmJcar_fou1=%3l)kc%(N%$e3Q8s zn5d!)P40c!Pad*Ye94*PdPXFq)|8kA( z82iI5FK&!yi_YRcF6xJ_hQ9y!v8sR9n`g3heJOp&b|l_kpkcAFC3X0c?j6Qw$40N& z8_Iu-bOTdHZ(K!FK1TTnEZ5lzcu|u;n>4c7fah3%_`_{T|(#=?zJG75eNXe(FVz)EL;R0zchQ5b(L*XLkJMV^HBh)!OXD ztMa3@n+&pB3>m*e0slm?ES|4k)SJ{;6iZt;A`J(7Gu*aOexO+FOTekliElEV@}rCJ zPn4${D30L&UA48J)#zvG*tdck=q>$L!Vm?!L_fvc_C@qF;Vwk^;t&(2F!`AWjtEI) zJ1+@hiwNa7nvS`50rB)`M5!m}975`F>HC3NU4)gyv7p!+8VIlE{nwc4RS-}iP2-!B zN{HQWvq@R$3W%UZJt=7&S;SgS2HArwh1gAf$sq17fk;SQtLis`AOcivO)&~*5UE0e zNvXb~2-X{y))E&^Af{e)TkZ}$j@T=5ScCqMFk)ZhP)q^%D5CX5wW25J2*UN+z?TC{ zhY+FW)@Sccvm-h}?;ns(W=8P${pnFTu?~k?)5?AGX5b5aTn8-1df}3_T&2q%0DLRK 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

1xrCoNY`2#7XhSv!7>k8I6>l-H`3eITEFNRI4 zBo0=eFUr7&gmk1z>C`67D2HxIeV8N}7T}h*KE3}i_qhN|gX~3HmnanXrxOM%8+fzj b1nB6Z&auM2KH~cIsn+&u3dr~O6!8B8-$(M= literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000056.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000056.vtp new file mode 100644 index 0000000000000000000000000000000000000000..eb2cb6ca46eee3451c681ae5309f11fe26c62dd5 GIT binary patch literal 6346 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 b6JcY!QA5}N@=)vN=U5vrCcxj`Ou+sR%_9F9 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000057.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000057.vtp new file mode 100644 index 0000000000000000000000000000000000000000..20bedef5ddb3147105cde3ed7e948b0f27f5a839 GIT binary patch literal 5250 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000058.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000058.vtp new file mode 100644 index 0000000000000000000000000000000000000000..23244892101c34eaa501854cb88bf7de3dca9ccf GIT binary patch literal 6349 zcmbVRc{r5o`?pjavb9aJ50Nl-#x`R~WjVB1ia`@I2s2}heJd2QMcJ~2L}jfogdrv; zL?vWrWEaLVMwt20c9!c~zw4a$kN0`+`+A@IbARsV^W4vMy{{(J$IVsP3xV};Mx(TV z@*p{&Fal+dc5p^HY5_fQNEt8?3SrZ?%xn;W2TDoQ|Md$bz{i}3J3Z@=z^bFngZ zzPuAv?}r-*VG|bC{EoI`?3m67dxWrwr`u%&))aXL?To^CXaN=Ffj@l4&M3r=OYY13 zuamyK_BFy6#}1GV77O?NM(Lz08vZ3I6S&(KhC5;Z47rmN8in`@1r$c2v2Jjj77&iX zAW#kn2cR$-iS$5hd*pz!-%&JWzb5y?{*u>sYn#bGbNE)4uNl~*Q7D8x&e_Wu=lj3& z*k=6mJe1Yc{>qgX?Va_%kraQmfb#Mx3jc`_ZDk&@f zo2B}ObOMe04`50P@+yCVY0Cb6lWq5$o%Xo1<96E5*Eapd()re^b~fZ+T09o+z1=14 z7#Y4^Q%rv!RlnIj>HFhks-}+D4b#xXM`v!FPg{fTBkX&Fe%@fqe>`aEJo0{fxy?o* z#iCsa-oFR1Hl(6&IyrW2>oF(qzMk& z9jfR$=hO(tgIlfbZ`Vw8Zm21#&F2}b?EwToJ@=vT`tl|XLCC#ZVVNElC4r_%26k_e zXp0^$UHHo#^+dEufTTz0>=MnJ{jfBxh*v8R?4q2Vg*hG%vZhP)LdF+TJ= zzQPW+t{`DQdlZkanm1X`YEY#}tZYVhe-7dW)!p^aV~U~{ZOsxM6|=Y3umJ#m%6jqi z?oV5qWZK^H%8~|RzbWpR!Ry-RP|6AYHwwdi7;f%w{4v>V3<3-24u;2jl1wSBvL8ei>^2y9Pz%-hhv@-N=x6@u-Tw;7#Y6Ut zyNH`C%HMbj7CLBAb1GsZy(sfa8aeT@9iiBkWDU3ZRj*EQfq1Lrv?3(7H(G>)$aJzs3AMp8SC!L)2m0LDV)#5HmZ4GOXz|J*2RGb9Cs$UhV@p3svMT|1d-_gu>)SuO-~nhx)c~MC>N&K-EP~o{5>&g0jBPk9v@;2E9fx zQdBZffo?p^&GO1pgtC%eG0S<%Lz6Q%Y6eVYp~1R#=4dr(Xr{>3)XV@$DBI0T8!0Q| z(7C1_Yt}F^DEm=feZ~Vo=-%d$TSXutXuEi=rVro<)GcCYm1pe$H0+{{OxhP=WplujkX75Oo`JWx(SF$O`{K9;?YdhyvkYIn}EkLQi&F{a%_k-#X9tQS?VA z(*MKAcpt-Ih7s&>7b(9BFR~MyJf2=`F&;b(Pr*_zXX!`6)ts^|MqoGBQ)r47C|q<{4_0 z3P|Xgr}-vMH{_cYV{HxymFmfYb*7nuWNO_gu6Ko$%psp1Pyw47zVTP=>bY89au5u6 z4KL>Zp&RaVnWv>d-*xmEfG!KCnFSnU=)TEp!A=afqdafv^-^S&aVg}ClUU8jUQ?C= zBnewL53lM?H}_Pf6hBTBkyD1H8*7wB2$e^ZyBE0hL@y2*wy=&Ys2phX+%H->_&|Iz z?VKHy`pj#rgEhJ(yg3fWNqU^9hPtlB7P8N2;vi@=I0^dk_KN)JIE^QFb03-}yJq$j zkS@JBIrPUKU8*#^!}*FMlaI0iIkZ}CS%}aM!~aY|d_N>)e~E#Shb6A_!I9?I99$=A zjM7#=Cck3bQ$P(HN>poCL$aJZoE}`xa}qr0n3}vy9fqu5!*@5|hN6BiP~)blCXfLXG&k6qXNe8uDy$Wv&e8j|@zl!65Xp3D zMwY#qK6CzW`S$|Q)!CMhcn^RB`v)d>3zP=ABvrZu9)<;swMS1o zmxOY;elD1;_@K-Lnt$@hQ~$C46k{j)I997tlxI}Y7URh*^=3uYWd??Hrj18G zla9z=q;vJ^GdD_!p&$xdaHV=We$9K3u|O_#Xx0G2{@@d4ao7(zY%?f>A=8&Sx-%$4 zlicO!BofBwIq^OpAE^m+?G5KYK1m7ap6O)=K&P>7=N2hE;kAOpu|>DESOGn?bXwPw zqGo|u^@ouk?g-w9QZ+YhFH6O=j6V4N0%=|G)F^2oEF(}Bk>QEA@2&tDjPHWM6bI($ z$UJsVQ;v!)npGehNU#X|`7?nQ#fdJ@^u^gim;qTU@eI6ermG)wMqEB04|Gu zX|w9-8+u&Uluj9t<+d)e2JIG-3FB{Gw+)=P#2f_GZPjNq!fGo89w@Y_ETwpGfM}(a z7?Y_I4Ni92k--C+?gDVMlJ#`Ria+OaP{t#|*7_dUfWCdj!mQMqfJKn$IqT!W?4Y2L zWPIt$3l`4Sx=r=llYx9Zc990FEH8xA3u)koA96N1VVh%Q<&yL3f@+1q`A3P*s32I4 z(SkpC?d>VfG&>=6%;y0uJbuosS(NXQkOsdGPaQKWWN8e{jpSGi#Fp zB$$A6YhM7E^6z7_$vvSY^ny5?d1eF#rax@V-Hfb;u8B19tvodve37ZAt=h`WTSkW2&b>c9z7G9OK)-Daev*K8d%4yG|D1DcMfu6b6Th}H5AkD_li z%P)7DST@(Mm}~GKuN@&hiauM}S6r>(C22;Sn^?LYwV_awlti1F_MtwI2<_z$#`_4) zW~HoZLSl;~d_zzXyI&CVpKP>ybT4|C!6*pwd#W&=s+hFAU?;T)jB=`8R(8^tgKc`d zRMo3&X`dRViq10$>5Y&E=GbmHOHh}@SwSFGbYc`)t^pjWTf-suXg*&5F~9*hi$I^{0ZSCb>wChwlH)~F}{7DG0H>e7WYTPqe5#%C)a8_QVPN?>95D zgO$7G#nf-n!%g;sA^An?7=Nji2cR0Ie zGOl|z&g{S^@y`J!f`V1T{eTF6_p^ZnBcBNQf;n7h<|Ua5=cg$#A=xkHv~7!_1HPS# zmC`3p`xXkkj!C@S(BqTpyM6F8A=HEO4(~=DeVpGeq5Jk6Ds_5qS6DmQ6gPxJ?@12RQ+IPJ>>r;$irGOZC05GqSOlTE4f2ppwg}eI%ro_Z$ z+5T#dcvGa!W5b4fwCBV3qqQH;8Wx+M!yP&>2qNX__I12}ewHb4qsbxUmac&0<6tLa zy@jDkx$ryhV&?53Y{jv7eo3nVTWK5DGyg`CLTH&r)Qjo@8fL(q3PT0G{1gO9yV!NW9GceW(XGyx9)V@sOCUGoZ(Asw)4s7NW zm_Csj&K=C-DuF#QAJKSU!>+hRRkUf)RVuF9TEIP}dfssKkeD~<=_aj0Vk#okdgUf* z-GzsgV=3T^9g798uo%CJ?vLf}81hxlmZL_5&Ug~m&dzd^W_%HeqsLG2BZu)bPpSk& z=KWPPoW`;nIp3c5hE1uSikL)Mq>^ptOGCHj&gYC8Y>bkYsyEUnoCUC$W7WZGRFW;8 zIul@7_MVT0pEFE0ExXcH6*eGIW|`iL%xYXclqYt6i|c&43N+gTId3b!b7?kia-J>^xlF-ii!eC5kXJ^gCYXb z29T~a3sMaTQl%(O>Ib%0)=$6nUjE3p?-Fbc`0Vs^?v+rVnlL3i@_T^n&4cpM1m?9CJX+VGjzdXwo@`+_kY{; z^|Egjz9zPT)bV(G-|v*P-Ej6_n=-O@|H^Q??4KpKd%|Hc-=M%EjySx#Jy8{G@8N;L zp2M62i{Km`37D;n3>f+YMFsk;xu5aZzJ5eoO#a!!_pyBIzyXKFVjPGrUM@u6|J}zH z<6rk7uc-KEC;uPTx8{FA_qQ+#e}z$j{*9rECdSQeo8xaN|6}Zi7_1Y~`9IJ_$jJVd z?muueP1W(3E&2XX(O+-xZ}}qNzaQ&Aa7=In7vk2*`rk;f-`zl2S%qW&hLRb^4d?Jn zt^6JeE+_YIpwt~4Fm4#U{eNV33?>WzH*oqGyz74$;4y?E?BBo`;_SCw?>`{HMGE`AF?ga*|x{+6Sr+Y-)#D8r2gHiwh!cAEFN#~z2%a&^mN}o zV>|x7!oSBpDd<*9!z=Xr=u8fLsPB_HgNcbGT$d&)l_|n$=}IS9tzBKNzUs4j8o`o$ z=ALXrwzYQQYwd%b`NUn4AIvVPX9PN`AGToBXKh3uj+SzCVJ>`Quo|Fh?4)&LN#)q? z2!-cQHQqaCWF=WHS!RiAZ}=yBSJW2BFh>+5uE%Gp^F4mUH_UrH%pCsCq_!*5we{Gk z{zF{RdSqxkzdMBzn^*k{IoTXpMo2E|X z&!(0`2{o5r>>%W|UleLH8K!nv7wACrGHq5ukaAkQ?N9tf6m^2GsM>2fnUo17)||vv8hv}p2uyVs9Vat0sWzA$o{Mc#Y}d~YoI~nNuBwz z(~{m_7Qnhq=k~ZasH_y?{Y#Ab80YM?Q%ol{gmo`3&iHZf2--Mto6s0z<0RE|5)>5H ztY@=X5yDb&3o5JLx4e6PLY#t0=Sw}c^0*qZv-XKDALe5UC=hEp=||9Ed}c`4JCY!5 zt$6vKu3T{FNXw#k_uQVDsZ^-I-Iy?7f=70mxxF;+CLy_;O6wEs4+<-dHd;09cz}_n zr@EZ(8tR=*61`A!WSRMvk&^Uv#*T)k3z=zoGr;n-l_fJXR%^3Y^{&1A3}TmqY%#kz zHt80lu6O*9747?vAFI}Px%s46*A>x+Z$&bF`RFtAn=pPm{p*a?2Zy5_j1VK22#}KD zi>}y`kywAB7x!Jx3o zkohYV$WIi@ho37J4JOfxM{mvVmqSAQ7!qvMvQ!=h5Ir?M$!stl4x}RoB_Zer9+Cxr zRc-ZWHTqdP&}LXYy=CB+NL2ogBNOon0jNGEPqWwnPt^EnWyDODBkCBY;{XL}i;7?u z&cNL?LzN1Xi+uP_pkVw(ZwIRMQC6}CL$6#!qkNn9L^IW?qm)FoO=2chQLL|WDA^f` zsL(|Nn4F#hYV}@bx>q_3#X8i)AVZQxC8n*G_ZdS`!5X%waf(u?G|`acw16Whwu^SF zN%P{Usb^i5tPzJ$yTtg>^xR<7?gmzd8wXP}sz7Tt7#T=$GnIrpq(H3Sc55c;J;g7D_alg1Q+{7l2?mc6FCY1F zW6{29!DA=5s`l{SgFj&gHhYP4R}!V6MVw2}O5*}-ICSEisgc19oOlJt z1vm2(HFh=S2b+#T4@#dqBg+()*Di5VCMM{PvDM}<`yN-F_frYGU}HMDyj>qTzKEco zWIJ~ia0QxvIQrf^LpUtd9b_b3+CIu~EfRBpfmU7~XGZBC6ZZEB=Iso(vm&`sPM~kQ zwp6`ybBMf^Yj7{?xe&1~YEf$XBiD{o}&sMpZ zm+ShKKOG^i46_sJIp}Tr$Jc#3B0%`I#m0tFH5eZ9N2gIHybOj=i;UDTEmREZtgH&tmiHeExldCy|s%1b5rAqqC>l$W_{B>PaIH&rt7l z4PoH|MOtwJ^<+*R4`id-TVj+lvX|usxTN&zJ3pXq=Kd+iXBFN`1($C+Oh1RFb=(06BJysyl8+rRWaEI@|bedbxz}C<+Clv>$Fs7rm^s{zNRL8-W^3T zcE0Q5);dW5RB{$ywpNLH%sutkl|vE@Vrdo3f3mlqo0$*JL*2>#X%`}1-1hY+QRy9! z$_wL0>)kZ~!#hdIRxbmc>bjx<3+hbLe&Vf}lgUXdkXjYiNul&;f=9}kr*=iHunNi94Gn!TQUM-_8Ciqg=~zfqKjngIIImZg`3 zMV?W8&$x=Y$07?pl{c+KSs(H6#J%jk{HV)eZ^A~mKmb->(rT@sW+wJP)mae2dH-g7 zt8qA`Y))$?Ns2ExMB43TieVeEWI1M{tZw4sPL>C7ekH7VYY4>{GBx7ZpWP?$spld$5*8D5+i2Ox7AtAk;tKAzb?w%$_FM3MRz6zQG0l*ho@@>X_NXvkl>SMR%5g7 z3bpDB{#@;!d%#F(?JD;T{zeizM2H_x!oAOe?G4;*F?q5MR9k0IS((IDIb0sz{yCg{ z^mJ@Zopt%?5Rzp+(Qlv%;tM`dhV++SJM*KpxX>IA$#dvLs&NNA7~!hEiB8+-N5*`qA1Gra2!3PD)w@JkoG!A(oQ& zj^0Kd!UlTmfdr9jCqQlQ$$M3T2>7XVTQcQn(3*MQ>nYuxblb_Oi!IF}>Lm9N_ zRAa%;=$vU#`yICalDYC-U3eOP428%%N8+uB+6(or`@_-Vj**#KW_xCH8Z( z$_qhhP;21Q(FP7k<#h1*Go#R>I)i;FZmJA?B_(8|#DSF8Ua`i9@@x+Ud4*FF$0E$h zlZr|YkTuClq?-~}0db}u)>+(IWAmBdLTPvBLn#C;Gi9fKZ_nLVErgaD>V+XfH{O-4 zefEOubV!s9T!b;!)bSO!jy_1G4K~`{dF<$LmfdQtb}HtJTe3|obXB>q9K=#vm#QFG z**7!x-sjUeOH7VrhR57ai3c|f^uH)#AIJLGbn!CtRpDp8Org`)1o;g6s!k1|5mo`6 zRMch;a*xN9?}O`)nqZue%9v~JFY_s(vFIm(`pDc&+E5(hvgz;=lOpr+jTPDv_$nGV7+ZQ$0&Td5JO z#R!xH^Htr3*+&vq<=*T=YZimHR@}D*7O26*4TdAf-8F$bOU)*nT*rZ!Coe;d6!8F2X5&{=wr~Bp|h(PK4U12DD>TWj%%T040f?J(mW& zfC%UN-8qhGK*POEQW-@TpqfJ^3!;30-4#(q$`We81=I7E?NYix!?omuWMw}9GN)er znNAIWfqXI|KkEQjtv!n~SN(wm?wsl2ZWPcN7IX00YaKvYWDyhG5D3VM&84=qp@4-? zsu!7CbpVq*L?bmd7_ciz$lvTm0aOX9?%^&SfD!SYNu(+S0PPVe3tB+|OJ&O^S3c?h zUSeEgwvR%AYz1wNC=NBCm5;K^bhj=*o|7+e&JF|Ax>q8CxB9HW=5@(S>jJaFd6wyk z;lTRZ`=CK3H6SNzei5#(3oLQg+ZO~y0KpmioUOIg0Io#7M3+Bwfg{&XOD~;>1ej$X z&n7CX0mcGi40;B-09%gy{Vs+mK={b2{0h%jec3Df*Ew~8U2C8H-NK`Qd++oiYjG&R zPdt;Vou&iaUp=AUQWgbB&qh6WyNCp|b?!7>>d^)qQ1f}%b@jv4Hj$YQ8sM zakqT~vH=C8`vWJ-XW>9I1u4l}=ngRDjpxg{O9BSQQ9IAq!vNhVm%d*~pYx~m9qd9v z~%bMH-s93kIwI?)GX-2Ep{;a`c~mhB(fI3Kb6>OxNN#x!DL_RgE*BC`mM z^2yOPkr^=^!O9y-$E7T3fFupx@t7ApZ|9tJh-y literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000060.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000060.vtp new file mode 100644 index 0000000000000000000000000000000000000000..980b420674d43e6a4297a4f28a3ca117b298b75d GIT binary patch literal 6357 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 T-*5f-mDbib3aRfODb)WDkhBx$ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000061.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000061.vtp new file mode 100644 index 0000000000000000000000000000000000000000..750126174b9c73e86766e363ea372e0dcf684c5a GIT binary patch literal 6361 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-block2-00000062.vtp b/test/writevtk/cf1a_mb_with_observers-block2-00000062.vtp new file mode 100644 index 0000000000000000000000000000000000000000..b690c49de3e3693123f397806b09e411a54af02f GIT binary patch literal 6360 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 WRNB{ixlC4B`$(k*~LC7GymO;r9 zAxmRVLX2IuA8p^xxlZSIoil&TXP)PJKhJ&N&wGEKxvuwx!dxBfxm}Q0CtEa1p65J7 zgohi6LZENjqO9e4oN-p?q@hqiZ9hU4Hof7yA%4TrQu zV{am{@;q9$IGjCF1$EOFj^g3ALBe;lmfyA;sH1R_;ym04v;zi;Wlav2eHVl2q-{@UNtF;0|9E?v?#t$vsYJ6!IGs54RN>>j1~e^T06} zB_XjjQ!Iec%+HwFka3WY@AY+Y<|Zhy~X zSMl$8NQ(TzH2#C+zqDNoiL%Do{0F(xBBK9m z{NKp^3(mzWidf{XeSf&<*W3G#dZnfRxvhV}(L+1g;&xBg-y@0r(+xa-UQ+DeNHRp) zqY=OL%0EL%iA(+)C`AMUX^+Ih|D!TdG0}f@vow%cyZ_KYQE3^8f1^qZ4d0u3{{cx% zT=HKD`i`WG#{CB{aZ%Aqo0VmV)$M z0oK)i5@$EEKG(W$x^##7@sx4!RM^YqnNx48_oiSTY|D!*U0k}IY_*vl;8pYa4)g?S?laVi{2->cNMpRSX4bK$Cnj#VAq<{xDi?58-#;sWv)Bof;(h5Q-? z&+XfhSeJ zXb$D70&Zo{Ez^3Co%ZQOK&W5)S`I_?AEh<5Ki4<9FEEDzyJ8LDu4HzYoZ0Ql=9AQBr=$34n>#<^Wa>ox8!sijR$X&Q;bNilXrBhNoXZ2s(>FD^WSU!SXF;woFgjI z>>*xIk36LwDf#t#d}przPJD}htpIkWAxCTyVqSrrZOr%nJm@k1@ntc%fb?QxeyXL6 zt7e-@a)&DYcPNmbC}u^ARV$j)Dl3AiODDt?AnsJr*Dhp0i#&0TN(&;}`%imO1mPb_ zQ;>>+IDS`c<7YL>c?!lIzeY+kuk`>}{=PGx!lON5gVc_OVV;h#DFZp_xeP0qDDn+k zh_EHhpNZ=+I>8WD&J|SZ3f6~-v6j9g)o8%X&-405-cy0Oy`m4MCMv>YPpayLPRqj% zy?qjr^;ibxyP_#3t}Y4N$VpFeNfCn`8huG6;(Q(!m%Q;}P*)h{tz>C{mJxy_pY(}O z_B;clxp#fz;SxV=rlHsDkpC$dEg!221)qR91e2DJtR92; zn^>Gnm}P`@`llTcPdotQ82I2)Ikl-EYe6pa%$-wMVrMyGI@zxvTEkMh<^m|}#91%@ zXidlW(eq;!_+=ECX)#kAqv$w58~PHbp`8$;ih{GQT-QR3+Vz3TOZu_oh}M@@`G)bW zgOM^)h-f|(5=5^^og>7}^0Fc#EL&ej^li~$6>c78W-8~1t&-_=C|#8re?MY4o5m`p zyFn^k`*`BLl@iSHogwKDI`_b#N*7;sVJga5EGKi;OfO2*ZjXzKI+)xa01lXpypj{HAMyyyfDX#hPqkkWpNoIL7O!Y?*u#NI7URA4?iSZI&yGwLs~Uet?jV;*Vpdd54}RpN?(2$=0gW*q zzqB3|CRZ8AXy-dD>Mgn}OQ*8|x2+v2W;(y5ns;1?&^$m+8oAClP(d-1HYkbjVyfn- zjxH5me|)b*>wRnQh~??$Sr(c5xwq@})P|cys&!?0PI|HX1ZP8>xy>F}UVOv2yvZ) z^2kBzBwzMZ~k z``W;sv=NMBQAJz>7M{pW^Zat~-b(%z*K$5q2xnsfd`Y%p z7zlW~d^FT06ClzHt{Nm8ib7M{D}8gUyw93LryQGWySeBXmr#9ro=cZbm=C^Ml~8L} zNT))lODT-V#V~-&hDgW5yAYm0klPiThIKmSH9?Kn^LIsM3f;T25VQq1>xl0wd*AoI z5s?R2O8PdJTZIU&i$-8)5<2UkC?0hUj)k#7IGMcV=4Ro=R01ITh&+!-Dlnsh31N0d zd6DWCr&(oK&Fg>=wc}2kW^8E3)a9+7p?!0U!=uHMZBDaYrOHJaG1U2@ z&N(;lmnW54-jGJWm=o4A0r8kJwE}5EWmBO|<2j!YaIC@G__p#7;cHhmCwgdUM@IdM zD^YJj?=kZxUh8>Li#G^sfm=@Z!`ue3m%?U;aQJCv0%0}ES>AKuHv6@C58VfEi~}*S zrdn&b<(zCG$BkS!89N#C7iz1|>NmSqIg-I#8mGrB4uip#Cb*TwfP)Mh2Gi#8Y=*VO zE4Phyn1>cS6h8!J_W0}Oj*KR>KhGWz@*dY4T8`0`bUtUEIH8EXRF~1j;48@nD|k`O z0O4G+HAQI79t|R3i`i|v=`m!Y5N%I>v+Ji}c9Dr|qw@Z1)gDC7%=)M21_hro z@;1;PZChy)eSx)^ZjF|`T1*Wg>ERr7$EJ-KqB_G?F%KOALQ>G>JJ_kxUIyA3gPn~k zwcr*V?~^W{hS`FwnOg&{7}?(mnJn1+xQS{t3wqDR1+7jZY*A2?v37zQ9M|>wT2;AOtK*O=-aE7W zJci7kRB|XO;ZsByMA`K9_UK+RhCJ7JKH;Wj3HuI5(vx_+ zC?y1C&B+OyO?^K0e5d46$P*6Q66(dZn@9% zHAQ*Y+2uQr8&1iQjCpZeS*|qZp6}BFl02T$vv0&sNX1mC27_~&VcB}3IGhPa)yQ>k zoZ0rVi*-c>h7DQYBALU^&_lMbSUg=tR7Z>jzH~UJU^|5&dkH>)T@$pLdDy>UypxGM zVE#hi?Cn{*f}(U>W&NxnNlO{}N0PYWIbs9ZzJ5?LGw6_`j+gJ`1A-REKrWv3^HAi( zAqoLRo5b&IGw{e*Ir0H$n> zcg4cE0ROheT!{l$0oTmZcR|*-fQ?z7Ryz%D;IL}d&`{o0AciiHc>#|C&^-G}y+%0z zmQrL_%gSY7n8R(Jnuq~79@#ru*s%cyn$ct}D}5mJd6%z_3>Ii%+-P3NV+9_`yoT=A z)B~t0*%frloPd_K?IZ@T< z{r5>OKy}*eD{6i)uo(WyQyMutjX72d)KrKLydj;v;E?nYZ{Xc*?db{+5Rgec&ovmV1?-m|qvo#h0Y-$S(qIuFpyi>X zlTd~h;KFy5&+?fs5SN2<-4? zQ3U~yZydhXq^t!z-O$%)sSE_(zyPv$C<~y?V^eg;R1-kJmhyOF0)fZ_@%3!($ACv4 z(ODE*>cDG-si~C30N~OIK$f)04BX@^Wffq(1e_(jvRioW4@8rw>Lh870Mt7XkJVFE zfU8ZSocaVmASt0~+xr=1Kv#>ab^jXMM(> z)<<0T@%eK5=t^?7{0zoqyg{^h*6Uzu9UcFNFf_Y~u*^(z_ZKfYX9n}ljzGl5td%8p z?Jc*E?GbS>gp*_1)kkqYt^P}KQ87$Do*HazmvB6t#g#Pjn*6E{*8AEgWX^aY|E=I! z-bJEBe!O94*T|^8AcMBlwqyU}K2%u;zRecnm`v=QU0BnRi{92Bou*Hu0jE^E_oOZP zU11osTxlPDAxjOx>v~tzfO^jaT{)r}mut#2%ITt{$Y-r1>sb&QPT;uD1VhzT*WGMY z4{}=HY*aBkL_YA?qj!I7B8~v+|JVxmW9oJ9U0dqwk75{P2J`3|^EOyt%b$9x;L`bc zswvMNPz zusL-3&CP*gZ4VCi(nJ|UnUZ?qr1LZcB2(T4H(0n;TmgWTrL}CQUB`>NYtK8YcyHYe aq@v)jUOV;m`PQ$Gw07T72!DS`q40myhV)7R literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000001.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000001.vtu new file mode 100644 index 0000000000000000000000000000000000000000..e83120f453d0e4e7eb7c39f1471c946080b77c4f GIT binary patch literal 2823 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000003.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000003.vtu new file mode 100644 index 0000000000000000000000000000000000000000..413080f393d09376117e21a4271622b16bba6c93 GIT binary patch literal 3024 zcmbVOX;f3!8fB~1d1R@1QNm}+0%TtLMi#>+Eyy{`R-O@2qt^ zycp3@R_6dJjX)xLq8#lVP*wmDPYNdxPkW+b=n;0VC@+k@M}YsqPYF?g6+Mm&c%qIH zX>@7~o*qL5!hNWOaMYg|PQ}py9ElnZP(4wH2y}WBu#Xr{2qU7b&H!N=6t_fkfJooz zjIzR$qRCW%Mk8rHKSz%|afoorJB%K-_Z^JF=v!HN{5k48sDTd?06buYjfp-5Q2inf zlL$mQO_PbE6Y3qf7l?||U`|dB3rvf@Equ7hu>j16+)bs1#VsZIX%s1JK^`_NT9fl4 z@q3&abtEFN5NtcjDuP6f4x@Xb!pLNR7!GJGAw@*c01e`RLN7=0Krgbq+b;-P-f43A zvxX&u78T%0L?VEv6V4InaeuAD@$YoF?R5OFlK&TLQ9SJ*gmHA)?)0~Dj%t!})etYZ zI^PKYB#M)xrg7f$^*tjsCeL@oysIAQzv>x}-Agr^cl*6=r-sF9+5@MpwKy*5|L=N7 zcX7|ij=4eD?|;OYUts*1QDhVKn{`IEx3(Rj>>UYsEZl$7I3V;GFEjN;=E2-(QR$)W zzGw6UKE7#yKbul^e^c`_=Z*~jmKZBi?Kt_UjgFBxy%X!t279y13rH&$+veryX*!}^VfQpVA>O3N$CwVc;KnvN!?A=W;J zo2Ni2zSocYxx+`&_Jt%C)TL9*%B_;etrck_HeBbT)-RG@Pi3|KTthuILuizNaIthx z-plS=f%|UWY{s^I-~?MWVD4TV>=$6;()QTajNN3yneqTRH)24#+R~=sLx$D$zNpxFn;r`|I*E?PhvyjV+Xlls#XTkG-1pcNbrn zu+>}f!+bRDs}ESe8I7BwV*mBnhG(GNQd?5{oHujSDHOKK@m>S4s#BXrCV%ehH~U1p z<)eX1#82N+F19Xz&mRWCa(5fy|*W1*zeN(o2 zhMrbNzr*o$sy$rRRN1s3s)o5PY1>ap>h%+pCgGt-=qnq_;Q4H-1DwRkPB_`hw`H?@ zTm~oKvNd4VcGU}qM|n3mpTjhKH4AjlwiF@-`ikbZ`pHSz{ppXaYbT`5g%SH$mDdO2 zrr(HOMln0~OFhm||CL>mZ?-CjeSpB5Jqv0Mvw~2)~LnxH#hYS>{HX3U5+rwt(q%; z^hZI<2KH*A*D=-v&ip~GyxW>0h_U?%)MAwfdF z-ueJ=yl(Q%1y4qIN1mzNADmQfkc;wsa1CC`ruqC8UF=wGwFj6MdpWq;NV1M;I>sLz zCKhRfV{F7+s{t7;&ukwBQ?b3PmK0%;|*07Zz7H;x3K6-E^}4AlGGm;wtnZPR#U5l4atCss?6Y>5)>MK$&1d zt`^#a2u5Vuzk`!6FCnEnWp92-DQQSpLlj5TN;-Ws-u|rXB?364{%UDEiOVd##>GM@ zOtP-TXl~auLSj^r0GGnLr(9&P?veq+oIXswH8|V#J$ZV*J;~4(j``rlg_I7^mZ6f3=1h)epeDaB*X{;?b zCN7YAw3BStNhvjVuk-Dz`>F4#W$%;VzP{q|HyG^XCveJ_KJkzEad!(C<)`C#!_4bk z_ZL5cjiZ%Mf-37ro=RD#XENZ>cO2-xA5_=|-9mn4+{ zsp`hfw)U$!lyl-l7)<|USHsD6z(SPH6TRk*yyOk9B#!NOiQQTf!}O`Rg7599%pPDN z25J#QhFJMAKWVt%#Gy8s2YPZHTJc$t+?_OOLQ>dEWEiA$_i1GsM|sIl`9+&D39U>o zQl^rW*Cfh|Naf|*%9MwyCerLv8;SSe|6Vh*ls_p&l@`ni^&=- zuQD&Y{B2oYk86`^;~PNA@ZPmwuq%{YpUep9R4&ZV0&in(zq9pLZgV0RDL zQBm2c)~4x%XD`>Qcd=Yr%j@c;JtG?rSXOCi^^|?!yYQ}g{|Tdco}-uE=a~Nh(N1tG literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000004.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000004.vtu new file mode 100644 index 0000000000000000000000000000000000000000..12732e78a8fb6b5f2adcce68e1f94e5d56c53d54 GIT binary patch literal 3023 zcmbVOdpO%yAE%0@QrKXBj2vHhBlD0(T;*DF^ch8=^&$IK#InVi=bH1O?_i~=+3v(hz zMS|n7ctSXUgF~z>tsr154g&;-<3iz(SYn8U1H=iT4Lk1RaVR_z3no&cv2chljzGl6 zVu-PLY_J^F~K0eO@;FkxivK z0Eb;7+Y14Q0Qe|05e`8|M`LlpSY=3nkPre^iC96Pt1K|+vXu|}C1I;Or7wThuo9qU z1sDK_!(xcxap6SDU+b{`I~|U8_J1h(e_YGr3IBk`+J3L~-}3k>opMkbUW)2sA^Z~- z8*970f3U!y9|ckwzV(6UoxC>(H=n$AUk~x{*95aNUSZA& z#8gy)goRVp~=f~fQ9;ZJ1t=a$NPH@{~ncJHkhz|Kww4$Itp>Aex$mDnDO~SUl z0Od5u8&pB%yJ2RT4nwjzbJu1E_t9BZ@nqVCMl;i=W44!Ex+aQguZL|$gr&$Bv<_ET zP7TR<9%hbw(0s4P|B}lup^}Tfn(Y_%b-Y9wHaI+Q_4@AT1147~ThN$Lv5l?+6CdU> zvrBUmJP>-{)TcrIW#x^D5jQQ<4i&Gi9$~_P#OBpc_Tog{eJn^+IBtG!S38y(NvCbBZ3+@{|KNV@vo9o_C z-%z#Lrir0RGfnL@CDh5iT{AvuTyGHyQ(cnD~ud zYHAJh^|&*|sPoz{haaJCYmku>GX+5th*42Yn{#Xs((fr^hiSgip}XJj$JE0S-i|Oz zlrLy=SIRFqhE*h{Io`law-c0Q z<~YWAGL`h?lWSC{m1Y*wk+YOH_l++=Y7O$YVzpWIYSUuq8|vjmXMrYPCms}tdL~ts zt{LYl=PzABNlt;Nd*`I;NfAZPlSR&?K=n-*8l5~3KQ&za#y@Ud{@z?u)=xUcmz z18sCjbT9XuhU+aYvro=l>T<`rAG@~md&$DkNwOfN^EJhOJbqdb9(ziDD?&kYJF8eQ zzSs9e8rXEFc(ms@OoK7f;|mKAMu-~bFIos40(2Cg^j++2E*whkZKfGKCIljUSyOd*HF$!n)5rq9&tbYnMWw|LNX)N8j0ATbDsW|-6dqwiK$A!Qq{wyE^A?BI3TNWJcc%Fw!rvex5ms8;W5OJsJ5zt--D0147Hetsb{w6bYt`iIS)plb&tq`-FNRK_6lEA z)Fw}o`@6aDGf*Dl@7>2Uvt95)tUG$qx7${$wJ3&_0U zuSI*yCiP{u6<5S5?3yYvl|OH&oMzcArLX)d80jWM+6wc43SZFyS!%kaleS{pATmLU z@{qr*toMP(t&2B2e?G87n5X#VDYmAhK|9F65#UtO=R9FVgtn!>|$m4`<& zl~1k5G9tzhsgp_IaL>c7+X z_Y|<2C#zdeS2yxHgtXB4t03t;hBOx`z27PQ2`c@iNO~8L77C;}rqZ98(maCfB_JO( zmG`4$Plx2)5(PI&S6BN?U(=c2u|^{o3r8jjc`pmcHE?`)d(!8RVySLbX_$fT>MRb; zgi~)aw#j?;1X37`eCOFIf+v_S^ckA z-Bs1S3#x=Q!C9;M8dy%3%Idm)Wlzq+V2x{3R9;oC^;&9cKJH+Y-8ponJxBZ(f>?W? literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000005.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000005.vtu new file mode 100644 index 0000000000000000000000000000000000000000..9cffa5cace82a7a6ba5e231efc7473cb7124312e GIT binary patch literal 3030 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 Oe8^}X>5%1DI^w@swtlJr literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000006.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000006.vtu new file mode 100644 index 0000000000000000000000000000000000000000..7d2b8ecf4db54430003a21bebfa09ba38c6a9df7 GIT binary patch literal 3028 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 So43ap)rhW|23BWu%zprghKqmz literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000007.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000007.vtu new file mode 100644 index 0000000000000000000000000000000000000000..b15d823e0e2e6a6d4d92f6ffcfa15c71e321d051 GIT binary patch literal 3029 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 E0lSTT-~a#s literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000008.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000008.vtu new file mode 100644 index 0000000000000000000000000000000000000000..49511de49cb6c890596a1a2a7e982afb0361f54b GIT binary patch literal 3021 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 Q=F4Y{`iTx+exoD)3ppK(kpKVy literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000010.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000010.vtu new file mode 100644 index 0000000000000000000000000000000000000000..3793b11e2ca37f83d0b830d70b579087f8f7929e GIT binary patch literal 3017 zcmbVOX;f3!8WpUd3_*$%cnpD5i-;1T0s#{S1xF-4t%8Dtm;@SuB!mPKLV((WKq^?R z#s?_YRuM&lVr2@0AOu871(7KP0t!WjBmxQH5_n;{PNXadCYYaCjIqLyj)6DUqQ zAeI`RDc2$39trXV0_5(!7Z;#4gmhJ-}nRLFJ+bVUUYU1Iq#Uo^HdQ`Pck z56cZ&a)2Qc2sjJ{AC0Hb|JsNB-}!KHbos-{|I=DBAN3Dp?42DP|5oRiswkL>c(JPs zLHH*s4)%`Df2hErA2m|dg5iH12>D$KfGOGd>m;xX|-un>=Or*1CO`v{_?R;+c+e#{k=rlZ^_{ zl&jwXJuv5AituApC;jvGf-6HYSsCs$*T5ad#EoSw>HyZ96_v2AIpOygnt@d<0bs95 zkIce&f2aUDS${46P@K@~tX)N1_V%2}J6(~;O5424(}tUy!~Gj!o8=n1%(>uA@s|t^ zPB__vUK+}3oCod5?a|5(FZjUW_|HRR0JLZ0SE0a;3)QekJ2+YSja+Z__|duRzp^5$ z6+iCQxr=m3`CUz4`J1%>`bl$}`B-GTK@?}S`(DF5jB*9lka=dKJd`@$Z1sJur{ebI zw3M(np#4IySad9s^*dtYG3cCl(m$&n>78~vo1M(Raz z&iKD=p$-_H?FtJ-v`Hi8VrKvkoWDGveDE>T(Hdt`>KdCPxCVE@4e<3 z<#CE~FPkJKGWCzNa5}DsjD3pos z77PVv6vpo}7&qFbLTVnn0yDUI^aIv_&dKCm4GGFT#Lc3$Pu9-LCF)~2+h@GZ; z%qZv{%3T&iY^&A)#kg9%6>Fm1JLYGK^hCW?+Qa~>L;sT150Pu%&W4##+j!eBW(O!i zRRJ2neaw-1tCrq!@Y&q{n#a$v3mahRx!5_9kH7mHEqRj|`TR-4Sip19`r;h>bGZUH zo|%tej%Q{;60aFdoUl3P`Be^i{ma#DH8WQJC8)Xh>dG5psB8_B^8ot0GLh*iRvXoh zbq_}M#l@-Ki#eKA;V<(u9x@-jy0Np6mGV>szV_tlk1NOb#)hTix-tsYKOEnV#(?I3 znJy*Ul)83I1xQ>wVrqT4zT@{L>w^MB z=y9}dkRN*HaqZ`{&epe^;YXw`L&oqlwgu02&W*br;afdGvzF-95V#i6N)XpV=G(z) zZ|VtRs+JdnWujX=57GXPB%|9+Hn790e|Nx>*cRU!&Kn20W{bocw!#x}^WZXRvvfQe zK^y8|h}H|&%iU-eV)gQPcVS(PXcqwLyTw}zc+b*?$*EPQc{KD)U@}|MGJK#8{M5A0 zeKo)T{KIbP7NKLb(uzC6Rpp3FF~wA+6MM6gocl<1P2EAok`_!h19sNvHa`NE&i0Mj zGKb@qPy6+47M_yblUN9u(aJDdbo{ERFG{*&bfD&~1Nw0(@~glhnzq;;fMq|;dPCq? z(~geL#7J7unM|$T%3;UVxwb)N@T4zkdRjThW&uN}cpZ$zjvsc^8CgQfk@Bg0 z9&HXq#S*H`X~Tt=7$x7drx4|bxL*jfNZOoKrm52a4hc@+d|iJq<4W4RA@tOHhPU>s zu)1Qg9+%t7(S4^pGcE6~y&hx45L$OmScLEa4Tey!bK*LN&-ei$=8w{cfKyj{HM=^1 z($K1E1Yj&5H4qf>$^5x=hKxGinLy?X>y>&>gD(uMq`yyNDeWuch2;;l>}_@UuR*Gh zhqC}Dx&7ePutB%v(&Y2HQCXOA;5uMDSeapued+b#3GnjT@zU!v5l=46@hkN3&^L;) zVN>aT$EjY9Ow1WP31;bqhLmGt9ea@saTcmb z<0z7eigdB!8?YiZN0C&dd`6sY2G2H@&b@=rOQ7>Il;#>uyEixOL@jnhS_PwLK-8-v zWtFC-sad7Bx?#`EdpdgrwUOyDD7oBHZ;F)h-Z(?P5jmy9k4`h9Jz&$5TDh-Hxt-nI z*7Az>d9^5YZ1&2236{2N)yk-|Jf~%2aORb(R&|$ta%k~F^YPt9buWi5U(DV93)0_f AUjP6A literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000011.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000011.vtu new file mode 100644 index 0000000000000000000000000000000000000000..94d0569ac4e09cf239822d90a17b31eb80fa643f GIT binary patch literal 3021 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 Baj^gZ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000037.vtp b/test/writevtk/cf1a_with_observers-block1-00000037.vtp new file mode 100644 index 0000000000000000000000000000000000000000..2b50ea237d6e1b60ced042ac8fdefa37113a2e94 GIT binary patch literal 7966 zcmbVR2UJs8*L4I%1qGEZH53)38LA|p(mM#!JA@D^q4zSVAe|9GdT#=PAiWC;C@lm+ zk*3l?AoL#i^TIgae6v31Uo$M$z3=Y3_de%5-nj|uK_orwY+2l3PR$koM)M-(I}aRH*Or6h~6g|WDJI>4YHb)>DQw3&+;=r2lhPZyX8(#aC$ z1O+K0TwH8nGWM1TGkXw=HOvf;nw-cVD%iUS3xZfIkaiAEFlT2Zp6=#iqpyrG2VAB8 zfI$)$SXdxGq5%tFiGW$aSX5o@%wbMyR_aKEy^AvxBzzn62d0d$hXD{jL4P75&`ul( z01)V&lara}?ha@&<*_HY;Le^IUgznI{E68RtX z{w0u<<~=7E{`vj!82$P0`?m!P2#ARMlR)Z7XM_vBxBhpizkQSh1Vse?NhocYEz;tr zPs`tix_w*lABDPSVF9y+Ihp;-%E0`$!T+Q(MVOP#zqo;55i!w!5=I$m2Aq5UB9fqx zh|s@?B#m_W7r}&t`TunHAbkJbX82PFI3R(Z0}h~*gPO3q_xoW5wB(--c_%Y>{5fgz z%c+x}-ZTF_Z=XI{dn6n6+1;XaV0gEd@C*diwJszTC@3m@`|+h;E2O*pkrO>PqO;%j zrgn!6)7zkRejB~KSqKw2D&$3)C@89(Bc*+6vc>ab(SxDI)-Oku$D`OnY*-Xaccp@! zI_aB>BcX|5*H$$O{6p7kPMt}DN{4r_ylsBOxz<=A+?eW!(q4qq#Kd{BxS&F0yc^p7xT+k~?{*=KO8C;XzLg^X zQRC;?4)i1gVE44y&0astzAg2;5e)A0jgQJ}F>-ZWQk%K~V2=s*uc%QdQMr!zD4)!B zx4FApqMpJ>mgQ2eZ>?#!&vb0GICLA`KhSH0Nj+ZYKH^nK*j7nd?fI4284#3$}QYz!9`L;(R(^zA%W=& zOsnTkkfoka2F{XvXv1ms!Xi(CE%R~Jz|=(dL6K;2W{y__#!6AvTfO*hQ!$K64Z&`# z!DCTgCu?leI9C~@<61y1edstMk|G6hycF(yj;$xa@e=HV7=KT5s3=LBSoY<)ccRb6 z0f03S0Hm)1fY&4g?OZwtAU_LnHcghg0jO`V0{{*n-%A6?9t1Ku0GK5LfGq`}CNRE< z0+Lk@KvD&GyaxlO>i3d~rWi&D00Y42Wd#`2gp>jR58^9xtIX>C(2^fr@s8-E3x3QV zC(Bd#u4ol9KaHpHkEMWGjY6dycaN)Rt8eOEx!@Zp)}j&Vn0z&Pnlex9yY}-ym(rhFWdw2Qix{%@w@q-OZGIZY27V` z{V>tR_$gJJ~$zs`R|e8czDvm+wWF|jcm=_w@WlKjs~J^TBHN3zYGHd>>DvH?Gy7qf-u zH6JZuOQ?gk1}I0G$SNv5n%KK1Zfs?`RQc8WhW&cja`@S7TYP4;N;{Zj6X)2pn=b%Hgp7FID<8l$@_-QYb(Gh1uy@>|fj2z!75v0XcHSoa~ZWDjb1wl-At#yyn0y9!g9mN(4rY#fmb)zN9e(wShEzA)40Ak~!-8y`kg7!lfNp@Ts7K-3MK7Gow4z=*(E~Wo|eE*my|8#sC z$X_+3{q@`JPC*qVMg^^4(rk0f$VZeu!Ckj11Y2{}P0h7p*qo`d6H4#vhh!(^fO2Ex zXKF$!cCBFGe!Dw!kQ`N|x#VXMSM`!G6TfdwzI+pfdD3m(@SDW}wQpqPg7zn-?&teu z)xmGRe7&ic7D|6+hwYL+rkKX46XDL_=VM59aHdEMq}NoQ=w`nb`-`(SShjHh=~k}U z=O@Z5J(-R+&lA`U@z;kgH`=csgo@kI)~0Vmsq-k6=zbC!b*O<(U~z z6sX}6!n%om*1fB_jv2iFcxGlpr94ljPONr`;RAhA!_AV)1h;QN;nJ3M`T@3XP$>4-8!>{oT z7f$+3dYHx86u*sdLn<6|WOxu8DaOWHd5SMvj9I4$!zkT#rlpr&&|3TVqdRDz<)#is zeO(c+E{(j%X@NMe&~lo3xIJll?)J;^`}G+b?fSfLYboR62ot8+>s=3{ES~p#riGS` z2z`E&q&Xn0mH0Y(&W>{g7BGgpG;)54&U$i~tIj$qzB>-Sr8s4Ux!yiBfO82j}MkDv5VJz?I7(dG^zSme{27?g>Iarn+=AWLf*Si z($S(!SyKbn$S!{X^QUG!@i^NCPG$iBIKYtNT_X#J_g+Q4^Ei7QAXD6j5KYlBQQ(0f zE`pj3AVYvlhX_DjP9Spwx?yR6>_af30D$1@0NFhRaApO7R~!If1jIH=1=O|#pb-FA z!##qIf5S2M|EvR6{^$UiKBO|414H|oID9ZSXiH5B1j)~56d$5%toe>|6?Mf)+IQTH zl`2E%<-A2x;1XWezQ*thDL%@1xMBBHx@$2Yci@xZUKOSwrChlw4eQI)$n3+^K>XO> z`EgOE(>)}LT0Mp=d39s#(AxHn&kN)|w})Q}u?oXq2_>B2|Bk3cGs+^F>^YX|Jo@2 zVpt{<-Fl_iTG?rPnW~uAv2E)9yPcy)U-$0P8jLTqji%>Fn0P(pt0X<^h)s$cfyvoP z@=q-2=RRFZ&Zt%ni`=(R`gP-R+=WJ36s+KCq=t!m*~n`C_fx|LMIGpQ(Z#bNt9ztd ztiyEAm!k_p^CrYzJNuhzKdD5t#yemg7XuGm>%2$Fr6Q&LES|qft;KMB>3e?d!cH^; z7y?yOKNd!7jHO?Aa+EsS%+qroqg2rU&5XVl}L12G9B7| z*WCZw*O}|^8@ZVWVE%Oh)JLeMJ3RHdckVz z%?iModH}p3z*BZ5p*9vje%^jhK!EFn+G`u(W8f{zS-Kkd;&K;YO-iu9nge2qW&-so zftn1A`|Nl@+43_25=uZA2p04N3q`^hR;q+o2Q?YcjC1^~8|MDh4ZirV^R(~Q46N+* zZsg2jV7IPy+o`k!!3Qo6n0It~v2FB`!W6-=PdU02=~Z4>%Xm4;bty2>jij67 z$-B*Xtsz~~uZii4WRt%?@o8;?{teohlt(38UJ?i8&t1BbLa|Oor!9BZ~D4Ew({DDqFx;;Y)w@woNrQ$W{x8+ zZ=Of$DLUT2i0dkUj4HjzNMZh4f1QiEYSV*BdrwiFGfm;<%TacPdB@eQ&Hg@3^nD_` zoC96Ly(kHm4tc|+psppz_;QKteu(0WHrKaIy|0^Kvtz~S{%vX{tG6=AU$0M&b0#Ow zlenQot4R-7b!jgr7+{o5uDrU4U7`IoQ%(-MqPOwyL8$jS9GK@ATg{3QXus3l-jX_QF1e+z$sm+f zs)NQFmXvk&Fp_LUQ%EhWcI-IuJhwLId?y6?2*UZ%;M_x6)URRRP?&z_mYB)P#p?QF z7tefGkRSA1cGfrEn^BV8TW?kHc(8K0zOo>xkt$o8etRLE!^^!(7elj89(~N^3)AH1 zqRzwEEo30~kNULk4T|s&AW^6V{k<`8XgvJzxCZWGk-FfFqV0k7&!w(i+)z&QmX(}M zkk|>=Cydt<;QM3X9x!UN2Cht?#y11h(m2mt6f`Rs7%f-;S=)VrpuY?3yFxckkQoyM zx}AUkO`v97Cs5r8R7nEK-V#V)zKf8+Il?wOVY`*!B*_ni#@q%*L95g?W=3h^yq~qf z!e80||Dj+JR%EUd9&Tw(1+C6ZGHBhoG`H5GkfnM3LmRD%D!JDxe+(`9Nq6Qe0Y^-b z!VXT(tgBckU-(*(ER!&KzspuTc4$Y!zwvngaP7*u;d1_CpS#$nGV7mYQ(CTiP#+E# zoL@;AjbeQAC~o-Hc~`SImx}jagOpV0vXYt`F@^OavN5C35{DIQ&n89L@lLm484X{C z<#Fow1${)X$cu!nPp8zYCymr<`d$zAsx}7Svb&sBFJw3G0K2gjD;&77@Zw6ct_$C| zkK;=(jRc!WTD6R6h05<*w#2T_FkhrH)tSd;aUA}pT+#b7LzHIS^?Z?$-l`QjG8&SW zTYBak(dNrra(#&v&KS6I5Bo#I7iQ78N4W0#4a{hqNu0sve#R>uM6@ZBRD)?tK^}(v zRFziBVtT0VBAU&!f7VIN@373ky-QVQdBNEQQVH@>kqH;^Wv(ZV-Et&i&r#_GA$sk{wl6I_ENN}TGp~{oDoLx zx8n8F9;W*r-jiA_?8NvBHG#jEo^Q8853%{?pU1@ZY*Zw!I8Y{1w}(KkspqF?8}o^g z>^IxPv@+uxi4P|)eUJD}xr}l#C2VE8lS3n3Y~01dt9N)b0sb|0&HuO!LbRhi9_@K{ zCBchhgA9L+U+n@rpfDuy`2Bot!pJ9pdI#0yGffTf&b4m`1kgx8u>Z>}T{V0W|LEfd zU-$u1)5&%yuwBbT@Dm`AiU_2Bf?p?LG$05}2(C<@0M~{Tf~zq>;0`31j{->7j=_NU z&~5xUC3!uzSK()kF#Y>KwjRkseaC7TR|b+*hJbWXem^riHu!uv5s{g@Pyfc5%k%hu zswtcU`0vK#P>_&POdg0_yqMrPM|bi3QxMtXGlFmk%~U7xOE9UWB71j>={rUlG6&qM zUlX(cdp05adilKb&!iqyM9syeQo1>2?mhM8uSAY~K{iDP7ril3@)0b^WmfjQ$+!9Z zV-0RxdZuP4qjPD(!+Gi4MdgWC2ncQ9h@Gpr${7T$eayr5YR24+w`a>1a;f_dczN|N zWwW^>yR%;4jws_@t(wY|h>P8h4SmM=h^S4{4i~`Uk_CMeF*0aJ-7#MyoT?gUkG5p3IrDWt(keU(4?=(XIf&KY7G_RqfO*blk|yOQ?KNRrFncgDAah& z&-=54^pkCOC?zA6*t~T_G7~G+nd~=AkGw!;uLgJX1z2dr?|Y9eRpx)}^Ea;2zW!|= zVWc*t&omv^RB=OJ>x!pWr`I|=vFKrvp=eChCJ)M|z$$hcvTIQ)ta)EL3F~k$7q}XJ z*gsL9%}#DJ6}jYd{>^@m?ww7ljG8sAp|`Q2Oz~4Mm=`%L#g?5yvA1N~&{#P*!$X%6 z*3I?yhAUigF%37nIf6NB+Jw|)KCv;rS@PpD)0m*vMBb2ju)R5(C%|>v&c#a3R$lkB zSbVRBdQjrC+KfF)s+)rmq;+;e4g+$`y6Bf#>3+QSAZ?imi>g%0#+Z^Ena_9ZHGYxm z7n0=Gp~B6<@&&gPhHLG6>eTfER3n0AbHy@b^EkFaq!&{IZFQ?u}g8o z3!5h58pn!Y9Yka|zn~n&@eM3rXbWNGOQ@_OZcF5&Rva2%z?LcHVJV40Q!%Wwr5O}3 zbgfv<8}6++ca+R`%q}r&;j;T%$FCDso*5C~3Y>t6gvDk%j;q34O^1tB{hF?h|8HTT-*d^vlQ0L6k6nrK=NK9Qg zP@Z(YaS-l-r_WKJ(6yJqyLfh!S(;<8FX!6lNZ+%^%99%sf0!8#K>pCzdv!;jiD~GjJ~YQB&5|#64c|*V@#kFI6F49{ z!e=3U636RgYCTbopF~pwgbV&TAK#7q>Wi$_01*?YRb9qYv0rvbNvYJ{yu5sx1A>V$koVwh$UgrH$&2Fdu z6qC`7EuVwKy$QH?D%?9ndbh0s+J1VdyzHQ-*m*YaQ5zhsopQ4we}>0khAnDPq~gJj z0GDt#$;G#?%uB1&H-)zPx7oDM&Yaq~(Klpg%7a19C`eX}Y?U^Txr&P~CFL8;8BfH0 z9qp`bOpT7A5q_{UtZD8buwBx|?j5-JfM|;{P^WlfpNaED_pa*pkfu(Q8$6}Hr__6p z+k0x8)c4baj~(ta!{0Jq&e1DncypyZINfNI@Ql|2WSJf5l~HuO!k_YTOTxt`wupNF zd|Xyaq6E)1`548+#K1<2sm>25FCOs4I_@vlPghJi9N&Pg^(ya-$Oy4-8oBpOlw5Yc z)l#jKlVmKYBXRhC6{%J>(^@&e{S@kZ$q&=@)Ik|b?P*mcJx^nP(7#rZ>oT(nUV5u3~M2$m!)H1d!nHnCpoo@*cGbGi#g7c0Zh2k|Q`j=Fs`QtI7MW(=XGOxkWuPDEJmlDl&lYsux4p`JzO%-fzBt{F zr$pjiR$b(PFsIJLwm6MB=zF70vSV>9-G}*vJ6Jjp8tgg&uFiljR-wUU>F`D2dAd8j z;4Pkcx<$g4tt<*7G*1_bUyyE+J?kxVpz%8EzNw7k^a^6yREAPPrI@{Pd%T0rY$~Vh zkR{9~cu{x-IS>|{o65f8US}DB{j-t;2-^$9tCvGzJW;(tsrj8~FoP5dGcZr*mjz#} zho8gmboPSf(cmqQO)?EajxG3nbT`S!2~tcte3w+fYhRr3n&i)KM({7Y`F?-fE%AR^ CTxfX! literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000038.vtp b/test/writevtk/cf1a_with_observers-block1-00000038.vtp new file mode 100644 index 0000000000000000000000000000000000000000..4c7e0cb45591b0a37b1371863680611c746bc878 GIT binary patch literal 7989 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 GrT+sGys2^k literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000039.vtp b/test/writevtk/cf1a_with_observers-block1-00000039.vtp new file mode 100644 index 0000000000000000000000000000000000000000..2841ddf81c114f6afc82020ad689d926ddb428c6 GIT binary patch literal 8042 zcmbVR2{@E(_ishAWQnG14P`6a*co2Qz9*D5F(%nEV;zP{q3ruUc9A`MNJz2{MfRN` z+hE4N{by9~+xK2y@BjK*7FJ8FFd;+iHr|wh%Ta_eT&gP}{-Q{ieB-Iq+|u_uZW!W)3h* z2n-BVw{~)}g(%otTASMg*&aa530AZ3?s_WrPNKpfZ+cEr4O-n zu=wq1`9~-rA@N_HXauya4TL{ejUuFgp5c{8=mMR2h^Dj0KBrf*PMew&nq3&Q# z?0f$LNmx|$e|l6ukZw9S{R=P=QSo1npfvw~mKmYz5E~@1=7J(VE1_2V8eWUqa|8!c2s5AI-3|Za($dBCS0CsLi^P-1=^hT=8AU}`v*uY zu6Z`ZU`BiOZec5Dises#ntJ(!^uqNVls@Z1=?D%&-7rFt^xbOos=4sZU{Z(1Eq2JveA7jJ}IsQ?ehKV zQ8iq6b(XsQ)NT==FXQDTJ#GmsB`1uoZJcRhyQz=RBScCSrkpk=q(=X+bNUobgFy}J}nGScH~<@!LT1@S`)W}iy zM@+(ov6QRdN4KcFCjW|%kT%ZvF*vKt(uIvBJz31app1*5<#=!^Lf5|O*i{BeEwyyX zDzhSq+&i}<{i|#DC+_GlZf?ERD0tlvGIt0xcKp)cF(T%g#lYv;a6W8Ra-@}ISu}yQ zX&$aF?!eXI#Zw&P;RpF_+t7Vkow^6nkNq}fYRJnItFjfC?!F^t{{@3evLh2`T|aG+ z;Bo6iU*K>BsfjJ!b83r)&-`ayNjBh&`_UQEq(}wpJZ~%V`-Ecf0UciIeaMLM>)-Ouqgney3`^;mgw^& z(dWH{WjK5}dYWmiMPl*iys%D_8=dBl6XC4vvnlMeY>%k4h^yrVB}kvZwL{_O#Qo%_nND?H4ksez zvCj_gf0C#Sg)hTfB>KbP%Oo%=YXTrZ!jFa!kzRrnATi4#*D0sfSydeh4<#(5n`V0b zNy7EI1SvIP1&@T^5FvvTR_FQ0f7Z9X3#eTd@s%$25b$ab2wl7KnYXZZ^{W&Xxzf#pe*P#1#?OodHl@EPp3>eevlDKRhQ(~q1$m<nytzZj!S0k4D>ry{+=%uU#wEKA7PGdS zY9c(`9*=jT-l~5I>eRn18E*E;lm{KQ_h7NfGH3CfCW5otYO*y{cktL-Uc3g!j>)2e zK?ko)B=rPem<0qWCsrMSnZT=lCF99!3|V;T(XTfld4H;3Cl7b+!P#qA3-oQy9n>02 zqfuXXdJE$5h|tX_R*d+QUdCH#F6vZoHe0~EaP_*0lQXp>9wp`*(~qfY73~05Iid

RL?~-jqt%))E>L+`vCn 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 Y2`2PSN1t4N{mMf4aL)hZ%el<|0R$7JvH$=8 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000040.vtp b/test/writevtk/cf1a_with_observers-block1-00000040.vtp new file mode 100644 index 0000000000000000000000000000000000000000..c08e2540ef6b0688ad8ef601c7864af3e7eb5e7e GIT binary patch literal 8108 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 De;vO3 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000041.vtp b/test/writevtk/cf1a_with_observers-block1-00000041.vtp new file mode 100644 index 0000000000000000000000000000000000000000..570004380d76ed9e8efa4855910d33fb17dfb1fb GIT binary patch literal 6860 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000042.vtp b/test/writevtk/cf1a_with_observers-block1-00000042.vtp new file mode 100644 index 0000000000000000000000000000000000000000..545613f35ee4ae77fbebc68a300f982b607d9ea3 GIT binary patch literal 8094 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 V#J;_z`Rkh*;AOkykGJiL{|D0Oj@tkL literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000043.vtp b/test/writevtk/cf1a_with_observers-block1-00000043.vtp new file mode 100644 index 0000000000000000000000000000000000000000..06e755be614049446779389d9b274eb1c436dca3 GIT binary patch literal 8038 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000044.vtp b/test/writevtk/cf1a_with_observers-block1-00000044.vtp new file mode 100644 index 0000000000000000000000000000000000000000..244f19eadbb78245efc308561bfd3af653ade4d4 GIT binary patch literal 8001 zcmbVR2Ut@{*H%%nps1(_0wRJmX@(X^=tY`{R6#&Wh+rTXYN)G-C`AP6B}f&dNt0eA z(vg6K9zc2z211egk*n_RxBut<&n^$oJ7>S&7)<`=jn-ISs z8!ODt0%>V&2ZypbIa=|Fvq?)GgXrm~DOn?6td3}V7?kZ65`k7Qb2MZ7i=;W)5oU@+ zS;A0IHg#)9M+8jK&eGbW`)^;!oOAwI% zE(8qwt^r_B49TKUX6PRwDIt(%fKxZkY=HJ&f|B4VI4?`d*G5$@+f0=f5m>t~l{=W!U zNJvQJ4@dq-ynityuPuv$?XBOR%jnO)@81S2Bm@@!Cx&hz9jqPqa_fJa`rD->Bn-a( zPfY2-5J-z(u9m+wb^W^d-!GTHOrNZU1q=a0nf=SiK!T#+e-fE04E5k&Odv>H_#c^3 zN19RU-oLOUED93+CjtGiq=0n%7sfCk_i8X+F5}Uw0Tk^O$Re; zo~3~g&0$ULhtmw)8(<24P+LDa+Qpoysz4$K zpi$(-s(M?4Q_L6hCHas*NOO=Y3lR@DmnDugVsA!yCMI3zHx#*L=4gfme5s>q#He;jX0< zlU(jo?wM!SW3%g$UaZe=FflzoL@Yz+db~Q6teRH+Y4%%fCDwYV*aCUHEIkQyvC8?O z_W;vrx>UE|Ixj=hnPNL)y+6^lD}y%uLPVj0Ha zFU|>MIPofPx|c*M#;bFuZ#?n(0P3IcF)gKUdXq{o_C5)%de@n_WbU7pkKNe) zIBXLRyCG>$xLz>4u(oflCfj$Z+L!r${}NZB4zv;aD9*?J&qdjh}r3#@=arh&g_D{7htNt?teUV^8S^jh%_}#idwd;-NJk zYRLHMV05iEh7?C%F)nRFiV>@rU|#%Iqbx;|PWV=iWT!aCc;=i-+6OQu6xa!O`n z=IlylA_j;hbC^vQ@vrSyf}tcl2v_;_GjDDssatZ<^J@oZf+wjIA-q&PCVJUt$sxT9o6iA+j<3qV6!JUI#p8NcEsKg0i!uIif zNVbzVeiiEB9}isP9!S(*Fy1Wa^5T0nnR!&(W`6PA`KK#gXZx#Zir%|cvws@mT1j#& z_Nwp<_-(6ptIupza$=xZ?-_OfMK!z1hsf$k&%i{~SPH-XX0vt$bCxpmLiX9g18$}R z{SJ5U3{@f$Q$5GTkQQ{Bpv_@kdYnKk5`iO4vlqx_ByN+@)oTP&PjRk`KkcVtd|twv zUO@+wpfsqye(fTIDSm#Ksg&hYN0K=%n`fq(E6Eb)u=U|dk=xSh6n?c|=b2jHlrv$I zXWjT?6~}cwmsKOLO*OuNgBp|X`dWs(^xkhyT$0S}4IX%)S6#fxc7^A{%2q^thgV0o zbo0qxks!g{1N+eBxS5}`^!i6l|Jkk__@kzKUOQ{g)Ih2iQNzTD2zLtKG2rdAIk9;Y z9azW?wVy5-?<+B=w+-u#c-POK>1(4B`kc;hnAzIxtNqlSr7e%RGo8}eJL@|e8*7y~ z?}SK&3A3wVcptwCU8GQAX!M)jsI6-@mS=_v^bW4^BD)1ai}!mX;o*4fb=t62#}6HUWYQ{(yqJ~bb@oRDrLrGhwCQE%X>`nY{Ym2;(4?o!^=v(P)dijqvj zE4MUHoOnTJyIJ#bNGXKb$!7NQdlL8Uf#7)!7kRbbO{rNgLu4Z2iZ)?hcPGOH%y-B#^6*dqKm z{teMMK1oW~b@R4^+NGAoBg0JoF=9tSeJu)X^Vx$oedj%Es14r;8G$Tdy6S<6Rk@$`G5DteZ6qdY5L7ZJ9cAK3)I8 z#L;r5>b!UDM=IYu55Tu{5u4lxm809Lp7y7vaLnrFx6M%tc)(K&l#-I07-wk%eC)&< z0)=w*L+bmuTky*%V+>N!V+f&~ybSGpx$Ts()4o1y2V0*(Hl)%@A3pzmdI6M|W&1Co&OomY+{AD71_BNS@ z09p~Ipwnfy!^G$^X#jZvq@v&k3z_B^S$*&n)aRsIS`{;tYE9h}Kw}@wBlk3^AOQU+ zI1~WT&j9)<1^Jb6HBjwbSpa1KRKneQjLDFe!+m*<$)JA?H;}>M2RlFnMI64e1Js)g zpXCRxY})V@H^LpaVhI59iVcW=mJ(m>i7 zA<;TUX<-^HOYKTk;kWV9DC?`Sela#d%}LI0ixzViJ$F2IzxAoHeG|Lbm}i$>BC&X4 z4KAu1m)qxirh|`nftsV7Ru-lFf`7TqgqWO`ugikD9o1b=GusR)MP3vv4G}s+!zdt7 zFu)*1a8PTn)}uRiDRSP@=e9R-`=zv$<+=UFbk)>V$bH0AZzi|nLkhB536tB5Dy(Y} zO$q0Vf`q=fd-mh4Oqz{{#Ugss!hI5Dh@%jOkAt^{`-Itpe5&y9513rJ63GdDzE1|6 zGMCr6XxExc{5U2K=c;qa)vT7omL>&>cdA145d)$3wrBY?{LAc#UCzV;cmL3l6|(PC z|I!U&31Z}OfVwZIwr_vU5En6ERVid%`7+CRnOo&Cc4#Yhzx zk#b#_|B-6eNU7>r3fzbHEt zOC!kJHMiV6R+8B&P?jKK`J3v4l@Wcd3Q{o)oBj=Pm4;i+D=bdsiia0tsc*-Sk zv)o8>!89G;Zk~DMVZe<^jIs7Im#DhXAAeI_oK~{t7GKy-9qq7c3j;+L1?C7ez^ zcfgE7CIc1qx?h=W?QDCPdYO73JaEnRF8@$j-jj3V`X)iIcrFYdsOydTxTATf#qD9a zXj94~FGF=h1Fgq#A}1trSeES4hEEya<1*5Fw>|aAKa2r66RgB-nQJi{g>bHnOi)!Z zz0h^KJqLMjwD(&yQG;irTO>e?e6warZzJ{1mgI~+%MD`bQc*MmDE_`lpT=%_?X9ik zr0`0$6GtL_*V->VY|^;#0%5_es%xC3C9qv$qqg#NP<8S$`D|I(YKIt#yCC#taY4e4 z$W+zlYNtRpDjb1cebj`SH|=h-o^h8b=31_mFi4r4u`!=y^$g!yUuBMnZ~buB@$=xr zD6gna8Ap;meJAxGx1nxu`|i2vlz}v&Rh{qSiOFfLjd&~G`u_ajERT$#G7j57ulMge zCPE7RU=t>iR&?pf-Xt#@`>zw4*9cAt;}L`6o&z!oWaFXAR^?1@NKyW3q`FuOXPsxO zC<#3fvPMU~xasbvN+aA_!{(Sc{(*g)yybT|LT5g9L9lQ&bBU*AO#X1+9RZ(>tb74- z>V6WVSn%aZNT+a>y=O#KZlm$n9`mT@*U$KJZjs6I?R#6p*WGG4+{@>fnKzWpVMZ*8 zf^(E7WDNjq+d%|*9C?CLm^X$1OrY#0WDbCqqii7CC;+hl$A(O^Ivu@ph)h$k*C5F> ziqp|v^pyR?>m&ttI4FZXB>@p6Ac6!efdB-&B4-2i6oBV|G0^~eQE;8wBk0i3uX17e zPr2YpIS4n9mR{!H>3+fI(toPRqB~ChD)C}hD%J@f9>$X6STLEmBks=|iFv1FE<9t_ z$1gS!T!^p2?NmXm!i_JO#Kl-Yk%!es#HIpNGA)Af(ELnYnvm1!;{`mcu30I~}@|wGe z3Qc)nYwQjWv8*6+K7ZK|(SBZh)95#MFU9;}RZV6dsy8Q{{E!nv9=di%MHlNEa^jlG zw+BjS@izk%)QKNTc5>10TkVMj*|ssgSq4ny;oyP|_(2y%hbCJe`Q1fY`P2zm2mxg1 zbi9CWv;$;4ymi3(>{^R$KH)LFd!A~a%S^fkwzAT~^)&=_sd>tp{-T^S%0u5k7V4<* z>PiqR!3omL^D43q3v9^HOW_r0Tw(;Klf=0kwE-LvYkqwV_qRM5CTGgE4sT*#T2L zeE87QOUz|&rlj0*RK~<&9)Z};!{p4E)<9DnlTYiZp5;(Wo7jx*RdD-I$k;AFgenwH ztZo7s0A<;3uTu+h1Wy6ba5?8*UU<&0${BBv$>vno(a}COvkh zy!Qk(Tf#cqrg}?FUgak1#rX0s_6i3-#rB2ZthZn1ZP=512*N3l=g8%97NxbcLjM!5 z_AdOsC2mf}qdqFomJ1ILsftP_nU?0Ths9M#S9gJ^j#BBac3t_P^Illn>iV~uEZb>`vXG%tZ)ua1;KfzY=Af^JwqV!KDKeAy z7xb+nWZ5&HaTRS~whnMbv&s2OB?(Y1zM6o|l3U(Cl=U zp39FD4{Jy@U0;tr^S1084ta1XY&F9=?aQH)gyx2F-TEu`WhiI6#j6-h<}tdfRu!kx z)~4;=>LsrAjPr2dw3ix9TORX?w=S1Fs9L(s;yf1e@nvHt!-Gg$erKk$Cj}(gJ)(m{ z%jF3-q%=2quNaHOf|+9Nks4A)`%1NIzE1SDxlc;W1Q*1waco5OH_HVI6nDOrblvFp zepi?rg&iNwQINMgJvzr!l|DU|F=yjGcIzB9eBr$qCpOsJc)HXn;qJ)HjKFrAHm7(+ z@0Xl8F>QHL-+IvVF-TpB8abER!9Z~P7B{a>vevQzvE(J^u0(8yNiw}7uGYt`A8(+0 z7aLFZiXEknNQ(eb5sKZ0zIy;d*Fzy)e)_O+&qnJ^$Cog z4)SOt)QbAP!v3cGCa_XGMq$98TJx{V|O+A1hKd|y)ebbwE1_O;|<5;y+o&Z?>9JJ|Lj)@zwrAWsPWnR8vY?u z!^4cQ&rT;V8XmnE*)3pnyOGm^P*k787j5NLR5Y&4H35I09+#rhPgc&#j<`YZVhSgT zPBcV6bCfGw@@tNm)d|C|?vQs@cb325Hdh+3tu%`hBQpAaG$(iqUk-cIqu3#AOYyIR?BG@h~RT^i8ORv&ClF_?^^p-O)u|E#t$^a_oxhWcp{qjBM3 z6{r{q@ zJdY+A?Mz4q^2%F+B5~Y@^q9<~inyL_o85@$s*!y(==x4Xspsk{`|}62Wd|QIXWpu6 z2Khswl`b-R?1FRG-i$F^&2y=H8m_-R2qw_SNN)_cQNe~tQiBI#pU;^ZS7^-lm$I0~ zYu(%MO#rWYnO|Ba^`^V48qYZAiS<_YXoek|e~>*s_N8Kd?Fn`M#62e@NkcarlKq%RCec$PP$oe4;HK1bplaWlU7w~ynqMs zEhP%e4>}_+-9dF3$)+R zEnctIrQ?Y_&F5rYrL*kOVyjnfsztw~BtQ5JleiCxt!DATe4v7AC&*Kd>jKKS_Pyh} zGH`3a3)~|##K+Cc#0Yn= zL|WN8SW7awqV94*n53o7N$BaQD%#q?8Bv~&a7m`yNIOq?7z)Pp7p8?L3T}pUwt_oL zGO5|3PTW2+9W`4Ez^dGD z%S=+|7#Ssgc>^ZE)D~_DXVh@Dw}3lq-o1^qbwIgDG70lD{kEoN>i`FqctQRT5~%jW z0=NJ;l5uv1dHzgE(GCd%gVKQ6gBb#5e>Vxlgmi#|t^}AE?;@S;VJJx^n4=@y!3u80 z#E86m*9CsG!pp?-%ZmihkKlfrgK_(c!R_pT9RDHZzihi2+`$@U^Doln{EY#|IJqe;nOLy4a$QYU{td`o~*|PZ08lyXk-D zqzAV{TK?_b@{g|g`H$-Hw;T6=yOOcAgxkTLVgE8S0barXYZF!A&WL}pfdUZz|0^ps zBn;?#|H6}?kSOH;*}tEj)F_fJLl=Q2C$IzWR2Y7S^XKN>YSllj@KfRg+} zlXr%>AN5JId#6qh!bTUY*~;CO|H<`XaL>KQ$YEMndHK>OZB{&U{<#qQmXF-6U? ze8@G5O>iAY6}8?Md1{E^65XP{QrbaPA!J_R=J+D}WoXSo(ks~&j+V!r`~BjR=sec> z&=dU$MozTheR_uby*(RIv2JI_U>SY=mx7!LxAcOey@N|HZ)x}DF)Tmo6$XDq^(NVfXA{}%Pv>d2nheu>0w=DC9pvS9 zlq9A}<-|u|Iu_qusO7db`^fBiscu$Xc(z6hvf{&->lU)hvXR#QepE8ohqF#Pw5NC2 z<%(gf(w0TxVoA&33he?Bp}tdJ8R=vk$G#7{b>5|0Z)78h@Ljt1i?8Z#h1b|WD|E{q zJGQdMb%CZ3qb04I104|&f3VIKT`qC?;ui0GOybS##-)YR8z-Vyd!b{KYFSf6yQdNO zSVL~R!%p@Nk7VJ;Uf~poWzzgS5mM%1hXC&u<@rx3*W(lx9W3A ziUF~Qaj7cAi$;}rq0t1wJP*oI3%NVw5_);oe6x+o1fG^1e&RW%m?Q#sjnM?r(<@16 zJ{OV^QCET)`YM-&%6ONr9eLKgN2*XIa3!%#)N!^q8C(w%0M>ad028l3bodMyl8gZi z)r5fv8m+ks7~PTs$&w&h2{hUO5bE~{Krt2QK?TG`P_-RY6$e$f!BBmYkF3%k9DfWm zHThK@jRZf+;n(Q#V|vUZ$)rWd;>3{}??^IJi%E!_)6QWfO%=N#`8n?Z(I%}3rzDD` zDasttX2TAr6e8m(^0?|I-Ggs*1J!TU52mRqtD8+$2)7@dmY5=o^lXBrV3VldOi7z! z6GYxjUtay*s3e7zPW|4bUyn_`vNuKD@JRaX3W@r!xW4|p_%;3>7gx*Mb230&%2CX} z{x*NVWKLZ*ujQoQ4TUT`pVWZN$MkeS7Lzu(tLCCUzp7eDSahhGj~!mAT1>$+K-N01 zMM`3O1u%7M-8YKru>Inz-fLZ~sovN=k@5Yt9-fAM?0~cs>)*#E@Y{YFm2A}ER2LO+ zH_|rg1f{sq1Tm&Jvm{FHqnu>dc@Ivqc^?ZpAb^aBj_ea1Lo$)v`nyz5{SnJ0|byS@`wbaYjCPRj$yJ z>NCY(K9Bk6y~a;p5zilt97gChRN|SganNk-#U^+8bQMZ}A{i74=RIoFp0$|yU%Qm{ zvycB8*Z$DQeK{%3>07bU=zCN6K}E_JVw2I*wUFohPN zdxPrU$R~NBD*_(O3<<+CNov#4p>D6MpP}%rnz=&gC8K9U?WKwK@-dh8KM4x?n{>Jy z#^^hW(Z3j_8Z#t! zlEjdGef0XG$*cJi_T%>^vJ6%?NN8J9$|bXU-Av^K&x**tj7TUU{j9Iuv~@@OE1&*r zp1Z_&=PzkSPc!1)y=EC=pL}1k!EwYb#bFb;cn=GJR%(x^s-+ChV2Pd)Pg{;!aO{RrTUBOhR zKP1Gb7V8|2)fR^N=(T?>3b~fZ=`8_uF zwo553D*`+e)++TERw!0p4ooGvV#a6VYBfosKkGKtn0nEYLo;UYhI`;Kd9^=USVml;r0DcqKi>&+~oCElGlnu)2qUZtYVLskeyR z1l+Cyh!Y2CwID%U8`CIZNqrkY&1`_|kOpAAEMQ_Z8X$Y|f;1Y?XC6qt0up?ckCg02 zgFp`fAQFIn%mCGV3Xm`hg!hfdno%b9@9JUY5A|Sli^81dJ@$*Nzwvb!2JWa&X*Z#U zyeO@@8C0Tbj)u$Yg!cZnW{$Ju?Q(Q6C+XCAD`CrTvz#5vcCRd#Uuhkq)swU+)bZndQJKj@SzH9Uv`O(^r?_CfI-L1j zZF!!(J-g`n{?#c2M^t9XxXyO(u2PoV{Sj3}f5Az7D_3OmJ0qb^+_iTC2eOzovYv?|MBYI&DCX>|)Y?($s>_hG$m|NgWD*t}ziA%+WMrxakSy+vwq5@Q%@`A25RkWBH5l$rl_}=!b4*8>O1@dG5xF6 zWJ<+G4N?=Q2VG#3ZB>Sgv4P(F+-})*Jft;+#-80S`m^QXW7O_6S0`UO^3^DYdsFM{ zLM)^RQs_*|<_yH#X5#&!n6(B0%sVwnOY4-699v<@p4WvJXvH_wHhTq*`KWl9UA$b%FSP{7h#wrIT&uci%1v^7CV z3~21A1dn`if<$IeT&e+xKT3jv?mX+IHUXy`z|}hykQV{++It1|j_(@}ar|91Ec~Gw ze*DVE8o3qfYTLry#kgYI;}Pmju|6MJG(!zxrA-luRs67Q#byo@J%$WhzSkM8wV4Ic z-)q>?Cr3Qr#6xp?nwPA?I_58Mjb8 zK7KKwM{q#prPydwj>ddR9Obh_WJ@KP=My;?F64Nv!|Zt@42I5G9ntezPU!LID~ZXu zawYLW=I$!1>wWqaoUe|i%yTie)2qm>!#C3{GpCcw_zLaY? zJL+unvilO(DkbB4GfOnBe8UtmSh`l9;l7X8-!&vU@+e(ISwAmcy!hJma|lCJVXy8g zNn&G%wB1EBOiz@kYGbXzH|ixPB-i@mJyRyv0b$TS5*Wmab)^R;vTBTlH2^ z9T8_-nKP6tmi^J>wQ0B$`nKI<%Ne1nTJw}{X3ET~cMYY^aN8ROJ<)PpEc!g6KCK7qUrN{(6$$dpMzzyT4OeSou9Yg!A9G^-etrZd zfb)FHR^++L$XAoHZ91QP&D~!dHSNGd$>(6dCI;hO^@&;%h!!vVB4Qb*U5b$?e0Gk>WBnntYUa=D(K zNoF=Pcg02&;#0>t4BxB?cNk*je7v3z6Vx-ReQpmse9zn8=`PRy z_t-b?pUGs{mZFSI4Oljd+C2t{Up~Y>wX@}fJtEyViK?C(5=ft0hAdD)-JkeaYvA8+ z=6{2jcOjaMNxI@HXCpkuLS)00#W|20nTMVonHJTeRQlo;#*qxT9G+S)4T*U2pbFgy zCTR&--{hs{t@Mu`F;fL$w=z%6C%*S)6?cC2oVjDnSo)Iu;kSU{_1yq@)Wy1OYUSz8 zK8@IH)fVL{bBZTqil8(dD)lyh2j$9E^fHlt6dx8z4f@06*tmk9;*P{&u!wzK9;F5`%ely3(e<+<-+k^X=kZ!)>)wiPfBvz0;OW@!zjEyljmn794YVx|=sK7rB^oK4LU} zu6}yw>qFP&(@Aw3nG@@_1)TY6%XT3-+`!4n`qu)ORf{x-9Zg z=;c}U3gaZY4#noApy+C2nsE!nBn$ z-DK^9yQd5u&;)v%dGB~ZE$u4SloNBd;4alW|1)atgvU>RqUqfIRyG@yGBCcTA}$z{ zqq`dDfv$q3%0cYaIkz_IzlCpMkSi_*YK`_#y-#M(w5$%b4VxYvzo=o-AY{D$R*5&v zm}8)!IxdP|Ot13%sZ0x#c136hUlydlJ&_wR=U!)N8`kO;h7^-T9LR|^@ka|IokFuF zanq!@ZNdrJR?K&=6B=J1&Xi7?4#}yi<9+v><&L%0nCaFH$NN2xdSCzesR<=@FK@~2 zAZbJY@L`Gg9`hTf)Cf`9KGb3yib$GO`ecn^#C@^YVAg?gQ^&`*qua5~DGYHjHlCQz zbrn05C%WUtUiz|WyF+_Dq}gG)xd$0ybCw1tH4t$K`8&0lJ(kU4EK-p@ZVPc`7bcb$ z2jf|yMyru+>vsuHib|_?2w6>TiI2}B_~ki@6V}9$lo!4%`BqM=a7zs6H57cNVi#Np zZr)3JK)uJ>p6s>33%Qbdzd<`oZ{H6`NW{W#VsAV-y#CFoa&m;#gvq;VW7tobnnh*C z|5Z%j31(cSl(jfVH-0Kh&!3HNv6midr29C&PuOJYwyIDE zGk7OIZ>GMVH#x&UgMT+%L7nW)sUoSief_M`p**?f5)}iXbLw(;TRdhgxu2sIYV^#g z%+qgAv^@J>kQva@c|LY1AWy!g@YQ<30$FEy0U5qF6gyk;X{uIv^$C1XZBW~*5?`m)Zo|dU^TeW(0k4-+Uu1XZW+H2rrpY7N}!AhdjvZwcq$jV(!0imly zRhUe^cX5Z9OqEN-wF+xfV^b>j5zkq{>QS-&sl|uo zhrWRirK6Vwgt699-tWl{)JieWzhaoZNv1KK>%bDf@Adf&nS(Ho1GVm1`#sv^y?Cos z*ymK`-6c$FS97W|j#dv?!k#-)EF^_^_fKfsay?On?XI0kI@NxZnDlMJ>Qd(uY*62w?G&uOc0&&<-e2e?MYg z^9Lelz*_H;t`9c#{#~ih|90T1cO!1~XwkG{uf}KRf1o1_l)ItSvBa-l{)AwHtLq7+ zYFMw}hU`OlEL~3AlyKh40u0)o;8h)oD6)PsBq5)3CAr zd1IpW+qI`(d#b#+3pj;Jol@&oPgJ7#Q&>9iP>Ud=ExSlh(VU9?^ILM2FS{cevm+iig^D0&1=>Jb+O<67a5zP3l z;O%+-3Y@b5RB@z&t*|IJUt(r2`!tGEy^zDroy;q|xu)Kq=5kLYZpzwBNK0CB@Zdw$ zoueOSH+`ye1~1Nxp6Vx|kjk&gN8T!eXiwM)72^I|9hrX0u8NXhPn*Qiu z*)Vvy-Bi6!(a#gwK>yk)}iF2V{u^~~Q^avQtEgm~F4hlmLe z%^N6u>LmT_E6(b!km?@0_?+V)(}`PcNk;cI%M}R}=i%Uk$VIIZO^-GkpMyFx)Q&}z zf9U?={T=O*hmGZ)>hN|A3z6!eFM>Mf?7Z`?>T7eYv~{r2vmIu`l@nJZ{UdOylU=Ybw^Pg30Sc z#DJHQs4>5GBvGWU$2}p=GK-fQ$r(9g7Yq%`C3IRXy32?~Hwt@)@9-}O1q&5$-li_D zRZ2TJCP}bOd{{$-KD82$J_+I(5P3j6eT0T@lrW8w&}|t2ixdFVRKlzgNkYeiQ~bQL z$HD=W3QW0rUJ_~+3QSBx0Az>&&>;vE2c*ERptBjmzzN8c@;kbwI;1^{Ky9BM9Vox4 z=6xRYdIG>2X#jWGH;J)x@n{K9a19-3v#C~hSyGN29VmS)Y8wx}8TsSOkfZn8JU?G> GOZ^Ai=3TY` literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000046.vtp b/test/writevtk/cf1a_with_observers-block1-00000046.vtp new file mode 100644 index 0000000000000000000000000000000000000000..809a30a3ec51f1c6f936a80e3b32a02308402e7b GIT binary patch literal 7963 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000048.vtp b/test/writevtk/cf1a_with_observers-block1-00000048.vtp new file mode 100644 index 0000000000000000000000000000000000000000..c0434b2ec6f443d678f8788d1f4f4c4007b4c220 GIT binary patch literal 7954 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000049.vtp b/test/writevtk/cf1a_with_observers-block1-00000049.vtp new file mode 100644 index 0000000000000000000000000000000000000000..142ec2e281971f7c9d078aa7057ac7e56573e7f7 GIT binary patch literal 9310 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000051.vtp b/test/writevtk/cf1a_with_observers-block1-00000051.vtp new file mode 100644 index 0000000000000000000000000000000000000000..e3a92568b73597e0f01735d56e81d5e56bfff976 GIT binary patch literal 7935 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000052.vtp b/test/writevtk/cf1a_with_observers-block1-00000052.vtp new file mode 100644 index 0000000000000000000000000000000000000000..f7537020410e44bb6346cf8da19c8568af19414e GIT binary patch literal 7958 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 OLVx`&_2d1w+W!L2rjzIZ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000055.vtp b/test/writevtk/cf1a_with_observers-block1-00000055.vtp new file mode 100644 index 0000000000000000000000000000000000000000..ad9d8524838b9b653dd4c1fff953d3a077807577 GIT binary patch literal 8055 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 s610{gLBGaHS?y5ra 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

PrrJJ#oA10h23qk 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000059.vtp b/test/writevtk/cf1a_with_observers-block1-00000059.vtp new file mode 100644 index 0000000000000000000000000000000000000000..4e229cf76ae4623d1e634813c72d863b1ac4ee3d GIT binary patch literal 8043 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 F{{uaco{j(j literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000061.vtp b/test/writevtk/cf1a_with_observers-block1-00000061.vtp new file mode 100644 index 0000000000000000000000000000000000000000..46f664c79e7740eb735e7d23f7a02cd17cf6b458 GIT binary patch literal 7964 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000063.vtp b/test/writevtk/cf1a_with_observers-block1-00000063.vtp new file mode 100644 index 0000000000000000000000000000000000000000..0fc4a3128e11bbefd43fb0c5868e8b04e63d4e6c GIT binary patch literal 7960 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000001.vtu b/test/writevtk/cf1a_with_observers-observer1-00000001.vtu new file mode 100644 index 0000000000000000000000000000000000000000..e83120f453d0e4e7eb7c39f1471c946080b77c4f GIT binary patch literal 2823 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000003.vtu b/test/writevtk/cf1a_with_observers-observer1-00000003.vtu new file mode 100644 index 0000000000000000000000000000000000000000..413080f393d09376117e21a4271622b16bba6c93 GIT binary patch literal 3024 zcmbVOX;f3!8fB~1d1R@1QNm}+0%TtLMi#>+Eyy{`R-O@2qt^ zycp3@R_6dJjX)xLq8#lVP*wmDPYNdxPkW+b=n;0VC@+k@M}YsqPYF?g6+Mm&c%qIH zX>@7~o*qL5!hNWOaMYg|PQ}py9ElnZP(4wH2y}WBu#Xr{2qU7b&H!N=6t_fkfJooz zjIzR$qRCW%Mk8rHKSz%|afoorJB%K-_Z^JF=v!HN{5k48sDTd?06buYjfp-5Q2inf zlL$mQO_PbE6Y3qf7l?||U`|dB3rvf@Equ7hu>j16+)bs1#VsZIX%s1JK^`_NT9fl4 z@q3&abtEFN5NtcjDuP6f4x@Xb!pLNR7!GJGAw@*c01e`RLN7=0Krgbq+b;-P-f43A zvxX&u78T%0L?VEv6V4InaeuAD@$YoF?R5OFlK&TLQ9SJ*gmHA)?)0~Dj%t!})etYZ zI^PKYB#M)xrg7f$^*tjsCeL@oysIAQzv>x}-Agr^cl*6=r-sF9+5@MpwKy*5|L=N7 zcX7|ij=4eD?|;OYUts*1QDhVKn{`IEx3(Rj>>UYsEZl$7I3V;GFEjN;=E2-(QR$)W zzGw6UKE7#yKbul^e^c`_=Z*~jmKZBi?Kt_UjgFBxy%X!t279y13rH&$+veryX*!}^VfQpVA>O3N$CwVc;KnvN!?A=W;J zo2Ni2zSocYxx+`&_Jt%C)TL9*%B_;etrck_HeBbT)-RG@Pi3|KTthuILuizNaIthx z-plS=f%|UWY{s^I-~?MWVD4TV>=$6;()QTajNN3yneqTRH)24#+R~=sLx$D$zNpxFn;r`|I*E?PhvyjV+Xlls#XTkG-1pcNbrn zu+>}f!+bRDs}ESe8I7BwV*mBnhG(GNQd?5{oHujSDHOKK@m>S4s#BXrCV%ehH~U1p z<)eX1#82N+F19Xz&mRWCa(5fy|*W1*zeN(o2 zhMrbNzr*o$sy$rRRN1s3s)o5PY1>ap>h%+pCgGt-=qnq_;Q4H-1DwRkPB_`hw`H?@ zTm~oKvNd4VcGU}qM|n3mpTjhKH4AjlwiF@-`ikbZ`pHSz{ppXaYbT`5g%SH$mDdO2 zrr(HOMln0~OFhm||CL>mZ?-CjeSpB5Jqv0Mvw~2)~LnxH#hYS>{HX3U5+rwt(q%; z^hZI<2KH*A*D=-v&ip~GyxW>0h_U?%)MAwfdF z-ueJ=yl(Q%1y4qIN1mzNADmQfkc;wsa1CC`ruqC8UF=wGwFj6MdpWq;NV1M;I>sLz zCKhRfV{F7+s{t7;&ukwBQ?b3PmK0%;|*07Zz7H;x3K6-E^}4AlGGm;wtnZPR#U5l4atCss?6Y>5)>MK$&1d zt`^#a2u5Vuzk`!6FCnEnWp92-DQQSpLlj5TN;-Ws-u|rXB?364{%UDEiOVd##>GM@ zOtP-TXl~auLSj^r0GGnLr(9&P?veq+oIXswH8|V#J$ZV*J;~4(j``rlg_I7^mZ6f3=1h)epeDaB*X{;?b zCN7YAw3BStNhvjVuk-Dz`>F4#W$%;VzP{q|HyG^XCveJ_KJkzEad!(C<)`C#!_4bk z_ZL5cjiZ%Mf-37ro=RD#XENZ>cO2-xA5_=|-9mn4+{ zsp`hfw)U$!lyl-l7)<|USHsD6z(SPH6TRk*yyOk9B#!NOiQQTf!}O`Rg7599%pPDN z25J#QhFJMAKWVt%#Gy8s2YPZHTJc$t+?_OOLQ>dEWEiA$_i1GsM|sIl`9+&D39U>o zQl^rW*Cfh|Naf|*%9MwyCerLv8;SSe|6Vh*ls_p&l@`ni^&=- zuQD&Y{B2oYk86`^;~PNA@ZPmwuq%{YpUep9R4&ZV0&in(zq9pLZgV0RDL zQBm2c)~4x%XD`>Qcd=Yr%j@c;JtG?rSXOCi^^|?!yYQ}g{|Tdco}-uE=a~Nh(N1tG literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000004.vtu b/test/writevtk/cf1a_with_observers-observer1-00000004.vtu new file mode 100644 index 0000000000000000000000000000000000000000..12732e78a8fb6b5f2adcce68e1f94e5d56c53d54 GIT binary patch literal 3023 zcmbVOdpO%yAE%0@QrKXBj2vHhBlD0(T;*DF^ch8=^&$IK#InVi=bH1O?_i~=+3v(hz zMS|n7ctSXUgF~z>tsr154g&;-<3iz(SYn8U1H=iT4Lk1RaVR_z3no&cv2chljzGl6 zVu-PLY_J^F~K0eO@;FkxivK z0Eb;7+Y14Q0Qe|05e`8|M`LlpSY=3nkPre^iC96Pt1K|+vXu|}C1I;Or7wThuo9qU z1sDK_!(xcxap6SDU+b{`I~|U8_J1h(e_YGr3IBk`+J3L~-}3k>opMkbUW)2sA^Z~- z8*970f3U!y9|ckwzV(6UoxC>(H=n$AUk~x{*95aNUSZA& z#8gy)goRVp~=f~fQ9;ZJ1t=a$NPH@{~ncJHkhz|Kww4$Itp>Aex$mDnDO~SUl z0Od5u8&pB%yJ2RT4nwjzbJu1E_t9BZ@nqVCMl;i=W44!Ex+aQguZL|$gr&$Bv<_ET zP7TR<9%hbw(0s4P|B}lup^}Tfn(Y_%b-Y9wHaI+Q_4@AT1147~ThN$Lv5l?+6CdU> zvrBUmJP>-{)TcrIW#x^D5jQQ<4i&Gi9$~_P#OBpc_Tog{eJn^+IBtG!S38y(NvCbBZ3+@{|KNV@vo9o_C z-%z#Lrir0RGfnL@CDh5iT{AvuTyGHyQ(cnD~ud zYHAJh^|&*|sPoz{haaJCYmku>GX+5th*42Yn{#Xs((fr^hiSgip}XJj$JE0S-i|Oz zlrLy=SIRFqhE*h{Io`law-c0Q z<~YWAGL`h?lWSC{m1Y*wk+YOH_l++=Y7O$YVzpWIYSUuq8|vjmXMrYPCms}tdL~ts zt{LYl=PzABNlt;Nd*`I;NfAZPlSR&?K=n-*8l5~3KQ&za#y@Ud{@z?u)=xUcmz z18sCjbT9XuhU+aYvro=l>T<`rAG@~md&$DkNwOfN^EJhOJbqdb9(ziDD?&kYJF8eQ zzSs9e8rXEFc(ms@OoK7f;|mKAMu-~bFIos40(2Cg^j++2E*whkZKfGKCIljUSyOd*HF$!n)5rq9&tbYnMWw|LNX)N8j0ATbDsW|-6dqwiK$A!Qq{wyE^A?BI3TNWJcc%Fw!rvex5ms8;W5OJsJ5zt--D0147Hetsb{w6bYt`iIS)plb&tq`-FNRK_6lEA z)Fw}o`@6aDGf*Dl@7>2Uvt95)tUG$qx7${$wJ3&_0U zuSI*yCiP{u6<5S5?3yYvl|OH&oMzcArLX)d80jWM+6wc43SZFyS!%kaleS{pATmLU z@{qr*toMP(t&2B2e?G87n5X#VDYmAhK|9F65#UtO=R9FVgtn!>|$m4`<& zl~1k5G9tzhsgp_IaL>c7+X z_Y|<2C#zdeS2yxHgtXB4t03t;hBOx`z27PQ2`c@iNO~8L77C;}rqZ98(maCfB_JO( zmG`4$Plx2)5(PI&S6BN?U(=c2u|^{o3r8jjc`pmcHE?`)d(!8RVySLbX_$fT>MRb; zgi~)aw#j?;1X37`eCOFIf+v_S^ckA z-Bs1S3#x=Q!C9;M8dy%3%Idm)Wlzq+V2x{3R9;oC^;&9cKJH+Y-8ponJxBZ(f>?W? literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000005.vtu b/test/writevtk/cf1a_with_observers-observer1-00000005.vtu new file mode 100644 index 0000000000000000000000000000000000000000..9cffa5cace82a7a6ba5e231efc7473cb7124312e GIT binary patch literal 3030 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 Oe8^}X>5%1DI^w@swtlJr literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000006.vtu b/test/writevtk/cf1a_with_observers-observer1-00000006.vtu new file mode 100644 index 0000000000000000000000000000000000000000..7d2b8ecf4db54430003a21bebfa09ba38c6a9df7 GIT binary patch literal 3028 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 So43ap)rhW|23BWu%zprghKqmz literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000007.vtu b/test/writevtk/cf1a_with_observers-observer1-00000007.vtu new file mode 100644 index 0000000000000000000000000000000000000000..b15d823e0e2e6a6d4d92f6ffcfa15c71e321d051 GIT binary patch literal 3029 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 E0lSTT-~a#s literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000008.vtu b/test/writevtk/cf1a_with_observers-observer1-00000008.vtu new file mode 100644 index 0000000000000000000000000000000000000000..49511de49cb6c890596a1a2a7e982afb0361f54b GIT binary patch literal 3021 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 Q=F4Y{`iTx+exoD)3ppK(kpKVy literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000010.vtu b/test/writevtk/cf1a_with_observers-observer1-00000010.vtu new file mode 100644 index 0000000000000000000000000000000000000000..3793b11e2ca37f83d0b830d70b579087f8f7929e GIT binary patch literal 3017 zcmbVOX;f3!8WpUd3_*$%cnpD5i-;1T0s#{S1xF-4t%8Dtm;@SuB!mPKLV((WKq^?R z#s?_YRuM&lVr2@0AOu871(7KP0t!WjBmxQH5_n;{PNXadCYYaCjIqLyj)6DUqQ zAeI`RDc2$39trXV0_5(!7Z;#4gmhJ-}nRLFJ+bVUUYU1Iq#Uo^HdQ`Pck z56cZ&a)2Qc2sjJ{AC0Hb|JsNB-}!KHbos-{|I=DBAN3Dp?42DP|5oRiswkL>c(JPs zLHH*s4)%`Df2hErA2m|dg5iH12>D$KfGOGd>m;xX|-un>=Or*1CO`v{_?R;+c+e#{k=rlZ^_{ zl&jwXJuv5AituApC;jvGf-6HYSsCs$*T5ad#EoSw>HyZ96_v2AIpOygnt@d<0bs95 zkIce&f2aUDS${46P@K@~tX)N1_V%2}J6(~;O5424(}tUy!~Gj!o8=n1%(>uA@s|t^ zPB__vUK+}3oCod5?a|5(FZjUW_|HRR0JLZ0SE0a;3)QekJ2+YSja+Z__|duRzp^5$ z6+iCQxr=m3`CUz4`J1%>`bl$}`B-GTK@?}S`(DF5jB*9lka=dKJd`@$Z1sJur{ebI zw3M(np#4IySad9s^*dtYG3cCl(m$&n>78~vo1M(Raz z&iKD=p$-_H?FtJ-v`Hi8VrKvkoWDGveDE>T(Hdt`>KdCPxCVE@4e<3 z<#CE~FPkJKGWCzNa5}DsjD3pos z77PVv6vpo}7&qFbLTVnn0yDUI^aIv_&dKCm4GGFT#Lc3$Pu9-LCF)~2+h@GZ; z%qZv{%3T&iY^&A)#kg9%6>Fm1JLYGK^hCW?+Qa~>L;sT150Pu%&W4##+j!eBW(O!i zRRJ2neaw-1tCrq!@Y&q{n#a$v3mahRx!5_9kH7mHEqRj|`TR-4Sip19`r;h>bGZUH zo|%tej%Q{;60aFdoUl3P`Be^i{ma#DH8WQJC8)Xh>dG5psB8_B^8ot0GLh*iRvXoh zbq_}M#l@-Ki#eKA;V<(u9x@-jy0Np6mGV>szV_tlk1NOb#)hTix-tsYKOEnV#(?I3 znJy*Ul)83I1xQ>wVrqT4zT@{L>w^MB z=y9}dkRN*HaqZ`{&epe^;YXw`L&oqlwgu02&W*br;afdGvzF-95V#i6N)XpV=G(z) zZ|VtRs+JdnWujX=57GXPB%|9+Hn790e|Nx>*cRU!&Kn20W{bocw!#x}^WZXRvvfQe zK^y8|h}H|&%iU-eV)gQPcVS(PXcqwLyTw}zc+b*?$*EPQc{KD)U@}|MGJK#8{M5A0 zeKo)T{KIbP7NKLb(uzC6Rpp3FF~wA+6MM6gocl<1P2EAok`_!h19sNvHa`NE&i0Mj zGKb@qPy6+47M_yblUN9u(aJDdbo{ERFG{*&bfD&~1Nw0(@~glhnzq;;fMq|;dPCq? z(~geL#7J7unM|$T%3;UVxwb)N@T4zkdRjThW&uN}cpZ$zjvsc^8CgQfk@Bg0 z9&HXq#S*H`X~Tt=7$x7drx4|bxL*jfNZOoKrm52a4hc@+d|iJq<4W4RA@tOHhPU>s zu)1Qg9+%t7(S4^pGcE6~y&hx45L$OmScLEa4Tey!bK*LN&-ei$=8w{cfKyj{HM=^1 z($K1E1Yj&5H4qf>$^5x=hKxGinLy?X>y>&>gD(uMq`yyNDeWuch2;;l>}_@UuR*Gh zhqC}Dx&7ePutB%v(&Y2HQCXOA;5uMDSeapued+b#3GnjT@zU!v5l=46@hkN3&^L;) zVN>aT$EjY9Ow1WP31;bqhLmGt9ea@saTcmb z<0z7eigdB!8?YiZN0C&dd`6sY2G2H@&b@=rOQ7>Il;#>uyEixOL@jnhS_PwLK-8-v zWtFC-sad7Bx?#`EdpdgrwUOyDD7oBHZ;F)h-Z(?P5jmy9k4`h9Jz&$5TDh-Hxt-nI z*7Az>d9^5YZ1&2236{2N)yk-|Jf~%2aORb(R&|$ta%k~F^YPt9buWi5U(DV93)0_f AUjP6A literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000011.vtu b/test/writevtk/cf1a_with_observers-observer1-00000011.vtu new file mode 100644 index 0000000000000000000000000000000000000000..94d0569ac4e09cf239822d90a17b31eb80fa643f GIT binary patch literal 3021 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

V1 zo)7OBRWgO$%f&FEyLT%iqsBW|AI9($%VT&FKp~LL1wQMbdtIfr|HXX8G5OWgE z79{pdri!Lc`Vv@SpsfT^7^t?3SqEXp0}%2bVx{YVT@w#{QK#u9gn51H!toQ(oR{zx zILq}Y<|UvFr14wZz~d?P{3|Lgr7q8WE{%N6ynbAv(oxoy(W|?lw|3FQIQB1&zoW19XfeMBan*r>Qgcu}4wsbpv$i4vusa^Sc&^GTEpPNa#>MwgzrtJ|~w1OFzS9|L9=> z>yYAIep)7dh!YAIleyrDgyeKpMhMG9z6Mx5@umFps#!>AqRstkK>>T{or!I4QDaqF zbt?Eqy+bm);&k=DMA9NmVsfgrE}R$C%TD7!&3mH-KBZ0*_r*oRjgL>MRW}Gw=Fd}V#Yu#1v z!y)Rj%-~(c6K2dBAC9>$OGmzupR#TAowqQSt_3#(kqj$FqetKJGY{4$fk%2rw)Fed#4{7hnPVKX4k{&!Tgl-Ny>t*huh-SI`ug@ z(xvJbFJGwkC7ZLjLC@P?@%;)6X@DU&%Fdg7$+ef@| z|1gfYyKi~rZqi$?>M1x_wqwUCFwK%fWgH|OXpP(48vl5m%QL_3XZO0B%(@yvy1Va> zyhZzu?=Xx%=b2bu&$xDz{v?V~GMIFhEtQmWR`sLnE7OS!Q{z@GtY_BP3F@Lm9uY< zY6V=a#OUej+4fzt?QOOl)Gv`mgQypWpYYdJrsq}`bt0adb+>nS)x>AfFe;UW;rqDk zcc$5@^#Sh$vTm+}BmSR<$y%m4rY literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000013.vtu b/test/writevtk/cf1a_with_observers-observer1-00000013.vtu new file mode 100644 index 0000000000000000000000000000000000000000..77f0514e85b0d94ac1c49b857ab6ac8093d8ad7f GIT binary patch literal 3016 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000014.vtu b/test/writevtk/cf1a_with_observers-observer1-00000014.vtu new file mode 100644 index 0000000000000000000000000000000000000000..7427b39c90fb02fcab99bb84a581146f97d9b9fa GIT binary patch literal 3021 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000016.vtu b/test/writevtk/cf1a_with_observers-observer1-00000016.vtu new file mode 100644 index 0000000000000000000000000000000000000000..4a633ebcce31b64e345bfed9bdc90fbbf3c9efd6 GIT binary patch literal 3014 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000019.vtu b/test/writevtk/cf1a_with_observers-observer1-00000019.vtu new file mode 100644 index 0000000000000000000000000000000000000000..b00178cbd97e9579858952c2a0bc91679f93de1b GIT binary patch literal 3004 zcmbVOdsxy}AJ5EOR`8aZHoOp3BKvu3y?ge&@AK^ZanA32e&>9?pYP{<&+{CF zJ3TfAnt-QJ2_zyCW@oz{2E`L`qzD2r3JHs+McTN)+);XnFAw;76JqdCS`rzLgas3+ zG)g><7Ei%P_)rKDu)i^UokYW9NR$XX1qs_rpwVLRyND44ED;9%29E_$%o5EWBF)JW z2E~zL$rL=5N&=QA(4r6RC4B9LrD1ozgJCE=C=~JcsPiBI2NLi&Jk&ov_G>&PATp3d zAkwHnCU*9)ci>KZObme8+izcBTHLmwJ4tYFT&V41J1w8_#ff~14+36#0##@ z7s9`ZVsGc@_*WDJ{5>N9ljkd9-cnaVXeD`^hA}e%~a}u+j(vk0* zsNY81o=b}Q^ovsTv`u-l?@%4DIxnwiqvH<)gM+1L?jKQ=o)2%{sqP8u!A(Dw)>F z+jqG;ISjx%9=2mfev1A4lKJ|nnNX?;Lclx0HmZU4sG1K{eq@p}snx{(<%#51TKf3C zLVXk6ls@BlLZsVBH_GqAgve!gYIW2Y3v?S9s^apQ;y~Kmxe6Dd&drcDGp6t%mwTzr zSm*Kpm%z!da?=Y)wHSn}%csViCr8@dR^3I7@wbC>pSWU+^tet0^)^ovUDgNk%!|h? z4{S!KavZY6frf7-?To#77i(V8{jDe_uyYT^{jWZJNxWvzzTcVr#Jt`u#=lvaY)vL#z^ZSj$6chB^ry#JbQ&3UsS4edWH~0u1flJ{Z7ol%=wAA&=gd5;|CDGS&0GqcrpAdlqg?!L?2{;48exD z`|kjpmUs64u-RQSwkP1MCL&aCZY=!4$N<#e2;? zbt=Ck{?DVg+Y&48Q%IZIn)2l0obU80Ke)Gv?8TT@SJ|Jxycb7*_!ix-*^k6Oh&vuN z-O_8()!}g8ME62~OW4Y(HM+TGd%FVO7-d9GTfGeAjUN8Bsj$B@KaM+kx9TbtN2+p&y#%|9>fb8Xz}Ls81~d`{zZ%rU^!HA zg{7UL^wn@=hv6)aj!iDek;pp4MMq5Og`+bSKo?uJw(?{Hw_bkp8VNjl-?xS~oXMpR z#}x}}#H9~+H6|7dOMTp*H-yN#MH`>Lfzw%XHIgPoiw3pai^#+riO&+b1#>Xir0ATLd2^ zs4vkI($`H{*6|Zf;HEud>r{p_PYvRnbmpP7uF1>l_|dCL=g}Hexa*_p&KG=V?vN;~ z$(I#HHj~EjBs!XXO%GEx+6qfC$=ocsEc^vuZYYROP!l+PqYkq5g2M^wP|jpXM8-*X z-JVybVXeL_g-(VUd@mC$Lke_fb!xL%>BH44S!=_SE1J(SSZ2}WJHpaF*RXB$;fW1w zaat=T3qpqsjNLiGLZW{WMmG5}1ITNo`g0ox?)x$ebBjdw0;ALn@XvJ2v$2MgHEry> zr)%1X&(jbMX~$IbVR?m+Bs_N5@NNr@=sSN}^^UrTA%%`z=Xfr!-fYapeRzCuQ1myuYn3s_5nAw4*807UTUj zby1oJ$P|5rdn-L(yj=al)r-}>JmxR`pcmNi2;YE!pMjTDP71rB3(-TU?7Hl{_0&ta zan)s&@lYevE~3lpT|4aM<=Ex5Nz|qg6dkPc@YrCKXw8aGI!FobBir=F)k0jG{RW#W z20Kg#9-s#YtH;Ms{*xZyxU)XVx7(6_yhg8&N@7b=&ahmc{>-`mhWp?!w`I6PmL4^e z4_1{kRaXO4H#${6!d2HRRb?a+$IsP0$~kcc2&5PG zj2G68H+hlEelfxx{+%sZO&s0roVcwfKEL*ZSbEC36MnuOziEH zBjA%8;fgORr(H>tn@9>*4f5IQ@K1PXo74qeWdAQLubo1B=JC jVtHJ*G^ZEf@TQF`R`Baq`7OL*-hZwDPjUFtTO9Q#GFx81 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000020.vtu b/test/writevtk/cf1a_with_observers-observer1-00000020.vtu new file mode 100644 index 0000000000000000000000000000000000000000..9ba3341605bfce2efd36d0f0cb0c8ddf89e83a51 GIT binary patch literal 3017 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000022.vtu b/test/writevtk/cf1a_with_observers-observer1-00000022.vtu new file mode 100644 index 0000000000000000000000000000000000000000..0f2415aff52c0846ceebada458aaabb9ade186cc GIT binary patch literal 3012 zcmbVOdsLFy7S|eMWr{VGR+_lTZcjvem?mJQ9#0zPjDktb5m*^T&7A-sgP#_uId-_gWj_ z$%u_{h{sc?1QHPmb#ZcrI^c;|5{^KOL_+Db2$&nx6J?GFJg{dMAqMY2OC;lw&;TNp zMxkSAbP68lLm}XxUqm>ZNW+JbC^$R?3EfMe(PHpBi8um=2z7|UV~pOg=`g#AG}lc~ z2P`R;OukqYiOUA)C#M%aCdTO7u)%pU($sI07pG!OIwl~uQz)3k=_Gf>kT8?<{4lY`oTmbR z7SqU%M8r>mZG<{RkSMVj8WM^jlkr3x-Y5wvB7%xHdYqx~859J3D#|B&lGu!8%;ifC z(*jK~z>|O{P|c`G4={ zXHVIT0{Z#X^?zX&HDoPXOjMZR@MCL+(ZZz6XUTWhm-!q> z(T_Z$bu@qQiLx$V*Dkr$+j|ODJ@;PybALxF6AB}1@42P!;9!8zd_^3EB?BZoL zGXEvJx*n*9{OW^l%5Hkm7y{`^3h@VDLUp`iI>FCicwPm!k$vH|vW{GUyKHHiZF$wb zd`gsmL{{jzcIdf>qt7aA`odpqcE6AkaQqqe&xMxKvrKA(_YLvMua^pS%`8ZXT{x=S zq<S^=~`&x)0SJIH-4B=QTVhp!UjwKJwUyvaHo| z`RY}#Pv>vQptKy-J!nq|DmE{(bzkn27RoPPf3CLdMf0&<4#sKEIq+Rb?=oRt<>D{^yY{Gy;ZeEz=4$OD{C^W7Pr+6$|vE<_w+yh!^fc1&X@R0@s%}(R@M~jV-P1IMDbnI4_ zLTry~Pps7ZI`-303cv7VFunZ=@!j=s^uMI4bA`>w)7^zTg%%g+c_5q0oNd+p$OZJ9dR8pYAZ4D_egXup?4(l17jrJep$KTa(^yivtm%&z+> zC`7XakrNc8Veq;2^ZM5nW;AI0WRT2NnuDTYTlGPal^~E8IB-h6DD=Dfwobt=-tRdI zv4vRk>y4(RqEL0Kd_986v6q{Vx$vBk%>pVzu0hvRoEMU>#$H zGN>EI6DvO&7zqrmAey0YZA=4o)o9mBvzTUZQnI9B58Gv+dwysh%1X8*bSrZGsDQy% zlj;`me3a!fEH5tJAZElDW+eUG`Q9Ukb6TPK%C8&Qmu4kxNNz;UxuLmUDehk?wWu2N z;?eT(Mf`G7(sO=?F(+ZSoz%PD#w?vD>qE|!Yg*yep?nU5tA0PaOl4U$wn=I`5~+qs zJ>m^Zc|*bB>Diw1+WL@(9_``OXL@GaTyFqX9MhVn+dFl`g7*3Vr7}F48&I)d-HNp= zwdM^S%#JpLr=sfUJoe~3@@x{bs@hfKS_!X%@stY9Tw-@>U09}=p}7B@X5*p9KxXZ% zAWh9Zae@tr{X_b45?fLOFyaAot){g*gkK(A5uowVvp8T+^D%2FIwjpo%+OtvgAo}V zFsL%ygYjTAzN`LrZ}mK_`khFNL57YDX~uJsctcUEN5eF&E60O2ZL8ju0*pOs@-SR1 zmU1tqd-{k5iC7^pD_P1^CU)V4$vH?BN0|sOlN&A|RVisf&&Fr(QzARdtjI!CBNA}b zDhE5u;Bms5=SToO(2-v;ZrTujrgx?TWOJq}er7*2eZVMy)f1w?#zX&nz*Xz=CNKI8 zidD%vWl7D)4giI~k~cMM7u*Z)Pb+S}vv?%D_wrvY+64r3&i9wWrmt@$> zxC+~?b^9cBcO}isJD>g_k=!46kMbMZW)=67PttDBf4~!C>=4qWVLvc)OmQ(w=vvidUubIYi|*TN2il)02IwPGCFRstaUk_ALBNN;hHHJfBU?#B)+DWyN`r!^w@2!Zv2{n$x|2d(CR~@p)v-vr(<nl#(txj_DQsogaJ+J>^jcw)e{K^us zTjO#`hon;wcRC?Vt97s%CbK^*VQU@H!xqB$92>@cPGVLYuici{A?CGJRlgiJrOv_? p%)D3U)N`54>=x5DqX3IvUSnb+uKa4>fgqOeZ~L) literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000023.vtu b/test/writevtk/cf1a_with_observers-observer1-00000023.vtu new file mode 100644 index 0000000000000000000000000000000000000000..eb33227707b87877ccdb50b66a7b81020dc83066 GIT binary patch literal 2992 zcmbVOc~sNK76t{Qpiopm*^OGj0AcX~rAd$iDk6(oL@OjB377);K^Dj&AfQPFG1e_u zC=@8TwSa9cP{JCKtw0qiAW2BrA`+GqB!m!X*sQOo=e=_}f6Scu=FYv}{pQ|t2IfkR ziZqMG;0ag&2M62P*n-V4xKIF%#f8JcBx0DgGuRcO0XzAr_d#qV#*9db#=yY=I06w* z3MG>881x}L77hNJhjSDn1_j{J7(5(&6iXyVVmxtZYzPi)b{-R=L{Y15yl_Ov{a~|D zASxP> z1Z5_6_TYD*J0>zxiP_uRE_+(JwrsfKV;NWq>4wLLP*#&X7zuLWpp1NOUv?hsG!+0m8xv7$ss0hOR|{L07!I+bgV(DgVsF?tk(4$ieO}CjT$i3VFi62xI4D`(DQX5GO#Hl(W+DvZ_mk z@Nc5n+d0_(l?@E~o{&nBmnvdORT%W2Y6j-E`bJA?zgO+}kT_*|pj1^>#zl?)UQ^bu z?8#ZAJJ`dY9^2mFQ}EJ~&~zm2sy{LEDA- n#G*^8WIOeThHVPGfgWbEEE)AiQc* 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000025.vtu b/test/writevtk/cf1a_with_observers-observer1-00000025.vtu new file mode 100644 index 0000000000000000000000000000000000000000..c4c0da2929f1d29d8af23f02a30ed054d3f51b88 GIT binary patch literal 3014 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000027.vtu b/test/writevtk/cf1a_with_observers-observer1-00000027.vtu new file mode 100644 index 0000000000000000000000000000000000000000..29bc7f70082db5f8c6491d3f5118412f62910325 GIT binary patch literal 3000 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 Vs@EM`>R;Y(RkUq5bfpi6{}=q>V`=~Z literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000028.vtu b/test/writevtk/cf1a_with_observers-observer1-00000028.vtu new file mode 100644 index 0000000000000000000000000000000000000000..360780cfe6ab4c0bb47071f89633c12926c75638 GIT binary patch literal 3008 zcmbVOX;f3!76w5m2#FJ*f+Pkl7AqI1MbIRef+7|{`xH=Q2uXkx$PFPtVgza}P$B|- z4xxx(RR*OED*BiLRKg(23o>X(fj~e=DMJz&A|#N8$@;pw`qt|CanIe~Id^~G-e;e? zHqwa}5e| zi6m;2Iuctu#5>TL5FW0^?Cfk7JuQ8=pl08Ndh@s`}BRgj_@58EOh3Pte1~49e_eDH~g{5BURPT*at`O!Vo zqUd1EKtLhM!LlGSe;uKEf=P@lw`lOL@N#z_D{>K_i5Rb{gQ+G(Rxv}y*KTjUeXqML zQC?s61LICx&2L*y&%~rC#QdW{oEZTlBCM1CNal7PISV%)sO^OeIc;faydOVKi)(JZ z@X4L20qx=VNW$nV3P3l^qOflt6diJ;)twp$&gWY&E*0+!L=TeTcWHB?$A(YiLjy@i z)(!^t%EsbcvR8k4`q_G&+MT+CFY+_}pyLRWtAzV*7{@{#`*3PTuXCD{MM52zZx)Ca zX^d=un4vOn!@S+(7fT(tLaie0Z(R)LOF+&?$zQ#0c<`SOHdHvZPVUt^4yoW}6+;wX zzR2rT{;acO@K`bVTRZEbgD-gnUXwe%faEw$dhdyT9D3LLE|`-=v6&}&qJQzd*k;-2 z!+3l}tJ%`5`6gQQbL$1iS^8Z6F=st5)K7s9q1RE$kb~WL2ZQ86?gc==V!h>1AXFlMBkWK-?%#lwpD zHdaw8uxe^Yn0f!2RABPqt?EfXK`M}{0Kwz5uuTEfU(spbIC)^tX-?=R8yw3e_x<|B zt!?%JrXpZ8=53G1$&k$@mbnQPQ(q>F)|Xhu!raY#^O}OD@eQvZU8&AE9PCNzx#8qB z_8n7{V{kM)*08 zQaSC1mmxuCviTccmdVE+CEFaJD7Is~B~-9BJ6SY*d_4Yv{jKMaAub(0B|>VT`jHxQ z{m8H4ZPzQ`JnXv=g5NMm{!HrqN)l8c`2Gqv2K0J6kfe1mcVf ztoy2Mx|hiSd|_+1=3Lym;cABsRMAUX@5vS|C#Orq#v> z_pg!HX7PQ>pyTynR^0(IQ(5g$trpoysHyam!u@qCDoC9v{H7`+^V+ao$YxY{ z{fL!&ZwyTvU{shTx?1_qnq6>}wGGhfdy`G_8}(>r676|R=OsRu-Fu$T73wi$XUn^a zpa5fbnv3R4ZrX{|tCY44Y^*UYqzzNDdT-pL4ck7IczAQD4qS=OF5#(jD)R~%Pd1)} zqB(QMgctYL33Xcr`~vxs#!4TDGoihj9O`Cl&9^YX&stXb9n&Pgg+S8-Zm>@%F`VPd zPoy6UcPbodMv^U+^J|6C!WgG?76~`XmyIz>q&jA78og`8*#B&56x3B(J6UenC~F(` zsIN(lHBsrC)mJ``HxhCyTi6MPEj;K=p?0hyO_YZ_i~JfYGmom#14XD{Sn_4sLQVf5N;5>(22>4+%!J75t+@kLf&AP$ z#*=yN>N-X}+bNM{zGk#oT7a$KB(0$hKlG7>s1?z)Ok~2omfBL9M4zQE?n4UqPm9T$ z0mfNQ@^d4g%BxSoWT9bw`a)gh>bL787O{-DT18#lI(B~^cZ;074sdUbE=yuTOcQfO z>xCxgDuIDGY^mf!p>gHBzWNbYDjS_PA`RqmOPL^_{8+kQnZz=8vYNLNdMZCHOJf13 zy?qc4wX+G;{c~7dsp3Qb4U(f}iTt{1!|Sq#1?j5d(1y>`uQ63dfZrPx)3}h&1bbmL zdO?6`hvKDFQksmCSWk02ABs`UIda2k4ov;lm?K}$5atRdc=Adc6)Y4d5$DXUl8@rL zOFYRf=;tVf@3??p9-?YOF-+x7PeU^XR?5FmXQ|v*=8WY9TK4XGVkkttc6?d2?jSrd4fGP^p6?Z%pKei}t0g8LYihNMPmMDIJDemSf@}iW#fOA6FoFG8? z-`=_QnfZYP2t@x(XZ@Krf>}S4-TxbV_!qWVhctS4Z|ttpXohR$MO=4#Rd!#zdEXQB zp>-b9KAuv%=Y)HU3<*rG2joYJr}u%A#-Q9({reMQzq%efH>=km$^jifYsH zl)@vngG^-E+#IC5CB2d%&V6wsT&Yas*wR_R1>0 uN;7H|K6~Z7x|fbiV`Vm2wrSZo!q#dHjjnR-qlWNH|JiiG(R>GWvAN2D+!js&xcB;d4J>@v&&5`E7u zm=&HJL!lCAG_rPi96joUFY%NYj*jzun}(r)R#u3=vMwaGX@4RCPq6Z1#GE2fG2#AX zB8g7ZR^sFgdzslk6z46c1MIncn zQTI4s_wBg%`tq+oj@i6Av+09Nm(8mkGH-=}VzPlekc0+mtsP3PaWoR9B)6sv9_M#6 z(e|Ht$I-A}ZN=VGlz3h04RQU}fp9Ps6kC4zw%ttRf#C1eqeVW6g7?4OgTi97?aEV+ zR_<93t=~0$2Q@qqGu;~7dJ}bC`Fnrf!*PkVeL_@rsQrzi*a-qJUBstV>`H|MQuOJZD0*j@_B>-rdqbb5NuxBU^Cc#cZBi`iTTCVwdY z3h2U}%hhix(*?;aK~y$pfD$0mYu54fFuQ?}l`^v8lvrq-nx zM|@)9m`~}@A6;)^guGIi{~RvaCoSCl&6pk}>)7DIbva$8l-%+93FO94?R)(%sSm}M z|8V$$^m6HpQr!pC$#8yIXjU$?)q|WwNecio27q+SU^}iBh8qBh9=9no|GkfKIwOS_ z_00ndAK~+@P8UB~jZJKG8~ipYcl%^oQRQINusHY(9C(pdRY~0dP7~32#|de<2~IeODH*LI(|So+2qLF!K;+(lg)xZ#rKJ9+uH5;5d<=9Ubf7BD{NwG{; zy#Wh;*rPX8=-xfLp3>p~%zxU1#q88l>{r>tm7gmqmiv=jLGBK^0eVW&D9;FrnZHPw&^a~*7{U5%IV3^_1w-QZvkxNnjr%W8>U-oLF=If z@YgTEb(f+h&dj|yy&+Z&JvRMNf91>;yti~lSLUA8Z_jK;OHf+?Bwb!s9A@jhJ9DkU zmN27RWk#9rA36MuMsp)=$}Z7ih*wiFl_+B}c(-e%GG3`v({rIAPO{HX(Qs9Kyc#so z6lL3mm4oFCgAKYAv_wZ8GHDeG;3pe~0#u}qOmR!CnPo%N4n!+5x@pYTwrL1cRK9v#_YA-Cs@SST@I%M)rk%RzAVn^_@BFulPV zVZfhk?|-izT*exqUhTPYn>FI}lguwrKz9|&^mj-;P1IQ4m$%6$(vd7r!7IrZE{zg^ zs6XVSSk}xx?iw7~qa&bi#MPgJ!b2S7{4cXCZi)yj1NaT@5w(XPK)rL)PGYTcW0}b| z@#oh{7?L=24u^yv7t3F0LYnwb zlFcMSzKEM*ENTN4Nc5Ph3(^vN0wNV8x1`k@kfq3QXvRg>#jaN~dgQDSjY;TU-zto> z)1@}Nm)>-cQ%cd7c}T0WQtJB#kUA0ac6jZe6e2;?ZO-qnJt@v_WIvqOt7~L8anWfU zOT+Ps$x_^XLAoJpr1H2tLaT_SYay5PiW+z<8IS`U>P1NQ%??pE!r2Lej3;LB+GD+{ zEDj3V3zPuVYkoJCZDq2P8dQx*rrf>~;U)#e6z<#1s7~jYfYb7&>m(M5e0YBnjwjnD zG3U<%wT~p8e0J4TYx2s{98E>!qk}nLXKBpfA+I%A=4Ik6au1XhUy23)SM_{S#>+s; z9A*WW${}QHp2B!m0M))V=PA~)CHXI>+7x_84Kxxj8_Jtotr*95RbeP1)DxsCXyT=~ zCPLGKWP=sxpCWVnSK7Z2BNH)e_R(eRtv&%5T~o6#JD=!Vk^yMWw9!5%Jt1_LrQ!&&vgm#%f!FYK0?hlgSZp zazU!H991z!^_@sn1XtazP~9Y}xH45CRCOy~RYFt$N}iKI=U!sfKljW%Q_lCNn3w>A zJDP&q36Q=lZr><(;Qf$w@&d%ZW=viG6opsC;Nam-{GX3AG2 zN5H4o!4)4@%*3D?YG0c!vbzZE%1+Z~30-0{y$7+1#b*MVy?uho=vx<20A{j$4D z7<++dH2Smy^X_{uj8mc06Gs?xBvhE literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000030.vtu b/test/writevtk/cf1a_with_observers-observer1-00000030.vtu new file mode 100644 index 0000000000000000000000000000000000000000..00bb483149676802c734d726440a0e1fba36dfca GIT binary patch literal 2999 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 hx_rT=zM0;cig2 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000032.vtu b/test/writevtk/cf1a_with_observers-observer1-00000032.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6976b660b776647f65077492ca7e15001dba7034 GIT binary patch literal 3008 zcmbVOc~sKb9@jB5Eiucj=Yld*P4$XQGfi;G$}v-GO07&05sgXtA)sucjk%?%nN2ih zQcY#0VNEre;+{I`7%!bdQvuW511#bvqVjNSdUNK?J7<1>aL@hR%lEU~?>*-tT&dAf z)^S)O2?yYjFxyR=Vb)kY1_;ODBayIJa>PbQn5&B(BH*C+Zd?@BnoJ{LkuZNeiA;>e zkYkD1a8DvG9QLOQVKg!p1rWorL?mo4j!cfi?!t%T(0G{jF)Uh*qUOtZ;mHp6Fl!7D zO(0@PBtX4Aj(q&cUR>BtG#Tyj35L1oSz9Ci%sK=WpLjfzrZTefVTtu*(y*^P5GW`P+>cOnr@n>V>T3P8`w^F>FiJXtfpEW zfXB{~*}<$M0Ae(njD(>H1S~!rtBwSSh#+Cr$YvOPfdv7dtMX|+D{Nt=_VQ;9^8w8% zzyNqW7DL9x;mEYV)?xd1I-Kmc{h{Rlam|S*{R0}?ZMF`7%j2&$<)|(^o9av>{1cWf zw)T#Hupr={1*r~srXyxjMZo{6XAti5XEc-cXWdRjQ`GH&($tvyPU!vbn5Q*2r{>3= zr+ss9zfnW|{vBDr{ajm{{&3fW;x$DzgBiaZ>e#X3+P*#K+hOVMH-CJ6&cxS&^TW$z z-&eo)ZRtOo-Mn>q#`TnIyDmrl`^E0#O-)fJhYW;F)8|ae^r}(|h)@wzDY<+$xF&DC z@yB2Blcwj;{rI0uoQ~SHotfA+{(T2jU&nD8l!YrH0Rz4ux zugH`P2${DJ1su*8wkqTLf8ALR%00V>F54)MwM@O@{gg9UE(LT(oEt`B90u9W0w_rq znw=1Tm>$yAd%Hc}jsx*QfTJ}glqQ?sizwH8DF#j!pqKt3H>ac0mS0YJ!%{{Y9x z zJ@7P^UFCQjwL34@NWV9eT(tGwf7}dvGcDx>hlZ|1#2faSTsgn%mKmy=UTdQ-TWjG+ zmy&T)<9RZ!`0Rd|>BzVLlw-Z8LM zYp-uafE)=KZg1-Qs(7u1{QK!-El-0G_+9AQJ-iL#I+3X0={VnE5s3cncI%DOhE$Qu zy%clzZ;Pq;Sy0OY`; zs^iX=HcaHNOG~hUuE|>D8-($5QoHTZpFL-FUkSKj2|FNP0XAvh*|2TWG;Me`X+Arq zJs=T149%IXn(~=kHha3dY($n&UENS;l$sMs@g-N`zfNf|-Nl-NONnZ zz223am%Np@jwga}*~f1cu$S0NZE=N)6ezyaeQI`~ovkCX9^O9|{U z@D9P$YY|*S4%DC2t}=v2ai~kIo;oL2=~y+4gz|x!kx=1M=dtZi9@lst$Qy9t|4X19-ta>SepXJ1%#TVZ3FAMNh}CoZ(2jJWSU0R z1d_Y6`D6HdBYY|TJ*UQIK76_wSDQ$V8=mlikW#ihv$ zrN)BeaZ~HKvO}SXS+4qRZ}pE>d$Z^@Y_%DT;j1x|vB;hvuFN}!LeK?%EU!v);u;G` z1S_~ib|hsroGGaD=Yr!)rCI_Vv3w#O%wI|4-}0*CVH_39rcMLH_iRwq!$PXhRayKlCQ8^e*6rjuK_(D4z17Mv~XN-kHs z+6EFBr8Yz0JxWUq<2kcY#vfE}<_st}$|{Y7zAa!TG31BE z9YP|nvIeO%5O;Kzsunkfp6Ok<0HVcn4Zkp+nO~shZ>+~1gQyqxT~a!Lw*425_q(J% zNzKwHUBZZ!1xmC2${gG97dtSx`mY z&~s@*Pk9Zlyi=mQ2`D)dXCuC|JNQG%7I#;V`YSANJ( z8t(UDFK-M1m#u(svY+BKPmu&yWRxgU0Y$b%@jX;= zimga_Fx3Q1K8H>|don$YP)Xq`IZ8)cXH(y`O+Brf2J|?i-$7z8jFeTHKRI>j$&F6O zCd=-Q?ykC+YzhhltqndBa^9QefM5B2T*iybFs0sS(NfyDugtj}o!qwa3cgB{^hJ37 q!g+Pg9hb(!xNLq-&BtIZD>XDapDgm3eaC$MWKloI;q&itm;VA)QegG~ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000033.vtu b/test/writevtk/cf1a_with_observers-observer1-00000033.vtu new file mode 100644 index 0000000000000000000000000000000000000000..8f1a0d96d76be78bb3615757b0badde5d12b6c68 GIT binary patch literal 3006 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000035.vtu b/test/writevtk/cf1a_with_observers-observer1-00000035.vtu new file mode 100644 index 0000000000000000000000000000000000000000..da4a1449eb0461243ef3d6bebf89674cd93e139c GIT binary patch literal 3004 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000038.vtu b/test/writevtk/cf1a_with_observers-observer1-00000038.vtu new file mode 100644 index 0000000000000000000000000000000000000000..16bf99d9cd339fcf04aac455e0b8e9cc159eff90 GIT binary patch literal 3005 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000039.vtu b/test/writevtk/cf1a_with_observers-observer1-00000039.vtu new file mode 100644 index 0000000000000000000000000000000000000000..ae06646a6bf5c87919e13d925b18d8216b2e65ac GIT binary patch literal 3003 zcmbVO2~bn#76vUugTez8cx4Hu&%F>5QMM$g1(jBb_JL59B_#nPkQzM1|rcg~#i|Mz^~*=7#b zofR2j8%?G&C;%0QMB6(cZOPOSfJC8&;gC_xP&;R&J06Zb=<~%cN(9-K$)=HUNM9<0 zNskI)M$yTn-E;~G`3DbQvzg=|fKDRQamc+CCNqNUNhMK;RHW@uGEr*{T5#h^L`3Bgly{_75O!pP6*u( zP^e6XHWD-j`QG>$IU+)9!(bfdJk9?$_i*0FoM9Gn2c1r2F9f+O0wB)O^Cm`WW1e^X zflnv z&dQ0p9KPq`0gJk1I6Fn~?W?t;eGL!X^33je-};E``K`&vKBUvsl+XRCJC6A^{I<%& z)6SZB-qb08k=-0(Vz=o_%%)APsx@1hOq?F#AK<61DXSRbaV}c|f?zxstI@bLy!2^@ zyBl0+iYqr*mzriL;rJ-fqYrRZ>#hMtCq~&s|74TIvSV9gIgiJu(=swH`QSa8?q6+5 zzeIR4-dY`0)?~Nxj<@eCsn2Ap6o+yT;9lB)ZXj&ZuD!U8AweZhvI>8PY>H(eH*j&e( zR}|&P2YnhOUKe7na4+gToDS;2JZ8NE{Xn3^SZGq+CP&crttbP zb6BQB1ZSEe_#9U(V3k(H7mn|BtJS?)X8L7WS-PZm+ONpfMOa0v>WF#CT+T^KtUoj` zYE5?inA!!Y0K6EZ>KGl%VfB& zA!pI!sT#@iZxKcQjZ=L`CWPCcrNy2_NaWM4(+%YaW^@<046P%p(W<@IKPYix>NQG8)BqH)rMi))*9i z`j?0o$w!u2y6A%hxLQ zIK3+T0_%->6#<>Wo+90bQ&WC!13w)6btCL%Z_Jx}-dAgR^pZ6LwFzFH zprKL2Y`V5Ro2{?$xb9G0<1OjxaZ~yk)3;{y4XfV%lWxm4bUD3TW#nRU8d^d>IdS?k z*j$0mDD?(1kvRSo_hhB55~a{9<$sU*Rc#ozL%j5v`G8s{PIp8C=}srygfSFpGT4y8 zNKB+$|DN$cw$1Tod3-UWp>c6qudkY)&P6F%@_t%{^@p2?R!Q^9{Dz6bho?7pkr)_C`(ts0Hh9bpX={N$6uf%bz~ct&r# zFZLi9F0YwR{Ry-P+&r^}WyMbqc%;iuS35-1g-gZD2)$cgEIewI?i zuZ6LUL=!--NM-z6b|1B8xq!JhV?Br#|9h-hVlBuYy-52QxKdsb3Wka%WRkpEE9le8 zxVCVc=G6iwTVE=-@jVd;BFqGW{N5#j(|H}p6Q_#L0ChYTUpSF34=ie_>RN_2;IhFCHZaRZ){7Clz0)g6;BjBeZ3_A->f)DofIsKg!AcH-t>M<( z4XoGW#s&RxkAo6&LHzOJjxa$>7f+%eIH{Og;sjRq@~idM>k9b$y?WI{2aGe>^cF>R5iM(uUr@NuV`Cr zlpRwjjk}DK8BYp;BB?qHCo>;q^M96BJh>Kwf3$f}b86ircT9w0wBW08&?@DqLDzjg zt);Ra2NA|Z*(Dm?y5P+I#R2HmpKtg@nYnPm%CUPwIcliA+@B3?Q=$j6!Uyq5rAg^4 z8QCFY&^5?nurdQpdhYT59QN>VeC}Z;sZ)w`{R+2lH#U#i$ctk8(S18;b{)q{EM05% zb=UmV-E7@eAJE-hH1-DXt=MjK{K9U|gF5z&d{$W)yFeOyp6A+rPw;f4qW*A2?dxWc z8#bM31l`GiZV{j#Tc8^#=m$P@8-NOA(Dw-FZZ4F^c=r-eixFy3(7UD{b(?CYKi<#~ zenj}>NGsW@FSVd=xZw560;xWAbdOWa=HjT>-Q{T^U2PRPyoykz0CaBJ~s1i`BRK6++P@R*hP9an&xvFpO zs~doK&4_pPr8C1=4T#cA2Ep`T_5(NUC9U>Sc){o~!>Fv0vP#R+lN7}OAt82bo jI*W3}g3ihbAzN4K=yaBTv~O;O`EXm&ZsMqgRUH3c^n`aa literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000040.vtu b/test/writevtk/cf1a_with_observers-observer1-00000040.vtu new file mode 100644 index 0000000000000000000000000000000000000000..7f7e512628e355a2e6d1b9398759dd90d8493bcd GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000041.vtu b/test/writevtk/cf1a_with_observers-observer1-00000041.vtu new file mode 100644 index 0000000000000000000000000000000000000000..75f85039369f13d90d13e011700246f48a0ee347 GIT binary patch literal 3001 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000044.vtu b/test/writevtk/cf1a_with_observers-observer1-00000044.vtu new file mode 100644 index 0000000000000000000000000000000000000000..a165f4dc34030509ce04bf4118574369d7f321fb GIT binary patch literal 3004 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000045.vtu b/test/writevtk/cf1a_with_observers-observer1-00000045.vtu new file mode 100644 index 0000000000000000000000000000000000000000..ad72dc53207e494ecacc871ce5c9ed5bc36d9013 GIT binary patch literal 2990 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 U@A)lmE$=QU>g5}`ynVa=0W7Ov%K!iX literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000046.vtu b/test/writevtk/cf1a_with_observers-observer1-00000046.vtu new file mode 100644 index 0000000000000000000000000000000000000000..5e73a483ef39282d9b75e9d128df238990d0a8a7 GIT binary patch literal 3005 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000049.vtu b/test/writevtk/cf1a_with_observers-observer1-00000049.vtu new file mode 100644 index 0000000000000000000000000000000000000000..9d3283640a47fd2e3ce8d0b02228df08049fd66b GIT binary patch literal 3002 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000050.vtu b/test/writevtk/cf1a_with_observers-observer1-00000050.vtu new file mode 100644 index 0000000000000000000000000000000000000000..3203da4f9366fe577e1bead58d56546762cc2031 GIT binary patch literal 2997 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000051.vtu b/test/writevtk/cf1a_with_observers-observer1-00000051.vtu new file mode 100644 index 0000000000000000000000000000000000000000..fbf0499f0352c8f5f0d1885c904f6770a6438db4 GIT binary patch literal 2998 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000052.vtu b/test/writevtk/cf1a_with_observers-observer1-00000052.vtu new file mode 100644 index 0000000000000000000000000000000000000000..2008c79e0c42e7bb3305944b82f0610fb6e19f2d GIT binary patch literal 2999 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 VRjYj$$CtM!73~xbUmn9zzXKrwZDRlc literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000053.vtu b/test/writevtk/cf1a_with_observers-observer1-00000053.vtu new file mode 100644 index 0000000000000000000000000000000000000000..cbb6510a68bae1b2a3d5ab98e69bafc52a2589d1 GIT binary patch literal 2990 zcmbVOdtB028z;MvR$6U}Yb3^cw=PpO&BPbHl+Crgv^KM)gHX^Y1q3vZ(4^F)6*ir? zB5f|`+7c>jq=Gl{T1M*3Oy#1LnJAD7A{sAw>Fw>a&)&~x=a1j{J>PTA^L(H0^PJD; zAbeK4tA&Q8_6Jn6i1ZuRCC)CH=3bF6&-JjuOagJ0v35SG+ z5-3!1LKHQDjKcbv7Af8H%#qA_u@fZTs@emGUM$vO_b`hu^ z?oh`lVjPK#qfm(E?TOSQ2Lkbt{unA|#~T>xZRO~QcsJ^6&thCZ9nz0X#?a@I{4AD;nV}bqi8JRs z>-a67W_CmZZYG!;)G?Y!j>AxqPz;HLBVci6Nr=(W6r34xfx_maAYijz-qqht|QMS0c{g1A1327Gjbw|8b6#@IJoI>Z$l?_RqlxK@iar#*f_&AE-xO&V<#C ze%}?ECb;3yJ8~$y$pW1@@c10waEJtd9DBB9>|XIedX?qX&f$)J#-$W3D&=153HW4u zs+O+(A=I$76lULrOg4Gl$t0hW<$C7jE{BfB;&bJznrkBUlP7Y=*I_F~)QJ&%GbZAj z#Ma)u8Rd*M*<98}Af0${m-s-2u2?^1zw{?CTe{>)^i~D(#-SocKuGQF4IVQ{s2v{7$%g0f@&;zqz4(6Cnx}46jbA zU7-5}?3v^e;6p?qz#sqVeqekH*e;h*-zKBFfqz>D9I)8BCVdC*Np#Xvy>q&RA3Of! z^9Yc{&rWXdrtGXE9UnirP!-}y8asG4Stjx{2r{_(tLfUhk#a=q?<0%*mvu-pYo$?# z>p{VFWf#J~u`k|)2M`Rrrl!@Vi{~F$*=A?cvnMTDu$!~9nSboOBBo38cvrKnjc4oKUE!8P zmKhNb3P_6QHQ?#}m}97Th#lzXudvw`EaNp?$;}eg%9TAp@t?&Fw<3H=kS~_~o8xfT z3}wJ~oeRqkG(-Eqf^u5jGJme+)eNKWq=X4by2Aua)-eI2?Bovw6ED_y_`+AF*giiJ zXZ>uib?6eG%F%+74Pt-zoi$V4F2XO@Dt5uA+$O}Bn_;fR9q{$`FKd#Ws^JfE$Zt!9 zz#c=n`m6(fFU(rl6w~O3Z=^J09%h-ccAQpL9tWER0T?Al3$o&QLsI`JTMc}^jBMJD z&N8l^#1I9 zoS*wF-rUbeP2nvVaJu%_%h*k;&tG0?yS*{%f&U@j)(uzgnN0U<)!$4+$V$ru>QPxt zLO}1>!xUfKF9w_g@vV}H^B8i_&vQ~89ScST;BVJvL6nW{G`#I)HPE{2; zz>sUKUWJLMO(xqFdjzZGl|CABG5WnfjiICJfu)QQ4_y!F5yj@lK;_+h<3`3vn5r!7 z5hW#BdQqxo8&WQ1iZk@8PMXxanW3|kl}few%pditZc&V>iJ|*gW&$+Rvij$5fMUsP z$Is7Ma|<+{Qyu=0wRv&R1*3=F^;zDLXWr>$>1S3@E<}wO^Nse;Dmkv$R{u96+~425 z)!$CppqCYdUGw!_1vd*+4HWrj^Ig`2&n|T(6GbMfF4Crf{)j@V+KFW-`mh_$$YFImCEXYAl2qe-jvg zAsYE=<4+Ldl>%cCW$H0;S_YZ!LQl2Gr`rv$`ctf}ts)-PMYQ3-eQbW;3;y6^{=gD~ z>hoEXxF*)w06QIsgCw literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000054.vtu b/test/writevtk/cf1a_with_observers-observer1-00000054.vtu new file mode 100644 index 0000000000000000000000000000000000000000..365570f314b0c986517354f4c2baababa2a96bee GIT binary patch literal 2991 zcmbVOc~q0v5=RkY1BTKn(Xu3s-7JrUMb-vzLsXE(g+(wBL%F0n-ao$k&D=Zl`_0^$a|Z29 zi;RFr1u+$oLRfG9d)|)C(XG zsT6f27M6&2%H8;g2(`}A(tOF&vf0wbWgkn5MaZ3GGB#!<$h{E&c8Q(`Hc}n)vg7xB zs@VZV{1TWI0v-yGBe7IR1eQd?6GQOolmMZj6ueqvjzF!Vpi#?S-pNbERwZ>Tf99}~ zpk)R)fJnsSsDx+&HRi8*So|FidrSL2nEXGiW%87N0Apce|MxgY)j`>*9WP~du@L?V zilv2>#UIh2QST*Eo#e%eSj;LK^;b26-nsHdi`jm!+R50{>hcI$qp`da!T-A_X)epO zf~c$E`@Y+`G3B6EW$}RfuKQj+?$w4qbzfZ$wzUwZ&>nqexlh+Ed&(dsd>iu)Ar1Ob zr2YZ_o>ISI>+gpHt#j}1JDhc(8Wt+JCb+tuxggF5xX-$zug~#FGHYP*{r6YfZ7xtFe?uF($yOiIYJ&N2` z-}-j6(*LFMmc#T^=QZ{r|4drhIIMHadQ+EA=Q6fXoE@P`n+i_Fq0IUns^VN_-c1l? z8h3Lhrt%K$qLis&e2lJ&1Ah6U{RW0?mO%2#6jsMoL*~37`d!C$`ky01RFrlrvn(=6 zP$($KFo$3MS=oMM^UGkF7oHy1ooG`MoFj%+@ypEPLaD@w;NPwqm1D+?bBa{x|PiEiP|+jh3J) z{y;j+{G?x!I-#3-ugrGfc<}>W5b9v`h+kd`FL>8C$aTj7oZUvB?GXnpezG(&IPkGY z$eVyIkcvW5;=%`@43lTw?0l$dMqVX}tV)r%+_*jcpxd`ohWO?F_6eV6oyX9qiAT5> zhc=B}biL8gIXM^l7;52qX@m+ZvT976IltTNH%~j#bTBh&L6)gb@pP|O2;gFvlT(N) zIDu}*SlSC>{mt@6?w%l5&FwfKtlHnk=X+(p{O#@=?JvH3Ay10Vo(^;OXpU{Z0iOQS z$S&60)frOdR9>r>lk>ry{aX#zNqObCo@?Y>tw(Ww(=)ww-yQpKC^dW6OxN%h^&vJ8 zA7Sd&nvd((Z6#7EF{FU1$Oug!=#; zrA9yN#Gip~_wgZTlk*Jb?`^jA)uwwxr0beYwFh#8d=EpKlF#_rLWM>r-0UC5Hm{jo zA(!#MsXVVJOS3KDX%gRxZ;s;I^SNexXTI3276k|SdD=ZxiW?J+?B*oK<8RZY+orXc z2{%wr<2JQ~AXjc_?k`#IOx*BRmclu3zVrp_0B)Rsr2~u{MhNZM_6`OPP=i|g*VLGhG=iLj=ev~}#)JOYb2 ze^acB(W{RKVf5%<{>XbltMNr)W~V34HP8fCk(w1v+|mwzyF>=^H8>uMiPfEIplG3t zyWTcDI%|7gB;x6EKCCxJaW_S^ZazSj6fyPHCWWURDf^N67t z4LcW@grfq`3mPKG(qJvB{;$4R!4a4B?b}zE7xN3OaPuCt44N_ zq=i~|K4u))N>5d-ZG575Sk`pD=5eHyK?@ho9(&SJh=lPRFm-3XmUYks-mmFJV70Ab zMMh0h(^^|Kse7Ygwdqo=k&zZU3nhecZ8(s6b|H!J&BDNSPI*d#GpLVJ6wDrG7t+r=N)OHs>Ge^ZaqNcnLWLE5 z@=Uz%GnHnfFpd@0^b39V15PztTo`vnDl}zXc2UYuA4IkM0rSB@n>AmG5h*1+d@qtW!T(Kls+fwI@yMBzT$ z)2201bl3WexS^hg0&cts_mRmfeUDi`PjQInTX(hujhg-lB|T6+>i|p}08*q#;sg`# z43l5Tl%MyMUt-J8qU7o2@)SUxA(AJ-=Ue{>IOv`7M4%)RF5BCobwVcX09VC^)^=3$!Q=2oTpLx#cvZK?X zv`R)yau4fQLstJFtEax9SG9(+Hl$$ny@r;bOJjA{U6E-8IJ|MAhQ=Us-NB`?<^2go MJ$<8A#&4(J0TH`f;{X5v literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000055.vtu b/test/writevtk/cf1a_with_observers-observer1-00000055.vtu new file mode 100644 index 0000000000000000000000000000000000000000..2734e26c118bb8b0cbff5691349ea71bf48c22ed GIT binary patch literal 2994 zcmbVOeN>WXAGTbvF~c=o)-*uuW6SgrDSCS6N#rMu18gAfQ5|rlmG5aea|# zx-8prscGAsikLbhbxGx0P%5HMO+|%N5FgZ$AFX$1XYVy(osbth&7!GsUlwdlOOkrYCUQ{+aobm;YOeNA#$S?}gfCkUe?4+@sHlmOu z`Y{HR!eY@4$D`Os4|q`zyA#>OZEs-|4vIv&{#Er2Xn=jG6cPpL9eM09h3OOGOQ+J< zEJG$}N7P$z8zns4fH^uk%rMRVHgj;6V+MF5>BeLdxpPTw52q7n?0FN98FHQ_euvZG zj!vV@h;2Y2L+H$7L^c*hWH2Z+GR065dPoS1Vn7^Fz`TkpFw62bo-sBb8FKlnhq(gH zIv~+$Gzy7LjiR!-fA0hRPd>J6K>z9F|7p#dXZ;Hq^kxUgf7A&uB!w{$&s6ozAp9E@ zNA!k`f2z0w?-bHd%q9HRcT zYpKniUT9s$kXKttD#b4f-T3JJh;RIyHsw8sw2#0!O-&*bI2=AD;rCACi^Q7TM3=4u z8Z|E<3-?4q23A-53?$%h+kOhhB zt2?ff@q6xGZV8KBZ&%-^wka-*arPfw@12&?4k8c?%Z~8$>wShKL>&X4vddODYimZ_T*=t`{JUp za;=r(L{0n+2y1jiQ)knV<+W$)=GqP){evXhHj7%fElVS+$R3Xv=@iRO{L~;B!@=+R zDcV*^#+XxMYWJ;)ax@9;J1F@srQuiVHf1?+d;{wlrc`xU|KeXgcm{yEw~#1Xo5 zsE#xnKd|`t0{2iVp>F)}cp}P4?{3+Zsw_V?sA<1+7BH|F_0EzYEDp9?3@lui>-aoB zBP$$@<3B4n63Q$oK5&)WU6@i|?^NbjQY*Stzw-i494g5Fy1u>|(8_OKY^N|k)|kO| zIpi=Duc`~4k9EZkfGJuBbj04Pnx+H=_BZDrF#$iUe_vi3=n*E!X*EE51N+}61Rru! z!A*wp&Y$1-VS?77oBMFb`6Jfl;fL@-h$BL7{P@(Ci8`JUm=enk+SD(&bKR=vy||#P zJ($Jjdte0#h~!*x{yL36?ANNX#jM?4A9X8Mk5^8;s13Pc)6LlT5F*Gy%QFSOu)8^o zhmesEAZc(k;$*D8dO~zK*3s&;Fwx5VKe%nMRTArD6YFW~WRH%@lZLvU0FZ{Gzdhjx z6%5;ozI$x(`(&aBIlO6f5x4z1@K9?sx=0s$Qgm`s1umFKnCoF#QPhN0{on%K^CV29 z9&wh{x@!K4errB^CFj?!g>SE@%=6$mqSbbFnm=>h#mCj3ufF7eX4Os9cfKF&^tV1S zoe{5vj|XLAzml@1rSJmm%YsdD_~au~)3*y`4Hbo*#4lg>+rs0M)t|0|+l`NLh@?7_ z>N7c7Z>+))EGuHo2$rCmEKS-}xgz`i(c7H!JlWak{KFGJ*T96zzNa6!KnW9BN!K`i zPXbhYMPgsX;;4>m)p(es^BPG?uXPd2VHN7~vX&np0B=H50~fMA1tWJ&0j#~b9wua$ zJ=EHp3mt;&t5Z3Bj50-Z$5~I`w6M~0fq_vYK)bb?EyrvO%7y-6574k(-nno*9a^h3h&n3Kb595Zf_K>d_-YSJcF z$kzR;b%GME*k`KtRD1Fz3^QQzXXq4^;2geRzfh_Yb%MMv#b5)ieWfrcYSNTbq13#r zZOq2CE8v9VCxCHFPDe-`LghjzS6b+I3vOs*d>3tq# zsB_cZ;p**%&Ua0Ja?a57y{f8?JkP13u!Q4}48MsRT_z8FD=)fgm@(N1t}Z(o!IN)O za@)xgZ~;#)k&O^Y67WNwT&FL*G7UK(k%+`((3jsw)l#g9gg#0-sW>I#UWe z`wRPC7WOWtDLpnv+m=T1c2uO2TAM4g6tQqcHN0o3x8_S971?LROQLoKMn49$yNWc< z^wDK>t-WC;5GuD&-5I{_w2$trM3(^QQi^m*bY0r8E*_!#I!BjyZ?b`|Z$jwn%clBW zr&YkTCK$2^V*h)teaBP#UTC562rTl-K)J}W?CZ?3ycSHu%C;A6t+f$p(ZO0R(sYc$ zf4!WqUF9=oB8f_|;1mnEiOs_2mckb;!sd!f>GT5DLUPu8zglP8Wi-E<%*C865@n^x Y$f%|4z1=e}mv_X5ZL0l$V~i2wiq literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000056.vtu b/test/writevtk/cf1a_with_observers-observer1-00000056.vtu new file mode 100644 index 0000000000000000000000000000000000000000..f3b90ff5793c79784377abe1dcd183a6d5f03d7b GIT binary patch literal 2991 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 W5q{!0|7`j2g`$3a1B=gZ-2VXmcv!^% literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000057.vtu b/test/writevtk/cf1a_with_observers-observer1-00000057.vtu new file mode 100644 index 0000000000000000000000000000000000000000..7fe3074bba09e066158a543ce7f37a605cbade12 GIT binary patch literal 2992 zcmbVOdoKwAc@jeL5GtLFM?n3F z5mZVfjv7h92OXpkf}nq5z|yIBG>H;~ry!u-1S&NYe}EW7z!0I3^LUIJMX%C)L8R{4 z4Ta!HVPpzEB7&s;J&Jnaj5h(hA4A1>yoaGk9SFqb&smp1HS9~knqRP)3Pq_Y>uIok$ZmpT>n%fGh&oqFCx?U9Qq*e^^Y+d zLEQ7#8-_@7Zqcn+J~s2fVa$X?Ii=Xy6UcH9V1aJ~QC@Sm?{a-!JBB zi7icqagB+0K@l_4GH!t^~)9lu4>^tKK8@I7{%7C;%B*>Oin=x^E0a+EF-%)XD8@w|6FA?>`ZRZW~6<- zJG?%=QM1j`)G5a1peqUO61HcuCX%O{n(W`5ypE$-pX$+D_-;ma)Pb|DY9d?ZY~sLi z8<}B_l8FdTalLJ?&HQl$M^k11hMz-<>f4jyN;)tU;M0mKYc(-OSD!ra<#9%#9ou*Z z=V_NP@E>P0pwIf7XIE~s;WM;$gZAB zx=y%S^-WWgp=-j0D-Y6}zIZkBgoMUf<>b^kUd#0C5!k>931j)nzy$4_99=H`iU;4q z9=_o{Pq}(j45fVQ6ed(m3q76%ZivmdFF$*e@yj-v{wo@`Lb=|AFMRZ zGH=26JIs>gk_c|Qf5j%}k`@gaCl)d-LTDiJ@1j|tCyd|o=SJ@H*EcsDmeiD#6=Qwf;jeWS=WO5LhA$jiYPTDB!~krH zz#=tNv@aLg*m!qvUJ5J4^qxD?1H7HTE$#HS#cgSyiE1yIo^y?ZK|t5cTidhl%uelM zKls_`wJL=TnR1xXrVkdwUdlCQv=#A}*q2liKvS8t>X*}#b{e?%g8?jxP(cfW}&l|xk@mR-(y*eo6?bJK8v37q+ zmM~>3e0`MYPJ=6$KXeBtAaVBc2EaAa7tG!=5G+ zdJD@Y(7GXmHb!O&qeZjBK&(@SfKTM@qG^eh{j_9O4Mu+e5({IcN0$%za*;H1SYT>5 zL&WpS+QfD|D`}khIOP-C7`0Z2ZZzT4=>gK8x)}B0EEBO(i)O$A2_Y!u;io=Ao>yML zR#IbeQeIUpak!MXMNT$`c^B;^>%i_z8qObO5#}ezdZceInhtOZFoL?okWs*wbhGB7 zrL@BqVcrO$WmOL*RY}b&eH!2__@pc*(~)11U<5NW>>8E6EkI?Ei-n~v2Gy6N>xMd$ zT#rfK6{dL6#_~{nkv(g4E-Efjej_jeJoPDno6{lP3QRDEAyCg?!?1cPT?;*2+R~d; zciHGZPbV&;DyeSWNofZRG0@<^ik^cBol&wGn!Z366?5^@loUxx(9V-~;F49J#IvZ1 zALV;=Q2Evcl4A{CS$whqO!Zu6K?mg=dUF0FfrLE-#Gc{-&BQ@7R$!D$pH?H5^>A7W zk%K~WR7@Of&V(ik=2}ShqF#uN<`1)q=4AbiEtZHXj1|iHmvH?m>A3VQJ6TX43z{5q zcrw-Csh<4s;?}F`p&ysjiAuc|80V8>Ua61qTK1~Wd^^DSM(we#X(YEW+9GzqLrfnG z;scto1N^RO6pjz*#ttavEAkgXXS!mUA$83NV7pxWtnV2toX=JVhH|khGlV2s0P!AX z53gMT;rbQJukG2ZA85C&xP%z)GL@Nnbz?*UZW1U2j7Qj6wn6Rt z->-oE`**kRHx%*Y14SpF?Ay1=D0*jJB>g1CUqH4Jgjbt5Hy-Y9EbnhK>uU<^@2{ME zi##&3Pe1&|!IJG;R4fc9fWbOvySQgN@TNoQ6+`0{ zV?7n4>xtq+j?ufSB4ZEMWZ?QbYi|qV&4mr-Bb$!MPWecJe5SqmQWx0FW|;g-hRm5X zV@Q%)t36>MaSKsg&Qko_N0G@_B*7Hv3`HtQacxSGXrZ`Lq)2(DY9`IMSaZTwsStk!j?ABU!8T!DDPWfNIyIa1clY;k!mmZ6<#LGrEII3) zah80$&#WFlD&2@ynMY6QWc_Bs>h5KA*3=3XH6uO>y1h29zLjxltnGTMG3_=EZ^qWp X=w+@uy!>wY@QI>+e#2JZ-^l*}qW5os literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000058.vtu b/test/writevtk/cf1a_with_observers-observer1-00000058.vtu new file mode 100644 index 0000000000000000000000000000000000000000..c47edfe0d8501da65134b2e17ab28750a836536b GIT binary patch literal 2997 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000059.vtu b/test/writevtk/cf1a_with_observers-observer1-00000059.vtu new file mode 100644 index 0000000000000000000000000000000000000000..548971f3b2ec7cebddafd2240c1b93ca120dfeaa GIT binary patch literal 3000 zcmbVOdsLFy7Pqk^AK@)EZA2w{kE7%(&BVu)HjSy}ST?CB0T!cz0xGDenMv7ItZqY= zX_+-PP2yyYsh{{Dv$VpjNlir%AA>J21VnsX^3iQ(&6>N`oIk#^_CDX)zu*3yz1P|< zZj`7~6EHaZaRe-u9B$kIUL~ag^R>O$<$~p0(J;b zA`@fLC4uSf!Fo}Mo%N}cmU z;7?+z*%9#Ac`!Q|G@L+;LXiuE1-=mFqdiY-$x`R? zXAX-3Eigb6@OUhmjElpOsejGG=I?mywA=ANCjSp>fjsFSz}Pr$clukLL+YfQ)Pd(! z{ZI)11jW|I{tvo-BBWa64;Ar2RTubQ)r^bB;v0QX`;%%XqT&E8hs#JxT*Og9;>8`xxu-LwvOJEYBGED6Lblg>!%1pWQg6o5<0z90QS z+RWA3cxCEs9^}>c5r{8ZI4v*k$x`xH4tl)z-`87Z8xXNNFy8daY3X!PYZUW-W=nls zOih>QPINMrACa4)^x3FCD(!M|=MHx!`tPbQxt`}9Qv0Rn-Dte(To~M&= z3?a}^8Gs>(BbZP(0y4PtP{3#+U>@T5v=M1l1PN}HbqLH?75n-thqo6(%$FMvX%QT+ zn&CHRSn!Yuc&2=9h_SOJg>L#dtb!z7nRoeSa+k-SWBx7A@I(LL7?eynN z_R=vG58rgxP9AH#mK@u8#6hTgXCSX3FQ{R%cX#CgD>BANsC&fEsn|WG{^U&%>mkb` zu)V;TQSCdluII!t;(bSM*x9Uv$9;XxM=m{=#yVWQ2tFR*&_8==zpvMFR=3fXDsEp9 zQFT^H&uGrgOP8f{$SsRmQQph~^{#rW8qBiAzrr5r8)Wy}m3?t<`77{7!g|mJZVpE)D1SHj$0()#&OM!Dx=$CB z1>jInb}|pBr|HlCT#Hhaz7&LC;k{K8{ zPN`!x=nh-{S}UYjP15<=z~Q(VE#R=6Q@V z>%0rfBznk%Jj=;ON&SQxOK`2xZP_k~bB8Qw+_|GO%ou4bmJdB?&SxV^P2q?HOJwRO zMHF*hoS=)W4DPKuw*rosnjG`5^QJc^wFOE__$o!q$@oiEnsL1{QfIX;A+<_3PPnR6 zQ5!+oZ3MD>S8fas$>^X&hY`r?LSQ#y_1>F>P(+eWYLW9!qL)U zmSD7$#R&mML{hV{-doL#v^i~fSMj95Y^^uFI<4kpIYZpT*^EpURjknG-{N@iI99;X zq$+~&w-^G)3~-i*9APjKwCNO21Tw+ia9T_eU6>2BcdzzJQjH1veQP!sEA9^T^sJV5 zjgC~nO9#y{TpAOhFiadX9;t9E9h_~--&NCNB%M3CS#HiN3l$<%Tg4q)s9d!~axAZm z@IIebpcwH1=9V>uHBWo4u zDtb(nuQC~6Gi)%g_IzAHd-mAB+Ot;BsNfX@mb$yIHjdxMjHLz=54A;GwZ%L#b*}g6 zuD{p)(yZ%QNO$)yW23IV6Ylyk7xpGRXrvbYNU1zdEg4Ka&vgFnF7RZy`dLslNAyyX ze0(ZLUscRd75S-t=Bf(es-IY@+XPjKSarifb*Dgei!}X?FvGK$=?I;E(KGW}IV(&7 zgLQ)28-iQ0klxIa-k}oFyOKdI{K(gi@s{PWiF>Qgp}SsJ=kb%x`E}+4t9|81{3IAZ z>3;6G3w&Y?T=5M{?o60iOHf#g$6YNX9>uYtFwKu0I=x~jTuZW-w_Oy1Ia nbuB!X#?r30XjAggSTnYUMrXxxpZWRa(@{k|hQk-6r`wuBwPvwA_)pCaS1fstY1%0zjONj*x8wVcjlRyXU-X{ zI}{Oabr_^G$W#gr?O+Lu_5p?rwV6J-fGWA%}xj%xD^jL;F)0 zOnMZF8AS(!z3Aj%^xr%LMKeJHl^zVzacCbhlNka@ z3X`GE#K95$&gcP#hpTOlj`lO2W`CQxIO}7^FdcFeolcCNOL9v%l{f>>ml&bWdDiiJ zKGo=`6mTZkdbCvtl^#K4;?P7I4WtBv>XJ}HLKvXhVvh#qqhNtqFYojjVDp+fm%n3} zE6^+g5|u&$Nlfx#GBf(0aX9=N4veGIUr7F6tXc4k{}9H(8T0RP{MAXhs2$H#b(#qO zC5oeiqw`iw^bT{x>l zIZ+o_>spDX4ND#uSz8zUcF8|zgU4#rs7^p{hb@&~uE%*Y3lH)*V5zXa^a z)hBm8)6X4!nNPV@vZJW2BH_#s&3jW4Me9_vf)OG4@{W#$jTU zPqV8GQew=W{NUA5QabqANz%oOjj4(?g)EWHA@=Iu6}YfF<6qW%)bES`rk!@#e7Qw7 z+Wi-&s{@zX!@jc16t13fPL`(`-(FMD8CPu-Ls}$t$yt0wdwJrlq=@EAN{r0ELc*s$Lr2#TQY@`ueQ5_UoH9L8^70L z8_S zd!!VMkVxR~kKB)Mq^aR1p|alLeXg6*73gi04pgG@Z3rj)*Yi*PlzkC;}MYWMi~22xCpOv;Lb>91pN z5Az(0avpi7{Nf_Ix~IM;*t-GKlK0cDHJ|1ZntVBAjy*;f(baLur%C@12ri9we{l&m z8Y0r03FhtJf2pwO9ZlPF{n73Z#KOeZ#uequjS}IE<%Cpl-W)7wUG3< z9VJP-Jvqj*lkmn~AxlHu_Zphv0fGRKuTq8NMP+*2cu9!Vzo?xp-(?^;-*|}Bs zb{agW!3Y^27nEcQ&3=+FTzir~(auatax_L17wzbZ4yvy@MoiuqVyGZB-g#GGI+L4HVT!&0VHBMjLdj)ui z7{qPj>s$sN!V5>VWG5wtPfX@o=sa4b94jK@9)51!^=vqy9@D#Zel{;JpPj{d*`@hz zHlM%PcbaIrWw@x&w&24nf=um|$J004IDWUw`c9$a)KsWJEPPDzyUO>sQE}72!KmA! z6_fEgD<-F2-FRNlqShsq^=#OKU1Zp`!9N@rKMfHXb;2@~+J0=L^F}HKd%Paw0qtS#NkBMoLvg=@v5hZCfA$% zAuS-c)M!EOPx1p+SUO_~R0Sv;ocQa?_x;0w3c zjC`HE7AhX+N>>DqjX;KNdVw(|LKqqxAA5QKah{!}R6DRTcHMZIx`xj>8xlDd`3F#d z%2|KXG0-*Ke`4`o1z(Cxm7Rc-JNP2#3)$O2^}~!d-Hq7fDyV%Ps ziOwNeTzk18qsgrihpd8SZ`#Xiy7S`Bv&Qn<%iHcwEvU=N=$@YdsrD@6=Viv+2Pnt3 zj(pHS{n0NQafTgwv%-4aPTV_jdI=+&G=$_KroDW&L-142cW0lcr_)nUIGrqSBa`cIoX|HV4%1EdENeI(7Y?Pv}>TW|7B^PHbu7e^CN33qF7#4 zX{7d+>Ktjjg;ZeCyVQ5=YrG;D|Hh|j7z>Pi1i;(4W3JQ@V=8PXA9k};YzkGLVk?j1 zmFZ2&L_nF!Ri2ER`ww%H(p@&(w)V%ZW$#CI_%n3SerCprfT@*Hd8E*=*OR zS1LPX5S2Ap$v3-~l6~)*$mM5L$BT}3VdR-31Q@n59Hp^eo3i0m_|e5phf__UTb$_R z7T#}WycZ%~OI3B-)B=WPaL#}g1%z5s76k;7uor_S2xegdys%kcPfy=D{r;Fc_c!0%`@7pY7wZg# zhM0$wY4l)_fo7qQU*xRAZ z{lQQwjZCM5>g(Z*6W@9S`?--AB-alx%1OuE9Q$XlGoTvw3MTuL%{{|H{m3+YpcfcS zVbIl)*kDi}Kv!}|h#JFSw$56b`)&5(oQ+vv#^o*=jl`S}a&HJonx*GS3RTBEXZRzV zYIY!nJnPIBWgZC9LP-o9ibSQ7DFI}4O2EKCI$4cuMF9(5u)v&^5Be;z1x+2xpE=AY zXpVtDNTHDZ8NuPf4CY_+u=zV4ju@LinEXFqbL8p&z>ST)5b=W6}~^mEx6WckxRLVBhX*r7oLN(SjvSnDsY3 z7|pGBTS85<2Q8bDU8>OpCp#;!$I2!&iaHb{!tI1H5R=Iim`TR6V&J5k<@a1JdOVIM zDKEsw`+6Q+9o}8KVYuhCmvdm-@krL8SkJfLyiBS_#7BmP_bGcD+U^7&u=zZ{b?N)m zyBqeojOmVBl{Xwrx3_F%2@edea8Fy$?ze4hw*Pj!Dzjqh%>C%)Lk8flb;h`iAIu^Q zg$8Vd-OoNd^DlchWqd~4KHz0}Bwc?CeEIiF#R{orgN2vrfN8&M&AI5tl5Xs7#}ItI z?;U5mq|#F2ZT=oFy;Li{hVa_1N9)UAcf94m_0|$rQr5O-s)$Eu>+`hJlV`QE@D9}R zW0#@@y!Icjmjyn*hx86>zn@%oP!B(_O!;cU=_V%hUwpSTtuHVBQX=8(#iusJ_Mc3v z4#Hm+#(%dh(*MXO4w<_gea=<8yKa2(EQXjJaW{jec$D{j1Umn#f{qt2u3;NAWvle4 zPCXS(agGyA*zfSK?P;jBw#L5=+$i5bz%5UF5u;Bil5I}VLNE2+he}(Xc!9{OvGu8> z8fH9;{K+ftm_tQ$RUYE`Mq`J_t?tes5t~*NxgP6Qqd-{<934CN)HfLjDX>enh9fY% zXI*Pn`JL!!R8$Sar5>%XY88H8mpQI8YOYl*`iMtSt%BE%I?mhV;9cL}-|%ldi=3KO zU(c+6*80bn)c(8{p!rf!S;XAL2S8@}Z>r4=nwDF~a>PNnL{PNZ6 zYlTm?2r4)3!!xc`L_^2`CobYTf1sD&=H#u*_CVw z+tWKO=az9&jQIB9{5ag_iBOzSoS>h&R<|Kfn1Zx_8vDle@z;8Vxm2$+%ClPT>=dMn zvj99rv~adaT<0p-tw%~Ym0nyf4?x8 z*H_OC;)3j5^kFdDJC0l=8SWjubJP09CwY}=+7@S%_iV;|e{j>|o0#e8AiY!aGs1yM z&zJ87{MX0B9(AspibkxPntpS)y_N;m#1-~$JA_?~?A_)a0w^v*BzjGCp^0ScloPa= z6X*MM2`4VfdE{qtzd(oG`(m?cpXuXX6HW#%v``mdm1dpxT>?aTR;_}Dn|!6np7`OD zI^liURnCj>ec7ZoNyW};!7`RK@=0gD0l=D&RT8+2{pk-2%>Z1Zz6#A{IP!(rTOd;D z(bGet%{_jVl3Jq*`E-w+K%>kA=vnbVEEla9eS4-Havh1H8cJw2m(Nd1tq7&b4~Vtw zbkoC%vZh#r+k9_m36Nc&uhND56$U*T0z-HMWFpZnn=%(15X4cJ0+Y2JU~k?2^iF-S z@^Wl?ars-(t-8f>>T19vw~V?7$bPG@%7^5moJt!mJkr*q#Z4TU*e)GWEq#4}RxEKK z?6_U$?+`CP3x`4o$uf9xR&C}Wh4Uk1J2D}cHj}PKX$yJ7+Ymvzgi>rA9b#{G0u)GH zg5V0(6qsxlZ#Z>E{;BX1M@o1o#`l#6#^?w|)`eoengt48G-c(HUQAsH_+HhSGA3l0 z{z6>_u8lF}RquZ~?i0TS%2#ki>j<)O2-&7Xh`e7dhr|lmtBPN8&}JfSLg^_h#RYW^ zTYKta(@k@anE;dax>Fd!ju3Cv^21V|2%auXkjHoPI-#8-6Jqtlh&oe^Q}Jcc@aTO} zOogsk|7kS{4Zr(A)HWL3+ZnM6AVyLuanNvKI_pV%TM{S_<$fmUq#`)yq73Z&$au3D z&hgs)?5nZU`hf2{)*ju~6E(#WB$wO5(S9GjO$D1A&T{skV0Vmlc;}Q#p z%BynZK{D>xWI=`y@!d#N*Fz+o@6?EcE#)I)T@Ro3<;dg|nY+{1+~E-MWpHl>F#57WHcsMc*KpBU|^I?!Epzq`?-tKPS}yXfs3C(m&g zvy;_~_<<<-ND(&(Ux6eN6y4d2AW_xSJ)0R9gL zz74_!5;)HczMBi*qN`qklLE8J4x;K;;be<)sxL-QPv>ZR&CzDEaqszp-q!`guL_2= zDI;HOkJwTi#&R#a;NR6!o+XMl6;+xJuJn}o;H3fhF%SMI78w5&kblXM?EuHufO52C z)X7Y`D@d8dR-VNxlljV6KzW{{OaPUaB+4^p%5%BO_=l4XpsLYKRbMjo8apiore#FL z5(K*c2D+yiJ)~1G@||8-hPaexRB|q}$mqy%Z0mTS`Kmb7?7(gV15Hev?r>CcLPQO3ickb`|-tYeI{q8;I zIy%9jA*gVWN+UsJEZWxE28{yAevm(j9Ee3T=mAy^XeXSG<2PTs93+K+C_0k@V$q&t z8lB4UqcfLAN@OqQ%pKYfT;c;6^nKy(di-J0kS`dNJgWAK%yEYEYf^MrtjK; zM)^UZ6e>ugLF((_^x%`Oq*KmBI&uGd7>(0Gp&Wnjbq-X+M@gU`h;nCyo&u>J0Y@Pc znNCwjVrz$f5AFv;Le!X@oy|Pc!f*2z7dYmDIhXsWR3dXR$b%seabBJ~F;pG%0`W(j zYIP79oOfoAMg>6BP$C_RCQ>LM*&kG=1PTbCfojAC4J>(a1QuA{+w;PfEOjiu*RYtN z1qFT(nGE{TN#P_q^N)4d{+SMpo&5(T|IgQgc-miZW4jCU=YBlZK{=?2=d(Ij2!F+k zovq!@579URA0<+q*rM>XTPZ}E-hvi(uDQ;Db5pn!Obe{32S@0PSMZw4fZS9Hl>duei4*6s@hW80N71&h#F{=S1MF{Zb8PkB?nFltL(#E zOie=(L&wJJjt1WqD8E!*J8``!ZgAZ->$U0lBj#&{Hm>%ZJ)w0ysNT6R)iH0?P@CZ| zJClC|gLa2mk+WkC-#d*wlk6GMm-C;r#E$r`hlR6(Sfx^^G-=|u-%Prz^fBiGmztULy%|HD9fZMMg&U3vJ6gJvWC`!UX!zBV3W>7hEMy62^(M-7a74le)O zEyS@KGp{nWkWa;d0jK0uw{-m1eWrTx>HsEa{l+!XdS9cIgv#I?_7=oT4~J@b{PIJ{ z{?`K|Np(q9u6IP(d))dE#`8pKni-^57m%r-M9 zMc|B6WVySq-oE;bcr6aX51ueA!1ZwnTbnNAnQi}#-*y)x%lW(_`(6IGPnS&^8c=ZJ z>gG7iG*i*@&vz3!XD!pj*}vkd>WYez#Fu@gp%0F|ctRQduKjbF>7cK}uci$voW_TI z9lYBZ=ski5abgX{%JWISA4m%78G=Bg%!@$(M(rQc{V}~sftY=vDMBw(LI_6khlWB>nl&z#cCVH%D7u_n~Y!0K^YTky%dMlkPRu7$TrFSa?~Pqvg09F_nXx| zC%KlQ<>^T2vez|c%3AE%Xss$9UxgkY$u&!8ojuaF-InW`ZPwEoV-}YAGr!asvr2Vj zvmmJ>`KSS*HHN)a7@Vi~Il_{GGvSnsVDGzOs$*(v41e8h<`5Adr7<1$V}CSjCf+RX zIa3$2q2R446~#2bOy$3|q@tu+eHsdJ18W&;j$r3n#c(7h#5_;&sA`xaqCQ%=pntv@ZbX7-weR$SV9G~c)8 z%Qmk|M3aMK_ikI|uF9#oru|v`#RFUIuK#_@quX{WRiHtX>|EC?rTdF_BK}Yi8E$ zPo$I5)4J87*Wyu+IVY_$l&cFwmSvpv(E_5~YYpMSW}i`{m^B!t6W*Iy>!j(?n@JQ% ztM}B2Rz{9Sln4uqfyn8}8a$8g!Y<}o0@x;_8EYOL!|%%61{2G?&kl^Wh)>l>8`f9L zRN@^XjdF89tp8wG)~!GG=3E85UlL6*ky7igBq~R@H^&<1@jYQJ zAhXbDMi=&*G8SuyOcWbobE$UuEK1}iilcl2C>z?Ko<s+cP zzGZEL3#K^T>+q8kFjAm{kGNkagNLUk+pB-MX>Hl9jW3JZK9!`-;d60gEZZW>*Bnsp z(w()#?+)>t(K|j`*{x7<6J)H;N+G;QGCi#Rtf$PqMii?Y9vr*heWqG>*r=)wf(OTM zbqmH~dW5G90YU`11`7{z*^wnI!S|3Xl($JFq#!sKqK$X;f*zJB#-xuqx~*s=ZwPKm#=V$6e%Ul6z)KD5>~opl1JbURMg&-1y1tbDht!P z5Z_6nJBpDsKCTI?*dUXTaIn2_K$|Q%{Ke^Qj~S7N z%9H#$o>gRY$5?dNSoE)UpZwNi)ZgQ+D}T%pnD`Ws9pOywh9=fRGHdA=&T@2Lp#1w3 zdAx`GB3~X0$P+p81W2ANm7lYeU&xZPij_~HnI_AbC#ADPj;c{WHAz5dA*}myt;H?Y z13HD0?+h4e!)2B0OE26gy(4sZYTnt_*-;mke3~GWp^)z=DdQ$7vJD>Z^!VY4#&8jv z$$G|nv7Xl^mXBu>_1q0C I4&J!`0z$u51poj5 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000063.vtu b/test/writevtk/cf1a_with_observers-observer1-00000063.vtu new file mode 100644 index 0000000000000000000000000000000000000000..51f0d9a5bcf76b61ae8a748653a6f4918da82711 GIT binary patch literal 2987 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 M>YFz(d-cZt30dh~cmMzZ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer1-00000064.vtu b/test/writevtk/cf1a_with_observers-observer1-00000064.vtu new file mode 100644 index 0000000000000000000000000000000000000000..3162b720125c96038cc64659aa2a9c26f3d434cf GIT binary patch literal 2980 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 M@|7D{-nnuA0e0+K=l}o! literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000001.vtu b/test/writevtk/cf1a_with_observers-observer2-00000001.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000002.vtu b/test/writevtk/cf1a_with_observers-observer2-00000002.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000003.vtu b/test/writevtk/cf1a_with_observers-observer2-00000003.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000004.vtu b/test/writevtk/cf1a_with_observers-observer2-00000004.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000005.vtu b/test/writevtk/cf1a_with_observers-observer2-00000005.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000006.vtu b/test/writevtk/cf1a_with_observers-observer2-00000006.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000007.vtu b/test/writevtk/cf1a_with_observers-observer2-00000007.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000008.vtu b/test/writevtk/cf1a_with_observers-observer2-00000008.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000009.vtu b/test/writevtk/cf1a_with_observers-observer2-00000009.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000010.vtu b/test/writevtk/cf1a_with_observers-observer2-00000010.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000011.vtu b/test/writevtk/cf1a_with_observers-observer2-00000011.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000012.vtu b/test/writevtk/cf1a_with_observers-observer2-00000012.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000013.vtu b/test/writevtk/cf1a_with_observers-observer2-00000013.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000014.vtu b/test/writevtk/cf1a_with_observers-observer2-00000014.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000015.vtu b/test/writevtk/cf1a_with_observers-observer2-00000015.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000016.vtu b/test/writevtk/cf1a_with_observers-observer2-00000016.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000017.vtu b/test/writevtk/cf1a_with_observers-observer2-00000017.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000018.vtu b/test/writevtk/cf1a_with_observers-observer2-00000018.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000019.vtu b/test/writevtk/cf1a_with_observers-observer2-00000019.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000020.vtu b/test/writevtk/cf1a_with_observers-observer2-00000020.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000021.vtu b/test/writevtk/cf1a_with_observers-observer2-00000021.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000022.vtu b/test/writevtk/cf1a_with_observers-observer2-00000022.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000023.vtu b/test/writevtk/cf1a_with_observers-observer2-00000023.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000024.vtu b/test/writevtk/cf1a_with_observers-observer2-00000024.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000025.vtu b/test/writevtk/cf1a_with_observers-observer2-00000025.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000026.vtu b/test/writevtk/cf1a_with_observers-observer2-00000026.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000027.vtu b/test/writevtk/cf1a_with_observers-observer2-00000027.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000028.vtu b/test/writevtk/cf1a_with_observers-observer2-00000028.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000029.vtu b/test/writevtk/cf1a_with_observers-observer2-00000029.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000030.vtu b/test/writevtk/cf1a_with_observers-observer2-00000030.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000031.vtu b/test/writevtk/cf1a_with_observers-observer2-00000031.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000032.vtu b/test/writevtk/cf1a_with_observers-observer2-00000032.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000033.vtu b/test/writevtk/cf1a_with_observers-observer2-00000033.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000034.vtu b/test/writevtk/cf1a_with_observers-observer2-00000034.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000035.vtu b/test/writevtk/cf1a_with_observers-observer2-00000035.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000036.vtu b/test/writevtk/cf1a_with_observers-observer2-00000036.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000037.vtu b/test/writevtk/cf1a_with_observers-observer2-00000037.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000038.vtu b/test/writevtk/cf1a_with_observers-observer2-00000038.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000039.vtu b/test/writevtk/cf1a_with_observers-observer2-00000039.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000040.vtu b/test/writevtk/cf1a_with_observers-observer2-00000040.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000041.vtu b/test/writevtk/cf1a_with_observers-observer2-00000041.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000042.vtu b/test/writevtk/cf1a_with_observers-observer2-00000042.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000043.vtu b/test/writevtk/cf1a_with_observers-observer2-00000043.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000044.vtu b/test/writevtk/cf1a_with_observers-observer2-00000044.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000045.vtu b/test/writevtk/cf1a_with_observers-observer2-00000045.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000046.vtu b/test/writevtk/cf1a_with_observers-observer2-00000046.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000047.vtu b/test/writevtk/cf1a_with_observers-observer2-00000047.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000048.vtu b/test/writevtk/cf1a_with_observers-observer2-00000048.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000049.vtu b/test/writevtk/cf1a_with_observers-observer2-00000049.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000050.vtu b/test/writevtk/cf1a_with_observers-observer2-00000050.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000051.vtu b/test/writevtk/cf1a_with_observers-observer2-00000051.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000052.vtu b/test/writevtk/cf1a_with_observers-observer2-00000052.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000053.vtu b/test/writevtk/cf1a_with_observers-observer2-00000053.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000054.vtu b/test/writevtk/cf1a_with_observers-observer2-00000054.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000055.vtu b/test/writevtk/cf1a_with_observers-observer2-00000055.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000056.vtu b/test/writevtk/cf1a_with_observers-observer2-00000056.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000057.vtu b/test/writevtk/cf1a_with_observers-observer2-00000057.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000058.vtu b/test/writevtk/cf1a_with_observers-observer2-00000058.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000059.vtu b/test/writevtk/cf1a_with_observers-observer2-00000059.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000060.vtu b/test/writevtk/cf1a_with_observers-observer2-00000060.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000061.vtu b/test/writevtk/cf1a_with_observers-observer2-00000061.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000062.vtu b/test/writevtk/cf1a_with_observers-observer2-00000062.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000063.vtu b/test/writevtk/cf1a_with_observers-observer2-00000063.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-observer2-00000064.vtu b/test/writevtk/cf1a_with_observers-observer2-00000064.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers.pvd b/test/writevtk/cf1a_with_observers.pvd new file mode 100755 index 00000000..1ed2b7ff --- /dev/null +++ b/test/writevtk/cf1a_with_observers.pvd @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/writevtk_tests.jl b/test/writevtk_tests.jl index 499bfa4f..7f100c91 100644 --- a/test/writevtk_tests.jl +++ b/test/writevtk_tests.jl @@ -4,8 +4,13 @@ using AcousticAnalogies using Formatting: format using JLD2: JLD2 using SHA: sha1 +using StaticArrays: @SVector using Test +function to_cf1a(se) + return CompactF1ASourceElement(se.ρ0, se.c0, se.Δr, se.Λ, se.y0dot, se.y1dot, se.y2dot, se.y3dot, se.f0dot, se.f1dot, se.τ, se.u) +end + @testset "WriteVTK tests" begin @testset "Compact F1A source elements" begin @@ -13,7 +18,8 @@ using Test ses = nothing JLD2.jldopen(fname, "r") do file - ses = file["ses"] + # Renaming CompactSourceElement to CompactF1ASourceElement breaks reconstructing the source elements from the jld2file. + ses = to_cf1a.(file["ses"]) end name = "cf1a" @@ -26,10 +32,108 @@ using Test @test sha_str == sha_str_check end - fname = "$(name).pvd" - sha_str = bytes2hex(open(sha1, fname)) - sha_str_check = bytes2hex(open(sha1, joinpath("writevtk", fname))) - @test sha_str == sha_str_check + if !Sys.iswindows() + fname = "$(name).pvd" + sha_str = bytes2hex(open(sha1, fname)) + sha_str_check = bytes2hex(open(sha1, joinpath(@__DIR__, "writevtk", fname))) + @test sha_str == sha_str_check + end + + end + + @testset "Compact F1A source elements, with observers" begin + fname = joinpath(@__DIR__, "writevtk", "cf1a.jld2") + + ses = nothing + JLD2.jldopen(fname, "r") do file + # Renaming CompactSourceElement to CompactF1ASourceElement breaks reconstructing the source elements from the jld2file. + ses = to_cf1a.(file["ses"]) + end + + obs1 = AcousticAnalogies.ConstVelocityAcousticObserver(0.0, @SVector([0, 2.0, 0]), @SVector([5.0, 0.0, 0.0])) + obs2 = AcousticAnalogies.StationaryAcousticObserver(@SVector [0, 2.5, 0]) + obs = [obs1, obs2] + + name = "cf1a_with_observers" + pvd = AcousticAnalogies.to_paraview_collection(name, (ses,); observers=obs) + + for i in 1:size(ses, 1) + fname = format("{}-block1-{:08d}.vtp", name, i) + sha_str = bytes2hex(open(sha1, fname)) + sha_str_check = bytes2hex(open(sha1, joinpath(@__DIR__, "writevtk", fname))) + @test sha_str == sha_str_check + + # The source element files for this test case with observers should be the same as the case without the observers. + name2 = "cf1a" + fname2 = format("{}{:08d}.vtp", name2, i) + sha_str_check = bytes2hex(open(sha1, joinpath(@__DIR__, "writevtk", fname))) + @test sha_str == sha_str_check + + for j in 1:length(obs) + fname = format("{}-observer$(j)-{:08d}.vtu", name, i) + sha_str = bytes2hex(open(sha1, fname)) + sha_str_check = bytes2hex(open(sha1, joinpath(@__DIR__, "writevtk", fname))) + # @test sha_str == sha_str_check + end + + end + + if !Sys.iswindows() + fname = "$(name).pvd" + sha_str = bytes2hex(open(sha1, fname)) + sha_str_check = bytes2hex(open(sha1, joinpath(@__DIR__, "writevtk", fname))) + @test sha_str == sha_str_check + end + + end + + @testset "Compact F1A source elements, multiblock, with observers" begin + fname = joinpath(@__DIR__, "writevtk", "cf1a.jld2") + + ses = nothing + JLD2.jldopen(fname, "r") do file + # Renaming CompactSourceElement to CompactF1ASourceElement breaks reconstructing the source elements from the jld2file. + ses = to_cf1a.(file["ses"]) + end + + # Split the array into "blocks." + ses_mb = tuple([ses[:, :, b] for b in 1:size(ses, 3)]...) + + obs1 = AcousticAnalogies.ConstVelocityAcousticObserver(0.0, @SVector([0, 2.0, 0]), @SVector([5.0, 0.0, 0.0])) + obs2 = AcousticAnalogies.StationaryAcousticObserver(@SVector [0, 2.5, 0]) + obs = [obs1, obs2] + + name = "cf1a_mb_with_observers" + pvd = AcousticAnalogies.to_paraview_collection(name, ses_mb; observers=obs) + + for i in 1:size(ses, 1) + for b in 1:length(ses_mb) + fname = format("{}-block$(b)-{:08d}.vtp", name, i) + sha_str = bytes2hex(open(sha1, fname)) + sha_str_check = bytes2hex(open(sha1, joinpath(@__DIR__, "writevtk", fname))) + @test sha_str == sha_str_check + end + + for j in 1:length(obs) + fname = format("{}-observer$(j)-{:08d}.vtu", name, i) + sha_str = bytes2hex(open(sha1, fname)) + sha_str_check = bytes2hex(open(sha1, joinpath(@__DIR__, "writevtk", fname))) + # @test sha_str == sha_str_check + + # The observers for this case should be identical to the observers from the single-block case. + fname2 = format("cf1a_with_observers-observer$(j)-{:08d}.vtu", i) + sha_str_check = bytes2hex(open(sha1, joinpath(@__DIR__, "writevtk", fname2))) + # @test sha_str == sha_str_check + end + + end + + if !Sys.iswindows() + fname = "$(name).pvd" + sha_str = bytes2hex(open(sha1, fname)) + sha_str_check = bytes2hex(open(sha1, joinpath(@__DIR__, "writevtk", fname))) + @test sha_str == sha_str_check + end end From 67eafa1a4bebbbccc40e7932d901b4258cd2a34a Mon Sep 17 00:00:00 2001 From: Daniel Ingraham Date: Fri, 9 Aug 2024 08:13:09 -0400 Subject: [PATCH 2/2] Small doc tweaks (#16) --- README.md | 2 +- docs/src/index.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 50a46835..5267c4de 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ or [http://dx.doi.org/10.2514/1.C034048](http://dx.doi.org/10.2514/1.C034048) for details). + * Implementation of Brooks & Burley's rotor broadband noise prediction method [http://dx.doi.org/10.2514/6.2001-2210](http://dx.doi.org/10.2514/6.2001-2210). * Support for stationary or constant-velocity moving observers, with an explict calculation for the latter from D. Casalino [http://dx.doi.org/10.1016/S0022-460X(02)00986-0](http://dx.doi.org/10.1016/S0022-460X(02)00986-0). @@ -50,7 +51,6 @@ **Installation** ```julia-repl -] registry add git@github.com:dingraha/DanielIngrahamRegistry.git # Optional, but needed to resolve dependencies in the next step ] add AcousticAnalogies ``` diff --git a/docs/src/index.md b/docs/src/index.md index 959e779b..ab017c47 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -36,6 +36,7 @@ CurrentModule = AADocs or [http://dx.doi.org/10.2514/1.C034048](http://dx.doi.org/10.2514/1.C034048) for details). + * Implementation of Brooks & Burley's rotor broadband noise prediction method [http://dx.doi.org/10.2514/6.2001-2210](http://dx.doi.org/10.2514/6.2001-2210). * Support for stationary or constant-velocity moving observers, with an explict calculation for the latter from D. Casalino [http://dx.doi.org/10.1016/S0022-460X(02)00986-0](http://dx.doi.org/10.1016/S0022-460X(02)00986-0).

V1 zo)7OBRWgO$%f&FEyLT%iqsBW|AI9($%VT&FKp~LL1wQMbdtIfr|HXX8G5OWgE z79{pdri!Lc`Vv@SpsfT^7^t?3SqEXp0}%2bVx{YVT@w#{QK#u9gn51H!toQ(oR{zx zILq}Y<|UvFr14wZz~d?P{3|Lgr7q8WE{%N6ynbAv(oxoy(W|?lw|3FQIQB1&zoW19XfeMBan*r>Qgcu}4wsbpv$i4vusa^Sc&^GTEpPNa#>MwgzrtJ|~w1OFzS9|L9=> z>yYAIep)7dh!YAIleyrDgyeKpMhMG9z6Mx5@umFps#!>AqRstkK>>T{or!I4QDaqF zbt?Eqy+bm);&k=DMA9NmVsfgrE}R$C%TD7!&3mH-KBZ0*_r*oRjgL>MRW}Gw=Fd}V#Yu#1v z!y)Rj%-~(c6K2dBAC9>$OGmzupR#TAowqQSt_3#(kqj$FqetKJGY{4$fk%2rw)Fed#4{7hnPVKX4k{&!Tgl-Ny>t*huh-SI`ug@ z(xvJbFJGwkC7ZLjLC@P?@%;)6X@DU&%Fdg7$+ef@| z|1gfYyKi~rZqi$?>M1x_wqwUCFwK%fWgH|OXpP(48vl5m%QL_3XZO0B%(@yvy1Va> zyhZzu?=Xx%=b2bu&$xDz{v?V~GMIFhEtQmWR`sLnE7OS!Q{z@GtY_BP3F@Lm9uY< zY6V=a#OUej+4fzt?QOOl)Gv`mgQypWpYYdJrsq}`bt0adb+>nS)x>AfFe;UW;rqDk zcc$5@^#Sh$vTm+}BmSR<$y%m4rY literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000013.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000013.vtu new file mode 100644 index 0000000000000000000000000000000000000000..77f0514e85b0d94ac1c49b857ab6ac8093d8ad7f GIT binary patch literal 3016 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000014.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000014.vtu new file mode 100644 index 0000000000000000000000000000000000000000..7427b39c90fb02fcab99bb84a581146f97d9b9fa GIT binary patch literal 3021 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000016.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000016.vtu new file mode 100644 index 0000000000000000000000000000000000000000..4a633ebcce31b64e345bfed9bdc90fbbf3c9efd6 GIT binary patch literal 3014 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000019.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000019.vtu new file mode 100644 index 0000000000000000000000000000000000000000..b00178cbd97e9579858952c2a0bc91679f93de1b GIT binary patch literal 3004 zcmbVOdsxy}AJ5EOR`8aZHoOp3BKvu3y?ge&@AK^ZanA32e&>9?pYP{<&+{CF zJ3TfAnt-QJ2_zyCW@oz{2E`L`qzD2r3JHs+McTN)+);XnFAw;76JqdCS`rzLgas3+ zG)g><7Ei%P_)rKDu)i^UokYW9NR$XX1qs_rpwVLRyND44ED;9%29E_$%o5EWBF)JW z2E~zL$rL=5N&=QA(4r6RC4B9LrD1ozgJCE=C=~JcsPiBI2NLi&Jk&ov_G>&PATp3d zAkwHnCU*9)ci>KZObme8+izcBTHLmwJ4tYFT&V41J1w8_#ff~14+36#0##@ z7s9`ZVsGc@_*WDJ{5>N9ljkd9-cnaVXeD`^hA}e%~a}u+j(vk0* zsNY81o=b}Q^ovsTv`u-l?@%4DIxnwiqvH<)gM+1L?jKQ=o)2%{sqP8u!A(Dw)>F z+jqG;ISjx%9=2mfev1A4lKJ|nnNX?;Lclx0HmZU4sG1K{eq@p}snx{(<%#51TKf3C zLVXk6ls@BlLZsVBH_GqAgve!gYIW2Y3v?S9s^apQ;y~Kmxe6Dd&drcDGp6t%mwTzr zSm*Kpm%z!da?=Y)wHSn}%csViCr8@dR^3I7@wbC>pSWU+^tet0^)^ovUDgNk%!|h? z4{S!KavZY6frf7-?To#77i(V8{jDe_uyYT^{jWZJNxWvzzTcVr#Jt`u#=lvaY)vL#z^ZSj$6chB^ry#JbQ&3UsS4edWH~0u1flJ{Z7ol%=wAA&=gd5;|CDGS&0GqcrpAdlqg?!L?2{;48exD z`|kjpmUs64u-RQSwkP1MCL&aCZY=!4$N<#e2;? zbt=Ck{?DVg+Y&48Q%IZIn)2l0obU80Ke)Gv?8TT@SJ|Jxycb7*_!ix-*^k6Oh&vuN z-O_8()!}g8ME62~OW4Y(HM+TGd%FVO7-d9GTfGeAjUN8Bsj$B@KaM+kx9TbtN2+p&y#%|9>fb8Xz}Ls81~d`{zZ%rU^!HA zg{7UL^wn@=hv6)aj!iDek;pp4MMq5Og`+bSKo?uJw(?{Hw_bkp8VNjl-?xS~oXMpR z#}x}}#H9~+H6|7dOMTp*H-yN#MH`>Lfzw%XHIgPoiw3pai^#+riO&+b1#>Xir0ATLd2^ zs4vkI($`H{*6|Zf;HEud>r{p_PYvRnbmpP7uF1>l_|dCL=g}Hexa*_p&KG=V?vN;~ z$(I#HHj~EjBs!XXO%GEx+6qfC$=ocsEc^vuZYYROP!l+PqYkq5g2M^wP|jpXM8-*X z-JVybVXeL_g-(VUd@mC$Lke_fb!xL%>BH44S!=_SE1J(SSZ2}WJHpaF*RXB$;fW1w zaat=T3qpqsjNLiGLZW{WMmG5}1ITNo`g0ox?)x$ebBjdw0;ALn@XvJ2v$2MgHEry> zr)%1X&(jbMX~$IbVR?m+Bs_N5@NNr@=sSN}^^UrTA%%`z=Xfr!-fYapeRzCuQ1myuYn3s_5nAw4*807UTUj zby1oJ$P|5rdn-L(yj=al)r-}>JmxR`pcmNi2;YE!pMjTDP71rB3(-TU?7Hl{_0&ta zan)s&@lYevE~3lpT|4aM<=Ex5Nz|qg6dkPc@YrCKXw8aGI!FobBir=F)k0jG{RW#W z20Kg#9-s#YtH;Ms{*xZyxU)XVx7(6_yhg8&N@7b=&ahmc{>-`mhWp?!w`I6PmL4^e z4_1{kRaXO4H#${6!d2HRRb?a+$IsP0$~kcc2&5PG zj2G68H+hlEelfxx{+%sZO&s0roVcwfKEL*ZSbEC36MnuOziEH zBjA%8;fgORr(H>tn@9>*4f5IQ@K1PXo74qeWdAQLubo1B=JC jVtHJ*G^ZEf@TQF`R`Baq`7OL*-hZwDPjUFtTO9Q#GFx81 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000020.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000020.vtu new file mode 100644 index 0000000000000000000000000000000000000000..9ba3341605bfce2efd36d0f0cb0c8ddf89e83a51 GIT binary patch literal 3017 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000022.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000022.vtu new file mode 100644 index 0000000000000000000000000000000000000000..0f2415aff52c0846ceebada458aaabb9ade186cc GIT binary patch literal 3012 zcmbVOdsLFy7S|eMWr{VGR+_lTZcjvem?mJQ9#0zPjDktb5m*^T&7A-sgP#_uId-_gWj_ z$%u_{h{sc?1QHPmb#ZcrI^c;|5{^KOL_+Db2$&nx6J?GFJg{dMAqMY2OC;lw&;TNp zMxkSAbP68lLm}XxUqm>ZNW+JbC^$R?3EfMe(PHpBi8um=2z7|UV~pOg=`g#AG}lc~ z2P`R;OukqYiOUA)C#M%aCdTO7u)%pU($sI07pG!OIwl~uQz)3k=_Gf>kT8?<{4lY`oTmbR z7SqU%M8r>mZG<{RkSMVj8WM^jlkr3x-Y5wvB7%xHdYqx~859J3D#|B&lGu!8%;ifC z(*jK~z>|O{P|c`G4={ zXHVIT0{Z#X^?zX&HDoPXOjMZR@MCL+(ZZz6XUTWhm-!q> z(T_Z$bu@qQiLx$V*Dkr$+j|ODJ@;PybALxF6AB}1@42P!;9!8zd_^3EB?BZoL zGXEvJx*n*9{OW^l%5Hkm7y{`^3h@VDLUp`iI>FCicwPm!k$vH|vW{GUyKHHiZF$wb zd`gsmL{{jzcIdf>qt7aA`odpqcE6AkaQqqe&xMxKvrKA(_YLvMua^pS%`8ZXT{x=S zq<S^=~`&x)0SJIH-4B=QTVhp!UjwKJwUyvaHo| z`RY}#Pv>vQptKy-J!nq|DmE{(bzkn27RoPPf3CLdMf0&<4#sKEIq+Rb?=oRt<>D{^yY{Gy;ZeEz=4$OD{C^W7Pr+6$|vE<_w+yh!^fc1&X@R0@s%}(R@M~jV-P1IMDbnI4_ zLTry~Pps7ZI`-303cv7VFunZ=@!j=s^uMI4bA`>w)7^zTg%%g+c_5q0oNd+p$OZJ9dR8pYAZ4D_egXup?4(l17jrJep$KTa(^yivtm%&z+> zC`7XakrNc8Veq;2^ZM5nW;AI0WRT2NnuDTYTlGPal^~E8IB-h6DD=Dfwobt=-tRdI zv4vRk>y4(RqEL0Kd_986v6q{Vx$vBk%>pVzu0hvRoEMU>#$H zGN>EI6DvO&7zqrmAey0YZA=4o)o9mBvzTUZQnI9B58Gv+dwysh%1X8*bSrZGsDQy% zlj;`me3a!fEH5tJAZElDW+eUG`Q9Ukb6TPK%C8&Qmu4kxNNz;UxuLmUDehk?wWu2N z;?eT(Mf`G7(sO=?F(+ZSoz%PD#w?vD>qE|!Yg*yep?nU5tA0PaOl4U$wn=I`5~+qs zJ>m^Zc|*bB>Diw1+WL@(9_``OXL@GaTyFqX9MhVn+dFl`g7*3Vr7}F48&I)d-HNp= zwdM^S%#JpLr=sfUJoe~3@@x{bs@hfKS_!X%@stY9Tw-@>U09}=p}7B@X5*p9KxXZ% zAWh9Zae@tr{X_b45?fLOFyaAot){g*gkK(A5uowVvp8T+^D%2FIwjpo%+OtvgAo}V zFsL%ygYjTAzN`LrZ}mK_`khFNL57YDX~uJsctcUEN5eF&E60O2ZL8ju0*pOs@-SR1 zmU1tqd-{k5iC7^pD_P1^CU)V4$vH?BN0|sOlN&A|RVisf&&Fr(QzARdtjI!CBNA}b zDhE5u;Bms5=SToO(2-v;ZrTujrgx?TWOJq}er7*2eZVMy)f1w?#zX&nz*Xz=CNKI8 zidD%vWl7D)4giI~k~cMM7u*Z)Pb+S}vv?%D_wrvY+64r3&i9wWrmt@$> zxC+~?b^9cBcO}isJD>g_k=!46kMbMZW)=67PttDBf4~!C>=4qWVLvc)OmQ(w=vvidUubIYi|*TN2il)02IwPGCFRstaUk_ALBNN;hHHJfBU?#B)+DWyN`r!^w@2!Zv2{n$x|2d(CR~@p)v-vr(<nl#(txj_DQsogaJ+J>^jcw)e{K^us zTjO#`hon;wcRC?Vt97s%CbK^*VQU@H!xqB$92>@cPGVLYuici{A?CGJRlgiJrOv_? p%)D3U)N`54>=x5DqX3IvUSnb+uKa4>fgqOeZ~L) literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000023.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000023.vtu new file mode 100644 index 0000000000000000000000000000000000000000..eb33227707b87877ccdb50b66a7b81020dc83066 GIT binary patch literal 2992 zcmbVOc~sNK76t{Qpiopm*^OGj0AcX~rAd$iDk6(oL@OjB377);K^Dj&AfQPFG1e_u zC=@8TwSa9cP{JCKtw0qiAW2BrA`+GqB!m!X*sQOo=e=_}f6Scu=FYv}{pQ|t2IfkR ziZqMG;0ag&2M62P*n-V4xKIF%#f8JcBx0DgGuRcO0XzAr_d#qV#*9db#=yY=I06w* z3MG>881x}L77hNJhjSDn1_j{J7(5(&6iXyVVmxtZYzPi)b{-R=L{Y15yl_Ov{a~|D zASxP> z1Z5_6_TYD*J0>zxiP_uRE_+(JwrsfKV;NWq>4wLLP*#&X7zuLWpp1NOUv?hsG!+0m8xv7$ss0hOR|{L07!I+bgV(DgVsF?tk(4$ieO}CjT$i3VFi62xI4D`(DQX5GO#Hl(W+DvZ_mk z@Nc5n+d0_(l?@E~o{&nBmnvdORT%W2Y6j-E`bJA?zgO+}kT_*|pj1^>#zl?)UQ^bu z?8#ZAJJ`dY9^2mFQ}EJ~&~zm2sy{LEDA- n#G*^8WIOeThHVPGfgWbEEE)AiQc* zbdv`*Bj_LjTlgHJvoAlx;w#UgWXqH1Gc`Z=F&*Z`3E6R?mYTbqyNj}z1(AtQM8jb5 z#x3>^@yQ)}Q&Ugm`|kr@A0ZQ}(wU&{N7gsO4Sw?%bWb7O%}tAsKg`!?$<96U=&^N@ z6Y0XdaPTa}`dxb)r$0_7^o7|jrdyhF<}Me`W#odSsiO_n{fhpc zq4U*O(m(vE@@$#k<23viUd;LV$_m}n{M&_%a0>>VOX6K&$D(CX!r!c2n|BcrFz%D` zZCDbiOYaj4hWYTrm<_`Jd$?Y0(3&5M+`qB{)4!0NM&jh!^b}-`t0l4 zmj1cZihehR=k1nqswyb6Kqnk_3?jI0m3af=^0}Ik(ao*YF76|BqaP04noHu{UZ;hm z)_1mcYp8-U{G6RH&RtsXu6^f=(eSrv(%zR++9`zYELeo1`DS45*680Z)~31a$85TA zY@jmW!zowDWW6?)`bj_-m|nHxj>nFD2ur(Z^8m0&U~3f(%;w^JvJ5iokt>vWnMTWNPDW8t^sBZ(^9xMB-d$k{ zifBWXM+7*6>@663+L(aC+&it#0(7RW`pJowp(NZbcLS01RZ`%V4#!(5hNY&Fi5pzh z@1D@I&57<-eX~t#Gdv?VrxSXIAm4^RH8f*A=wCAy-k2mNGz#rY7k4oN#w#xxoka*I z^Si)i|qNSB~~nnE2=>FaX`@iBbkl5N2CQeMSm(d2kCj~qyeIZ4z>)(8boApaStLpzKAlOWvRt7Iv~3?AxkoqUCEJM{!!5k%(t1& zHWAv9Q!}2Sc znrXj{X8y5*Dc$4uc5{1dsy_KKi*mVx{ktK%rr(awj>e|qk=?P8Wadw5M&VofrJo3Uf8U!r>F0n&X1XM@66oqyWiY<&bYXe z65`F05Lg@%je>xzEv-Oi2vigrjzq;kKm>fWg(Juns^bz8?7bHmk1)fNF$f6g01Ai4 z5~A<~ECTL{MZ!UUiV#W0BVcGO9D#*^e2{p2JmNbP92tQEnZ+U^)Lz(17%vpweiz6r z3Y~z#B5*jg`gjsP?ywIs(jx*N;r`wYg6f!=x%?S*(W!O^AQ4drGe1H?Bm(On9e_rn z@HllQ);6H`PIp9nyxM1DW3?1%`P$OKMB$N1NIdzkd077)4<|dDKbZVKtYz}Je*k0cU}OEaI0w{8IjRFMsk&GQ z{{+Rx+RpY56c_LZLaIextcXQbUBG`;GcJ2p-e^(n52_s-K~$FqOjBcdr0M+cdimpJ zn^ZvfDQ;hI;HT{TqtC*g-|y`G%2yX_SJ{g99^IFRKwk7J4&I;g0+@4C`r^SZpB8rA zrPw0jEv>86zIH-b$JQ-IjIEX0O`*q*9}K*GsWMqyNI5nRk+oz-7%fPm7I2SK9f!T1 zrUASLAExPkFPFd5Ka79zQdg1tKs;&j`%Ls5&o2Wy*UjXLve%!a3w@G3BA!A9M#>6j z9b*PW-(|pz?d?OhoI9}R>+A`LP}Jw|3Ww@;-nsZnHZfAf0?Mfmr_YA5Qe0?=QbFg za4(%=g#OZCh=Zy=y9gkE1RGP)d$!ijmNXdlwRcYI55=xeu5{l1jmSL!l*LSwpLW;y z+27G>`dCIy%9uG1Y~Q-`DB#D#=G{Nqr#{aJQ{=3n1Q`b&DjfY3-2G$T$X?$N_`k9! z_gjNwxhE>qs2lYMAxdwhrJ*FTQFBmj-GmAnUSzy`G!w-jJ)C#>A$PNHPHN1z7+^F! z7hvwZF!aP4F?W~OCAzncMK-$MMr=9nu*K2f`<7cFHO*JgSgvc$mbi^H zku^@tk~QY!WDTV-unmkZ*W2D$w_Piy4OUyV3CrI3tSC()+R??gBWS^?stZl#%m%80ZR#&$J*BHc zX>KWGCRZ4OA#*zlGp>_{ts7)>y5V)}rx>Tw^MURs(G~pCCNk3@SZv8xP~JAyKdIME z66r~PqZshad5{Xj37d)V?rdVIaNlONW*vr-$0Nn zxRGrre%uXiG$uK`n#rC-O#-v>#q9|NN&qu?BABk{sT0nVUTyHEdW{RVhhK&g1z&|b z_wAVFif@a{o2=1MV!dzz$e%7+M3wEXyx$Q!3|BwX*i z86$LImTzHI1mCi}^S5C(pl=I1(p|&EQ-zt{q~ZK<4&R1ndvZ6FO<~bo zvt{W@>yu|?Ibo?lFeIcKCIC0!$$FvUcEo@9U}5I)sDs}+{vn7E>o;n5t*b;tx~j65W%k6bW~jhqk_Ds5zA zqTVVFmcx7mQG6*I>*=jh4HPoYDooj=3!>Eq;ICaS_|^5o$_A;xq8S;huigx}rm&Y; z4_=NNgl5%d8!6@LT0QoH7 z;08bGL4PsaU*f}=bOBF)2A1tFmpY@T0ce@!#3a;IyeCF}hAKbpFaLofPY26$%H>&T z`S}U?DO35`8}iI5Ci3fe7)bZBG8^$C|p>zKy1 zXRp9uioY7(pX*Buh^u5D8y!_hDJ~AC%#LcnGgRh>OVPnv*FOQLWVgLXD literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000025.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000025.vtu new file mode 100644 index 0000000000000000000000000000000000000000..c4c0da2929f1d29d8af23f02a30ed054d3f51b88 GIT binary patch literal 3014 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000027.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000027.vtu new file mode 100644 index 0000000000000000000000000000000000000000..29bc7f70082db5f8c6491d3f5118412f62910325 GIT binary patch literal 3000 zcmbVOc~H~W8U+_9NJ+6EB1>X$sufL$paMb=*|aE;76k@E_2qfzbp41{aCZT7r*?B4Mg z|0K#DnByOOea}d($%_@S=&CF9uWH8CW95z(-F~myiReUad7yN4mdBTdf1GpIF0ZNi zlxwkv|AjVfE84a<7SrAg`5Z>9bYxKd1h5vU#im1K-O87(V~3(fi@WYOgDEs!2UvIU z=f6AN#Y~V9S58%zJU{;QnIEtj;xqoND;Su}Ql?LfXmxCYlhwSiO~n!#0n2~A`84iO z!Za#)G!lpF``$-ZsyP1rwwg?)e$C6>N3FYmNW0cCcHKQbnH_qfDkvm*gWPrEzNl=B zKNOTzH#s7|S|UiuMhqK&3{2~p_K&!@!^^tp>lznEOuo9WVXjP-9H%FLG%bgD0)FXv z&Gd~^=IozA?Y$?{d$>(3?=HD|2Nu1T$lvnKmH_?BbN^~sI8 zueV!mP9hY>Ywo9>6MXG3LNZPaIFi#IxRCVh);{jUC@dAB1pT!@_>hP3`^z+`0U1u*RNborMirOU^U3p2X`%soSQ>@ z_Fh^0e7n_|l*aU1`VO+n*_J)k$~)|PC+j`FJ8u0(oaR?Ah%ee|iww2p-;4WNJwUv1H%y7&siizn^ zEBa}>H5+o)adNMbQB2lv8)w3O-f|zEytGS_S8BO^? z5**5J6HuEGTtF~>xnyBcyoUNZp>EFg0uy-jbK_u>e8zykyrV_W?yG5g+rBOlGRB)= z^B>abJG`@t(BS1siU(E;ebS=OWpBLim1q5&F@12NiKde@L(`d6(R4K7p9=Fhx0NE; zC(k?@RFhptRpHF(E1pncTaZVSx9Y&B46ly5$0qHMJ~9{~6inB2#Jyxfimm*KY7d!h z^Io#oySb@ZR{Kb5E8-KO!hN{nJRJ)9qrvTU zcmHiZocbjPB;G4qPaC)eed4B*;vv!>+i)Eq)_${W=C!+LWH}LEB-!?d%lXD}UKgC^ z0pB26Ojh6PP1EJ~xjJ*#ynC-b?I9fjn|%Z&cZLIpUmnRg{K3|?-0aV`W#--?&M!pk zDI5qW1^(wUWpC+=v$99~=QIk(xrM%fo{ri|0`xxZ+e|ed$u4fxnAMp;;~=g&$|39e zf%SkvO2uRqpHd;tDxemys~SD2@tF)7AVm7uu)E6IrlGwM;w!k6od<8@2e4&MNU2hg zIeu=9P1}L=w2u;oNe0fD;Ba)5ey?w>Vb4yX9fyg8y)544}D*AE$S8L6nDgI4g zP{(1xQl_A&$zmQ?F<8)|T)1T^wo2ST)nGaJ3mwX%iI6>v#Pk|~Vkm5v7385<2bpxC z0@cjSgXGQBT*@{t?!-_Hpao@ta~|w~IS0uu-VU`h)l9slX8t1{MYNS_1MP3^DIe-n zMhQN23Y8N3CO2s*rfn|rGsj7m7l(?v3$oKJ#E^M2r|iT$%}zEWkrlSErLX{au-1V0 z_CQwN#c}Be@MijR^)c!OF-+~0-+W`ZABm6@_sGTkq9#YRDJP{nR?k0(O{N(}OKeQx zr87!9q{zT2Cogq;FF+_6mA;*^!l#F&ZN#T*43g88m&4Kwp>CUcQG3#~&HSB4^o*QmR;LF3@KK*nN|> zJYQZOe+yC}n_2fp0vAA=C~R`ijya(nMc2GA_+L-BUb0$`G=>LRTb)%!6D*bGbRw=)R?&9Q^Lj1cOvslEye zD1CN@?(Kj~dKfrYP948IV0Zc^(vFjo#vk#o+gGA26%613bP+_s-QG(AR0=r_h3c(z zk+XtpH&yLkDeO?z*w+CbK2S~c0qPQ_`VK;Uzf*l1 zs{XNDU5rU%785ozvsyoLwV^rGf|8_;yC=7-XZjSWM4T0*-pR)g7PgA--r zzn2O1a8rl(C)!m}=)N^M5!~+De1578zrkkI#9tANkVGP;k9JC3p|Xuo&``W#Ls9#j13m>O4!8S*dx3pX&h5J*}Rfa9xl< z7ZfP{_4<(E+Ymt)L}*wxb=H`2eeyBKvikgu>Y_fUXV(3_{oJN=7ZXuRB?urVF#ofe zsoaK;8+9gRn^Pa;(K5T)uPxcVeeCX<+BXZjq&1QGtM|oSzAl~B*=S`=&5yuXb98k2 Vs@EM`>R;Y(RkUq5bfpi6{}=q>V`=~Z literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000028.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000028.vtu new file mode 100644 index 0000000000000000000000000000000000000000..360780cfe6ab4c0bb47071f89633c12926c75638 GIT binary patch literal 3008 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000030.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000030.vtu new file mode 100644 index 0000000000000000000000000000000000000000..00bb483149676802c734d726440a0e1fba36dfca GIT binary patch literal 2999 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 hx_rT=zM0;cig2 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000032.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000032.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6976b660b776647f65077492ca7e15001dba7034 GIT binary patch literal 3008 zcmbVOc~sKb9@jB5Eiucj=Yld*P4$XQGfi;G$}v-GO07&05sgXtA)sucjk%?%nN2ih zQcY#0VNEre;+{I`7%!bdQvuW511#bvqVjNSdUNK?J7<1>aL@hR%lEU~?>*-tT&dAf z)^S)O2?yYjFxyR=Vb)kY1_;ODBayIJa>PbQn5&B(BH*C+Zd?@BnoJ{LkuZNeiA;>e zkYkD1a8DvG9QLOQVKg!p1rWorL?mo4j!cfi?!t%T(0G{jF)Uh*qUOtZ;mHp6Fl!7D zO(0@PBtX4Aj(q&cUR>BtG#Tyj35L1oSz9Ci%sK=WpLjfzrZTefVTtu*(y*^P5GW`P+>cOnr@n>V>T3P8`w^F>FiJXtfpEW zfXB{~*}<$M0Ae(njD(>H1S~!rtBwSSh#+Cr$YvOPfdv7dtMX|+D{Nt=_VQ;9^8w8% zzyNqW7DL9x;mEYV)?xd1I-Kmc{h{Rlam|S*{R0}?ZMF`7%j2&$<)|(^o9av>{1cWf zw)T#Hupr={1*r~srXyxjMZo{6XAti5XEc-cXWdRjQ`GH&($tvyPU!vbn5Q*2r{>3= zr+ss9zfnW|{vBDr{ajm{{&3fW;x$DzgBiaZ>e#X3+P*#K+hOVMH-CJ6&cxS&^TW$z z-&eo)ZRtOo-Mn>q#`TnIyDmrl`^E0#O-)fJhYW;F)8|ae^r}(|h)@wzDY<+$xF&DC z@yB2Blcwj;{rI0uoQ~SHotfA+{(T2jU&nD8l!YrH0Rz4ux zugH`P2${DJ1su*8wkqTLf8ALR%00V>F54)MwM@O@{gg9UE(LT(oEt`B90u9W0w_rq znw=1Tm>$yAd%Hc}jsx*QfTJ}glqQ?sizwH8DF#j!pqKt3H>ac0mS0YJ!%{{Y9x z zJ@7P^UFCQjwL34@NWV9eT(tGwf7}dvGcDx>hlZ|1#2faSTsgn%mKmy=UTdQ-TWjG+ zmy&T)<9RZ!`0Rd|>BzVLlw-Z8LM zYp-uafE)=KZg1-Qs(7u1{QK!-El-0G_+9AQJ-iL#I+3X0={VnE5s3cncI%DOhE$Qu zy%clzZ;Pq;Sy0OY`; zs^iX=HcaHNOG~hUuE|>D8-($5QoHTZpFL-FUkSKj2|FNP0XAvh*|2TWG;Me`X+Arq zJs=T149%IXn(~=kHha3dY($n&UENS;l$sMs@g-N`zfNf|-Nl-NONnZ zz223am%Np@jwga}*~f1cu$S0NZE=N)6ezyaeQI`~ovkCX9^O9|{U z@D9P$YY|*S4%DC2t}=v2ai~kIo;oL2=~y+4gz|x!kx=1M=dtZi9@lst$Qy9t|4X19-ta>SepXJ1%#TVZ3FAMNh}CoZ(2jJWSU0R z1d_Y6`D6HdBYY|TJ*UQIK76_wSDQ$V8=mlikW#ihv$ zrN)BeaZ~HKvO}SXS+4qRZ}pE>d$Z^@Y_%DT;j1x|vB;hvuFN}!LeK?%EU!v);u;G` z1S_~ib|hsroGGaD=Yr!)rCI_Vv3w#O%wI|4-}0*CVH_39rcMLH_iRwq!$PXhRayKlCQ8^e*6rjuK_(D4z17Mv~XN-kHs z+6EFBr8Yz0JxWUq<2kcY#vfE}<_st}$|{Y7zAa!TG31BE z9YP|nvIeO%5O;Kzsunkfp6Ok<0HVcn4Zkp+nO~shZ>+~1gQyqxT~a!Lw*425_q(J% zNzKwHUBZZ!1xmC2${gG97dtSx`mY z&~s@*Pk9Zlyi=mQ2`D)dXCuC|JNQG%7I#;V`YSANJ( z8t(UDFK-M1m#u(svY+BKPmu&yWRxgU0Y$b%@jX;= zimga_Fx3Q1K8H>|don$YP)Xq`IZ8)cXH(y`O+Brf2J|?i-$7z8jFeTHKRI>j$&F6O zCd=-Q?ykC+YzhhltqndBa^9QefM5B2T*iybFs0sS(NfyDugtj}o!qwa3cgB{^hJ37 q!g+Pg9hb(!xNLq-&BtIZD>XDapDgm3eaC$MWKloI;q&itm;VA)QegG~ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000033.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000033.vtu new file mode 100644 index 0000000000000000000000000000000000000000..8f1a0d96d76be78bb3615757b0badde5d12b6c68 GIT binary patch literal 3006 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000035.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000035.vtu new file mode 100644 index 0000000000000000000000000000000000000000..da4a1449eb0461243ef3d6bebf89674cd93e139c GIT binary patch literal 3004 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000038.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000038.vtu new file mode 100644 index 0000000000000000000000000000000000000000..16bf99d9cd339fcf04aac455e0b8e9cc159eff90 GIT binary patch literal 3005 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000039.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000039.vtu new file mode 100644 index 0000000000000000000000000000000000000000..ae06646a6bf5c87919e13d925b18d8216b2e65ac GIT binary patch literal 3003 zcmbVO2~bn#76vUugTez8cx4Hu&%F>5QMM$g1(jBb_JL59B_#nPkQzM1|rcg~#i|Mz^~*=7#b zofR2j8%?G&C;%0QMB6(cZOPOSfJC8&;gC_xP&;R&J06Zb=<~%cN(9-K$)=HUNM9<0 zNskI)M$yTn-E;~G`3DbQvzg=|fKDRQamc+CCNqNUNhMK;RHW@uGEr*{T5#h^L`3Bgly{_75O!pP6*u( zP^e6XHWD-j`QG>$IU+)9!(bfdJk9?$_i*0FoM9Gn2c1r2F9f+O0wB)O^Cm`WW1e^X zflnv z&dQ0p9KPq`0gJk1I6Fn~?W?t;eGL!X^33je-};E``K`&vKBUvsl+XRCJC6A^{I<%& z)6SZB-qb08k=-0(Vz=o_%%)APsx@1hOq?F#AK<61DXSRbaV}c|f?zxstI@bLy!2^@ zyBl0+iYqr*mzriL;rJ-fqYrRZ>#hMtCq~&s|74TIvSV9gIgiJu(=swH`QSa8?q6+5 zzeIR4-dY`0)?~Nxj<@eCsn2Ap6o+yT;9lB)ZXj&ZuD!U8AweZhvI>8PY>H(eH*j&e( zR}|&P2YnhOUKe7na4+gToDS;2JZ8NE{Xn3^SZGq+CP&crttbP zb6BQB1ZSEe_#9U(V3k(H7mn|BtJS?)X8L7WS-PZm+ONpfMOa0v>WF#CT+T^KtUoj` zYE5?inA!!Y0K6EZ>KGl%VfB& zA!pI!sT#@iZxKcQjZ=L`CWPCcrNy2_NaWM4(+%YaW^@<046P%p(W<@IKPYix>NQG8)BqH)rMi))*9i z`j?0o$w!u2y6A%hxLQ zIK3+T0_%->6#<>Wo+90bQ&WC!13w)6btCL%Z_Jx}-dAgR^pZ6LwFzFH zprKL2Y`V5Ro2{?$xb9G0<1OjxaZ~yk)3;{y4XfV%lWxm4bUD3TW#nRU8d^d>IdS?k z*j$0mDD?(1kvRSo_hhB55~a{9<$sU*Rc#ozL%j5v`G8s{PIp8C=}srygfSFpGT4y8 zNKB+$|DN$cw$1Tod3-UWp>c6qudkY)&P6F%@_t%{^@p2?R!Q^9{Dz6bho?7pkr)_C`(ts0Hh9bpX={N$6uf%bz~ct&r# zFZLi9F0YwR{Ry-P+&r^}WyMbqc%;iuS35-1g-gZD2)$cgEIewI?i zuZ6LUL=!--NM-z6b|1B8xq!JhV?Br#|9h-hVlBuYy-52QxKdsb3Wka%WRkpEE9le8 zxVCVc=G6iwTVE=-@jVd;BFqGW{N5#j(|H}p6Q_#L0ChYTUpSF34=ie_>RN_2;IhFCHZaRZ){7Clz0)g6;BjBeZ3_A->f)DofIsKg!AcH-t>M<( z4XoGW#s&RxkAo6&LHzOJjxa$>7f+%eIH{Og;sjRq@~idM>k9b$y?WI{2aGe>^cF>R5iM(uUr@NuV`Cr zlpRwjjk}DK8BYp;BB?qHCo>;q^M96BJh>Kwf3$f}b86ircT9w0wBW08&?@DqLDzjg zt);Ra2NA|Z*(Dm?y5P+I#R2HmpKtg@nYnPm%CUPwIcliA+@B3?Q=$j6!Uyq5rAg^4 z8QCFY&^5?nurdQpdhYT59QN>VeC}Z;sZ)w`{R+2lH#U#i$ctk8(S18;b{)q{EM05% zb=UmV-E7@eAJE-hH1-DXt=MjK{K9U|gF5z&d{$W)yFeOyp6A+rPw;f4qW*A2?dxWc z8#bM31l`GiZV{j#Tc8^#=m$P@8-NOA(Dw-FZZ4F^c=r-eixFy3(7UD{b(?CYKi<#~ zenj}>NGsW@FSVd=xZw560;xWAbdOWa=HjT>-Q{T^U2PRPyoykz0CaBJ~s1i`BRK6++P@R*hP9an&xvFpO zs~doK&4_pPr8C1=4T#cA2Ep`T_5(NUC9U>Sc){o~!>Fv0vP#R+lN7}OAt82bo jI*W3}g3ihbAzN4K=yaBTv~O;O`EXm&ZsMqgRUH3c^n`aa literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000040.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000040.vtu new file mode 100644 index 0000000000000000000000000000000000000000..7f7e512628e355a2e6d1b9398759dd90d8493bcd GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000041.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000041.vtu new file mode 100644 index 0000000000000000000000000000000000000000..75f85039369f13d90d13e011700246f48a0ee347 GIT binary patch literal 3001 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000044.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000044.vtu new file mode 100644 index 0000000000000000000000000000000000000000..a165f4dc34030509ce04bf4118574369d7f321fb GIT binary patch literal 3004 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000045.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000045.vtu new file mode 100644 index 0000000000000000000000000000000000000000..ad72dc53207e494ecacc871ce5c9ed5bc36d9013 GIT binary patch literal 2990 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 U@A)lmE$=QU>g5}`ynVa=0W7Ov%K!iX literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000046.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000046.vtu new file mode 100644 index 0000000000000000000000000000000000000000..5e73a483ef39282d9b75e9d128df238990d0a8a7 GIT binary patch literal 3005 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000049.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000049.vtu new file mode 100644 index 0000000000000000000000000000000000000000..9d3283640a47fd2e3ce8d0b02228df08049fd66b GIT binary patch literal 3002 zcmbVOX;hQf76lcMDLid4T0)?)QY%7$B4Y-4sA!9zQih5IVhBiqd@%_SX2b%D16Y($ zp`apSl@icerVt^BDWXuI3KR$lQ&6S^5<&S{H$) zMuZzj;Ys9BfPjQqnp?n(@dO+Y6iNs|!XhcbW_B<%N(fCT>vB*TJ{pS0;f>uRBTnH-9>GU} zPy&Ul%*4_P_Acmx4-Z$ytgI|nkXC2DU&tb;F04V}XLBg;^BAyV0S6TuD2b1y2hy@J3&VqoiqP$zL2wPt%bNQ== zHG@_a-~a*vkE4V}g;HYvUWeuX(qV6H`KOZq$F(Y+{10d>Z7tu+_-}Z;lu6ksfmd8z zZiIirVr6M<^=CE+_z zTwPQ1BXhzIWgpwl-nFZ}?6`MSqucE99c6houtvc8)kKJR;WCtux^uuY+e&di>E&Sc9+&K_=m%R3 zcU)^q;B>+Y0u1JF>BjhG%&`H}8DZR>0^2BtC*`32&81x6y8JWI$$7_yg`79BIx_wd z2^)gUEi%%xD*(p<%!uaSY;N}W#GNPt9|t*l-QP@(-AS?s=RWQ!B+X+S=Eel+Cc{<^ zgXCb-kw8u@V)pS*J6?VN+~d;zW1!}THsnF1>5W3{!Z#Q0LORf>2RV!iSml#5PcqrZ zLFEO+WVxos73hohOdtCKaAlosle_NRLp2GNI$+iol#<###Fgvv)4;wG~^hF`9ndqzs%w} z1t|(S>TF*h%lde;=u?PYtc5EYz{EeIw$Fc8`B+E8<=2b4MbU*8kSk(QL>K?H1;obW zWbBA{SdbkBedFsYT=rGozfO1ooRM#W?35_Z8x}qQEjv_b3kSJ&p7V za^JU9OeyiY??v=S-{&L#xcXZB$fs@ilcmaMIlcGsqz>C=^o+CjuI%iGw`;hhCnS?k zcV5C3rR~7GxwB$f*nMLjc0^HNHBLUy7>a31*bdDpZjPJWJk?m$+xT^*C~A`g3nTu} z{Gk2{7d0I4qo!}tYvot`%u#iGi}KjH2$2w;ubn$7z(tQaVH0&moE9G}iAsFmerb;YFP2S}c7bXWqA!V9UJ^Oi0iQ2G=(v!zG z(Y*Thog8qMORX{&$wrY{bPuL-&d&QsB2+B48(rt!4Kn6|IpfZlK5<6{^4N8Esj=tT#Vgy`1YaZ^OIG+THB;5(`Na-n*mv*&gc)u&t?C zmeyBw4j(@BNU9k4dLF4=*b-+W5u*lVrBja_%=RUrU+z;VAosdivcRUD<-@PM5n7qt zS6&EjL70%WknxjXJH~YBV=9Dx+5d?u{j%I5oE^sJZ1&*p^FlNu!=H}d%VnCCe*llG zp)|Cn&`>3TU`%Yj`Mj%;C9>P-G4w+N8dNKc?H2b6V!L~>a11;;PRzr53?z1^)1Vvm z+gKom$c`;h*TU4~^W*qhm{^^ex>+^2VcI+=u%R}2dis{ZG;EsCea`kp?^GR?MwPHo zj24D05Y4%su~UE2F_~swG~pu{DsJ&&+MW=wMAho_!QxKe2BW72Y@-yg;8_oxHBPnd z7N-jdGte}epd%thZo*6ed>Cr3S{Tk;%{dx0yRY#W!y;jdb(le^@e$B@{cNLiLsUr* zy-|az*CPhFJ<=_|=M54DG#M1P%ufZD9M7pro*|=TBAfUTaHF;^SP9d2cir z$n;M#1Ty=XGHR4eOCs#x`88CARUH#LE~e2yXsso6jz@fwULI9?hi`*Orhzo7(|f6p z=c5Li9t_oKO9XGbC0L}AM5xG!Wr$Aio(~Xq>{9qxJJlVGmo3$|ILdF_`X-Ya7&jv!>9~Am!%KJeiHeax^z=6qQz;c3GF4 zhntcW$hMC%GcAMK_rDu{`}bS7@88B_OE`r-{r+Lrd5y_ zvXG@GyO$}u;~^_;lih~P?$c#=0a@9!?3R)2$3j^#dGQZG&M}hr1T4NBkatR#hLS)a zt&`nNCp++v!HlxOw`FhsDC4UWCJxy~n^s1~xz=99^>xn=L6FC+ zTbmF87j1=0zM#)J0HSSx#C%$aG7>n4NY7_Vzx9w_YLlkGr5SW-8X&zgEj?=_y-+Ak zeI$PlEVddgHdimbMJNPt#aw`fnuhuCZF63SIbW-6;u}z8?syH;p!z~yb#brVbHo0g z{=UXDSE2(X5@S6vF>_{nrsNY3u})i52AEnwi%IQdyf$F;^fEeY>$()G-Fke lEtksrth2VJ=Hu{&Ocj;h>P<&hUNG-JR+JBM_}WVx^&f4OZtVa7 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000050.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000050.vtu new file mode 100644 index 0000000000000000000000000000000000000000..3203da4f9366fe577e1bead58d56546762cc2031 GIT binary patch literal 2997 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000051.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000051.vtu new file mode 100644 index 0000000000000000000000000000000000000000..fbf0499f0352c8f5f0d1885c904f6770a6438db4 GIT binary patch literal 2998 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000052.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000052.vtu new file mode 100644 index 0000000000000000000000000000000000000000..2008c79e0c42e7bb3305944b82f0610fb6e19f2d GIT binary patch literal 2999 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 VRjYj$$CtM!73~xbUmn9zzXKrwZDRlc literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000053.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000053.vtu new file mode 100644 index 0000000000000000000000000000000000000000..cbb6510a68bae1b2a3d5ab98e69bafc52a2589d1 GIT binary patch literal 2990 zcmbVOdtB028z;MvR$6U}Yb3^cw=PpO&BPbHl+Crgv^KM)gHX^Y1q3vZ(4^F)6*ir? zB5f|`+7c>jq=Gl{T1M*3Oy#1LnJAD7A{sAw>Fw>a&)&~x=a1j{J>PTA^L(H0^PJD; zAbeK4tA&Q8_6Jn6i1ZuRCC)CH=3bF6&-JjuOagJ0v35SG+ z5-3!1LKHQDjKcbv7Af8H%#qA_u@fZTs@emGUM$vO_b`hu^ z?oh`lVjPK#qfm(E?TOSQ2Lkbt{unA|#~T>xZRO~QcsJ^6&thCZ9nz0X#?a@I{4AD;nV}bqi8JRs z>-a67W_CmZZYG!;)G?Y!j>AxqPz;HLBVci6Nr=(W6r34xfx_maAYijz-qqht|QMS0c{g1A1327Gjbw|8b6#@IJoI>Z$l?_RqlxK@iar#*f_&AE-xO&V<#C ze%}?ECb;3yJ8~$y$pW1@@c10waEJtd9DBB9>|XIedX?qX&f$)J#-$W3D&=153HW4u zs+O+(A=I$76lULrOg4Gl$t0hW<$C7jE{BfB;&bJznrkBUlP7Y=*I_F~)QJ&%GbZAj z#Ma)u8Rd*M*<98}Af0${m-s-2u2?^1zw{?CTe{>)^i~D(#-SocKuGQF4IVQ{s2v{7$%g0f@&;zqz4(6Cnx}46jbA zU7-5}?3v^e;6p?qz#sqVeqekH*e;h*-zKBFfqz>D9I)8BCVdC*Np#Xvy>q&RA3Of! z^9Yc{&rWXdrtGXE9UnirP!-}y8asG4Stjx{2r{_(tLfUhk#a=q?<0%*mvu-pYo$?# z>p{VFWf#J~u`k|)2M`Rrrl!@Vi{~F$*=A?cvnMTDu$!~9nSboOBBo38cvrKnjc4oKUE!8P zmKhNb3P_6QHQ?#}m}97Th#lzXudvw`EaNp?$;}eg%9TAp@t?&Fw<3H=kS~_~o8xfT z3}wJ~oeRqkG(-Eqf^u5jGJme+)eNKWq=X4by2Aua)-eI2?Bovw6ED_y_`+AF*giiJ zXZ>uib?6eG%F%+74Pt-zoi$V4F2XO@Dt5uA+$O}Bn_;fR9q{$`FKd#Ws^JfE$Zt!9 zz#c=n`m6(fFU(rl6w~O3Z=^J09%h-ccAQpL9tWER0T?Al3$o&QLsI`JTMc}^jBMJD z&N8l^#1I9 zoS*wF-rUbeP2nvVaJu%_%h*k;&tG0?yS*{%f&U@j)(uzgnN0U<)!$4+$V$ru>QPxt zLO}1>!xUfKF9w_g@vV}H^B8i_&vQ~89ScST;BVJvL6nW{G`#I)HPE{2; zz>sUKUWJLMO(xqFdjzZGl|CABG5WnfjiICJfu)QQ4_y!F5yj@lK;_+h<3`3vn5r!7 z5hW#BdQqxo8&WQ1iZk@8PMXxanW3|kl}few%pditZc&V>iJ|*gW&$+Rvij$5fMUsP z$Is7Ma|<+{Qyu=0wRv&R1*3=F^;zDLXWr>$>1S3@E<}wO^Nse;Dmkv$R{u96+~425 z)!$CppqCYdUGw!_1vd*+4HWrj^Ig`2&n|T(6GbMfF4Crf{)j@V+KFW-`mh_$$YFImCEXYAl2qe-jvg zAsYE=<4+Ldl>%cCW$H0;S_YZ!LQl2Gr`rv$`ctf}ts)-PMYQ3-eQbW;3;y6^{=gD~ z>hoEXxF*)w06QIsgCw literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000054.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000054.vtu new file mode 100644 index 0000000000000000000000000000000000000000..365570f314b0c986517354f4c2baababa2a96bee GIT binary patch literal 2991 zcmbVOc~q0v5=RkY1BTKn(Xu3s-7JrUMb-vzLsXE(g+(wBL%F0n-ao$k&D=Zl`_0^$a|Z29 zi;RFr1u+$oLRfG9d)|)C(XG zsT6f27M6&2%H8;g2(`}A(tOF&vf0wbWgkn5MaZ3GGB#!<$h{E&c8Q(`Hc}n)vg7xB zs@VZV{1TWI0v-yGBe7IR1eQd?6GQOolmMZj6ueqvjzF!Vpi#?S-pNbERwZ>Tf99}~ zpk)R)fJnsSsDx+&HRi8*So|FidrSL2nEXGiW%87N0Apce|MxgY)j`>*9WP~du@L?V zilv2>#UIh2QST*Eo#e%eSj;LK^;b26-nsHdi`jm!+R50{>hcI$qp`da!T-A_X)epO zf~c$E`@Y+`G3B6EW$}RfuKQj+?$w4qbzfZ$wzUwZ&>nqexlh+Ed&(dsd>iu)Ar1Ob zr2YZ_o>ISI>+gpHt#j}1JDhc(8Wt+JCb+tuxggF5xX-$zug~#FGHYP*{r6YfZ7xtFe?uF($yOiIYJ&N2` z-}-j6(*LFMmc#T^=QZ{r|4drhIIMHadQ+EA=Q6fXoE@P`n+i_Fq0IUns^VN_-c1l? z8h3Lhrt%K$qLis&e2lJ&1Ah6U{RW0?mO%2#6jsMoL*~37`d!C$`ky01RFrlrvn(=6 zP$($KFo$3MS=oMM^UGkF7oHy1ooG`MoFj%+@ypEPLaD@w;NPwqm1D+?bBa{x|PiEiP|+jh3J) z{y;j+{G?x!I-#3-ugrGfc<}>W5b9v`h+kd`FL>8C$aTj7oZUvB?GXnpezG(&IPkGY z$eVyIkcvW5;=%`@43lTw?0l$dMqVX}tV)r%+_*jcpxd`ohWO?F_6eV6oyX9qiAT5> zhc=B}biL8gIXM^l7;52qX@m+ZvT976IltTNH%~j#bTBh&L6)gb@pP|O2;gFvlT(N) zIDu}*SlSC>{mt@6?w%l5&FwfKtlHnk=X+(p{O#@=?JvH3Ay10Vo(^;OXpU{Z0iOQS z$S&60)frOdR9>r>lk>ry{aX#zNqObCo@?Y>tw(Ww(=)ww-yQpKC^dW6OxN%h^&vJ8 zA7Sd&nvd((Z6#7EF{FU1$Oug!=#; zrA9yN#Gip~_wgZTlk*Jb?`^jA)uwwxr0beYwFh#8d=EpKlF#_rLWM>r-0UC5Hm{jo zA(!#MsXVVJOS3KDX%gRxZ;s;I^SNexXTI3276k|SdD=ZxiW?J+?B*oK<8RZY+orXc z2{%wr<2JQ~AXjc_?k`#IOx*BRmclu3zVrp_0B)Rsr2~u{MhNZM_6`OPP=i|g*VLGhG=iLj=ev~}#)JOYb2 ze^acB(W{RKVf5%<{>XbltMNr)W~V34HP8fCk(w1v+|mwzyF>=^H8>uMiPfEIplG3t zyWTcDI%|7gB;x6EKCCxJaW_S^ZazSj6fyPHCWWURDf^N67t z4LcW@grfq`3mPKG(qJvB{;$4R!4a4B?b}zE7xN3OaPuCt44N_ zq=i~|K4u))N>5d-ZG575Sk`pD=5eHyK?@ho9(&SJh=lPRFm-3XmUYks-mmFJV70Ab zMMh0h(^^|Kse7Ygwdqo=k&zZU3nhecZ8(s6b|H!J&BDNSPI*d#GpLVJ6wDrG7t+r=N)OHs>Ge^ZaqNcnLWLE5 z@=Uz%GnHnfFpd@0^b39V15PztTo`vnDl}zXc2UYuA4IkM0rSB@n>AmG5h*1+d@qtW!T(Kls+fwI@yMBzT$ z)2201bl3WexS^hg0&cts_mRmfeUDi`PjQInTX(hujhg-lB|T6+>i|p}08*q#;sg`# z43l5Tl%MyMUt-J8qU7o2@)SUxA(AJ-=Ue{>IOv`7M4%)RF5BCobwVcX09VC^)^=3$!Q=2oTpLx#cvZK?X zv`R)yau4fQLstJFtEax9SG9(+Hl$$ny@r;bOJjA{U6E-8IJ|MAhQ=Us-NB`?<^2go MJ$<8A#&4(J0TH`f;{X5v literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000055.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000055.vtu new file mode 100644 index 0000000000000000000000000000000000000000..2734e26c118bb8b0cbff5691349ea71bf48c22ed GIT binary patch literal 2994 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 Y$f%|4z1=e}mv_X5ZL0l$V~i2wiq literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000056.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000056.vtu new file mode 100644 index 0000000000000000000000000000000000000000..f3b90ff5793c79784377abe1dcd183a6d5f03d7b GIT binary patch literal 2991 zcmbVOX;f3!7DlP&8EI0h1ry;&SYTGrp6{{6pcY)Qt1pYEZU#zX=IMZo!UqX-^+E{()wQ)z50`XHUl^`Y%!Q0Zg_8g-gRR(nZ{VeA;(T|3Yy z3e%Uxrg1n-_3;4ind1lP9yVky+4{X3jf0|4n2%BCoNBiVokpRdocw(~Xl!Rs7bcy- z<)||;-Hv|mw5Iv^sD0bFo6JXAxHf-qA;!F84stJ>P3A8qx!;FLo~P$T_EqP+5cq?b zYIaNpZ63@Fjq+r&eaT!bn#^L+7*v{C5~imoho<(Jpn)Y646qR8y**EC$x`R?F^5Hg z78p>N3{T<10jXX}?APv8lw>1IzTE zlH~^C)UC#UWJ_-Sz<0BM{D-7M_@bm?V9-T#qpS1d&9iSlZ+KZ-RM=Sj&~Q5wZL6=^ zZ(cUu)|i*^09w=Ucqi1afW-&~-Co`|v~APQRL&d<8n(h&g-ATGQPU1OASD)o@gd=H zo?*lkDMMSl;nHb-4LB@wO|XtX$?o(%Y`|_vpq}$d*ZciqRxa+2L*nhKwhAm=;O8aK00ndJ_o4Yo&Oq&08nOu*T1NO?DjlEakPA4g3mo#QXAH zz3&{$GuUpB#;m99776wir)_jrPv={@JS+0Hb6eRP@Aif-9CU)%lY-a*F8eGV1ywAY zFwip(GO@)oiNUItiKNCNf>v~JFVC(~xhpF2_fbM`Uw2ScXLHursn}4dsM!b~^!O`+c=DEI@pCa{*5Qecsl*1dCl})t z{QQ@r_w_G$dj|V;ky0LGa%sWod7BNVI1euYr?8zG;98g-HYo!c^Hv;_0Ykp~;tcno zlRZJ(z5ydB@1e2?r!MWdeZ8h8^p#Pl5!7Vq{nm>exP&&JRn4LG z>OZYQ9Y|m5Lv$hh2x8Tl<^RpLNz}}W2CY<;AsT9Z%JSf+h~)rstE%MIrwP`n^`sT6 zy$NZ$3D!yVaU9uuEBuczTX7Cko~_Tqb3Z2=@JSRO*E6R*yt?@cxQ zt$17O-Df&IGv`ZDik)LCgzf3TQ-OvmLWI1jmM<7@MOrKYPu~71s{PjsoY+}SNnLsP z(tO@rw=j=OYxnZ^^V#fh;xbupzdZIZduzh8@-1IqJ$zx)ZS-B2Rd$EJ44%Cnu0Tw> zr()eCoLLDX8~ZwYXBa-(duH}tc5`iUP8a#uyTNUU@M!tQtq7yZaUPjcMUfdwO{X+v z=0x4%(6vNeaBp+0q@iR(>Z3FFcvl3?mjZwGQ2kZ`6AcYCuG#}7s#2nE@CKf{%HlfC z5BRMN=)6&mhl#sxP$bOCJ=IcJvAjswavuT+R1*~l5!WGcG!G77jn_@VL|oxhh4DI( ziMw%m3~zuX>Ujs=Kq67xX(sBQ3*i1 z6}zCsB;#b+k#dJPF>5U_{Tp-!O0@JLOf8qlO1nV8v1+iE(XKCY515AYiiaj%SJtKC z+B*=$pkQE9m)Gf8g_P|f77gi4If~LIC)z6N46p@cBckOCKX`$BQ2w?wQu0Uu8SdJd zH&VV|UHR_WFD|Q#{++C>Gt*%v_jE*1z4}^p-Ja>=H>J5hs(Y+?6jzlRh!jYzhxqMO zF}O@16*rF(DPnN7K&qU|Nt%TmZx#r>%4)ITCdE*GYd+v7E>#=aiXptvi`h8?ss1Ux zduaqZRxY&s(i*?G!Ami!qMwGTH(ip!T?*5_q%(cEC}Gs)PdUkyVK5b3-&Y!EN_}qg z{ySk~v*Wpqc4xIhnnuX8vRb1PxFyk_Phh)BSVj`RLS4%W$F_>>wg&yy8uzxg2g7f1 zPGeSZzbm#uzgF{a-Q^W|@pJkGKO|bdyf1q4XGzV8lFESwS*VvP9uEE#2i|rDv&7&n z0Q@-@yu$=@M!<9=crOjiSQBLuj^t?*I>@T z>zw|TjG+U&1Gg3U3v7#HD6LH;DIKARj&elb8mEb4&N8a==s~d@1B`tRDC~15ESY24 zOog$!Cy=teUdjt`%5%=jOJZdNpuCu?jAANdN0i}6<@agI^ZC=Y%&7+CRE=+k$=8P^oOqKRg0*pxI{9$jI*4YvQ)3ug>q>uty+sVFNH$WFV)a! W5q{!0|7`j2g`$3a1B=gZ-2VXmcv!^% literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000057.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000057.vtu new file mode 100644 index 0000000000000000000000000000000000000000..7fe3074bba09e066158a543ce7f37a605cbade12 GIT binary patch literal 2992 zcmbVOdoKwAc@jeL5GtLFM?n3F z5mZVfjv7h92OXpkf}nq5z|yIBG>H;~ry!u-1S&NYe}EW7z!0I3^LUIJMX%C)L8R{4 z4Ta!HVPpzEB7&s;J&Jnaj5h(hA4A1>yoaGk9SFqb&smp1HS9~knqRP)3Pq_Y>uIok$ZmpT>n%fGh&oqFCx?U9Qq*e^^Y+d zLEQ7#8-_@7Zqcn+J~s2fVa$X?Ii=Xy6UcH9V1aJ~QC@Sm?{a-!JBB zi7icqagB+0K@l_4GH!t^~)9lu4>^tKK8@I7{%7C;%B*>Oin=x^E0a+EF-%)XD8@w|6FA?>`ZRZW~6<- zJG?%=QM1j`)G5a1peqUO61HcuCX%O{n(W`5ypE$-pX$+D_-;ma)Pb|DY9d?ZY~sLi z8<}B_l8FdTalLJ?&HQl$M^k11hMz-<>f4jyN;)tU;M0mKYc(-OSD!ra<#9%#9ou*Z z=V_NP@E>P0pwIf7XIE~s;WM;$gZAB zx=y%S^-WWgp=-j0D-Y6}zIZkBgoMUf<>b^kUd#0C5!k>931j)nzy$4_99=H`iU;4q z9=_o{Pq}(j45fVQ6ed(m3q76%ZivmdFF$*e@yj-v{wo@`Lb=|AFMRZ zGH=26JIs>gk_c|Qf5j%}k`@gaCl)d-LTDiJ@1j|tCyd|o=SJ@H*EcsDmeiD#6=Qwf;jeWS=WO5LhA$jiYPTDB!~krH zz#=tNv@aLg*m!qvUJ5J4^qxD?1H7HTE$#HS#cgSyiE1yIo^y?ZK|t5cTidhl%uelM zKls_`wJL=TnR1xXrVkdwUdlCQv=#A}*q2liKvS8t>X*}#b{e?%g8?jxP(cfW}&l|xk@mR-(y*eo6?bJK8v37q+ zmM~>3e0`MYPJ=6$KXeBtAaVBc2EaAa7tG!=5G+ zdJD@Y(7GXmHb!O&qeZjBK&(@SfKTM@qG^eh{j_9O4Mu+e5({IcN0$%za*;H1SYT>5 zL&WpS+QfD|D`}khIOP-C7`0Z2ZZzT4=>gK8x)}B0EEBO(i)O$A2_Y!u;io=Ao>yML zR#IbeQeIUpak!MXMNT$`c^B;^>%i_z8qObO5#}ezdZceInhtOZFoL?okWs*wbhGB7 zrL@BqVcrO$WmOL*RY}b&eH!2__@pc*(~)11U<5NW>>8E6EkI?Ei-n~v2Gy6N>xMd$ zT#rfK6{dL6#_~{nkv(g4E-Efjej_jeJoPDno6{lP3QRDEAyCg?!?1cPT?;*2+R~d; zciHGZPbV&;DyeSWNofZRG0@<^ik^cBol&wGn!Z366?5^@loUxx(9V-~;F49J#IvZ1 zALV;=Q2Evcl4A{CS$whqO!Zu6K?mg=dUF0FfrLE-#Gc{-&BQ@7R$!D$pH?H5^>A7W zk%K~WR7@Of&V(ik=2}ShqF#uN<`1)q=4AbiEtZHXj1|iHmvH?m>A3VQJ6TX43z{5q zcrw-Csh<4s;?}F`p&ysjiAuc|80V8>Ua61qTK1~Wd^^DSM(we#X(YEW+9GzqLrfnG z;scto1N^RO6pjz*#ttavEAkgXXS!mUA$83NV7pxWtnV2toX=JVhH|khGlV2s0P!AX z53gMT;rbQJukG2ZA85C&xP%z)GL@Nnbz?*UZW1U2j7Qj6wn6Rt z->-oE`**kRHx%*Y14SpF?Ay1=D0*jJB>g1CUqH4Jgjbt5Hy-Y9EbnhK>uU<^@2{ME zi##&3Pe1&|!IJG;R4fc9fWbOvySQgN@TNoQ6+`0{ zV?7n4>xtq+j?ufSB4ZEMWZ?QbYi|qV&4mr-Bb$!MPWecJe5SqmQWx0FW|;g-hRm5X zV@Q%)t36>MaSKsg&Qko_N0G@_B*7Hv3`HtQacxSGXrZ`Lq)2(DY9`IMSaZTwsStk!j?ABU!8T!DDPWfNIyIa1clY;k!mmZ6<#LGrEII3) zah80$&#WFlD&2@ynMY6QWc_Bs>h5KA*3=3XH6uO>y1h29zLjxltnGTMG3_=EZ^qWp X=w+@uy!>wY@QI>+e#2JZ-^l*}qW5os literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000058.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000058.vtu new file mode 100644 index 0000000000000000000000000000000000000000..c47edfe0d8501da65134b2e17ab28750a836536b GIT binary patch literal 2997 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000059.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000059.vtu new file mode 100644 index 0000000000000000000000000000000000000000..548971f3b2ec7cebddafd2240c1b93ca120dfeaa GIT binary patch literal 3000 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 I4&J!`0z$u51poj5 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000063.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000063.vtu new file mode 100644 index 0000000000000000000000000000000000000000..51f0d9a5bcf76b61ae8a748653a6f4918da82711 GIT binary patch literal 2987 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 M>YFz(d-cZt30dh~cmMzZ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer1-00000064.vtu b/test/writevtk/cf1a_mb_with_observers-observer1-00000064.vtu new file mode 100644 index 0000000000000000000000000000000000000000..3162b720125c96038cc64659aa2a9c26f3d434cf GIT binary patch literal 2980 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 M@|7D{-nnuA0e0+K=l}o! literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000001.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000001.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000002.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000002.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000003.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000003.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000004.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000004.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000005.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000005.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000006.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000006.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000007.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000007.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000008.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000008.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000009.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000009.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000010.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000010.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000011.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000011.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000012.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000012.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000013.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000013.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000014.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000014.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000015.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000015.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000016.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000016.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000017.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000017.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000018.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000018.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000019.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000019.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000020.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000020.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000021.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000021.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000022.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000022.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000023.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000023.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000024.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000024.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000025.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000025.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000026.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000026.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000027.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000027.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000028.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000028.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000029.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000029.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000030.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000030.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000031.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000031.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000032.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000032.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000033.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000033.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000034.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000034.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000035.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000035.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000036.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000036.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000037.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000037.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000038.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000038.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000039.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000039.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000040.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000040.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000041.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000041.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000042.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000042.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000043.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000043.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000044.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000044.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000045.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000045.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000046.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000046.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000047.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000047.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000048.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000048.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000049.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000049.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000050.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000050.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000051.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000051.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000052.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000052.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000053.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000053.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000054.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000054.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000055.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000055.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000056.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000056.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000057.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000057.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000058.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000058.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000059.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000059.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000060.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000060.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000061.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000061.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000062.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000062.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000063.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000063.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 zcmbVOdsI@{9#)I=Vqp&p%Lhbt?FngVS^_pWJ+#zmdQ52<;n64s;$bkPX4gk*rPVEZ zm{wz@Q>k4mA`d=r%F5KzTc+W=kueeQrXU`WdwezB)~vZ}&HiVf{o8y0zVG+#Z?Chx z$o$9%Y!txe(3uP(&IP|5hXoikW+xJVaq&lWD?SA`&Peo^audU6|evzZX1Kc zW%FoU9vcW<&!&gszRIvqzy(5>>`;JB#BHK;xe>s(j8Hn2fy3?xsBko7EX_s+*L@`p zOJhc|*Z_yagqKHg5ANDT-{(W+QYoLqI1&QGD`tu_90qlUVKqj5R z<-nD=xZ*wsDL_O79CLMDK9Xs4+sMMv93z2Y$hB-XRWMfMx(Ft9gq}Y&60UhP@fSH^ zc1#8^0=5E&4P&w+saztC%3=YGPym*M85YI?;K*_uVI0MaFq-A_c!b#a2(IO84r2n1 zGN3UT41mU^N71>0Kjz``XFOK9yZ+AP|6z@i=llg27q=CEj%`In@=)MeM1a-F(<>eOvfKgbLt z84Uc7Ub6}Z%eF?_8uq?wCZBq*OLfHj9Oh4$ge~f?@{v$Dnmo^7({DA)Ht0O1LNOh6 z&hz#I(t1L6jWhCq_8{s?zPfpl=NlVJx$gFKM%A_X9UJ=ijEU^-#1hhydWS9j^V0h} z-n~Gib(Yr5NWyQ=^0120q)20x57lU)yX^^OPELZVLQvUz_Yy_!SVWD#O#Q{quzSiS z%C%dEpduMo?j?+FIqO^17KGiJ;rRw-!!{Ht@CQ)ESC*-W$^NWJP!aLz04jHIcVLzv zte^9b5g^1UkQ4@bpcZ*tEj34=7P7qKCLkRGTaQ{;+Iq0azr;b#C@|y&0x9vHi(dG_ zA|d!{y0tAk?i+mIGlY&JX&qXG216WHl+06ZyirKZM^Ia_J{;h2ASLnq>1b?UH3@NY#XHH1rb8Am2~#$#~;%v+9WCZ03oF z-&K_XoxSoNKf;T_l}YNbm^8c~BvSRt;nGX6#K?Bt(^C(xHM075@O#exy(%ut8C7|Q zbZDxf)mdn=y9aAWl4;Jyk zN7JoU>zgp~!I~JCo{}W3eUoD8>LCPY;q{<#=U=rQb^3VU{@M8n?;3)p1lq0Z&B+d3 zd}ifyyT8p1T}s*bG-u^p%0-iD4O%N~)4faM6lNM@x`Xd>c#ZZ$N21&eP~qKzD>|*L zsi4zsmMX5O_YzXK-LMWUkgzcFRIyF0r97>^EU)EQeOd90sCFKknP91DMB1=zf_fh# z>%@*uvdT<+lP2(qUsid6J%RY+;vpw+Iq_7f6F6@Gq7wFCiefDHV1&-fif#oX-yBqS zt+BGy)Y5V^3zahKx?k-aWPYNKnI-mwO`;hZk3Fk1?hFw5w=_m#U;CBLCTmFJU#Kgm zf>hN6&E)2tQO30(Ct+TK))C(Jot87uTifB)Vtc;(BDh>~xAqEY0hO9GCgk5r+$*l9fb=NiWq#N4 za?(j=OW%(Z!{O>4wzoVj3L3bet{SSS6i%;hyHQssb7mpcvx`fTAb!oeo&g87r!Gl@ zX!eUT(!st9;jzi&33ZB@8TtIKPjiZ8en|-_*2cnsOeK*l$(I?(ubz^g5uu%`h6+h| z)`!gKQ$p>xs)kjM!cApFp}np}ZkFCLegj%3joyIqK7DM0pRw!-eLo7G47?1v>s&f7 z9PA_|N)k^_;asMvpiIcFvpCHq^tI3D7Ubiz^0m*bwhCQy){X*i?`i16i$pxZ4)(Ts z*0TCTkL*{=HaE%cHdQ;ypYLvJx~J+P`S*F-96Gc9$NLq6>$mui!v%Q?;c3z8H@Cs3 z-O}el((Ei?RCu;P^2>O(KeIiqT zO0AE>=##Vb35CWNOhYxs@LV$V(aWSEn6x352uu8j>-e@>yaJi0Jb>a|=zd&mFG;>E zx$)lPg=14glf3-Usly>U9oD9wmG&RIG~N7w{>e2_DQNyZkszTCd}|Ljya(%wr1d6q tjzwt3_<6}kkIQVlpFB3^XV3u0Vl%V%l8Ku~-UDC$`r&6SVeDN?`Y*TO2#5dx literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers-observer2-00000064.vtu b/test/writevtk/cf1a_mb_with_observers-observer2-00000064.vtu new file mode 100644 index 0000000000000000000000000000000000000000..962e65b61af43f76849915dc9365cf5c19e1c4da GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_mb_with_observers.pvd b/test/writevtk/cf1a_mb_with_observers.pvd new file mode 100755 index 00000000..c2f7f9b8 --- /dev/null +++ b/test/writevtk/cf1a_mb_with_observers.pvd @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000001.vtm b/test/writevtk/cf1a_with_observers-00000001.vtm new file mode 100755 index 00000000..24da1d1d --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000001.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000002.vtm b/test/writevtk/cf1a_with_observers-00000002.vtm new file mode 100755 index 00000000..9c32c143 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000002.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000003.vtm b/test/writevtk/cf1a_with_observers-00000003.vtm new file mode 100755 index 00000000..4d4fc897 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000003.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000004.vtm b/test/writevtk/cf1a_with_observers-00000004.vtm new file mode 100755 index 00000000..e2106f23 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000004.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000005.vtm b/test/writevtk/cf1a_with_observers-00000005.vtm new file mode 100755 index 00000000..31f4ae66 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000005.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000006.vtm b/test/writevtk/cf1a_with_observers-00000006.vtm new file mode 100755 index 00000000..a293dbd9 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000006.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000007.vtm b/test/writevtk/cf1a_with_observers-00000007.vtm new file mode 100755 index 00000000..ead1eb61 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000007.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000008.vtm b/test/writevtk/cf1a_with_observers-00000008.vtm new file mode 100755 index 00000000..c6ee0328 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000008.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000009.vtm b/test/writevtk/cf1a_with_observers-00000009.vtm new file mode 100755 index 00000000..32aa89ef --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000009.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000010.vtm b/test/writevtk/cf1a_with_observers-00000010.vtm new file mode 100755 index 00000000..7bcb3b84 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000010.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000011.vtm b/test/writevtk/cf1a_with_observers-00000011.vtm new file mode 100755 index 00000000..5b12dc58 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000011.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000012.vtm b/test/writevtk/cf1a_with_observers-00000012.vtm new file mode 100755 index 00000000..2e8318ce --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000012.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000013.vtm b/test/writevtk/cf1a_with_observers-00000013.vtm new file mode 100755 index 00000000..13cec646 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000013.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000014.vtm b/test/writevtk/cf1a_with_observers-00000014.vtm new file mode 100755 index 00000000..1b852017 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000014.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000015.vtm b/test/writevtk/cf1a_with_observers-00000015.vtm new file mode 100755 index 00000000..fdd577fb --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000015.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000016.vtm b/test/writevtk/cf1a_with_observers-00000016.vtm new file mode 100755 index 00000000..2fa57c76 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000016.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000017.vtm b/test/writevtk/cf1a_with_observers-00000017.vtm new file mode 100755 index 00000000..5019301f --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000017.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000018.vtm b/test/writevtk/cf1a_with_observers-00000018.vtm new file mode 100755 index 00000000..090c845d --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000018.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000019.vtm b/test/writevtk/cf1a_with_observers-00000019.vtm new file mode 100755 index 00000000..c2aba527 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000019.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000020.vtm b/test/writevtk/cf1a_with_observers-00000020.vtm new file mode 100755 index 00000000..04a5b637 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000020.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000021.vtm b/test/writevtk/cf1a_with_observers-00000021.vtm new file mode 100755 index 00000000..0edb2c2b --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000021.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000022.vtm b/test/writevtk/cf1a_with_observers-00000022.vtm new file mode 100755 index 00000000..7c16e5f7 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000022.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000023.vtm b/test/writevtk/cf1a_with_observers-00000023.vtm new file mode 100755 index 00000000..4ae2d260 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000023.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000024.vtm b/test/writevtk/cf1a_with_observers-00000024.vtm new file mode 100755 index 00000000..2847599b --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000024.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000025.vtm b/test/writevtk/cf1a_with_observers-00000025.vtm new file mode 100755 index 00000000..6fc8f549 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000025.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000026.vtm b/test/writevtk/cf1a_with_observers-00000026.vtm new file mode 100755 index 00000000..9aa70865 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000026.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000027.vtm b/test/writevtk/cf1a_with_observers-00000027.vtm new file mode 100755 index 00000000..89621987 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000027.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000028.vtm b/test/writevtk/cf1a_with_observers-00000028.vtm new file mode 100755 index 00000000..f19ebe09 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000028.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000029.vtm b/test/writevtk/cf1a_with_observers-00000029.vtm new file mode 100755 index 00000000..56c8baca --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000029.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000030.vtm b/test/writevtk/cf1a_with_observers-00000030.vtm new file mode 100755 index 00000000..5b205c8c --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000030.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000031.vtm b/test/writevtk/cf1a_with_observers-00000031.vtm new file mode 100755 index 00000000..34f807e0 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000031.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000032.vtm b/test/writevtk/cf1a_with_observers-00000032.vtm new file mode 100755 index 00000000..560b2aab --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000032.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000033.vtm b/test/writevtk/cf1a_with_observers-00000033.vtm new file mode 100755 index 00000000..fbba9867 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000033.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000034.vtm b/test/writevtk/cf1a_with_observers-00000034.vtm new file mode 100755 index 00000000..b327fdc1 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000034.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000035.vtm b/test/writevtk/cf1a_with_observers-00000035.vtm new file mode 100755 index 00000000..612f63e8 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000035.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000036.vtm b/test/writevtk/cf1a_with_observers-00000036.vtm new file mode 100755 index 00000000..b5247898 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000036.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000037.vtm b/test/writevtk/cf1a_with_observers-00000037.vtm new file mode 100755 index 00000000..7681f721 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000037.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000038.vtm b/test/writevtk/cf1a_with_observers-00000038.vtm new file mode 100755 index 00000000..2a330258 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000038.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000039.vtm b/test/writevtk/cf1a_with_observers-00000039.vtm new file mode 100755 index 00000000..cdab9791 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000039.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000040.vtm b/test/writevtk/cf1a_with_observers-00000040.vtm new file mode 100755 index 00000000..b6e068ed --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000040.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000041.vtm b/test/writevtk/cf1a_with_observers-00000041.vtm new file mode 100755 index 00000000..9b07df78 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000041.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000042.vtm b/test/writevtk/cf1a_with_observers-00000042.vtm new file mode 100755 index 00000000..e8f6a0d1 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000042.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000043.vtm b/test/writevtk/cf1a_with_observers-00000043.vtm new file mode 100755 index 00000000..cb18b94f --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000043.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000044.vtm b/test/writevtk/cf1a_with_observers-00000044.vtm new file mode 100755 index 00000000..a90512d2 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000044.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000045.vtm b/test/writevtk/cf1a_with_observers-00000045.vtm new file mode 100755 index 00000000..04ca8ac9 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000045.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000046.vtm b/test/writevtk/cf1a_with_observers-00000046.vtm new file mode 100755 index 00000000..74f3063c --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000046.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000047.vtm b/test/writevtk/cf1a_with_observers-00000047.vtm new file mode 100755 index 00000000..3015afb3 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000047.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000048.vtm b/test/writevtk/cf1a_with_observers-00000048.vtm new file mode 100755 index 00000000..d6b67c55 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000048.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000049.vtm b/test/writevtk/cf1a_with_observers-00000049.vtm new file mode 100755 index 00000000..4b8da497 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000049.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000050.vtm b/test/writevtk/cf1a_with_observers-00000050.vtm new file mode 100755 index 00000000..bb359961 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000050.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000051.vtm b/test/writevtk/cf1a_with_observers-00000051.vtm new file mode 100755 index 00000000..816c80c2 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000051.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000052.vtm b/test/writevtk/cf1a_with_observers-00000052.vtm new file mode 100755 index 00000000..d4844582 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000052.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000053.vtm b/test/writevtk/cf1a_with_observers-00000053.vtm new file mode 100755 index 00000000..2ba0a108 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000053.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000054.vtm b/test/writevtk/cf1a_with_observers-00000054.vtm new file mode 100755 index 00000000..f759feb6 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000054.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000055.vtm b/test/writevtk/cf1a_with_observers-00000055.vtm new file mode 100755 index 00000000..d2e22dc2 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000055.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000056.vtm b/test/writevtk/cf1a_with_observers-00000056.vtm new file mode 100755 index 00000000..aefcd2d0 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000056.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000057.vtm b/test/writevtk/cf1a_with_observers-00000057.vtm new file mode 100755 index 00000000..4d63e00d --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000057.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000058.vtm b/test/writevtk/cf1a_with_observers-00000058.vtm new file mode 100755 index 00000000..e61050f2 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000058.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000059.vtm b/test/writevtk/cf1a_with_observers-00000059.vtm new file mode 100755 index 00000000..65915a39 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000059.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000060.vtm b/test/writevtk/cf1a_with_observers-00000060.vtm new file mode 100755 index 00000000..a3faf5c9 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000060.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000061.vtm b/test/writevtk/cf1a_with_observers-00000061.vtm new file mode 100755 index 00000000..32428db5 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000061.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000062.vtm b/test/writevtk/cf1a_with_observers-00000062.vtm new file mode 100755 index 00000000..c46895b6 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000062.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000063.vtm b/test/writevtk/cf1a_with_observers-00000063.vtm new file mode 100755 index 00000000..40d3e745 --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000063.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-00000064.vtm b/test/writevtk/cf1a_with_observers-00000064.vtm new file mode 100755 index 00000000..0404b03c --- /dev/null +++ b/test/writevtk/cf1a_with_observers-00000064.vtm @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/writevtk/cf1a_with_observers-block1-00000001.vtp b/test/writevtk/cf1a_with_observers-block1-00000001.vtp new file mode 100644 index 0000000000000000000000000000000000000000..f5287cbd5cd4cac1f190c50732167fdca9a7d505 GIT binary patch literal 7325 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 XY9Dlc{g(RYFQ$Rt8il_9*r@OyRSFqD literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000002.vtp b/test/writevtk/cf1a_with_observers-block1-00000002.vtp new file mode 100644 index 0000000000000000000000000000000000000000..d4f3d4c60af7ccbf4ed920844ae5392b3f1cc8f7 GIT binary patch literal 7943 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 KLBGHDmi|9rK6+LF literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000004.vtp b/test/writevtk/cf1a_with_observers-block1-00000004.vtp new file mode 100644 index 0000000000000000000000000000000000000000..36363474a004a3470be36d4661d6c7a6bbd715a9 GIT binary patch literal 7956 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000005.vtp b/test/writevtk/cf1a_with_observers-block1-00000005.vtp new file mode 100644 index 0000000000000000000000000000000000000000..eb8518432e95286b712fb169d8bd1036a6c719af GIT binary patch literal 7972 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000006.vtp b/test/writevtk/cf1a_with_observers-block1-00000006.vtp new file mode 100644 index 0000000000000000000000000000000000000000..6826097a642102cf6d37366aa56a3c93002025c6 GIT binary patch literal 7995 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 m5m$TUMsubMNSq5S!=3GGR^?9WHx>i+^)K7fz_ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000007.vtp b/test/writevtk/cf1a_with_observers-block1-00000007.vtp new file mode 100644 index 0000000000000000000000000000000000000000..fe5b11d5952f48e41237e363ba2cfaa696ff018c GIT binary patch literal 8047 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000008.vtp b/test/writevtk/cf1a_with_observers-block1-00000008.vtp new file mode 100644 index 0000000000000000000000000000000000000000..77d989b4fa20582f17e48adc647938285478286d GIT binary patch literal 8097 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 K%l>%auJM1fx6x$) literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000009.vtp b/test/writevtk/cf1a_with_observers-block1-00000009.vtp new file mode 100644 index 0000000000000000000000000000000000000000..493d690201ecb800fcf0841f2204b33a922f3917 GIT binary patch literal 6796 zcmbVR3pkVg`&~vaz2Y*L+U>Fhs0U90x{%*4i z41=wkbiTxY4f^8tHNzLfI*@r}q%ZngNykFqzF$b4^bP$|;de7e z;gO-fNC?n3JRBD02lE3e!TtRaFup|xsQn!Uto@bT@AEIbzR&oT{GG$MW%zu{Oqn@7U71?2v)c|FnoUu*l$lv4DEI zM*qAA{?-(BaNl*=`!`5N#)kjP`h7z>3P=76Fnz;Ae<};C{nuT_7oBx|T;Fo*`twz% zzs$_PY1R6U{FBB<`bP0((r1If*UxX8|2jeizs{p`Aw3?}-5aDy?BYHvJvCqw%;dgW z+aAd+he6gRg-Jo zh(#*;bLBDxg&a- z=5*GK0;I)=QRLJ1sIJ-jTE)DP%IT%I#~JeiL1xl~+?-4{PUK!hQb5|xsa0=2UQ2L} zUEghqdC{OnA2qSh*^6lsK`obna|5f7Zk-lR!5rQN+K-C8A5x5kU7RI!RFR(u1}$na z^jyZ)EUX;4%{Md~mczsywR-YRVKD?Pcq-){Cn3Gt_Qvg`^9DU(vhr#%x{#xYLe8m) z>HN*lE2OUuSY9D{AZD-+42yYz7th!;(tLvw21?~_tQ~ba_CdVI`)S|UN!`TBZ9Osf zUcQ8R`F=XW;_Obwm&atFj!m@uLBbm_}yK=siw10dBgP*x)zBOc88gTB9$Nx7#JoCC?Kjj22pUr3 zjxT&P%Q-Ws{k;XBZT#AD-^b{$Q-SDQuNMaA1o>_{gL%LgUN=1`}hYh%@@x_ z%-4CHxV`WDcm9vVeFd{WH5`;*PBxypGkVf^GNZf8csh4ZtM0??*N^L_?oNl*O=i(& z>ZbF#3dSFQ+j|Sb?$IMReWYkqG_m_Yv)GSsRSU4}UZWx2$8PNw9-C@rs`_JIdcUui zN7Y;t$9CF^qj7IuR^L?X;>HZ`BM-qit&>mQZ6 z<=ctq+~C76cYATGdt)@y$4iBsgP60GGFKORr3YHJ5o@Ab_I18fTey#`jcLRtUtVcl zq4{z^WAs{=YeEBZwqZ>X@Rn@s&BDmhhgz=O4(CQd*>M1?T$&+x(T6^O@N|FI6jF%C zjvB$CQVx3DA&p&R?HqUrnf+m3wRuS)Zyw#UILM~fRz%&9=&bFjDk$pLL3pP;g1EZ2 z&hGK)VGhaHD|EiSe~w&!V6sE)z8@K}@;rff@e^mFhcj^cnk{VtHOM{i+3VM4l|wF3 z9FG{Tt!DBj`|(QJ>vu6OHQX^pP-*`ydaz4NEf=`=!0v^Wth~1|Z_CX(#QP0Wbk+m~ z&<*6t@2hn0n^t}w9si`2C#?H?rC<2A>6o{dY&hhZ`6$ag%TjsQrdNU8N~ibj3^Wgn z$4ZAeNj>qDzKTz^VVi8K5m9lT`bEVhIrl*4h9Z4AYpJ`}&kiD1ONC-eqatRer))j* zMh>J;X~N)Ai~6=Zk%dw72AzzVpmbDwz8rUnJakX|I7)jq*-CQK0jBO(v3q`j7EAO9 zJHn~F3Zf=A_*kp?#Uf3E?9)lMf$_}3nUZ&jzjzB@VT$5Y##ADBha_l<<4-x8TlS>N zw0lP@#e^beg4HiG)rGyKN}A(uZ=<|5(rx!%n+{JHdULJE zoa3DCJGYPsy}gkJEzo{P_M^(mQ?cxG4q6W$n zqJNX}27zJ2Y@9jLMmsn}Lj*@M)k=cqDbD(?x)ty&qA%W`|5j7ej; z%_(zr=~W7e%)lC`eH=3QybG(-nU88^TH94Tar#aSx&w)f~X{!<;B>1EXGQsv)77GH2>7dP&2~ZYc=wk^IhKkBm@eN#@MfnSq+)h}+KP^IfVj zv#+(q5;DCPNW}T}A#1nE3lH92A->q(YGdXN3A&&!zc+i}4Y$BM_L{REy2nOBu0UJU zwNCB6%SGhSBMO15i8L=qLLWz;(mt_$nZssD_+x=x-_*?bcD>d@wk zCn*VMC&?Z~%c{;rTXU9Td6>qQhk1=b_*h7g2+N)*<+4m;_;Xv`gnaR9%cq_^pfXOl zO-?+LD3ckF-m1YscC)8CbCV2I0naX2E?sE4S&s+_j!G@RdJvSID z@Xu05jK!&gv#k+=kL%4YkCMVWA;Ki>;j^oXIBa+)b~Da(eeh|OT2>|b2) z%%3kbYq)w81aI-vwj~$LniifFp;60aO}C$%p%7CU^^KJfRz&T7OO9g6P=Jg7;?!0@ zxR2xQAt{z~M@+x|~VyiLx`?f{JyN@T=fuFU3%(6-7$i=g|uV zJ+C%sUS*=C?h??pM-U@Du`wsB;RGq5K@+R~QantN@d1so?|JnRzd(y?kp;Q~){ ztyGmTYQ`Fe+sqzj@H!n)=gxMxvaT>4wrE$p0_m4!@cJ&d+`GTGIHRe$f8oG{owYi* znrB}i;+l|2Fza75L^Ya~*{AZl-rZ?C!?st)@bWhmMfo08=Pr3^WE-^L)L<3weopUo zKYU+Rnfn$1tKTqD?8J$nSFOY`73fuU%9t#c8$}sY&vFyDv*ftFlhs?Y$M_CY$BvZNV|5S3R*n6|mf9 zEIAD|(0VZ%ga5mQ=2ZhV5uyc$keq~Rw`e%L{Ho9nF-gTAwU*WItz|`Vuj+OZ@|}OK)E9FPraL zk?I;@A&?H`^VYxBpjC5^SM=Cav`98b8>SbVm(TwSt(kW$%Cif?FQ&+?y|F!c@sZ2Z z&I&T|z07u(2IE~A(roqgF>xX#9yahU zacykgv3%YtS>d;?x(^L!C$kvCD;~8ul@vMCOI;-mn4e{PZ4?#l0ED9z{LE?leQXZ8 zm|qXVXB)Q~VbZ|~nXCF2uxcv3h;j%t{Iza_FR&(WQh; zQ|D5MwNJw_x5@D*;q+NQGr$=QY>&QNug|iu27|Z|3{xw*TS-}L#^-|XRPdMJ%8B3; zF#F5-r73H!4;!H&W=Hz#Jd8Q528$wJq)FVknXezmhdA}ZoXkJXLm3y}Ql##cAt zEWp7fNO-|YGo``%!D{)W?S3P_eBPTz^SF7%DuqbuVK0J3D zb#QOEJU?~zaK9LJFlr=P@p1iP8(Xw4Yb_2ck?Y4q{8$k)S>x_^m zMPzq)PRP_h^gmlV+3Go!Yl3BKTz?Q*d+ou`7LykHevtwo0v;MLD+hzz)fw{hl85U< z{MEqscDKe)_52$BjKf{cUr}r-XjW|80riMDsaFQwti_MN`t@Dh0#=%`{_KC>sU>(*`d zk;Wj5_byx#0a><;N1q5kurk=GXwkUqnNQX-eZMR)n3DP=>RGY-V_)km{P^op`pt8y zQ(^KHA8)xEbi%_qh0ik|xX5dt=dd1TTN65*Xuk*yMZONJd&x@Sm@4ZW%VI7i28b+R zelpaJed^o^sq?q-@m_ktqZQ-l zu48g846Tu^-KXZ&QmSN_r1D(ZfP!hkGlU)x;qB@C3j(-XXPTEi1Q~?)2vnjE9H|h; zy)b!9TJ!@f@HgVmDw;gax`rosh>qoO{z0)-dR~2K%Vuice~hB)M5JFky(;){t;kSR z4drM%&RM#nVH=?g!Kcq@_Ma-zyU4nmlt-9<^O2Q91WAyS>8>xM-@FiY|5T18^q#^B zbYgexFznwJz1Q|Nt6SBII^H_N;e}UuCGB^&@$%X}SED31O5x?m%8*}1yC23?4#A92 z$_*2_YafYvKV{)nk8f*+9*~MqZLU1I2;3e8Q%{3%t49NwXVKyTq~w0$r@>da1{(3x zrF4L6b?{jI6@b|}YRBAZl>D>D2KnlVUK(T~v;XDe%!wtY@lF2h0gdg3Drehe_Y+_0 zC06o7@&QJb!6^YZ&QWE_^O<~?6y|5$hQ8=WYN&FsD`7Nt}cH%}JG`Xg-ybP!e;GEcw^`LU4;e3C^c8*p5@=)1jpR9Dbs9AY?#YFltA23O{^h zqt`@T_m4J_(O;B0oxh3LfpVMb?>x3OA8)nI2hS%djcRNvSKBK5^x>(a7yFg($2$c% zy2u^9utT@}#9CRU+vc}r&5-nP3z{L((k)H8w=gw9X_v|+vjQLTn3%SLfTq=$>=j1=9iRgda$pFKGKyJwOY6+fx0RT_aISFS?2^KZTSZo%CYoF}hDUxGy&^w4~Q3F3O&|xHc8vHhHJ$Af!LPy*7c5 zJ%>jaU|Hl$Jp90(lJY567z4Z6c-{WdMu4dpJ25|Vx6dyWnY^Tjo7$~b;jdz#jRv9p{fnJqy ze`Y0=6bAtnQ~^XeD{G({DEk4D=@zH9{wJWndM@sZr#ZdqCvq1kloYuQuNp#%+=3sf z0lZeSS%ZRPm^5_X7uRcFT>GnXEg0wl98BAWgu_c*nD7T>9m?>2!cWg^?E2!khhAm( zU|xh?mEgGikmV+#1^{KLXW$^OqcRj~0JbK}5=ieQ=`T+u|NJ15|7uD5+q)&x{{y9ds4|VmTU>dj46=} zCCe}v8HTd{A1&|ue&6-={;&6)%k`Y+ocliKcg{WMch7TsAX-7*UV;HoKcqVXt^tyl zkpl@r;m!ybcQ{M~cHK?PC4K2QyiDZ(rGj1$TU^k1G=f>BUM zgr5u4PXlD=jzW1sb>S}VPH>Q*8`KG~I{t9C)Q6)^DuM)^5#Bz2P$UuoOb$2hZ&^FC@2W|g|?&YsP0f_sGzaG_Z6t0iK{8X9gae3fKDoa{;(Ok!=XDSx$piz zoW4){5#hUG2T0q`&nft4NoTzfPT!L0ed`mY4ra+x-9E)_JI(=f7A$u&1EB)CQ5ZV8v8L;c@Y>+#g+u4AAY}DU1?Vp>~4kiDx z$@@740{f)n?p;4Vef$4Y^6dSg2W8s7@jk)f!`tF(Qk_6MlNlU#&g35bAi6bt$WVcG z9GwSw7o*Q`5!UoNa4*6hPOS=R4`1JblA?j+jO_)wrRY=5!*OX_GruTx6ytZMJ z8(|wApA&Dy;2)%{lGQ(={wlx?1BZ>JFh#M|%8Ew{xTbnY+DtG2^LiQ8UiR~|_v`jW4!_kzj~p0#QdZk4xk5$zD*<9lbX8u+Ab6eW}0^k z$&xUgxwaq05;dJ!FRDhTgfebAn$><>tvGC7R(lze%s$QQ0u0e-MR2JVKZ?NRa%Y*d z>XKS?Nd1mE$U}KZvd1(pGeOl~3&r9NgkndrcmU#r+AT{`e-=UYp;|E}3fFod%RDU~ zNe_6@2&xnLNb)tDb`-8OTaT0ziz`K(CVh&>m0IT`>i|KQi#(KzBp;jRJwi~WDWG;z zR1?T*7eN_sa;eb?sTDg!H8Yi?I79S`#PVy~$YthqO)XM(WX8n9IOJHMyt2si8fx=?+ zE3Z#KZ+^)?^OEjpWz^ouOaJciUw_Mg-X70hxZH4pcP&?Iw;ydM!n_u3_ zHg7HtYH5o7J}>Ye>vi$TQqzjTtnP|b&hjxuO&RpwWQS7)kSAABzNe{jTl>UAcir0B zt3p&IZZhpcfLPA`uG9lR2ZAy^)m|R8U$1%>CVg+JoWa~4-d8pd3#?aVn8*LjyPAlq@!?jk?bRT#O;7z`W=CshbT)*)G8SC{|=8b$0_4wv1 zI7arM9fv<4FWHVZdF2*{jw>Ua*-gOfAEmhPvKa_3{NnWSD(%wT&E??cRpR1cZDn8# zYj17;lkDR6a!7~xA`NTnwgqm-{<)95SpHr@-W7a>nfpqLXqp8P3uSdhIYSt$O)XU!|4trWP*RF$vC6CfJ zQnLtQgbJ-!Ebo=#<+k_i3U0v9{92`)pL_f-$@s?}ulwfWIrd!~FBcg_tvtBoBa>g{ z96HZ#-r9HX!uk6p_Qd{zlw+=D0lCTNkDhV8FeM!?Q+`l#UK^Qu5?YM1ttmj^urdl+ zaAd||ZS1p>>Gwmk+hdTcBr#bgD?6yA53XivxJz=sO`9x3TH&)BS8Hn1ns3WIscs#A z>7DKyVnNK}Np!R+Hr0mFz9n^~8dJ9JL63N%#QKY;Zi?#qBdtIC3>CF-`MmQquvw|% zr{ulrJ7`UGXm#%;f64pmKzXZ5qKm5;Jd~G8Jg4#{A;i1jx!jz$Y?n(XoI+0~J-=i+ z{w`&UB~^cAgT>F zw;Hr`ui#1B>SGWgz3igZE;9@5@RyB;DXBHz9EG21YD1I!ZxJTQW7nN7 zzChd>i_f;nSih1SGB|KKer>^Cc{Mj{B}8Yuw{&Sk^n(wJ8zS?*MVdY zP~-Rk0LI{#LDabLUE>+d0l#C)?mwB*?|FiA7e~wDMTystyy(+4cK1w26FpUVWQ3`> zS+oOw#M68xw^wpvGgtHRoq{AiP<70S;%A3>B2RXBJfOyy&Dy0dtJEU#o!hllOT&lh zw{R@cmki79+g0nysNO7HHZVh?vKXwYT?eU< z9xD5c-z3C&4tYi#>fx^HQ9MZhiPCsEdvxenOucNVOo#*P#AvmbQ2pfLs9N<4ukKAn zB(J|(Ulee2jcy+w4an6&5vnV4~a@dE({k~ z$(F^uj9g+L7g)WC{Fp5@Eu$RW5&K5K@njb$IdF*j_Mwa9k?Ia~v!R+WR{6-oWP7*x zb~Q&HX;V&Qw)uLEJXng~JMnAAi+y@XWm$Ve6WX~J2ZMCW03+tW^Z}y!;z@>40<~mO zo&9wa?Uk6>r@DR3q(t5z1V?9R@VZMwiRNMZ{fqNYxn9BTPdc6GIoGyPWq|W^UnH84 z6FK?(^k3!{&SBW*_fc3S&rXC`nwx4_j+cx%LmlOLV+I9`TW@y1B22k41a^|Qv}t7) zUX04@Ov++@iGuh~#+b!$6A<1M=t(I^J3Y{+=P}y%Ajs9@_{+K&?D}08y%3(bw;SvN zbUY*8Cmw=Ch~TeHq&Fx9M^ysk(V;S90gXNQfCjZ^lOZ_j0QDg;4HA(AL582jI9-Dv zx$eLY-Gfn@Cb*Aug99UBb!T?4B3Oc_Mo(dKF+jtM;4kZ8umZ>NeSk3N20sJH6W9&z z0yrQ--5_1xTv$g}XGkUbgeh@sNWMBk(_)z>U zvGD>^CReIGXeyGUw=<+qrEWSTf_P3x;!>HW zqQ8+n%gdg{3Xe3&OHxjWqT?>w0S9THtYvmfaVlMYoG$LYbnil97w1go8G%z@?Cu`z zEG?Fq-0}*;RbJx*JqjePLnA zP@MBa_hlTlBs}oF9+`2KTqxjM@u_EZ!`x|DKa}WxBcuN;gHR-5Dt0=3b3v>R zjMT&T>-2%wBQd3pXYq3obdf_W#+C_PB%_1x;npx;ID6zQ5v`B@96QD-;XzlozryZB6#GE7U7cB zBR^V>V!_ia-xq`aG6ibHEG^QuQ%TB2*TRlR65+?VxUG#?`+D?QkN1>qJ{C_NetPAl zq)~>|w^}(n*5`w(&sjevK3|{f82dC5_S8zT-ki2dl{LIgc(OI+(jDQnKC%#p-+)~G#!gevKU5qpYVimqpQC>sK?7N zu3Qu`9C?srCV*ikMe}1K;>i9i{@Z&O=D*p6U41wiZhlrNEqhlkXNU*vDMvq89i+8d z&Mq|Yyt#@NbGP2Iuo9skd(4kA5!Oex=of%8osS3;)xMMe+9O9Z0sTp0HjyWfqtBW) z|I|IMI858IC7Z=KQdBIy%f&EfG*FnN+j2<~HOptgie@hzb})RUkX+b0jeFGABc$YS znMZW*mEv>txO?oX=-raqn+74tMJOA;G1{YW{hGNcQucsl(r#jXLihEL68&RIwR|6q z_Nq&2)V9T#m(G5pQ>&I$GS#{;H{D^74`1n#>;rEs%mR%JbnxrxbZ9<|?24b`Mi;@) z;Nxy#O7Xcc*E9J3kv=dO=*uV5=@o#moKD9A6LqH3yMZpP`p%jW0=NO_)H?^%{G2wdA+V^(Cj3Qvf&i`^fAx-n92zH3n_V$U&NXYt_ zz-~}zz?NO`#)qqQK}}odk*As2q~YozGVbpBtLObscN!O{C~i(o@x?zvywhOUIgHvY z=dAtwZ2#k^=aR?0quVaoJB7r7ZnQasth{W^h;(!FT;1}td2zLtboG4NDe2k0oE1e^ zY}O9M*u{e$8IQzbaO@?`Q!fbYW%lp3im0!N$6&rW!xu%IgdneasT>xBBl#m5d`l*zdGhJ{|S_8G!_mJ%xG#x#|3 z5TwY?AiK|!X(D9Kep_`j?EP?QFH7f{7m&wD`VzLTZyBGe@(m2X)CsF8BiI&~vYT*D zGkY{vUs&C(8oVhxoHDz?f41$>TKb-Fz3VucY5%kaqjR;G+l&KePK$G(^#X627r72J z*1x=Ye7uCfR-&u3FeO8hjebq$ zP|e=#8N`lNEL>D7JZkw{;Fh5(;0WXUuFrvozJd$z9UJLvU%@Wf?mWPh;25p9et^r8 z$wqqEB!F1?3IFUXfB{_Iz|^-4)pnxWZ2*_2I|&sp!eTxFvbjCG^p2L!8U&Zku#?iW zgdOE&w!6|!&>LEBU3Y?_w+wT4MhnL9Us)CPYnFe<`-#6iHv$JM;JMLP4SNQVu-6bv^_2YR~rS)|713&*Z^NxdK%JA3O+W z^%K~DpO{fzaVo%xJoFEU4!KlgL_Ttl+o&`{>Xdp*sP$*gj?L_m_mw?-YDE;117#Rf zicrWMRnrfyt4v!zR#+p8e#oR@ae1)cbxQNz<6Oh4W~SjhgA`*amya_(mX@lwRg?$~ z5Yb9KN@K0dc^SPES#uZ%`lL`lp}u$We2Y&j>}w0-=QLkmQJ`Kqv}wOr;|Qq%tKP`q z2jP!A%1PC;UeaH2+}tg+X7geRoG?_je+WF%oDwA>>_M|CQ<3_%T`?mtE@St?*1xZw zA2x(I8CO`nFBjNY^L(7Jn%0XiW5_#3qS%j>ewUj>bJ@)wa6*x| zr|ZSdp{4xZddm2O%S{cpL#m2uddgS0k6mCH%6@Q)l8=SosS!RK7cGl=Oq8-e_-vp3 zmkJMElZwPVO|rzQ`jM#7A<}_H-w#jTtS>oJPTp1$t?WOm*f0Rqup4R%rOdUjTD?+3 zm2Dlps?lsVnht3{6dbkP6a{Gyp!S4DL)y)#JsKE@4i|8w(!t~=LXee$ctHr#(Ey_z zG_{ogiTKhpk^yNy9-OM)4NeA5JmwSJGQc6Lp&Lw(Cq}{!VX#a)4qTWq#^5OjL(JG- zK%Bt{CGXgF&P}p{_{%0cvyzN4*fijj1^nmX`;{&UxQB}2Kb^;5Yk|WN2v2lOg3*iN piF7}McM0Q(*5Bvi?*VhiWK(#*bbNm`^VhdAzzcTSpKsVT{|^8$r|bX# literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000011.vtp b/test/writevtk/cf1a_with_observers-block1-00000011.vtp new file mode 100644 index 0000000000000000000000000000000000000000..0a9d0d911fe48585204075b9862f93b8126b1bdb GIT binary patch literal 8030 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 JKi-zB{2vLA^l&GE(OS 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 UiTWMokDpG+U&Ez;d=6Lp52hw?g#Z8m literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000013.vtp b/test/writevtk/cf1a_with_observers-block1-00000013.vtp new file mode 100644 index 0000000000000000000000000000000000000000..a4ab9883c23e2b5654d5acac4718583b24192bfe GIT binary patch literal 7961 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 Bh8O?< literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000015.vtp b/test/writevtk/cf1a_with_observers-block1-00000015.vtp new file mode 100644 index 0000000000000000000000000000000000000000..c24cc08adbe31fdbd69e3de816afc54a8f8e43be GIT binary patch literal 7943 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000016.vtp b/test/writevtk/cf1a_with_observers-block1-00000016.vtp new file mode 100644 index 0000000000000000000000000000000000000000..764f6662fd99ea0756d4d3b4eea394372190bfd9 GIT binary patch literal 7939 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 HN9g|nrhxMQ literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000018.vtp b/test/writevtk/cf1a_with_observers-block1-00000018.vtp new file mode 100644 index 0000000000000000000000000000000000000000..eab87d852952ad376e2c153b7e7e8c46b267e6bb GIT binary patch literal 7934 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 iB&awk+0!eNLd_UiGOaC8Dcy1&B literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000020.vtp b/test/writevtk/cf1a_with_observers-block1-00000020.vtp new file mode 100644 index 0000000000000000000000000000000000000000..b8a9302bf451a5a669e41c11d9930193badefab8 GIT binary patch literal 7958 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 XbZl=I{5S1DI&5ZW#5uDG-2!_ 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000022.vtp b/test/writevtk/cf1a_with_observers-block1-00000022.vtp new file mode 100644 index 0000000000000000000000000000000000000000..ca34660a2fe1a9009816f84825bb1bda7e9317e0 GIT binary patch literal 7997 zcmbVR2{@E%`|nUG6cr)skzLlY#+W23Tgtu+4aQ_0%Vb|Fi72vX8~ZSXWY1P)m$3}8 zC(9t&$2OM#%v9%`?_6K!f1S_ex}W#CpZoXw-S^|UpWdri5#;IUz~v5gb+d�l6ha z#ksklPF8ShTPGNh`#!=(M2;JzM6GC`r=e!+0Odk>IYWWmI&cTCYY+s4`)^1~F9g&A z?rIHn1#)ZJA`lKxRVQm(h!Z#0Jt&0ewfGL#zv+aKk>cjEf;&39Lfzcp#Bg_ny@{r+ zC5ct#4>z|GH5ZrSPc_nnG_{3VLAkW=J6b|rZ`tU;ZJiKqKyDdH?mv8*woXuzOPq}V z4kCwrXCOOBLdveL5U(F4sX4$QE1C*MvI35cmFvawQ}r zr2b6gztsCTAr)O^S19rP{yav1{rmo7!4eYkvj0X%2kvHzAokXOm-@$}Bq1d)@o%II zpbl`WU!InKl#-N`{paKIx9wB5vVuB5T_OKtWdLy*z`vGB3QahK zbnpESN>VbC|LRoyP`U<3{10N%G63m6cTZ95KiiCW>yR!;QqPetpzjwod8Yj1vLdzQ zUoLr9hzIeWwD|4F_n+=#|2a}qexG|LtM=MoVsvJ1S&b9zHCDG#G0jl39e_GHdLw!V zLV6quM#H}fXlJ42VR6%1U3bu0hW!`XW7=nU6fXx^E>+0QwE}~)LQn%?xcZ!m3B&qt zTM3>qlR8RBn#oQ1Fx7z_Pu`5x$9(w=eAh6en^SB3Y23cadAUQr^`SmyPlpQVZiPy` z9+L8@KU7#U58j*+Niv-BJQQ56oVq{icsWqrEGzb9*5IXj*3oysZ_xX>8er*zeaFH= zI{2(VUzNykfO?>GJT|-ii@}m|?_}R9tGy2Q(@%Fz2D-*D_mpnVm;~1uHy0l(Qm9fH zS%}$t5#ibQMXR7RBdNO4aeZTJ{#33Xb6IvpUN8YA?h{*>cBY^_N#NYLU6qD=B~+wL z#>)COG=7rczZ8aZtmV}ZF`8p5At--?EtNb}tvlcBn0rDZuNLrXs?fs&Us2+8U4zy5 z%coYZt;vE!EA4Q0BWV-MGLJoup&5wHzRM!umo!;|L@a`z+<#{*8^y}h*H;Pq@xjZQnSv6nihxw2m8Ahb4l zFf2hGU)VJ7vb6JtW_4)BWOS;|>7A9$BcJe=#FDD#exD%pkuG?G;nLt@VXE)|-pX~% zKE7_~=8_>#9QDVD-=r|&9A*1xoWJvXx{Ol@qsem#v2wEb!i7CYiC)4OtU?9n+B5XQZd;g$=0-0{seAR zEXs|(tBU^x$x@M@31nLxN%Ac7;JA|AD!52imK#T}+Epd?!p&2yt15t>h$hLLWsxp1S|(`-U*@>~1U zY*$<5J@{Qu3%AL8Tz5U)Ab&t<&7d;=vs2#v=!~DE=Z_BZOa?beTT&3i#79%Oo4}ze zF58C{%$0)1XQ};yyCk1Wo@U6AZ#3?5LDHB_pN+3-&_9^GFj)0o>tN=5MO7ns z>DX2vmE!c72(JcRef%O0RHH?dpKSvfoM%f2!YVzwE^RN}pK$ z{^}q|iT~Gm0sh!8)8h5oO^vUro5E=u7o?O#y(weNuVg6}`yyPfu8AKU74SO}d_XBT zDnGhUa|F(P`o^zHJ^o|CGui%fGc%Y_((f-4J)3`0*KTq7_4z0Geum+C+Ol%bdY+Ht z0{9F>g@27-*n_=>y&=e^!pum8K?v0_tA9aI15-0E7u)CX84T+yS#X$5Wz=PT$|~s^1!29jqww2&Ma2 zfh|tW`6TXU{u~7~G;COAvA`})uvKw6PoI$lWwk4;m5f`&-gQLWk6LmlJ(2IYhqPKEqW5hL~n^%Vr}i$cu!y||Pf z|DFO+`{_^8&&3ZZj(AmL=6~)|+K(&!=lGT4=amlZ^|{30%ywi&CT<2SWNV=D#w1^Y zA%9Z~pzy|oHxkxz#)T#CwudR*MCXXfGnJ!)@hk1rfyJid;E1hRzCci~>WZx5cIVYaab9@49&KUp ztlmH~2jc|>e()N#70+y>7USj3E5X}5*^TzT119>c219M42?nUy9hphGfP{}%@l=~B zc}YzAPvJcU6O!_}eT{WD6H*I1{3580wK`C5%{ODsXN>#GM2tWzwW_)kEe9~$4+o_m zWTbAEzx^`!33H$Ua^X@aU=L$}0M^e0F1m@d1#`|Wbhl)FDGYW9@q2|>oeRrhm$SY1 zCHf3L$WI(+mxd}oSCZJk#u3^laD{0 zasO6#Dl(I1?4>2|e!dd^Ie1Ek4G7;mGw5D_Ng|XJS|skS1btn|B<*F>64Bc7Ndwit zHlv*?t|-+ocQEg=Ns$8k;*C*~dYvyc$Uir6v%O;7vysrt<6)qjNq1lg$>&)sIUw_DBxQE=pAsGAD+6H47*|UsY8KtfDp`L*9OZ6*k=C*OWqv7N67E^ zY64g-RoT~ujucwr(?f~`&yylq$yRs{Ak_`qRNbXTZ6x?1l>)arl{82I&TJBZj!b=@ zOnQEo_6tCvm&8EiC#p!296k~x5nw6_iPTC>4^b+a$iRHoN*(H(2WS$hYd2UV=KJBnjxRkydqSF&@kNU zayEMUt(XUfqr>~-73RGCJqJ!(ib~wPM6Qr5Mb3FM20kzPtw9~}VH|xB26V8rQ^ip^ zu{||#TaGQzE2YZ9u;Wox#mo4`{0p(nIYZ?+YKEaPgwJ`<&1yMJCQ7P53DE^699NfV5wG6GK`bX?U&cw7gCRLH#OrZP3pX+ ztF~QpaOdpS+Wg|9c7GA4FtIo0(fMEMW*T#Iaweq~R7O&SOWQ`D^Qi`C+&|y7NSK_7 z%ZqdOx9z0sO?`i&i2dNy$(E`J;ON4xs4#1)9PIIOhHL)= zF-B0Wqtkc08eX^`KGa)k0F=IfZBGnF!fxtL@ZiDRqJJ(G)rP@Nh!$diT-p#wTRafhc()O-_ov(P5i1czWt>!e!TYUYB`meuw4D>Z<&FL z7GVWSKejGY4>j}Vb(QaV)|+Urm-VdB^<=DEGMmbD#G*hvPk19FJ&^5UV(hTG81j&# zK7N9!-jMU*5gbs6v9M3{NzM>sJog>wGuT6fr(EwETri7~SKk5*z77<;B+mshp*}@v z5Eg890bPIMV^3sf$GgoMmpa86c6>U0!nBsrsT+Lp3RM+t=&w&oeah_?t_UEJb0+<2 zV`+9viOo;mM+enmbvaV7yadbYMi{Fyry6a}3>ceYeYwFR`y*Gx7H!N?cU{A$l9^V4 zrd-baqhQBM1C1i9nceIkyfyR2BBoHd`Qcrpum3x=KOmh?etlyRUjKpiMr}%t{1_bS>B4Df;&HHlw}Z z-Ry)z%~eWi{D;M0llOMVa=&UlLj*SGRwFkj9LGkfp8MBQJz8u=CtWy+>6{V#-D4=_ zolNb?g{e?;{c` zTasS;IdzDOIs3yLr`w^T{vW%a@KWh zqH;JGP~X}Wu~<>m0f$}UtLvqS0Ct;@=Lx9$wcGoIow~icgSmN#tZ!!*FqH9X-1J!Y z?`6^}1-QhcR*8Mu-94k_uQyu44<`1e5rFqBFNB*0FLH9AKx^+c(%ao1UZCm`xn1$% z;N(ZT)g)_=xgKgxBio3+dZ0)D1}uc>UWa2M?WtS6sbH`y%5Cc*Bhy3g;pT)o4C+Gc zj)aAH+bF%Ptw;u^bIBb?bH0b(Pkp^B+2=YsGDQ|;cLTfK@#^)#!utaX?$kM>N9OvV zm+INvGmFrsiEC!3AAg>-kk`7&vGH6F{N*$D?)G@HwGLqi>YX4u`m<0&Rm7Ta{Z2b9rjFSZ!d;Mex9^AT8lzoPvqy5Nmx2ndRes;S(}48<%J zp5=R|Y#LFz8cx5f!7E}JwsZ95NV@Y03|+RxopM0MstY$_-n_u~d~gpAY0T$sa|qh% z#Lgwuod%XDZfK_Z*!0gOC~bAV?E&~LB|OiB?Yhk+h!6+Mjm~o7Fbc?5!E98)+!=s< zL;^8y6b4wrMFviElOW)$q-C22$ay!+tFyqqWmQZkHL%a(3Pv*sIlrue=_ERF$b|DG zJETiS4v{6z$dZm~B)kk6zsNzN2MCg_4>=S-4!zt1AW&H?_uTzeJ9Pi?UqayCL%<*v z8`VlIOYcD8tHJ^lEkq{gwrA#`z~&~eh11pc3K@$FDa)@SR+LjOTcYXOpGeuZsYScO z29d3LDhkriB%<}5CeE%;wmXj1F6}ptAHJUozV17BS34s|77M(HYAFCmdddHu%R6yg zOhjVISL@u#mSEmNC-Zfc31orb!*$VCxj{(;k2mNGfBXV$mtfUq`TCB4o9g@;#z3j- z@`LT2Zka(Pi)W%S*^d1+VXJsfQ16oZJLFhq+($|U2z?D9R_R#!Ts!-WHi73coj$W+ zxKH{$N7vC$F9D^)1M&njttaS+@uv#Mka7_5+pYpVCn?K{4i;*GjOpmwNSGbaxn~pw zQlC5#tmWO<(%kz((RlxP9Focsd(hMoz|hTn589K}{-AnEuo_&(eZ2qh)zdJ>Zm_qB zpNZTFI;NJ4sC#E<)av_l5>Lui$*wNoZZWi?dv>n)el3A zalgf>QS@pWBs}&jxVBn*24W`2jZ*A>i>Q8Zv9G*9;(pZ)DK}QffLY&MFnqNGfVI3-xg!#0qsClUO4h1FP_KL+_rEl|vlTX1Ikeh;Bk0Kbn+FwA{=txC zx1AKR!myV$pnG*X0(XbJMs}4&7<&4>Ra)qs#GkcQa1J zC-z4J$4=)4e8H{yB~hy#({GT-*`k*$m2r1y=OC1Slwpp|qer)0-VO{`*wA&qUurm% z-r{AK=RGU#+l$R&eM6c0R*&V{=om%VfGH=iE-FHU{c1&7knn6^=i4Ql;m`X^ABzZO zvklHAt1nCe=~KR*9peyto@24WdwR&{kcAQ4OUT#(v?=u+3E-PA;Sb8*qk1M?Fgn8gEIpWg&@(1)!)8G~ZyPT1dGJlhk$3lEX+`2Z5mI(*dZ%Bb1Mu zMt;@r>wo<7r_~#93G2ev;(~rvDH=Y~U|oDuWdAj9_L@tvoa0bgc9?^IY14ej`JG5? zt^mkpmCC-j+=LqZZOO+UU$^6u{B-XIR>wGhhAy#M?WW^0d>Nh!NJfdXU^eQXiEYI=sOxrJSyqzAra5=^RoahEyBC?(a7zaw`juJ*~&Ec7qU4PD;F7K20Po! z4)!6nKrAQ~ub*g#*W|Dgb+wSBR^WFOy{YPLQ|Mo30>oX5-@-wdbVMhceR7u~iRN z0t{gEZ`BvkuKF&Qiq(~nvV0pfOoU(_RW`R)_gn2o^xlSMAI6636`O+Tpp*;sImTusox=Ud~85SpmeWTkFLccCW*BeO23PKA3it-ew)+-$=nm z3tzn09%>=p(_Q|s$&Vci7z7!Z?2T23O38aWu(4Jb{AEohT5#K{UW$ft*-2}>g(>8@h9h|1ADfKS9IBLDSn!2L5M aF#;vq!Zw`z73HrVPKe*a#eRGYSNcB}2(QEd literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000023.vtp b/test/writevtk/cf1a_with_observers-block1-00000023.vtp new file mode 100644 index 0000000000000000000000000000000000000000..87f42f50c48c558a56c3e4ae6a270c6b057f58d4 GIT binary patch literal 8042 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000026.vtp b/test/writevtk/cf1a_with_observers-block1-00000026.vtp new file mode 100644 index 0000000000000000000000000000000000000000..c9a7d7c2caf8ace58b7e0a76e2858385a7aa9b79 GIT binary patch literal 8097 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000027.vtp b/test/writevtk/cf1a_with_observers-block1-00000027.vtp new file mode 100644 index 0000000000000000000000000000000000000000..a545dc54f27f75cbae78ffe281cee38015d3b5ba GIT binary patch literal 8041 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000028.vtp b/test/writevtk/cf1a_with_observers-block1-00000028.vtp new file mode 100644 index 0000000000000000000000000000000000000000..d1adede24db807ea9ed722af1fb1a57e8a0328bf GIT binary patch literal 7981 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000031.vtp b/test/writevtk/cf1a_with_observers-block1-00000031.vtp new file mode 100644 index 0000000000000000000000000000000000000000..d7eb795cd963d40eeffaa8cb500ba829c1c8b05a GIT binary patch literal 7966 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000034.vtp b/test/writevtk/cf1a_with_observers-block1-00000034.vtp new file mode 100644 index 0000000000000000000000000000000000000000..b0bde10f57b4f893f2ef09f71b83b87bcbcd70e1 GIT binary patch literal 7972 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 literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000035.vtp b/test/writevtk/cf1a_with_observers-block1-00000035.vtp new file mode 100644 index 0000000000000000000000000000000000000000..01c4c7ca7e955118bbd3e3f7344a9624bee96bd4 GIT binary patch literal 7958 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 X(k9N}Kac$Ni^$1GZlUjAxn=$jxjzlY literal 0 HcmV?d00001 diff --git a/test/writevtk/cf1a_with_observers-block1-00000036.vtp b/test/writevtk/cf1a_with_observers-block1-00000036.vtp new file mode 100644 index 0000000000000000000000000000000000000000..86e0660fa18a146d96515b7f6c7c5028cc1f108c GIT binary patch literal 7966 zcmbVR2{@E{`>qrfQDh5Q63K4t4HA;IR0vt8G1+EhY(v8-S+YbC5@XGpB+71Tgsg+? zyJ+k?V;ReT-cjfDeb?9dU+1`7&pXd@-}m#p-sd;w8nB9|lOvBi)CFmWfGhDyib?SC zK;aO?9XmKoiODs}eKuCgu-vd#~ z_82GuKuFca#TxZvq|1&7Yf4l4)=rcO0ouPPfu0a>C`Agy$773dak6$*;~-NTRDvey9w0f$2&u6FKruBiXrhveV& zAt$f!S113U)?V|!8TW5x6r?5pk^zhV$An-tsG}n=+`(Hw8H&k7qrR9Ekn*RTp zjG&GP$ZwyPzm<}blKw|hst^d&5$a<7FDC;@NJ;&Zo2U(SarhTE5F{`0kEYT^SOe$Y zzfh8v`DahX4<&Vk>%S0_k(K=A?t#VsbIr)74sbvMI|m#LX*u+t*VO}izGu97n}Z0m6=&^Yv`BKuVTVG2q8_R17W|~gb|Iz?`LAso zpc(x-wy|n)MmdHz`HONVaCRN4Ro8us6rc7(8NZz?Qk0h=L=~cD6#ABlq$$!j$Z58& z5ho-1uMYl4GH&GDb$eo{ZQ!>5MV{+GqE~e5#{0rznQ@;ybIJKEkEvHg+OR^2d{H#d zhesY^W=q3CzD$!hRie&Ws*EaGl+YZ4a@%zZm&wERUVOkNAR=>TlTMmgcHY-IG+#Eq zk!w2MtFbFwy4TIvL1 zsdBKgy!)kEKTi)f<94kKl8~}hh?8Gw^jfQN=M+BLZw!9RBzDdm?;VJ%`hp`0Z@=1C zK&5c3ydeRieZN0Y%iRKroV|Hw{srm~iD~=txqdOryt-|!d4p0>boiO5vHp3CyNuc= zQZidp$yHWOEhOabC*utZQV%RI?}#**)x`d^R8tiV zam~`Rk=C>2G$dX;jz9zL=$=`SnHxs$zC6b|gjNv}yWn%hD0S9|xWUaBo;9&xqJc?H zi(K=4(ZqWdmthwZj=I=hBQ|K*hHVoHXYY07vTZYcHA@ApX<{|Ay;5;&V2-W7$$L81 zZ?f|b6Z@$Stk2h^z_nAfc&ieZ=&_|p8rb&Pe)aOzO