|
761 | 761 | integrator.stats.nf += 6 |
762 | 762 | if integrator.alg isa CompositeAlgorithm |
763 | 763 | g7 = u |
764 | | - # Hairer II, page 22 |
765 | | - integrator.eigen_est = integrator.opts.internalnorm(k7 - k6, t) / |
766 | | - integrator.opts.internalnorm(g7 - g6, t) |
| 764 | + # Hairer II, page 22 modified to use the Inf norm |
| 765 | + integrator.eigen_est = integrator.opts.internalnorm(maximum(abs.(k7 .- k6) ./ (g7 .- g6)), t) |
767 | 766 | end |
768 | 767 | if integrator.opts.adaptive |
769 | 768 | utilde = dt * |
|
836 | 835 | if integrator.alg isa CompositeAlgorithm |
837 | 836 | g7 = u |
838 | 837 | g6 = tmp |
839 | | - # Hairer II, page 22 |
840 | | - @.. broadcast=false thread=thread utilde=k7 - k6 |
841 | | - ϱu = integrator.opts.internalnorm(utilde, t) |
842 | | - @.. broadcast=false thread=thread utilde=g7 - g6 |
843 | | - ϱd = integrator.opts.internalnorm(utilde, t) |
844 | | - integrator.eigen_est = ϱu / ϱd |
| 838 | + # Hairer II, page 22 modified to use Inf norm |
| 839 | + @.. broadcast=false thread=thread utilde=abs((k7 - k6) / (g7 - g6)) |
| 840 | + integrator.eigen_est = integrator.opts.internalnorm(maximum(utilde), t) |
845 | 841 | end |
846 | 842 | if integrator.opts.adaptive |
847 | 843 | @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde2 * k2 + |
|
889 | 885 | integrator.stats.nf += 6 |
890 | 886 | if integrator.alg isa CompositeAlgorithm |
891 | 887 | g7 = u |
892 | | - # Hairer II, page 22 |
893 | | - integrator.eigen_est = integrator.opts.internalnorm(k7 - k6, t) / |
894 | | - integrator.opts.internalnorm(g7 - g6, t) |
| 888 | + # Hairer II, page 22 modified to use the Inf norm |
| 889 | + integrator.eigen_est = integrator.opts.internalnorm(maximum(abs.(k7 .- k6) ./ (g7 .- g6)), t) |
895 | 890 | end |
896 | 891 | if integrator.opts.adaptive |
897 | 892 | utilde = dt * |
|
957 | 952 | if integrator.alg isa CompositeAlgorithm |
958 | 953 | g6 = tmp |
959 | 954 | g7 = u |
960 | | - # Hairer II, page 22 |
961 | | - @.. broadcast=false thread=thread g6=g7 - g6 |
962 | | - ϱd = integrator.opts.internalnorm(g6, t) |
963 | | - @.. broadcast=false thread=thread tmp=k7 - k6 |
964 | | - ϱu = integrator.opts.internalnorm(tmp, t) |
965 | | - integrator.eigen_est = (ϱu / ϱd) * oneunit(t) |
| 955 | + # Hairer II, page 22 modified to use Inf norm |
| 956 | + @.. broadcast=false thread=thread utilde=abs((k7 - k6) / (g7 - g6)) |
| 957 | + integrator.eigen_est = integrator.opts.internalnorm(maximum(utilde) * oneunit(t), t) |
966 | 958 | end |
967 | 959 | if integrator.opts.adaptive |
968 | 960 | @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde3 * k3 + |
|
987 | 979 | return nothing |
988 | 980 | end |
989 | 981 |
|
990 | | -#= |
991 | | -@muladd function perform_step!(integrator, cache::DP5Cache, repeat_step=false) |
992 | | - @unpack t,dt,uprev,u,f,p = integrator |
993 | | - uidx = eachindex(integrator.uprev) |
994 | | - @unpack a21,a31,a32,a41,a42,a43,a51,a52,a53,a54,a61,a62,a63,a64,a65,a71,a73,a74,a75,a76,btilde1,btilde3,btilde4,btilde5,btilde6,btilde7,c1,c2,c3,c4,c5,c6 = cache.tab |
995 | | - @unpack k1,k2,k3,k4,k5,k6,k7,dense_tmp3,dense_tmp4,update,bspl,utilde,tmp,atmp = cache |
996 | | - @unpack d1,d3,d4,d5,d6,d7 = cache.tab |
997 | | - a = dt*a21 |
998 | | - @tight_loop_macros for i in uidx |
999 | | - @inbounds tmp[i] = uprev[i]+a*k1[i] |
1000 | | - end |
1001 | | - f(k2, tmp, p, t+c1*dt) |
1002 | | - @tight_loop_macros for i in uidx |
1003 | | - @inbounds tmp[i] = uprev[i]+dt*(a31*k1[i]+a32*k2[i]) |
1004 | | - end |
1005 | | - f(k3, tmp, p, t+c2*dt) |
1006 | | - @tight_loop_macros for i in uidx |
1007 | | - @inbounds tmp[i] = uprev[i]+dt*(a41*k1[i]+a42*k2[i]+a43*k3[i]) |
1008 | | - end |
1009 | | - f(k4, tmp, p, t+c3*dt) |
1010 | | - @tight_loop_macros for i in uidx |
1011 | | - @inbounds tmp[i] = uprev[i]+dt*(a51*k1[i]+a52*k2[i]+a53*k3[i]+a54*k4[i]) |
1012 | | - end |
1013 | | - f(k5, tmp, p, t+c4*dt) |
1014 | | - @tight_loop_macros for i in uidx |
1015 | | - @inbounds tmp[i] = uprev[i]+dt*(a61*k1[i]+a62*k2[i]+a63*k3[i]+a64*k4[i]+a65*k5[i]) |
1016 | | - end |
1017 | | - f(k6, tmp, p, t+dt) |
1018 | | - @tight_loop_macros for i in uidx |
1019 | | - @inbounds update[i] = a71*k1[i]+a73*k3[i]+a74*k4[i]+a75*k5[i]+a76*k6[i] |
1020 | | - @inbounds u[i] = uprev[i]+dt*update[i] |
1021 | | - end |
1022 | | - f(k7, u, p, t+dt) |
1023 | | - integrator.stats.nf += 6 |
1024 | | - if integrator.alg isa CompositeAlgorithm |
1025 | | - g6 = tmp |
1026 | | - g7 = u |
1027 | | - # Hairer II, page 22 |
1028 | | - ϱu, ϱd = zero(eltype(k7))^2, zero(eltype(g7))^2 |
1029 | | - @inbounds for i in eachindex(k7) |
1030 | | - ϱu += (k7[i] - k6[i])^2 |
1031 | | - ϱd += (g7[i] - g6[i])^2 |
1032 | | - end |
1033 | | - integrator.eigen_est = sqrt(ϱu/ϱd)*oneunit(t) |
1034 | | - end |
1035 | | - if integrator.opts.adaptive |
1036 | | - @tight_loop_macros for i in uidx |
1037 | | - @inbounds utilde[i] = dt*(btilde1*k1[i] + btilde3*k3[i] + btilde4*k4[i] + btilde5*k5[i] + btilde6*k6[i] + btilde7*k7[i]) |
1038 | | - end |
1039 | | - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol,integrator.opts.internalnorm,t) |
1040 | | - integrator.EEst = integrator.opts.internalnorm(atmp,t) |
1041 | | - end |
1042 | | - if integrator.opts.calck |
1043 | | - @tight_loop_macros for i in uidx |
1044 | | - #integrator.k[4] == k5 |
1045 | | - @inbounds integrator.k[4][i] = d1*k1[i]+d3*k3[i]+d4*k4[i]+d5*k5[i]+d6*k6[i]+d7*k7[i] |
1046 | | - #bspl == k3 |
1047 | | - @inbounds bspl[i] = k1[i] - update[i] |
1048 | | - # k6 === integrator.k[3] === k2 |
1049 | | - @inbounds integrator.k[3][i] = update[i] - k7[i] - bspl[i] |
1050 | | - end |
1051 | | - end |
1052 | | -end |
1053 | | -=# |
1054 | | - |
1055 | 982 | function initialize!(integrator, cache::KYK2014DGSSPRK_3S2_ConstantCache) |
1056 | 983 | integrator.fsalfirst = integrator.f(integrator.uprev, integrator.p, integrator.t) # Pre-start fsal |
1057 | 984 | integrator.stats.nf += 1 |
|
0 commit comments