diff --git a/Project.toml b/Project.toml index 9595dfe7..1ca14240 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "SummationByPartsOperators" uuid = "9f78cca6-572e-554e-b819-917d2f1cf240" author = ["Hendrik Ranocha"] -version = "0.3.2" +version = "0.3.3" [deps] ArgCheck = "dce04be8-c92d-5529-be00-80e4d2c0e197" diff --git a/dev/MattssonAlmquistVanDerWeide2018Accurate_dev.jl b/dev/MattssonAlmquistVanDerWeide2018Accurate_dev.jl new file mode 100644 index 00000000..d34d6664 --- /dev/null +++ b/dev/MattssonAlmquistVanDerWeide2018Accurate_dev.jl @@ -0,0 +1,154 @@ +using LinearAlgebra + +# order 4 +h = [ + 2.1259737557798e-01, + 1.0260290400758e+00, + 1.0775123588954e+00, + 9.8607273802835e-01, + 1, 1, 1, 1 + ] +e = [1//1, 0, 0, 0, 0, 0, 0, 0] +H = Diagonal(h) + +q1 = [0, + 6.5605279837843e-01, + -1.9875859409017e-01, + 4.2705795711740e-02, + 0, 0, 0, 0]' +q2 = [-q1[2], 0, + 8.1236966439895e-01, + -1.5631686602052e-01, + 0, 0, 0, 0]' +q3 = [-q1[3], -q2[3], 0, + 6.9694440364211e-01, + -1//12, 0, 0, 0]' +q4 = [-q1[4], -q2[4], -q3[4], 0, + 2//3, -1//12, 0, 0]' +q5 = [-q1[5] -q2[5] -q3[5] -q4[5] 0 2//3 -1//12 0] +q6 = [0 0 0 1//12 -2//3 0 2//3 -1//12] +q7 = [0 0 0 0 1//12 -2//3 0 2//3] +q8 = [0 0 0 0 0 1//12 -2//3 0] +Q = vcat(q1, q2, q3, q4, q5, q6, q7, q8) + +D1 = H \ (Q - 1//2*e*e'); display(D1) + + + +# order 6 +h = [ + 1.3030223027124e-01, + 6.8851501587715e-01, + 9.5166202564389e-01, + 9.9103890475697e-01, + 1.0028757074552e+00, + 9.9950151111941e-01, + 1, 1, 1 + ] +e = [1//1, 0, 0, 0, 0, 0, 0, 0, 0] +H = Diagonal(h) + +q1 = [0, + 6.6042071945824e-01, + -2.2104152954203e-01, + 7.6243679810093e-02, + -1.7298206716724e-02, + 1.6753369904210e-03, + 0, 0, 0]' +q2 = [-q1[2], 0, + 8.7352798702787e-01, + -2.6581719253084e-01, + 5.7458484948314e-02, + -4.7485599871040e-03, + 0, 0, 0]' +q3 = [-q1[3], -q2[3], 0, + 8.1707122038457e-01, + -1.8881125503769e-01, + 2.4226492138960e-02, + 0, 0, 0]' +q4 = [-q1[4], -q2[4], -q3[4], 0, + 7.6798636652679e-01, + -1.5715532552963e-01, + 1//60, 0, 0]' +q5 = [-q1[5], -q2[5], -q3[5], -q4[5], 0, + 7.5266872305402e-01, + -3//20, 1//60, 0]' +q6 = [-q1[6], -q2[6], -q3[6], -q4[6], -q5[6], 0, + 3//4, -3//20, 1//60]' +q7 = [0 0 0 -1//60 3//20 -3//4 0 3//4 -3//20] +q8 = [0 0 0 0 -1//60 3//20 -3//4 0 3//4] +q9 = [0 0 0 0 0 -1//60 3//20 -3//4 0] +Q = vcat(q1, q2, q3, q4, q5, q6, q7, q8, q9) + +D1 = H \ (Q - 1//2*e*e'); display(D1) + + + +# order 8 +h = [ + 1.0758368078310e-01, + 6.1909685107891e-01, + 9.6971176519117e-01, + 1.1023441350947e+00, + 1.0244688965833e+00, + 9.9533550116831e-01, + 1.0008236941028e+00, + 9.9992060631812e-01, + 1, 1, 1, 1] +e = [1//1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +H = Diagonal(h) + +q1 = [0, + 6.7284756079369e-01, + -2.5969732837062e-01, + 1.3519390385721e-01, + -6.9678474730984e-02, + 2.6434024071371e-02, + -5.5992311465618e-03, + 4.9954552590464e-04, + 0, 0, 0, 0]' +q2 = [-q1[2], 0, + 9.4074021172233e-01, + -4.0511642426516e-01, + 1.9369192209331e-01, + -6.8638079843479e-02, + 1.3146457241484e-02, + -9.7652615479254e-04, + 0, 0, 0, 0]' +q3 = [-q1[3], -q2[3], 0, + 9.4316393361096e-01, + -3.5728039257451e-01, + 1.1266686855013e-01, + -1.8334941452280e-02, + 8.2741521740941e-04, + 0, 0, 0, 0]' +q4 = [-q1[4], -q2[4], -q3[4], 0, + 8.7694387866575e-01, + -2.4698058719506e-01, + 4.7291642094198e-02, + -4.0135203618880e-03, + 0, 0, 0, 0]' +q5 = [-q1[5], -q2[5], -q3[5], -q4[5], 0, + 8.1123946853807e-01, + -2.0267150541446e-01, + 3.8680398901392e-02, + -3.5714285714286e-03, + 0, 0, 0]' +q6 = [-q1[6], -q2[6], -q3[6], -q4[6], -q5[6], 0, + 8.0108544742793e-01, + -2.0088756283071e-01, + 3.8095238095238e-02, + -3.5714285714286e-03, + 0, 0]' +q7 = [-q1[7], -q2[7], -q3[7], -q4[7], -q5[7], -q6[7], 0, + 8.0039405922650e-01, + -1//5, 4//105, -1//280, 0]' +q8 = [-q1[8], -q2[8], -q3[8], -q4[8], -q5[8], -q6[8], -q7[8], 0, + 4//5, -1//5, 4//105, -1//280]' +q9 = [0 0 0 0 1//280 -4//105 1//5 -4//5 0 4//5 -1//5 4//105] +q10 = [0 0 0 0 0 1//280 -4//105 1//5 -4//5 0 4//5 -1//5] +q11 = [0 0 0 0 0 0 1//280 -4//105 1//5 -4//5 0 4//5] +q12 = [0 0 0 0 0 0 0 1//280 -4//105 1//5 -4//5 0] +Q = vcat(q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12) + +D1 = H \ (Q - 1//2*e*e'); display(D1) diff --git a/dev/MattssonAlmquistVanDerWeide2018Minimal_dev.jl b/dev/MattssonAlmquistVanDerWeide2018Minimal_dev.jl new file mode 100644 index 00000000..39faac1f --- /dev/null +++ b/dev/MattssonAlmquistVanDerWeide2018Minimal_dev.jl @@ -0,0 +1,127 @@ +using LinearAlgebra + +# order 4 +h = [ + 2.6864248295847e-01, + 1.0094667153500e+00, + 9.9312068011715e-01, + 1, 1, 1, 1, 1 + ] +e = [1//1, 0, 0, 0, 0, 0, 0, 0] +H = Diagonal(h) + +q1 = [0, + 6.1697245625434e-01, + -1.1697245625434e-01, + 0.0000000000000e+00, + 0, 0, 0, 0]' +q2 = [-q1[2], 0, + 7.0030578958767e-01, + -8.3333333333333e-02, + 0.0000000000000e+00, + 0, 0, 0]' +q3 = [-q1[3], -q2[3], 0, + 2//3, -1//12, 0, 0, 0]' +q4 = [-q1[4], -q2[4], -q3[4], 0, + 2//3, -1//12, 0, 0]' +q5 = [-q1[5] -q2[5] -q3[5] -q4[5] 0 2//3 -1//12 0] +q6 = [0 0 0 1//12 -2//3 0 2//3 -1//12] +q7 = [0 0 0 0 1//12 -2//3 0 2//3] +q8 = [0 0 0 0 0 1//12 -2//3 0] +Q = vcat(q1, q2, q3, q4, q5, q6, q7, q8) + +D1 = H \ (Q - 1//2*e*e'); display(D1) + + + +# order 6 +h = [ + 1.2740260779883e-01, + 6.1820981002054e-01, + 9.4308973897679e-01, + 1.0093019060199e+00, + 9.9884825610465e-01, + 1, 1, 1, 1 + ] +e = [1//1, 0, 0, 0, 0, 0, 0, 0, 0] +H = Diagonal(h) + +q1 = [0, + 6.3217364546846e-01, + -1.6411963429825e-01, + 3.6495407984639e-02, + -4.5494191548490e-03, + 0, 0, 0, 0]' +q2 = [-q1[2], 0, + 8.0515625504417e-01, + -2.0755653563249e-01, + 3.4573926056780e-02, + 0, 0, 0, 0]' +q3 = [-q1[3], -q2[3], 0, + 7.9402676057785e-01, + -1.6965680649860e-01, + 1.6666666666667e-02, + 0, 0, 0]' +q4 = [-q1[4], -q2[4], -q3[4], 0, + 7.5629896626333e-01, + -3//20, 1//60, 0, 0]' +q5 = [-q1[5] -q2[5] -q3[5] -q4[5] 0 3//4 -3//20 1//60 0] +q6 = [0 0 -1//60 3//20 -3//4 0 3//4 -3//20 1//60] +q7 = [0 0 0 -1//60 3//20 -3//4 0 3//4 -3//20] +q8 = [0 0 0 0 -1//60 3//20 -3//4 0 3//4] +q9 = [0 0 0 0 0 -1//60 3//20 -3//4 0] +Q = vcat(q1, q2, q3, q4, q5, q6, q7, q8, q9) + +D1 = H \ (Q - 1//2*e*e'); display(D1) + + + +# order 8 +h = [ + 1.4523997892351e-01, + 7.6864793350174e-01, + 9.9116487068535e-01, + 9.9992473335107e-01, + 1.0002097054636e+00, + 9.9996591555866e-01, + 1, 1, 1, 1 + ] +e = [1//1, 0, 0, 0, 0, 0, 0, 0, 0, 0] +H = Diagonal(h) + +q1 = [0, + 6.6697342753834e-01, + -2.2919342278749e-01, + 7.4283116457276e-02, + -1.2020661178873e-02, + -4.2460029252999e-05, + 0, 0, 0, 0]' +q2 = [-q1[2], 0, + 8.8241196934163e-01, + -2.6653314104602e-01, + 5.5302527504316e-02, + -4.2079282615860e-03, + 0, 0, 0, 0]' +q3 = [-q1[3], -q2[3], 0, + 8.2904844081126e-01, + -2.1156614214635e-01, + 3.9307676460659e-02, + -3.5714285714286e-03, + 0, 0, 0]' +q4 = [-q1[4], -q2[4], -q3[4], 0, + 8.0305501223679e-01, + -2.0078040553808e-01, + 3.8095238095238e-02, + -3.5714285714286e-03, + 0, 0]' +q5 = [-q1[5], -q2[5], -q3[5], -q4[5], 0, + 8.0024692689207e-01, + -1//5, 4//105, -1//280, 0]' +q6 = [-q1[6] -q2[6] -q3[6] -q4[6] -q5[6] 0 4//5 -1//5 4//105 -1//280] +q7 = [0 0 1//280 -4//105 1//5 -4//5 0 4//5 -1//5 4//105] +q8 = [0 0 0 1//280 -4//105 1//5 -4//5 0 4//5 -1//5] +q9 = [0 0 0 0 1//280 -4//105 1//5 -4//5 0 4//5] +q10 = [0 0 0 0 0 1//280 -4//105 1//5 -4//5 0] +Q = vcat(q1, q2, q3, q4, q5, q6, q7, q8, q9, q10) + +D1 = H \ (Q - 1//2*e*e'); display(D1) diff --git a/src/SBP_coefficients/Mattsson2012.jl b/src/SBP_coefficients/Mattsson2012.jl index 203049e9..63ab289b 100644 --- a/src/SBP_coefficients/Mattsson2012.jl +++ b/src/SBP_coefficients/Mattsson2012.jl @@ -20,7 +20,7 @@ function Base.show(io::IO, ::Mattsson2012) " Mattsson, Nordström (2004) \n", " Summation by parts operators for finite difference approximations of second \n", " derivaties. \n", - " Journal of Computational Physics 199, pp.503-540. \n") + " Journal of Computational Physics 199, pp. 503-540. \n") end @@ -1701,94 +1701,94 @@ struct Mattsson2012Cache6{T} <: AbstractCoefficientCache{T} di_i_0_ip2 = T(-1//8) di_i_0_ip3 = T(-1//180) - new{T}( d010101, d010102, d010103, d010104, d010105, d010106, d010107, - d010201, d010203, d010204, d010205, d010206, d010207, - d010301, d010302, d010304, d010305, d010306, d010307, - d010401, d010402, d010403, d010405, d010406, d010407, - d010501, d010502, d010503, d010504, d010505, d010506, d010507, - d010601, d010602, d010603, d010604, d010605, d010606, d010607, - d010704, d010705, d010706, d010707, - d010805, d010806, d010807, - d010905, d010906, d010907, - d020101, d020103, d020104, d020105, d020106, d020107, - d020201, d020203, d020204, d020205, d020206, d020207, - d020301, d020304, d020305, d020306, d020307, - d020401, d020403, d020405, d020406, d020407, - d020501, d020503, d020504, d020505, d020506, d020507, - d020601, d020603, d020604, d020605, d020606, d020607, - d020704, d020705, d020706, d020707, - d020805, d020806, d020807, - d020905, d020906, d020907, - d030101, d030102, d030104, d030105, d030106, d030107, - d030201, d030204, d030205, d030206, d030207, - d030301, d030302, d030304, d030305, d030306, d030307, - d030401, d030402, d030405, d030406, d030407, - d030501, d030502, d030504, d030505, d030506, d030507, - d030601, d030602, d030604, d030605, d030606, d030607, - d030704, d030705, d030706, d030707, - d030805, d030806, d030807, - d030905, d030906, d030907, - d040101, d040102, d040103, d040105, d040106, d040107, - d040201, d040203, d040205, d040206, d040207, - d040301, d040302, d040305, d040306, d040307, - d040401, d040402, d040403, d040405, d040406, d040407, - d040501, d040502, d040503, d040505, d040506, d040507, - d040601, d040602, d040603, d040605, d040606, d040607, - d040705, d040706, d040707, - d040805, d040806, d040807, - d040905, d040906, d040907, - d050101, d050102, d050103, d050104, d050105, d050106, d050107, - d050201, d050203, d050204, d050205, d050206, d050207, - d050301, d050302, d050304, d050305, d050306, d050307, - d050401, d050402, d050403, d050405, d050406, d050407, - d050501, d050502, d050503, d050504, d050505, d050506, d050507, d050508, - d050601, d050602, d050603, d050604, d050605, d050606, d050607, d050608, - d050704, d050705, d050706, d050707, d050708, - d050805, d050806, d050807, d050808, - d050905, d050906, d050907, d050908, - d060101, d060102, d060103, d060104, d060105, d060106, d060107, - d060201, d060203, d060204, d060205, d060206, d060207, - d060301, d060302, d060304, d060305, d060306, d060307, - d060401, d060402, d060403, d060405, d060406, d060407, - d060501, d060502, d060503, d060504, d060505, d060506, d060507, d060508, - d060601, d060602, d060603, d060604, d060605, d060606, d060607, d060608, d060609, - d060704, d060705, d060706, d060707, d060708, d060709, - d060805, d060806, d060807, d060808, d060809, - d060905, d060906, d060907, d060908, d060909, - d070104, d070105, d070106, d070107, - d070204, d070205, d070206, d070207, - d070304, d070305, d070306, d070307, - d070405, d070406, d070407, - d070504, d070505, d070506, d070507, d070508, + new{T}( d010101, d010102, d010103, d010104, d010105, d010106, d010107, + d010201, d010203, d010204, d010205, d010206, d010207, + d010301, d010302, d010304, d010305, d010306, d010307, + d010401, d010402, d010403, d010405, d010406, d010407, + d010501, d010502, d010503, d010504, d010505, d010506, d010507, + d010601, d010602, d010603, d010604, d010605, d010606, d010607, + d010704, d010705, d010706, d010707, + d010805, d010806, d010807, + d010905, d010906, d010907, + d020101, d020103, d020104, d020105, d020106, d020107, + d020201, d020203, d020204, d020205, d020206, d020207, + d020301, d020304, d020305, d020306, d020307, + d020401, d020403, d020405, d020406, d020407, + d020501, d020503, d020504, d020505, d020506, d020507, + d020601, d020603, d020604, d020605, d020606, d020607, + d020704, d020705, d020706, d020707, + d020805, d020806, d020807, + d020905, d020906, d020907, + d030101, d030102, d030104, d030105, d030106, d030107, + d030201, d030204, d030205, d030206, d030207, + d030301, d030302, d030304, d030305, d030306, d030307, + d030401, d030402, d030405, d030406, d030407, + d030501, d030502, d030504, d030505, d030506, d030507, + d030601, d030602, d030604, d030605, d030606, d030607, + d030704, d030705, d030706, d030707, + d030805, d030806, d030807, + d030905, d030906, d030907, + d040101, d040102, d040103, d040105, d040106, d040107, + d040201, d040203, d040205, d040206, d040207, + d040301, d040302, d040305, d040306, d040307, + d040401, d040402, d040403, d040405, d040406, d040407, + d040501, d040502, d040503, d040505, d040506, d040507, + d040601, d040602, d040603, d040605, d040606, d040607, + d040705, d040706, d040707, + d040805, d040806, d040807, + d040905, d040906, d040907, + d050101, d050102, d050103, d050104, d050105, d050106, d050107, + d050201, d050203, d050204, d050205, d050206, d050207, + d050301, d050302, d050304, d050305, d050306, d050307, + d050401, d050402, d050403, d050405, d050406, d050407, + d050501, d050502, d050503, d050504, d050505, d050506, d050507, d050508, + d050601, d050602, d050603, d050604, d050605, d050606, d050607, d050608, + d050704, d050705, d050706, d050707, d050708, + d050805, d050806, d050807, d050808, + d050905, d050906, d050907, d050908, + d060101, d060102, d060103, d060104, d060105, d060106, d060107, + d060201, d060203, d060204, d060205, d060206, d060207, + d060301, d060302, d060304, d060305, d060306, d060307, + d060401, d060402, d060403, d060405, d060406, d060407, + d060501, d060502, d060503, d060504, d060505, d060506, d060507, d060508, + d060601, d060602, d060603, d060604, d060605, d060606, d060607, d060608, d060609, + d060704, d060705, d060706, d060707, d060708, d060709, + d060805, d060806, d060807, d060808, d060809, + d060905, d060906, d060907, d060908, d060909, + d070104, d070105, d070106, d070107, + d070204, d070205, d070206, d070207, + d070304, d070305, d070306, d070307, + d070405, d070406, d070407, + d070504, d070505, d070506, d070507, d070508, d070604, d070605, d070606, d070607, d070608, d070609, d070704, d070705, d070706, d070707, d070708, d070709, d070710, d070805, d070806, d070807, d070808, d070809, d070810, d070905, d070906, d070907, d070908, d070909, d070910, d071010, d071007, d071008, d071009, - d080105, d080106, d080107, - d080205, d080206, d080207, - d080305, d080306, d080307, - d080405, d080406, d080407, - d080505, d080506, d080507, d080508, + d080105, d080106, d080107, + d080205, d080206, d080207, + d080305, d080306, d080307, + d080405, d080406, d080407, + d080505, d080506, d080507, d080508, d080605, d080606, d080607, d080608, d080609, d080705, d080706, d080707, d080708, d080709, d080710, d080805, d080806, d080807, d080808, d080809, d080810, d080811, - d080910, d080911, d080905, d080906, d080907, d080908, d080909, - d081010, d081011, d081007, d081008, d081009, + d080910, d080911, d080905, d080906, d080907, d080908, d080909, + d081010, d081011, d081007, d081008, d081009, d081110, d081111, d081108, d081109, - d090105, d090106, d090107, - d090205, d090206, d090207, - d090305, d090306, d090307, - d090405, d090406, d090407, - d090505, d090506, d090507, d090508, - d090605, d090606, d090607, d090608, d090609, + d090105, d090106, d090107, + d090205, d090206, d090207, + d090305, d090306, d090307, + d090405, d090406, d090407, + d090505, d090506, d090507, d090508, + d090605, d090606, d090607, d090608, d090609, d090705, d090706, d090707, d090708, d090709, d090710, d090810, d090805, d090806, d090807, d090808, d090809, d090811, - d090910, d090911, d090912, d090905, d090906, d090907, d090908, d090909, - d091010, d091011, d091012, d091007, d091008, d091009, - d091110, d091111, d091112, d091108, d091109, + d090910, d090911, d090912, d090905, d090906, d090907, d090908, d090909, + d091010, d091011, d091012, d091007, d091008, d091009, + d091110, d091111, d091112, d091108, d091109, d091210, d091211, d091212, d091209, - di_im3_im3, di_im3_im2, di_im3_im1, di_im3_i_0, + di_im3_im3, di_im3_im2, di_im3_im1, di_im3_i_0, di_im2_im3, di_im2_im2, di_im2_im1, di_im2_i_0, di_im2_ip1, di_im1_im3, di_im1_im2, di_im1_im1, di_im1_i_0, di_im1_ip1, di_im1_ip2, di_i_0_im3, di_i_0_im2, di_i_0_im1, di_i_0_i_0, di_i_0_ip1, di_i_0_ip2, di_i_0_ip3 @@ -1804,92 +1804,92 @@ right_length(::Mattsson2012Cache6) = 9 function convolve_boundary_coefficients!(dest::AbstractVector, cache::Mattsson2012Cache6, u::AbstractVector, b::AbstractVector, α) - @unpack d010101, d010102, d010103, d010104, d010105, d010106, d010107, - d010201, d010203, d010204, d010205, d010206, d010207, - d010301, d010302, d010304, d010305, d010306, d010307, - d010401, d010402, d010403, d010405, d010406, d010407, - d010501, d010502, d010503, d010504, d010505, d010506, d010507, - d010601, d010602, d010603, d010604, d010605, d010606, d010607, - d010704, d010705, d010706, d010707, - d010805, d010806, d010807, - d010905, d010906, d010907, - d020101, d020103, d020104, d020105, d020106, d020107, - d020201, d020203, d020204, d020205, d020206, d020207, - d020301, d020304, d020305, d020306, d020307, - d020401, d020403, d020405, d020406, d020407, - d020501, d020503, d020504, d020505, d020506, d020507, - d020601, d020603, d020604, d020605, d020606, d020607, - d020704, d020705, d020706, d020707, - d020805, d020806, d020807, - d020905, d020906, d020907, - d030101, d030102, d030104, d030105, d030106, d030107, - d030201, d030204, d030205, d030206, d030207, - d030301, d030302, d030304, d030305, d030306, d030307, - d030401, d030402, d030405, d030406, d030407, - d030501, d030502, d030504, d030505, d030506, d030507, - d030601, d030602, d030604, d030605, d030606, d030607, - d030704, d030705, d030706, d030707, - d030805, d030806, d030807, - d030905, d030906, d030907, - d040101, d040102, d040103, d040105, d040106, d040107, - d040201, d040203, d040205, d040206, d040207, - d040301, d040302, d040305, d040306, d040307, - d040401, d040402, d040403, d040405, d040406, d040407, - d040501, d040502, d040503, d040505, d040506, d040507, - d040601, d040602, d040603, d040605, d040606, d040607, - d040705, d040706, d040707, - d040805, d040806, d040807, - d040905, d040906, d040907, - d050101, d050102, d050103, d050104, d050105, d050106, d050107, - d050201, d050203, d050204, d050205, d050206, d050207, - d050301, d050302, d050304, d050305, d050306, d050307, - d050401, d050402, d050403, d050405, d050406, d050407, - d050501, d050502, d050503, d050504, d050505, d050506, d050507, d050508, - d050601, d050602, d050603, d050604, d050605, d050606, d050607, d050608, - d050704, d050705, d050706, d050707, d050708, - d050805, d050806, d050807, d050808, - d050905, d050906, d050907, d050908, - d060101, d060102, d060103, d060104, d060105, d060106, d060107, - d060201, d060203, d060204, d060205, d060206, d060207, - d060301, d060302, d060304, d060305, d060306, d060307, - d060401, d060402, d060403, d060405, d060406, d060407, - d060501, d060502, d060503, d060504, d060505, d060506, d060507, d060508, - d060601, d060602, d060603, d060604, d060605, d060606, d060607, d060608, d060609, - d060704, d060705, d060706, d060707, d060708, d060709, - d060805, d060806, d060807, d060808, d060809, - d060905, d060906, d060907, d060908, d060909, - d070104, d070105, d070106, d070107, - d070204, d070205, d070206, d070207, - d070304, d070305, d070306, d070307, - d070405, d070406, d070407, - d070504, d070505, d070506, d070507, d070508, + @unpack d010101, d010102, d010103, d010104, d010105, d010106, d010107, + d010201, d010203, d010204, d010205, d010206, d010207, + d010301, d010302, d010304, d010305, d010306, d010307, + d010401, d010402, d010403, d010405, d010406, d010407, + d010501, d010502, d010503, d010504, d010505, d010506, d010507, + d010601, d010602, d010603, d010604, d010605, d010606, d010607, + d010704, d010705, d010706, d010707, + d010805, d010806, d010807, + d010905, d010906, d010907, + d020101, d020103, d020104, d020105, d020106, d020107, + d020201, d020203, d020204, d020205, d020206, d020207, + d020301, d020304, d020305, d020306, d020307, + d020401, d020403, d020405, d020406, d020407, + d020501, d020503, d020504, d020505, d020506, d020507, + d020601, d020603, d020604, d020605, d020606, d020607, + d020704, d020705, d020706, d020707, + d020805, d020806, d020807, + d020905, d020906, d020907, + d030101, d030102, d030104, d030105, d030106, d030107, + d030201, d030204, d030205, d030206, d030207, + d030301, d030302, d030304, d030305, d030306, d030307, + d030401, d030402, d030405, d030406, d030407, + d030501, d030502, d030504, d030505, d030506, d030507, + d030601, d030602, d030604, d030605, d030606, d030607, + d030704, d030705, d030706, d030707, + d030805, d030806, d030807, + d030905, d030906, d030907, + d040101, d040102, d040103, d040105, d040106, d040107, + d040201, d040203, d040205, d040206, d040207, + d040301, d040302, d040305, d040306, d040307, + d040401, d040402, d040403, d040405, d040406, d040407, + d040501, d040502, d040503, d040505, d040506, d040507, + d040601, d040602, d040603, d040605, d040606, d040607, + d040705, d040706, d040707, + d040805, d040806, d040807, + d040905, d040906, d040907, + d050101, d050102, d050103, d050104, d050105, d050106, d050107, + d050201, d050203, d050204, d050205, d050206, d050207, + d050301, d050302, d050304, d050305, d050306, d050307, + d050401, d050402, d050403, d050405, d050406, d050407, + d050501, d050502, d050503, d050504, d050505, d050506, d050507, d050508, + d050601, d050602, d050603, d050604, d050605, d050606, d050607, d050608, + d050704, d050705, d050706, d050707, d050708, + d050805, d050806, d050807, d050808, + d050905, d050906, d050907, d050908, + d060101, d060102, d060103, d060104, d060105, d060106, d060107, + d060201, d060203, d060204, d060205, d060206, d060207, + d060301, d060302, d060304, d060305, d060306, d060307, + d060401, d060402, d060403, d060405, d060406, d060407, + d060501, d060502, d060503, d060504, d060505, d060506, d060507, d060508, + d060601, d060602, d060603, d060604, d060605, d060606, d060607, d060608, d060609, + d060704, d060705, d060706, d060707, d060708, d060709, + d060805, d060806, d060807, d060808, d060809, + d060905, d060906, d060907, d060908, d060909, + d070104, d070105, d070106, d070107, + d070204, d070205, d070206, d070207, + d070304, d070305, d070306, d070307, + d070405, d070406, d070407, + d070504, d070505, d070506, d070507, d070508, d070604, d070605, d070606, d070607, d070608, d070609, d070704, d070705, d070706, d070707, d070708, d070709, d070710, d070805, d070806, d070807, d070808, d070809, d070810, d070905, d070906, d070907, d070908, d070909, d070910, d071010, d071007, d071008, d071009, - d080105, d080106, d080107, - d080205, d080206, d080207, - d080305, d080306, d080307, - d080405, d080406, d080407, - d080505, d080506, d080507, d080508, + d080105, d080106, d080107, + d080205, d080206, d080207, + d080305, d080306, d080307, + d080405, d080406, d080407, + d080505, d080506, d080507, d080508, d080605, d080606, d080607, d080608, d080609, d080705, d080706, d080707, d080708, d080709, d080710, d080805, d080806, d080807, d080808, d080809, d080810, d080811, - d080910, d080911, d080905, d080906, d080907, d080908, d080909, - d081010, d081011, d081007, d081008, d081009, + d080910, d080911, d080905, d080906, d080907, d080908, d080909, + d081010, d081011, d081007, d081008, d081009, d081110, d081111, d081108, d081109, - d090105, d090106, d090107, - d090205, d090206, d090207, - d090305, d090306, d090307, - d090405, d090406, d090407, - d090505, d090506, d090507, d090508, - d090605, d090606, d090607, d090608, d090609, + d090105, d090106, d090107, + d090205, d090206, d090207, + d090305, d090306, d090307, + d090405, d090406, d090407, + d090505, d090506, d090507, d090508, + d090605, d090606, d090607, d090608, d090609, d090705, d090706, d090707, d090708, d090709, d090710, d090810, d090805, d090806, d090807, d090808, d090809, d090811, - d090910, d090911, d090912, d090905, d090906, d090907, d090908, d090909, - d091010, d091011, d091012, d091007, d091008, d091009, - d091110, d091111, d091112, d091108, d091109, + d090910, d090911, d090912, d090905, d090906, d090907, d090908, d090909, + d091010, d091011, d091012, d091007, d091008, d091009, + d091110, d091111, d091112, d091108, d091109, d091210, d091211, d091212, d091209 = cache @inbounds begin @@ -2009,7 +2009,7 @@ function convolve_boundary_coefficients!(dest::AbstractVector, cache::Mattsson20 + (d091210*b[10] + d091211*b[11] + d091212*b[12] + d091209*b[ 9]) * u[12] ) - + dest[end] = α * ( (d010101*b[end] + d010102*b[end-1] + d010103*b[end-2] + d010104*b[end-3] + d010105*b[end-4] + d010106*b[end-5] + d010107*b[end-6]) * u[end] + (d010201*b[end] + d010203*b[end-2] + d010204*b[end-3] + d010205*b[end-4] + d010206*b[end-5] + d010207*b[end-6]) * u[end-1] @@ -2120,92 +2120,92 @@ end function convolve_boundary_coefficients!(dest::AbstractVector, cache::Mattsson2012Cache6, u::AbstractVector, b::AbstractVector, α, β) - @unpack d010101, d010102, d010103, d010104, d010105, d010106, d010107, - d010201, d010203, d010204, d010205, d010206, d010207, - d010301, d010302, d010304, d010305, d010306, d010307, - d010401, d010402, d010403, d010405, d010406, d010407, - d010501, d010502, d010503, d010504, d010505, d010506, d010507, - d010601, d010602, d010603, d010604, d010605, d010606, d010607, - d010704, d010705, d010706, d010707, - d010805, d010806, d010807, - d010905, d010906, d010907, - d020101, d020103, d020104, d020105, d020106, d020107, - d020201, d020203, d020204, d020205, d020206, d020207, - d020301, d020304, d020305, d020306, d020307, - d020401, d020403, d020405, d020406, d020407, - d020501, d020503, d020504, d020505, d020506, d020507, - d020601, d020603, d020604, d020605, d020606, d020607, - d020704, d020705, d020706, d020707, - d020805, d020806, d020807, - d020905, d020906, d020907, - d030101, d030102, d030104, d030105, d030106, d030107, - d030201, d030204, d030205, d030206, d030207, - d030301, d030302, d030304, d030305, d030306, d030307, - d030401, d030402, d030405, d030406, d030407, - d030501, d030502, d030504, d030505, d030506, d030507, - d030601, d030602, d030604, d030605, d030606, d030607, - d030704, d030705, d030706, d030707, - d030805, d030806, d030807, - d030905, d030906, d030907, - d040101, d040102, d040103, d040105, d040106, d040107, - d040201, d040203, d040205, d040206, d040207, - d040301, d040302, d040305, d040306, d040307, - d040401, d040402, d040403, d040405, d040406, d040407, - d040501, d040502, d040503, d040505, d040506, d040507, - d040601, d040602, d040603, d040605, d040606, d040607, - d040705, d040706, d040707, - d040805, d040806, d040807, - d040905, d040906, d040907, - d050101, d050102, d050103, d050104, d050105, d050106, d050107, - d050201, d050203, d050204, d050205, d050206, d050207, - d050301, d050302, d050304, d050305, d050306, d050307, - d050401, d050402, d050403, d050405, d050406, d050407, - d050501, d050502, d050503, d050504, d050505, d050506, d050507, d050508, - d050601, d050602, d050603, d050604, d050605, d050606, d050607, d050608, - d050704, d050705, d050706, d050707, d050708, - d050805, d050806, d050807, d050808, - d050905, d050906, d050907, d050908, - d060101, d060102, d060103, d060104, d060105, d060106, d060107, - d060201, d060203, d060204, d060205, d060206, d060207, - d060301, d060302, d060304, d060305, d060306, d060307, - d060401, d060402, d060403, d060405, d060406, d060407, - d060501, d060502, d060503, d060504, d060505, d060506, d060507, d060508, - d060601, d060602, d060603, d060604, d060605, d060606, d060607, d060608, d060609, - d060704, d060705, d060706, d060707, d060708, d060709, - d060805, d060806, d060807, d060808, d060809, - d060905, d060906, d060907, d060908, d060909, - d070104, d070105, d070106, d070107, - d070204, d070205, d070206, d070207, - d070304, d070305, d070306, d070307, - d070405, d070406, d070407, - d070504, d070505, d070506, d070507, d070508, + @unpack d010101, d010102, d010103, d010104, d010105, d010106, d010107, + d010201, d010203, d010204, d010205, d010206, d010207, + d010301, d010302, d010304, d010305, d010306, d010307, + d010401, d010402, d010403, d010405, d010406, d010407, + d010501, d010502, d010503, d010504, d010505, d010506, d010507, + d010601, d010602, d010603, d010604, d010605, d010606, d010607, + d010704, d010705, d010706, d010707, + d010805, d010806, d010807, + d010905, d010906, d010907, + d020101, d020103, d020104, d020105, d020106, d020107, + d020201, d020203, d020204, d020205, d020206, d020207, + d020301, d020304, d020305, d020306, d020307, + d020401, d020403, d020405, d020406, d020407, + d020501, d020503, d020504, d020505, d020506, d020507, + d020601, d020603, d020604, d020605, d020606, d020607, + d020704, d020705, d020706, d020707, + d020805, d020806, d020807, + d020905, d020906, d020907, + d030101, d030102, d030104, d030105, d030106, d030107, + d030201, d030204, d030205, d030206, d030207, + d030301, d030302, d030304, d030305, d030306, d030307, + d030401, d030402, d030405, d030406, d030407, + d030501, d030502, d030504, d030505, d030506, d030507, + d030601, d030602, d030604, d030605, d030606, d030607, + d030704, d030705, d030706, d030707, + d030805, d030806, d030807, + d030905, d030906, d030907, + d040101, d040102, d040103, d040105, d040106, d040107, + d040201, d040203, d040205, d040206, d040207, + d040301, d040302, d040305, d040306, d040307, + d040401, d040402, d040403, d040405, d040406, d040407, + d040501, d040502, d040503, d040505, d040506, d040507, + d040601, d040602, d040603, d040605, d040606, d040607, + d040705, d040706, d040707, + d040805, d040806, d040807, + d040905, d040906, d040907, + d050101, d050102, d050103, d050104, d050105, d050106, d050107, + d050201, d050203, d050204, d050205, d050206, d050207, + d050301, d050302, d050304, d050305, d050306, d050307, + d050401, d050402, d050403, d050405, d050406, d050407, + d050501, d050502, d050503, d050504, d050505, d050506, d050507, d050508, + d050601, d050602, d050603, d050604, d050605, d050606, d050607, d050608, + d050704, d050705, d050706, d050707, d050708, + d050805, d050806, d050807, d050808, + d050905, d050906, d050907, d050908, + d060101, d060102, d060103, d060104, d060105, d060106, d060107, + d060201, d060203, d060204, d060205, d060206, d060207, + d060301, d060302, d060304, d060305, d060306, d060307, + d060401, d060402, d060403, d060405, d060406, d060407, + d060501, d060502, d060503, d060504, d060505, d060506, d060507, d060508, + d060601, d060602, d060603, d060604, d060605, d060606, d060607, d060608, d060609, + d060704, d060705, d060706, d060707, d060708, d060709, + d060805, d060806, d060807, d060808, d060809, + d060905, d060906, d060907, d060908, d060909, + d070104, d070105, d070106, d070107, + d070204, d070205, d070206, d070207, + d070304, d070305, d070306, d070307, + d070405, d070406, d070407, + d070504, d070505, d070506, d070507, d070508, d070604, d070605, d070606, d070607, d070608, d070609, d070704, d070705, d070706, d070707, d070708, d070709, d070710, d070805, d070806, d070807, d070808, d070809, d070810, d070905, d070906, d070907, d070908, d070909, d070910, d071010, d071007, d071008, d071009, - d080105, d080106, d080107, - d080205, d080206, d080207, - d080305, d080306, d080307, - d080405, d080406, d080407, - d080505, d080506, d080507, d080508, + d080105, d080106, d080107, + d080205, d080206, d080207, + d080305, d080306, d080307, + d080405, d080406, d080407, + d080505, d080506, d080507, d080508, d080605, d080606, d080607, d080608, d080609, d080705, d080706, d080707, d080708, d080709, d080710, d080805, d080806, d080807, d080808, d080809, d080810, d080811, - d080910, d080911, d080905, d080906, d080907, d080908, d080909, - d081010, d081011, d081007, d081008, d081009, + d080910, d080911, d080905, d080906, d080907, d080908, d080909, + d081010, d081011, d081007, d081008, d081009, d081110, d081111, d081108, d081109, - d090105, d090106, d090107, - d090205, d090206, d090207, - d090305, d090306, d090307, - d090405, d090406, d090407, - d090505, d090506, d090507, d090508, - d090605, d090606, d090607, d090608, d090609, + d090105, d090106, d090107, + d090205, d090206, d090207, + d090305, d090306, d090307, + d090405, d090406, d090407, + d090505, d090506, d090507, d090508, + d090605, d090606, d090607, d090608, d090609, d090705, d090706, d090707, d090708, d090709, d090710, d090810, d090805, d090806, d090807, d090808, d090809, d090811, - d090910, d090911, d090912, d090905, d090906, d090907, d090908, d090909, - d091010, d091011, d091012, d091007, d091008, d091009, - d091110, d091111, d091112, d091108, d091109, + d090910, d090911, d090912, d090905, d090906, d090907, d090908, d090909, + d091010, d091011, d091012, d091007, d091008, d091009, + d091110, d091111, d091112, d091108, d091109, d091210, d091211, d091212, d091209 = cache @inbounds begin @@ -2325,7 +2325,7 @@ function convolve_boundary_coefficients!(dest::AbstractVector, cache::Mattsson20 + (d091210*b[10] + d091211*b[11] + d091212*b[12] + d091209*b[ 9]) * u[12] ) + β*dest[9] - + dest[end] = α * ( (d010101*b[end] + d010102*b[end-1] + d010103*b[end-2] + d010104*b[end-3] + d010105*b[end-4] + d010106*b[end-5] + d010107*b[end-6]) * u[end] + (d010201*b[end] + d010203*b[end-2] + d010204*b[end-3] + d010205*b[end-4] + d010206*b[end-5] + d010207*b[end-6]) * u[end-1] @@ -2435,7 +2435,7 @@ function convolve_boundary_coefficients!(dest::AbstractVector, cache::Mattsson20 end @inline function convolve_interior_coefficients_loopbody(i, cache::Mattsson2012Cache6, u, b) - @unpack di_im3_im3, di_im3_im2, di_im3_im1, di_im3_i_0, + @unpack di_im3_im3, di_im3_im2, di_im3_im1, di_im3_i_0, di_im2_im3, di_im2_im2, di_im2_im1, di_im2_i_0, di_im2_ip1, di_im1_im3, di_im1_im2, di_im1_im1, di_im1_i_0, di_im1_ip1, di_im1_ip2, di_i_0_im3, di_i_0_im2, di_i_0_im1, di_i_0_i_0, di_i_0_ip1, di_i_0_ip2, di_i_0_ip3 = cache diff --git a/src/SBP_coefficients/MattssonAlmquistVanDerWeide2018Accurate.jl b/src/SBP_coefficients/MattssonAlmquistVanDerWeide2018Accurate.jl new file mode 100644 index 00000000..5d554d0d --- /dev/null +++ b/src/SBP_coefficients/MattssonAlmquistVanDerWeide2018Accurate.jl @@ -0,0 +1,355 @@ + +""" + MattssonAlmquistVanDerWeide2018Accurate + +Coefficients of the optimized SBP operators with nonuniform grid given in + Mattsson, Almquist, van der Weide (2018) + Boundary optimized diagonal-norm SBP operators. + Journal of Computational Physics 374, pp. 1261-1266. +""" +struct MattssonAlmquistVanDerWeide2018Accurate <: SourceOfCoefficients end + +function Base.show(io::IO, ::MattssonAlmquistVanDerWeide2018Accurate) + print(io, + " Mattsson, Almquist, van der Weide (2018) \n", + " Boundary optimized diagonal-norm SBP operators ('Accurate'). \n", + " Journal of Computational Physics 374, pp. 1261-1266. \n") +end + + +function construct_grid(::MattssonAlmquistVanDerWeide2018Accurate, accuracy_order, xmin, xmax, N) + @argcheck N > 6 + T = promote_type(typeof(xmin), typeof(xmax)) + + if accuracy_order == 4 + xstart = SVector( + T(0.0000000000000e+00), + T(6.8764546205559e-01), + T(1.8022115125776e+00), + T(2.8022115125776e+00), + T(3.8022115125776e+00), + ) + elseif accuracy_order == 6 + xstart = SVector( + T(0.0000000000000e+00), + T(4.4090263368623e-01), + T(1.2855984345073e+00), + T(2.2638953951239e+00), + T(3.2638953951239e+00), + T(4.2638953951239e+00), + T(5.2638953951239e+00), + ) + elseif accuracy_order == 8 + xstart = SVector( + T(0.0000000000000e+00), + T(3.8118550247622e-01), + T(1.1899550868338e+00), + T(2.2476300175641e+00), + T(3.3192851303204e+00), + T(4.3192851303204e+00), + T(5.3192851303204e+00), + T(6.3192851303204e+00), + T(7.3192851303204e+00), + ) + else + throw(ArgumentError("Accuracy order $accuracy_order not implemented/derived.")) + end + + BoundaryAdaptedGrid(xmin, xmax, xstart, N) +end + + +function first_derivative_coefficients(source::MattssonAlmquistVanDerWeide2018Accurate, order::Int, T=Float64, parallel=Val{:serial}()) + if order == 4 + left_boundary = ( + # d1 + DerivativeCoefficientRow{T,1,4}(SVector(T(-2.3518634632279443), + T(3.0858932129093573), + T(-0.9349061508864488), + T(0.20087640120503583) )), + # d2 + DerivativeCoefficientRow{T,1,4}(SVector(T(-0.6394095807755721), + T(0), + T(0.7917608885016885), + T(-0.15235130772611635) )), + # d3 + DerivativeCoefficientRow{T,1,5}(SVector(T(0.18446061657605967), + T(-0.7539307161467195), + T(0), + T(0.6468087329936288), + T(-0.07733863342297213) )), + # d4 + DerivativeCoefficientRow{T,1,6}(SVector(T(-0.043308971097943676), + T(0.1585246807786971), + T(-0.7067880256335334), + T(0), + T(0.676082646803181), + T(-0.08451033085039762) )), + ) + right_boundary = .- left_boundary + upper_coef = SVector(T(2//3), T(-1//12)) + central_coef = zero(T) + lower_coef = -upper_coef + left_weights = SVector( T(0.21259737557798), + T(1.0260290400758), + T(1.0775123588954), + T(0.98607273802835) ) + right_weights = left_weights + left_boundary_derivatives = Tuple{}() + right_boundary_derivatives = left_boundary_derivatives + + DerivativeCoefficients(left_boundary, right_boundary, + left_boundary_derivatives, right_boundary_derivatives, + lower_coef, central_coef, upper_coef, + left_weights, right_weights, parallel, 1, order, source) + elseif order == 6 + left_boundary = ( + # d1 + DerivativeCoefficientRow{T,1,6}(SVector(T(-3.837232862086773), + T(5.068376175016296), + T(-1.6963756420892036), + T(0.5851295073874213), + T(-0.13275449453716695), + T(0.012857316309426029) )), + # d2 + DerivativeCoefficientRow{T,1,6}(SVector(T(-0.9591958116075092), + T(0), + T(1.2687130518352143), + T(-0.3860731957925361), + T(0.08345276954506707), + T(-0.006896813980236088) )), + # d3 + DerivativeCoefficientRow{T,1,6}(SVector(T(0.23226893958753303), + T(-0.9178972823223088), + T(0), + T(0.8585728949642006), + T(-0.19840158580452047), + T(0.0254570335750956) )), + # d4 + DerivativeCoefficientRow{T,1,7}(SVector(T(-0.07693308450770664), + T(0.2682207441654631), + T(-0.8244592785032373), + T(0), + T(0.7749305933808132), + T(-0.15857634324473752), + T(0.016817368709408833) )), + # d5 + DerivativeCoefficientRow{T,1,8}(SVector(T(0.017248604775379643), + T(-0.057293724956320936), + T(0.1882698460378496), + T(-0.7657841952075574), + T(0), + T(0.7505104744873311), + T(-0.14956988077877112), + T(0.01661887564208568) )), + # d6 + DerivativeCoefficientRow{T,1,9}(SVector(T(-0.0016761725437960326), + T(0.004750928272020083), + T(-0.02423857479897864), + T(0.15723370478311835), + T(-0.753044107168037), + T(0), + T(0.7503740531217644), + T(-0.15007481062435288), + T(0.016674978958261432) )), + ) + right_boundary = .- left_boundary + upper_coef = SVector(T(3//4), T(-3//20), T(1//60)) + central_coef = zero(T) + lower_coef = -upper_coef + left_weights = SVector( T(0.13030223027124), + T(0.68851501587715), + T(0.95166202564389), + T(0.99103890475697), + T(1.0028757074552), + T(0.99950151111941) ) + right_weights = left_weights + left_boundary_derivatives = Tuple{}() + right_boundary_derivatives = left_boundary_derivatives + + DerivativeCoefficients(left_boundary, right_boundary, + left_boundary_derivatives, right_boundary_derivatives, + lower_coef, central_coef, upper_coef, + left_weights, right_weights, parallel, 1, order, source) + elseif order == 8 + left_boundary = ( + # d1 + DerivativeCoefficientRow{T,1,8}(SVector(T(-4.647545021331372), + T(6.254178662563343), + T(-2.4139100510438665), + T(1.256639509571857), + T(-0.647667696659897), + T(0.24570663393330786), + T(-0.05204535767697368), + T(0.004643320643692943) )), + # d2 + DerivativeCoefficientRow{T,1,8}(SVector(T(-1.0868211647678514), + T(0), + T(1.5195364183857292), + T(-0.6543667982790691), + T(0.3128620695707949), + T(-0.11086808101811908), + T(0.021234895991755504), + T(-0.0015773398832359302) )), + # d3 + DerivativeCoefficientRow{T,1,8}(SVector(T(0.26780878369504263), + T(-0.9701235413358851), + T(0), + T(0.9726229663976735), + T(-0.3684397832422662), + T(0.1161859354443521), + T(-0.018907619882971544), + T(0.0008532589240538837) )), + # d4 + DerivativeCoefficientRow{T,1,8}(SVector(T(-0.12264219453174283), + T(0.3675044946198741), + T(-0.8555984502334516), + T(0), + T(0.7955264157053945), + T(-0.22405034810099697), + T(0.04290097854980221), + T(-0.0036408960088885555) )), + # d5 + DerivativeCoefficientRow{T,1,9}(SVector(T(0.0680142412945559), + T(-0.18906569319897437), + T(0.34874693977149884), + T(-0.855998538940948), + T(0), + T(0.7918634438230676), + T(-0.19783080393205543), + T(0.03775653807587011), + T(-0.0034861268930073425) )), + # d6 + DerivativeCoefficientRow{T,1,10}(SVector(T(-0.026557903380662235), + T(0.06895974248171861), + T(-0.11319486586973267), + T(0.24813802673084387), + T(-0.8150412273910146), + T(0), + T(0.8048396208993126), + T(-0.20182899393713088), + T(0.038273766032179475), + T(-0.0035881655655168633) )), + # d7 + DerivativeCoefficientRow{T,1,11}(SVector(T(0.005594622888681003), + T(-0.013135637494343391), + T(0.0183198514986364), + T(-0.047252720307139756), + T(0.20250470348441063), + T(-0.8004261411357496), + T(0), + T(0.7997353219580023), + T(-0.19983539676215634), + T(0.03806388509755359), + T(-0.0035684892278956487) )), + # d8 + DerivativeCoefficientRow{T,1,12}(SVector(T(-0.000499585189812272), + T(0.0009766036909553027), + T(-0.000827480914165871), + T(0.0040138390353474905), + T(-0.038683470124513085), + T(0.20090351330033354), + T(-0.8004576105033867), + T(0), + T(0.8000635199885898), + T(-0.20001587999714746), + T(0.038098262856599514), + T(-0.0035717121428062043) )), + ) + right_boundary = .- left_boundary + upper_coef = SVector(T(4//5), T(-1//5), T(4//105), T(-1//280)) + central_coef = zero(T) + lower_coef = -upper_coef + left_weights = SVector( T(0.1075836807831), + T(0.61909685107891), + T(0.96971176519117), + T(1.1023441350947), + T(1.0244688965833), + T(0.99533550116831), + T(1.0008236941028), + T(0.99992060631812) ) + right_weights = left_weights + left_boundary_derivatives = Tuple{}() + right_boundary_derivatives = left_boundary_derivatives + + DerivativeCoefficients(left_boundary, right_boundary, + left_boundary_derivatives, right_boundary_derivatives, + lower_coef, central_coef, upper_coef, + left_weights, right_weights, parallel, 1, order, source) + # elseif order == 8 + # left_boundary = ( + # # d1 + # DerivativeCoefficientRow{T,1,6}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d2 + # DerivativeCoefficientRow{T,1,6}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d3 + # DerivativeCoefficientRow{T,1,7}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d4 + # DerivativeCoefficientRow{T,1,8}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d5 + # DerivativeCoefficientRow{T,1,9}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d6 + # DerivativeCoefficientRow{T,1,10}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # ) + # right_boundary = .- left_boundary + # upper_coef = SVector(T(4//5), T(-1//5), T(4//105), T(-1//280)) + # central_coef = zero(T) + # lower_coef = -upper_coef + # left_weights = SVector( T(), + # T(), + # T(), + # T(), + # T(), + # T() ) + # right_weights = left_weights + # left_boundary_derivatives = Tuple{}() + # right_boundary_derivatives = left_boundary_derivatives + + # DerivativeCoefficients(left_boundary, right_boundary, + # left_boundary_derivatives, right_boundary_derivatives, + # lower_coef, central_coef, upper_coef, + # left_weights, right_weights, parallel, 1, order, source) + else + throw(ArgumentError("Order $order not implemented/derived.")) + end +end diff --git a/src/SBP_coefficients/MattssonAlmquistVanDerWeide2018Minimal.jl b/src/SBP_coefficients/MattssonAlmquistVanDerWeide2018Minimal.jl new file mode 100644 index 00000000..5efe4d76 --- /dev/null +++ b/src/SBP_coefficients/MattssonAlmquistVanDerWeide2018Minimal.jl @@ -0,0 +1,346 @@ + +""" + MattssonAlmquistVanDerWeide2018Minimal + +Coefficients of the optimized SBP operators with nonuniform grid given in + Mattsson, Almquist, van der Weide (2018) + Boundary optimized diagonal-norm SBP operators. + Journal of Computational Physics 374, pp. 1261-1266. +""" +struct MattssonAlmquistVanDerWeide2018Minimal <: SourceOfCoefficients end + +function Base.show(io::IO, ::MattssonAlmquistVanDerWeide2018Minimal) + print(io, + " Mattsson, Almquist, van der Weide (2018) \n", + " Boundary optimized diagonal-norm SBP operators ('Minimal'). \n", + " Journal of Computational Physics 374, pp. 1261-1266. \n") +end + + + +struct BoundaryAdaptedGrid{T,M,Grid} <: AbstractArray{T,1} + xmin::T + xmax::T + xstart::SVector{M,T} + uniform_grid::Grid +end + +function BoundaryAdaptedGrid(xmin::T, xmax::T, _xstart::SVector{M,T}, N::Int) where {M,T} + @argcheck xmin < xmax + @argcheck N > 2M + + Δx = (xmax - xmin) / (2*_xstart[end] + N + 1 - 2M) + xstart = Δx .* _xstart + uniform_grid = range(xmin + xstart[end] + Δx, xmax - xstart[end] - Δx, length=N-2M) + BoundaryAdaptedGrid{T,M,typeof(uniform_grid)}(xmin, xmax, xstart, uniform_grid) +end + +function BoundaryAdaptedGrid(xmin, xmax, xstart, N) + T = promote_type(typeof(xmin), typeof(xmax), eltype(xstart)) + BoundaryAdaptedGrid(T(xmin), T(xmax), T.(xstart), N) +end + +function Base.length(grid::BoundaryAdaptedGrid) + length(grid.uniform_grid) + 2 * length(grid.xstart) +end + +function Base.getindex(grid::BoundaryAdaptedGrid, i::Int) + N = length(grid) + M = length(grid.xstart) + @boundscheck begin + @argcheck i > 0 + @argcheck i <= N + end + + if i <= M + grid.xmin + grid.xstart[i] + elseif i >= N-M+1 + grid.xmax - grid.xstart[1+N-i] + else + @inbounds x = getindex(grid.uniform_grid, i-M) + x + end +end + +Base.size(grid::BoundaryAdaptedGrid) = (length(grid),) +Base.step(grid::BoundaryAdaptedGrid) = step(grid.uniform_grid) + + +function construct_grid(::MattssonAlmquistVanDerWeide2018Minimal, accuracy_order, xmin, xmax, N) + @argcheck N > 6 + T = promote_type(typeof(xmin), typeof(xmax)) + + if accuracy_order == 4 + xstart = SVector( + T(0.0000000000000e+00), + T(7.7122987842562e-01), + T(1.7712298784256e+00), + T(2.7712298784256e+00), + ) + elseif accuracy_order == 6 + xstart = SVector( + T(0.0000000000000e+00), + T(4.0842950991998e-01), + T(1.1968523189207e+00), + T(2.1968523189207e+00), + T(3.1968523189207e+00), + T(4.1968523189207e+00), + ) + elseif accuracy_order == 8 + xstart = SVector( + T(0.0000000000000e+00), + T(4.9439570885261e-01), + T(1.4051531374839e+00), + T(2.4051531374839e+00), + T(3.4051531374839e+00), + T(4.4051531374839e+00), + T(5.4051531374839e+00), + ) + else + throw(ArgumentError("Accuracy order $accuracy_order not implemented/derived.")) + end + + BoundaryAdaptedGrid(xmin, xmax, xstart, N) +end + + +function first_derivative_coefficients(source::MattssonAlmquistVanDerWeide2018Minimal, order::Int, T=Float64, parallel=Val{:serial}()) + if order == 4 + left_boundary = ( + # d1 + DerivativeCoefficientRow{T,1,3}(SVector(T(-1.8612097181862932), + T(2.2966302628676907), + T(-0.4354205446813973) )), + # d2 + DerivativeCoefficientRow{T,1,4}(SVector(T(-0.611186527373936), + T(0), + T(0.6937383659498486), + T(-0.08255183857591565) )), + # d3 + DerivativeCoefficientRow{T,1,5}(SVector(T(0.11778272127063323), + T(-0.7051567887047331), + T(0), + T(0.6712846484961179), + T(-0.08391058106201474) )), + ) + right_boundary = .- left_boundary + upper_coef = SVector(T(2//3), T(-1//12)) + central_coef = zero(T) + lower_coef = -upper_coef + left_weights = SVector( T(2.6864248295847e-01), + T(1.0094667153500e+00), + T(9.9312068011715e-01) ) + right_weights = left_weights + left_boundary_derivatives = Tuple{}() + right_boundary_derivatives = left_boundary_derivatives + + DerivativeCoefficients(left_boundary, right_boundary, + left_boundary_derivatives, right_boundary_derivatives, + lower_coef, central_coef, upper_coef, + left_weights, right_weights, parallel, 1, order, source) + elseif order == 6 + left_boundary = ( + # d1 + DerivativeCoefficientRow{T,1,5}(SVector(T(-3.924566448353279), + T(4.962014957077398), + T(-1.2881968205658438), + T(0.28645730739095715), + T(-0.03570899554923223) )), + # d2 + DerivativeCoefficientRow{T,1,5}(SVector(T(-1.022587534557978), + T(0), + T(1.3023996740158794), + T(-0.3357380168806994), + T(0.05592587742279807) )), + # d3 + DerivativeCoefficientRow{T,1,6}(SVector(T(0.17402334848464412), + T(-0.8537429915394141), + T(0), + T(0.8419418935035105), + T(-0.179894658468737), + T(0.017672408019993497) )), + # d4 + DerivativeCoefficientRow{T,1,7}(SVector(T(-0.036159059808532096), + T(0.20564365765539105), + T(-0.7867088686169533), + T(0), + T(0.749328780370319), + T(-0.1486175733002554), + T(0.01651306370002838) )), + # d5 + DerivativeCoefficientRow{T,1,8}(SVector(T(0.004554664962414826), + T(-0.03461379228073425), + T(0.16985243300141972), + T(-0.7571710333787599), + T(0), + T(0.7508648039541874), + T(-0.15017296079083747), + T(0.016685884532315277) )), + ) + right_boundary = .- left_boundary + upper_coef = SVector(T(3//4), T(-3//20), T(1//60)) + central_coef = zero(T) + lower_coef = -upper_coef + left_weights = SVector( T(0.12740260779883), + T(0.61820981002054), + T(0.94308973897679), + T(1.0093019060199), + T(0.99884825610465) ) + right_weights = left_weights + left_boundary_derivatives = Tuple{}() + right_boundary_derivatives = left_boundary_derivatives + + DerivativeCoefficients(left_boundary, right_boundary, + left_boundary_derivatives, right_boundary_derivatives, + lower_coef, central_coef, upper_coef, + left_weights, right_weights, parallel, 1, order, source) + elseif order == 8 + left_boundary = ( + # d1 + DerivativeCoefficientRow{T,1,6}(SVector(T(-3.4425783018277825), + T(4.592216499078388), + T(-1.5780326084197085), + T(0.5114508898159292), + T(-0.08276413469602352), + T(-0.00029234395080269453) )), + # d2 + DerivativeCoefficientRow{T,1,6}(SVector(T(-0.8677229176949711), + T(0), + T(1.1480053882687404), + T(-0.34675581554193646), + T(0.07194779962833377), + T(-0.005474454660166564) )), + # d3 + DerivativeCoefficientRow{T,1,7}(SVector(T(0.2312364265180344), + T(-0.8902776878396409), + T(0), + T(0.8364384829720679), + T(-0.21345201833077546), + T(0.039658060554022004), + T(-0.0036032638737076134) )), + # d4 + DerivativeCoefficientRow{T,1,8}(SVector(T(-0.07428870791937443), + T(0.26655320361241747), + T(-0.8291108452061701), + T(0), + T(0.8031154600461715), + T(-0.200795518743896), + T(0.038098105611977996), + T(-0.0035716974011229742) )), + # d5 + DerivativeCoefficientRow{T,1,9}(SVector(T(0.012018140909062053), + T(-0.0552909326936426), + T(0.21152178487239182), + T(-0.8028866425212018), + T(0), + T(0.8000791459238572), + T(-0.19995806770071226), + T(0.03808725099061186), + T(-0.0035706797803698614) )), + # d6 + DerivativeCoefficientRow{T,1,10}(SVector(T(4.246147652870495e-5), + T(0.004208071691358718), + T(-0.03930901628651875), + T(0.2007872492592992), + T(-0.800274203791225), + T(0), + T(0.800027268482503), + T(-0.20000681712062576), + T(0.03809653659440491), + T(-0.00357155030572546) )), + ) + right_boundary = .- left_boundary + upper_coef = SVector(T(4//5), T(-1//5), T(4//105), T(-1//280)) + central_coef = zero(T) + lower_coef = -upper_coef + left_weights = SVector( T(0.14523997892351), + T(0.76864793350174), + T(0.99116487068535), + T(0.99992473335107), + T(1.0002097054636), + T(0.99996591555866) ) + right_weights = left_weights + left_boundary_derivatives = Tuple{}() + right_boundary_derivatives = left_boundary_derivatives + + DerivativeCoefficients(left_boundary, right_boundary, + left_boundary_derivatives, right_boundary_derivatives, + lower_coef, central_coef, upper_coef, + left_weights, right_weights, parallel, 1, order, source) + # elseif order == 8 + # left_boundary = ( + # # d1 + # DerivativeCoefficientRow{T,1,6}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d2 + # DerivativeCoefficientRow{T,1,6}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d3 + # DerivativeCoefficientRow{T,1,7}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d4 + # DerivativeCoefficientRow{T,1,8}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d5 + # DerivativeCoefficientRow{T,1,9}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # # d6 + # DerivativeCoefficientRow{T,1,10}(SVector(T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T(), + # T() )), + # ) + # right_boundary = .- left_boundary + # upper_coef = SVector(T(4//5), T(-1//5), T(4//105), T(-1//280)) + # central_coef = zero(T) + # lower_coef = -upper_coef + # left_weights = SVector( T(), + # T(), + # T(), + # T(), + # T(), + # T() ) + # right_weights = left_weights + # left_boundary_derivatives = Tuple{}() + # right_boundary_derivatives = left_boundary_derivatives + + # DerivativeCoefficients(left_boundary, right_boundary, + # left_boundary_derivatives, right_boundary_derivatives, + # lower_coef, central_coef, upper_coef, + # left_weights, right_weights, parallel, 1, order, source) + else + throw(ArgumentError("Order $order not implemented/derived.")) + end +end diff --git "a/src/SBP_coefficients/MattssonNordstr\303\266m2004.jl" "b/src/SBP_coefficients/MattssonNordstr\303\266m2004.jl" index 1b7aa475..f359b428 100644 --- "a/src/SBP_coefficients/MattssonNordstr\303\266m2004.jl" +++ "b/src/SBP_coefficients/MattssonNordstr\303\266m2004.jl" @@ -6,7 +6,7 @@ Coefficients of the SBP operators given in Mattsson, Nordström (2004) Summation by parts operators for finite difference approximations of second derivatives. - Journal of Computational Physics 199, pp.503-540. + Journal of Computational Physics 199, pp. 503-540. """ struct MattssonNordström2004 <: SourceOfCoefficients end @@ -15,7 +15,7 @@ print(io, " Mattsson, Nordström (2004) \n", " Summation by parts operators for finite difference approximations of second \n", " derivaties. \n", - " Journal of Computational Physics 199, pp.503-540. \n") + " Journal of Computational Physics 199, pp. 503-540. \n") end diff --git "a/src/SBP_coefficients/MattssonSv\303\244rdNordstr\303\266m2004.jl" "b/src/SBP_coefficients/MattssonSv\303\244rdNordstr\303\266m2004.jl" index 1d245889..774c3d8f 100644 --- "a/src/SBP_coefficients/MattssonSv\303\244rdNordstr\303\266m2004.jl" +++ "b/src/SBP_coefficients/MattssonSv\303\244rdNordstr\303\266m2004.jl" @@ -18,7 +18,7 @@ function Base.show(io::IO, ::MattssonSvärdNordström2004) " Mattsson, Nordström (2004) \n", " Summation by parts operators for finite difference approximations of second \n", " derivaties. \n", - " Journal of Computational Physics 199, pp.503-540. \n") + " Journal of Computational Physics 199, pp. 503-540. \n") end diff --git "a/src/SBP_coefficients/MattssonSv\303\244rdShoeybi2008.jl" "b/src/SBP_coefficients/MattssonSv\303\244rdShoeybi2008.jl" index 7520de9d..5b1e1af9 100644 --- "a/src/SBP_coefficients/MattssonSv\303\244rdShoeybi2008.jl" +++ "b/src/SBP_coefficients/MattssonSv\303\244rdShoeybi2008.jl" @@ -18,7 +18,7 @@ function Base.show(io::IO, ::MattssonSvärdShoeybi2008) " Mattsson, Nordström (2004) \n", " Summation by parts operators for finite difference approximations of second \n", " derivaties. \n", - " Journal of Computational Physics 199, pp.503-540. \n") + " Journal of Computational Physics 199, pp. 503-540. \n") end diff --git a/src/SummationByPartsOperators.jl b/src/SummationByPartsOperators.jl index 8649c8ec..757a30e8 100644 --- a/src/SummationByPartsOperators.jl +++ b/src/SummationByPartsOperators.jl @@ -60,6 +60,8 @@ include("SBP_coefficients/Mattsson2014.jl") include("SBP_coefficients/MattssonAlmquistCarpenter2014Extended.jl") include("SBP_coefficients/MattssonAlmquistCarpenter2014Optimal.jl") include("SBP_coefficients/Mattsson2017.jl") +include("SBP_coefficients/MattssonAlmquistVanDerWeide2018Minimal.jl") +include("SBP_coefficients/MattssonAlmquistVanDerWeide2018Accurate.jl") include("conservation_laws/general_laws.jl") include("conservation_laws/burgers.jl") @@ -95,7 +97,8 @@ export Fornberg1998, Holoborodko2008, BeljaddLeFlochMishraParés2017 export MattssonNordström2004, MattssonSvärdNordström2004, MattssonSvärdShoeybi2008, Mattsson2012, Mattsson2014, MattssonAlmquistCarpenter2014Extended, MattssonAlmquistCarpenter2014Optimal, - Mattsson2017 + Mattsson2017, + MattssonAlmquistVanDerWeide2018Minimal, MattssonAlmquistVanDerWeide2018Accurate export Tadmor1989, MadayTadmor1989, Tadmor1993, TadmorWaagan2012Standard, TadmorWaagan2012Convergent diff --git a/test/SBP_operators_test.jl b/test/SBP_operators_test.jl index 54199c88..1c2e89d9 100644 --- a/test/SBP_operators_test.jl +++ b/test/SBP_operators_test.jl @@ -5,7 +5,9 @@ using SummationByPartsOperators D_test_list = (MattssonNordström2004(), MattssonSvärdNordström2004(), MattssonSvärdShoeybi2008(), Mattsson2014(), MattssonAlmquistCarpenter2014Extended(), - MattssonAlmquistCarpenter2014Optimal()) + MattssonAlmquistCarpenter2014Optimal(), + MattssonAlmquistVanDerWeide2018Minimal(), + MattssonAlmquistVanDerWeide2018Accurate()) # Accuracy tests of first derivative operators. for source in D_test_list, T in (Float32,Float64) @@ -21,8 +23,8 @@ for source in D_test_list, T in (Float32,Float64) nothing end if D != nothing - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -34,7 +36,7 @@ for source in D_test_list, T in (Float32,Float64) @test issymmetric(D) == false # interior and boundary mul!(res, D, x0) - @test all(i->abs(res[i]) < 50*eps(T), eachindex(res)) + @test all(i->abs(res[i]) < 1000*eps(T), eachindex(res)) mul!(res, D, x1) @test all(i->res[i] ≈ x0[i], eachindex(res)) # only interior @@ -55,8 +57,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -72,7 +74,7 @@ for source in D_test_list, T in (Float32,Float64) @test issymmetric(D) == false # interior and boundary mul!(res, D, x0) - @test all(i->abs(res[i]) < 50*eps(T), eachindex(res)) + @test all(i->abs(res[i]) < 1000*eps(T), eachindex(res)) mul!(res, D, x1) @test all(i->res[i] ≈ x0[i], eachindex(res)) if source != Mattsson2014() @@ -101,8 +103,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -118,7 +120,7 @@ for source in D_test_list, T in (Float32,Float64) @test issymmetric(D) == false # interior and boundary mul!(res, D, x0) - @test all(i->abs(res[i]) < 500*eps(T), eachindex(res)) + @test all(i->abs(res[i]) < 1000*eps(T), eachindex(res)) mul!(res, D, x1) @test all(i->res[i] ≈ x0[i], eachindex(res)) mul!(res, D, x2) @@ -153,8 +155,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -170,13 +172,13 @@ for source in D_test_list, T in (Float32,Float64) @test issymmetric(D) == false # interior and boundary mul!(res, D, x0) - @test all(i->abs(res[i]) < 8000*eps(T), eachindex(res)) + @test all(i->abs(res[i]) < 16000*eps(T), eachindex(res)) mul!(res, D, x1) - @test all(i->isapprox(res[i], x0[i], rtol=18000*eps(T)), eachindex(res)) + @test all(i->isapprox(res[i], x0[i], rtol=28000*eps(T)), eachindex(res)) mul!(res, D, x2) - @test all(i->isapprox(res[i], 2*x1[i], rtol=8000*eps(T)), eachindex(res)) + @test all(i->isapprox(res[i], 2*x1[i], rtol=18000*eps(T)), eachindex(res)) mul!(res, D, x3) - @test all(i->isapprox(res[i], 3*x2[i], rtol=8000*eps(T)), eachindex(res)) + @test all(i->isapprox(res[i], 3*x2[i], rtol=18000*eps(T)), eachindex(res)) mul!(res, D, x4) @test all(i->res[i] ≈ 4*x3[i], inner_indices) # only interior @@ -213,8 +215,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -254,8 +256,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -304,8 +306,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -358,8 +360,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -427,8 +429,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -477,8 +479,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -532,8 +534,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -602,8 +604,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -659,8 +661,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1 @@ -724,8 +726,8 @@ for source in D_test_list, T in (Float32,Float64) end if D != nothing D = derivative_operator(source, der_order, acc_order, xmin, xmax, N) - println(devnull, D) - println(devnull, D.coefficients) + println(D) + println(D.coefficients) x1 = grid(D) x0 = fill(one(eltype(x1)), length(x1)) x2 = x1 .* x1