diff --git a/CHANGELOG.md b/CHANGELOG.md index b766f5c334..34c8cf9949 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,7 +32,11 @@ Added Fortran support for the LAPACK dense `SUNLinearSolver` implementations. Fixed the build system support for MAGMA when using a NVIDIA HPC SDK installation of CUDA and fixed the targets used for rocBLAS and rocSPARSE. -Added the fourth order ERK method `ARKODE_SOFRONIOU_SPALETTA_5_3_4`. +Added the third order ERK method `ARKODE_SHU_OSHER_3_2_3`, the fourth order +ERK method `ARKODE_SOFRONIOU_SPALETTA_5_3_4`, the sixth order ERK method +`ARKODE_VERNER_9_5_6`, the seventh order ERK method `ARKODE_VERNER_10_6_7`, +the eighth order ERK method `ARKODE_VERNER_13_7_8`, and the ninth order ERK +method `ARKODE_VERNER_16_8_9`. ## Changes to SUNDIALS in release 6.6.1 diff --git a/doc/arkode/guide/source/Butcher.rst b/doc/arkode/guide/source/Butcher.rst index c9166aa55a..b9654211f5 100644 --- a/doc/arkode/guide/source/Butcher.rst +++ b/doc/arkode/guide/source/Butcher.rst @@ -297,6 +297,39 @@ method from :cite:p:`KenCarp:03`). region is outlined in blue; the embedding's region is in red. +Shu-Osher-3-2-3 +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. index:: Shu-Osher-3-2-3 ERK method + +Accessible via the constant ``ARKODE_SHU_OSHER_3_2_3`` to +:c:func:`ARKStepSetTableNum`, :c:func:`ERKStepSetTableNum` or +:c:func:`ARKodeButcherTable_LoadERK`. +Accessible via the string ``"ARKODE_SHU_OSHER_3_2_3"`` to +:c:func:`ARKStepSetTableName`, :c:func:`ERKStepSetTableName` or +:c:func:`ARKodeButcherTable_LoadERKByName`. +(from :cite:p:`ShOs:88` with embedding from :cite:p:`FCS:21`). + +.. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|ccc} + 0 & 0 & 0 & 0 \\ + 1 & 0 & 0 & 0 \\ + \frac{1}{2} & \frac{1}{4} & \frac{1}{4} & 0 \\ + \hline + 3 & \frac{1}{6} & \frac{1}{6} & \frac{2}{3} \\ + 2 & \frac{291485418878409}{1000000000000000} & \frac{291485418878409}{1000000000000000} & \frac{208514581121591}{500000000000000} + \end{array} + +.. figure:: /figs/arkode/shu_osher_erk_stab_region.png + :scale: 50 % + :align: center + + Linear stability region for the Shu-Osher method. The method's + region is outlined in blue; the embedding's region is in red. + + .. _Butcher.Knoth_Wolke: @@ -355,6 +388,7 @@ Accessible via the string ``"ARKODE_SOFRONIOU_SPALETTA_5_3_4"`` to \frac{3}{5} & -\frac{3}{20} & \frac{3}{4} & 0 & 0 & 0 \\ 1 & \frac{19}{44} & -\frac{15}{44} & \frac{10}{11} & 0 & 0 \\ 1 & \frac{11}{72} & \frac{25}{72} & \frac{25}{72} & \frac{11}{72} & 0 \\ + \hline 4 & \frac{11}{72} & \frac{25}{72} & \frac{25}{72} & \frac{11}{72} & 0 \\ 3 & \frac{1251515}{8970912} & \frac{3710105}{8970912} & \frac{2519695}{8970912} & \frac{61105}{8970912} & \frac{119041}{747576} \\ \end{array} @@ -467,21 +501,27 @@ Accessible via the string ``"ARKODE_ARK437L2SA_ERK_7_3_4"`` to This is the explicit portion of the 4th order additive method (the explicit portion of the ARK4(3)7L[2]SA method from :cite:p:`KenCarp:19`). -.. math:: +.. only:: html - \renewcommand{\arraystretch}{1.5} - \begin{array}{r|ccccccc} - 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{247}{1000} & \frac{247}{1000} & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{4276536705230}{10142255878289} & \frac{247}{4000} & \frac{2694949928731}{7487940209513} & 0 & 0 & 0 & 0 & 0 \\ - \frac{67}{200} & \frac{464650059369}{8764239774964} & \frac{878889893998}{2444806327765} & -\frac{952945855348}{12294611323341} & 0 & 0 & 0 & 0 \\ - \frac{3}{40} & \frac{476636172619}{8159180917465} & -\frac{1271469283451}{7793814740893} & -\frac{859560642026}{4356155882851} & \frac{1723805262919}{4571918432560} & 0 & 0 & 0 \\ - \frac{7}{10} & \frac{6338158500785}{11769362343261} & -\frac{4970555480458}{10924838743837} & \frac{3326578051521}{2647936831840} & -\frac{880713585975}{1841400956686} & -\frac{1428733748635}{8843423958496} & 0 & 0 \\ - 1 & \frac{760814592956}{3276306540349} & \frac{760814592956}{3276306540349} & -\frac{47223648122716}{6934462133451} & \frac{71187472546993}{9669769126921} & -\frac{13330509492149}{9695768672337} & \frac{11565764226357}{8513123442827} & 0 \\ - \hline - 4 & 0 & 0 & \frac{9164257142617}{17756377923965} & -\frac{10812980402763}{74029279521829} & \frac{1335994250573}{5691609445217} & \frac{2273837961795}{8368240463276} & \frac{247}{2000} \\ - 3 & 0 & 0 & \frac{4469248916618}{8635866897933} & -\frac{621260224600}{4094290005349} & \frac{696572312987}{2942599194819} & \frac{1532940081127}{5565293938103} & \frac{2441}{20000} - \end{array} + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|ccccccc} + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{247}{1000} & \frac{247}{1000} & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{4276536705230}{10142255878289} & \frac{247}{4000} & \frac{2694949928731}{7487940209513} & 0 & 0 & 0 & 0 & 0 \\ + \frac{67}{200} & \frac{464650059369}{8764239774964} & \frac{878889893998}{2444806327765} & -\frac{952945855348}{12294611323341} & 0 & 0 & 0 & 0 \\ + \frac{3}{40} & \frac{476636172619}{8159180917465} & -\frac{1271469283451}{7793814740893} & -\frac{859560642026}{4356155882851} & \frac{1723805262919}{4571918432560} & 0 & 0 & 0 \\ + \frac{7}{10} & \frac{6338158500785}{11769362343261} & -\frac{4970555480458}{10924838743837} & \frac{3326578051521}{2647936831840} & -\frac{880713585975}{1841400956686} & -\frac{1428733748635}{8843423958496} & 0 & 0 \\ + 1 & \frac{760814592956}{3276306540349} & \frac{760814592956}{3276306540349} & -\frac{47223648122716}{6934462133451} & \frac{71187472546993}{9669769126921} & -\frac{13330509492149}{9695768672337} & \frac{11565764226357}{8513123442827} & 0 \\ + \hline + 4 & 0 & 0 & \frac{9164257142617}{17756377923965} & -\frac{10812980402763}{74029279521829} & \frac{1335994250573}{5691609445217} & \frac{2273837961795}{8368240463276} & \frac{247}{2000} \\ + 3 & 0 & 0 & \frac{4469248916618}{8635866897933} & -\frac{621260224600}{4094290005349} & \frac{696572312987}{2942599194819} & \frac{1532940081127}{5565293938103} & \frac{2441}{20000} + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. .. figure:: /figs/arkode/stab_region_34.png :scale: 50 % @@ -676,22 +716,29 @@ Accessible via the string ``"ARKODE_ARK548L2SA_ERK_8_4_5"`` to This is the explicit portion of the default 5th order additive method (the explicit portion of the ARK5(4)8L[2]SA method from :cite:p:`KenCarp:03`). -.. math:: +.. only:: html + + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|cccccccc} + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{41}{100} & \frac{41}{100} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{2935347310677}{11292855782101} & \frac{367902744464}{2072280473677} & \frac{677623207551}{8224143866563} & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{1426016391358}{7196633302097} & \frac{1268023523408}{10340822734521} & 0 & \frac{1029933939417}{13636558850479} & 0 & 0 & 0 & 0 & 0 \\ + \frac{92}{100} & \frac{14463281900351}{6315353703477} & 0 & \frac{66114435211212}{5879490589093} & -\frac{54053170152839}{4284798021562} & 0 & 0 & 0 & 0 \\ + \frac{24}{100} & \frac{14090043504691}{34967701212078} & 0 & \frac{15191511035443}{11219624916014} & -\frac{18461159152457}{12425892160975} & -\frac{281667163811}{9011619295870} & 0 & 0 & 0 \\ + \frac{3}{5} & \frac{19230459214898}{13134317526959} & 0 & \frac{21275331358303}{2942455364971} & -\frac{38145345988419}{4862620318723} & -\frac{1}{8} & -\frac{1}{8} & 0 & 0 \\ + 1 & -\frac{19977161125411}{11928030595625} & 0 & -\frac{40795976796054}{6384907823539} & \frac{177454434618887}{12078138498510} & \frac{782672205425}{8267701900261} & -\frac{69563011059811}{9646580694205} & \frac{7356628210526}{4942186776405} & 0 \\ + \hline + 5 & -\frac{872700587467}{9133579230613} & 0 & 0 & \frac{22348218063261}{9555858737531} & -\frac{1143369518992}{8141816002931} & -\frac{39379526789629}{19018526304540} & \frac{32727382324388}{42900044865799} & \frac{41}{200} \\ + 4 & -\frac{975461918565}{9796059967033} & 0 & 0 & \frac{78070527104295}{32432590147079} & -\frac{548382580838}{3424219808633} & -\frac{33438840321285}{15594753105479} & \frac{3629800801594}{4656183773603} & \frac{4035322873751}{18575991585200} + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. - \renewcommand{\arraystretch}{1.5} - \begin{array}{r|cccccccc} - 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{41}{100} & \frac{41}{100} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{2935347310677}{11292855782101} & \frac{367902744464}{2072280473677} & \frac{677623207551}{8224143866563} & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{1426016391358}{7196633302097} & \frac{1268023523408}{10340822734521} & 0 & \frac{1029933939417}{13636558850479} & 0 & 0 & 0 & 0 & 0 \\ - \frac{92}{100} & \frac{14463281900351}{6315353703477} & 0 & \frac{66114435211212}{5879490589093} & -\frac{54053170152839}{4284798021562} & 0 & 0 & 0 & 0 \\ - \frac{24}{100} & \frac{14090043504691}{34967701212078} & 0 & \frac{15191511035443}{11219624916014} & -\frac{18461159152457}{12425892160975} & -\frac{281667163811}{9011619295870} & 0 & 0 & 0 \\ - \frac{3}{5} & \frac{19230459214898}{13134317526959} & 0 & \frac{21275331358303}{2942455364971} & -\frac{38145345988419}{4862620318723} & -\frac{1}{8} & -\frac{1}{8} & 0 & 0 \\ - 1 & -\frac{19977161125411}{11928030595625} & 0 & -\frac{40795976796054}{6384907823539} & \frac{177454434618887}{12078138498510} & \frac{782672205425}{8267701900261} & -\frac{69563011059811}{9646580694205} & \frac{7356628210526}{4942186776405} & 0 \\ - \hline - 5 & -\frac{872700587467}{9133579230613} & 0 & 0 & \frac{22348218063261}{9555858737531} & -\frac{1143369518992}{8141816002931} & -\frac{39379526789629}{19018526304540} & \frac{32727382324388}{42900044865799} & \frac{41}{200} \\ - 4 & -\frac{975461918565}{9796059967033} & 0 & 0 & \frac{78070527104295}{32432590147079} & -\frac{548382580838}{3424219808633} & -\frac{33438840321285}{15594753105479} & \frac{3629800801594}{4656183773603} & \frac{4035322873751}{18575991585200} - \end{array} .. figure:: /figs/arkode/stab_region_9.png :scale: 50 % @@ -721,22 +768,28 @@ Accessible via the string ``"ARKODE_ARK548L2SAb_ERK_8_4_5"`` to This is the explicit portion of the 5th order ARK5(4)8L[2]SA method from :cite:p:`KenCarp:19`. -.. math:: +.. only:: html - \renewcommand{\arraystretch}{1.5} - \begin{array}{r|cccccccc} - 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{4}{9} & \frac{4}{9} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{6456083330201}{8509243623797} & \frac{1}{9} & \frac{1183333538310}{1827251437969} & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{1632083962415}{14158861528103} & \frac{895379019517}{9750411845327} & \frac{477606656805}{13473228687314} & \frac{-112564739183}{9373365219272} & 0 & 0 & 0 & 0 & 0 \\ - \frac{6365430648612}{17842476412687} & \frac{-4458043123994}{13015289567637} & \frac{-2500665203865}{9342069639922} & \frac{983347055801}{8893519644487} & \frac{2185051477207}{2551468980502} & 0 & 0 & 0 & 0 \\ - \frac{18}{25} & \frac{-167316361917}{17121522574472} & \frac{1605541814917}{7619724128744} & \frac{991021770328}{13052792161721} & \frac{2342280609577}{11279663441611} & \frac{3012424348531}{12792462456678} & 0 & 0 & 0 \\ - \frac{191}{200} & \frac{6680998715867}{14310383562358} & \frac{5029118570809}{3897454228471} & \frac{2415062538259}{6382199904604} & \frac{-3924368632305}{6964820224454} & \frac{-4331110370267}{15021686902756} & \frac{-3944303808049}{11994238218192} & 0 & 0 \\ - 1 & \frac{2193717860234}{3570523412979} & \frac{2193717860234}{3570523412979} & \frac{5952760925747}{18750164281544} & \frac{-4412967128996}{6196664114337} & \frac{4151782504231}{36106512998704} & \frac{572599549169}{6265429158920} & \frac{-457874356192}{11306498036315} & 0 \\ - \hline - 5 & 0 & 0 & \frac{3517720773327}{20256071687669} & \frac{4569610470461}{17934693873752} & \frac{2819471173109}{11655438449929} & \frac{3296210113763}{10722700128969} & \frac{-1142099968913}{5710983926999} & \frac{2}{9} \\ - 4 & 0 & 0 & \frac{520639020421}{8300446712847} & \frac{4550235134915}{17827758688493} & \frac{1482366381361}{6201654941325} & \frac{5551607622171}{13911031047899} & \frac{-5266607656330}{36788968843917} & \frac{1074053359553}{5740751784926} - \end{array} + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|cccccccc} + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{4}{9} & \frac{4}{9} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{6456083330201}{8509243623797} & \frac{1}{9} & \frac{1183333538310}{1827251437969} & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{1632083962415}{14158861528103} & \frac{895379019517}{9750411845327} & \frac{477606656805}{13473228687314} & \frac{-112564739183}{9373365219272} & 0 & 0 & 0 & 0 & 0 \\ + \frac{6365430648612}{17842476412687} & \frac{-4458043123994}{13015289567637} & \frac{-2500665203865}{9342069639922} & \frac{983347055801}{8893519644487} & \frac{2185051477207}{2551468980502} & 0 & 0 & 0 & 0 \\ + \frac{18}{25} & \frac{-167316361917}{17121522574472} & \frac{1605541814917}{7619724128744} & \frac{991021770328}{13052792161721} & \frac{2342280609577}{11279663441611} & \frac{3012424348531}{12792462456678} & 0 & 0 & 0 \\ + \frac{191}{200} & \frac{6680998715867}{14310383562358} & \frac{5029118570809}{3897454228471} & \frac{2415062538259}{6382199904604} & \frac{-3924368632305}{6964820224454} & \frac{-4331110370267}{15021686902756} & \frac{-3944303808049}{11994238218192} & 0 & 0 \\ + 1 & \frac{2193717860234}{3570523412979} & \frac{2193717860234}{3570523412979} & \frac{5952760925747}{18750164281544} & \frac{-4412967128996}{6196664114337} & \frac{4151782504231}{36106512998704} & \frac{572599549169}{6265429158920} & \frac{-457874356192}{11306498036315} & 0 \\ + \hline + 5 & 0 & 0 & \frac{3517720773327}{20256071687669} & \frac{4569610470461}{17934693873752} & \frac{2819471173109}{11655438449929} & \frac{3296210113763}{10722700128969} & \frac{-1142099968913}{5710983926999} & \frac{2}{9} \\ + 4 & 0 & 0 & \frac{520639020421}{8300446712847} & \frac{4550235134915}{17827758688493} & \frac{1482366381361}{6201654941325} & \frac{5551607622171}{13911031047899} & \frac{-5266607656330}{36788968843917} & \frac{1074053359553}{5740751784926} + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. .. figure:: /figs/arkode/stab_region_35.png @@ -790,6 +843,107 @@ This is the default 6th order explicit method (from :cite:p:`Ver:78`). +.. _Butcher.Verner-6-5b: + +Verner-9-5-6 +^^^^^^^^^^^^^^ + +.. index:: Verner-9-5-6 ERK method + +Accessible via the constant ``ARKODE_VERNER_9_5_6`` to +:c:func:`ARKStepSetTableNum`, :c:func:`ERKStepSetTableNum` +or :c:func:`ARKodeButcherTable_LoadERK`. +Accessible via the string ``"ARKODE_VERNER_9_5_6"`` to +:c:func:`ARKStepSetTableName`, :c:func:`ERKStepSetTableName` or +:c:func:`ARKodeButcherTable_LoadERKByName`. +This is the 6th order explicit method IIIXb-6(5) from :cite:p:`Ver:10`. + +.. only:: html + + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|ccccccccc} + 0 & 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{3}{50} & \frac{3}{50}& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{1439}{15000} & \frac{519479}{27000000}& \frac{2070721}{27000000}& 0& 0& 0& 0& 0& 0& 0\\ + \frac{1439}{10000} & \frac{1439}{40000}& 0& \frac{4317}{40000}& 0& 0& 0& 0& 0& 0\\ + \frac{4973}{10000} & \frac{109225017611}{82828840000}& 0& -\frac{417627820623}{82828840000}& \frac{43699198143}{10353605000}& 0& 0& 0& 0& 0\\ + \frac{389}{400} & -\frac{8036815292643907349452552172369}{191934985946683241245914401600}& 0& \frac{246134619571490020064824665}{1543816496655405117602368}& -\frac{13880495956885686234074067279}{113663489566254201783474344}& \frac{755005057777788994734129}{136485922925633667082436}& 0& 0& 0& 0\\ + \frac{1999}{2000} & -\frac{1663299841566102097180506666498880934230261}{30558424506156170307020957791311384232000}& 0& \frac{130838124195285491799043628811093033}{631862949514135618861563657970240}& -\frac{3287100453856023634160618787153901962873}{20724314915376755629135711026851409200}& \frac{2771826790140332140865242520369241}{396438716042723436917079980147600}& -\frac{1799166916139193}{96743806114007800}& 0& 0& 0\\ + 1 & -\frac{832144750039369683895428386437986853923637763}{15222974550069600748763651844667619945204887}& 0& \frac{818622075710363565982285196611368750}{3936576237903728151856072395343129}& -\frac{9818985165491658464841194581385463434793741875}{61642597962658994069869370923196463581866011}& \frac{31796692141848558720425711042548134769375}{4530254033500045975557858016006308628092}& -\frac{14064542118843830075}{766928748264306853644}& -\frac{1424670304836288125}{2782839104764768088217}& 0& 0\\ + 1 & \frac{382735282417}{11129397249634}& 0& 0& \frac{5535620703125000}{21434089949505429}& \frac{13867056347656250}{32943296570459319}& \frac{626271188750}{142160006043}& -\frac{51160788125000}{289890548217}& \frac{163193540017}{946795234}& 0\\ + \hline + 6 & \frac{382735282417}{11129397249634}& 0& 0& \frac{5535620703125000}{21434089949505429}& \frac{13867056347656250}{32943296570459319}& \frac{626271188750}{142160006043}& -\frac{51160788125000}{289890548217}& \frac{163193540017}{946795234}& 0 \\ + 5 & \frac{273361583}{5567482366}& 0& 0& \frac{1964687500000}{8727630165387}& \frac{596054687500}{1269637976277}& \frac{12740367500}{15795556227}& 0& -\frac{4462730789736252634813752317}{7350663039626676022821734166}& \frac{441454562788983500}{7763730504400359099} + \end{array} + + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. + + + +.. figure:: /figs/arkode/v65b_erk_stab_region.png + :scale: 75 % + :align: center + + Linear stability region for the Verner-9-5-6 method. The method's + region is outlined in blue; the embedding's region is in red. + + + +.. _Butcher.Verner-7-6: + +Verner-10-6-7 +^^^^^^^^^^^^^^ + +.. index:: Verner-10-6-7 ERK method + +Accessible via the constant ``ARKODE_VERNER_10_6_7`` to +:c:func:`ARKStepSetTableNum`, :c:func:`ERKStepSetTableNum` +or :c:func:`ARKodeButcherTable_LoadERK`. +Accessible via the string ``"ARKODE_VERNER_10_6_7"`` to +:c:func:`ARKStepSetTableName`, :c:func:`ERKStepSetTableName` or +:c:func:`ARKodeButcherTable_LoadERKByName`. +This is the default 7th order explicit method (from :cite:p:`Ver:10`). + +.. only:: html + + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|cccccccccc} + 0 & 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{1}{200} & \frac{1}{200}& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{49}{450} & -\frac{4361}{4050}& \frac{2401}{2025}& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{49}{300} & \frac{49}{1200}& 0& \frac{49}{400}& 0& 0& 0& 0& 0& 0& 0\\ + \frac{911}{2000} & \frac{2454451729}{3841600000}& 0& -\frac{9433712007}{3841600000}& \frac{4364554539}{1920800000}& 0& 0& 0& 0& 0& 0\\ + \frac{3480084980}{5709648941} & -\frac{6187101755456742839167388910402379177523537620}{2324599620333464857202963610201679332423082271}& 0& \frac{27569888999279458303270493567994248533230000}{2551701010245296220859455115479340650299761}& -\frac{37368161901278864592027018689858091583238040000}{4473131870960004275166624817435284159975481033}& \frac{1392547243220807196190880383038194667840000000}{1697219131380493083996999253929006193143549863}& 0& 0& 0& 0& 0\\ + \frac{221}{250} & \frac{11272026205260557297236918526339}{1857697188743815510261537500000}& 0& -\frac{48265918242888069}{1953194276993750}& \frac{26726983360888651136155661781228}{1308381343805114800955157615625}& -\frac{2090453318815827627666994432}{1096684189897834170412307919}& \frac{1148577938985388929671582486744843844943428041509}{1141532118233823914568777901158338927629837500000}& 0& 0& 0& 0\\ + \frac{37}{40} & \frac{1304457204588839386329181466225966641}{108211771565488329642169667802016000}& 0& -\frac{1990261989751005}{40001418792832}& \frac{2392691599894847687194643439066780106875}{58155654089143548047476915856270826016}& -\frac{1870932273351008733802814881998561250}{419326053051486744762255151208232123}& \frac{1043329047173803328972823866240311074041739158858792987034783181}{510851127745017966999893975119259285040213723744255237522144000}& -\frac{311918858557595100410788125}{3171569057622789618800376448}& 0& 0& 0\\ + 1 & \frac{17579784273699839132265404100877911157}{1734023495717116205617154737841023480}& 0& -\frac{18539365951217471064750}{434776548575709731377}& \frac{447448655912568142291911830292656995992000}{12511202807447096607487664209063950964109}& -\frac{65907597316483030274308429593905808000000}{15158061430635748897861852383197382130691}& \frac{273847823027445129865693702689010278588244606493753883568739168819449761}{136252034448398939768371761610231099586032870552034688235302796640584360}& \frac{694664732797172504668206847646718750}{1991875650119463976442052358853258111}& -\frac{19705319055289176355560129234220800}{72595753317320295604316217197876507}& 0& 0\\ + 1 & -\frac{511858190895337044664743508805671}{11367030248263048398341724647960}& 0& \frac{2822037469238841750}{15064746656776439}& -\frac{23523744880286194122061074624512868000}{152723005449262599342117017051789699}& \frac{10685036369693854448650967542704000000}{575558095977344459903303055137999707}& -\frac{6259648732772142303029374363607629515525848829303541906422993}{876479353814142962817551241844706205620792843316435566420120}& \frac{17380896627486168667542032602031250}{13279937889697320236613879977356033}& 0& 0& 0\\ + \hline + 7 & \frac{96762636172307789}{2051985304794103980}& 0& 0& \frac{312188947591288252500000}{1212357694274963646019729}& \frac{13550580884964304000000000000}{51686919683339547115937980629}& \frac{72367769693133178898676076432831566019684378142853445230956642801}{475600216991873963561768100160364792981629064220601844848928537580}& \frac{1619421054120605468750}{3278200730370057108183}& -\frac{66898316144057728000}{227310933007074849597}& \frac{181081444637946577}{2226845467039736466}& 0 \\ + 6 & \frac{117807213929927}{2640907728177740}& 0& 0& \frac{4758744518816629500000}{17812069906509312711137}& \frac{1730775233574080000000000}{7863520414322158392809673}& \frac{2682653613028767167314032381891560552585218935572349997}{12258338284789875762081637252125169126464880985167722660}& \frac{40977117022675781250}{178949401077111131341}& 0& 0& \frac{2152106665253777}{106040260335225546} + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. + + +.. figure:: /figs/arkode/v76_erk_stab_region.png + :scale: 75 % + :align: center + + Linear stability region for the Verner-10-6-7 method. The method's + region is outlined in blue; the embedding's region is in red. + + + .. _Butcher.Fehlberg-8-7: Fehlberg-13-7-8 @@ -837,6 +991,117 @@ This is the default 8th order explicit method (from :cite:p:`Butcher:08`). +.. _Butcher.Verner-8-7: + +Verner-13-7-8 +^^^^^^^^^^^^^^ + +.. index:: Verner-13-7-8 ERK method + +Accessible via the constant ``ARKODE_VERNER_13_7_8`` to +:c:func:`ARKStepSetTableNum`, :c:func:`ERKStepSetTableNum` +or :c:func:`ARKodeButcherTable_LoadERK`. +Accessible via the string ``"ARKODE_VERNER_13_7_8"`` to +:c:func:`ARKStepSetTableName`, :c:func:`ERKStepSetTableName` or +:c:func:`ARKodeButcherTable_LoadERKByName`. +This is the 8th order explicit method IIIX-8(7) from :cite:p:`Ver:10`. + + +.. only:: html + + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|ccccccccccccc} + 0 & 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{1}{20} & \frac{1}{20}& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{341}{3200} & -\frac{7161}{1024000}& \frac{116281}{1024000}& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{1023}{6400} & \frac{1023}{25600}& 0& \frac{3069}{25600}& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{39}{100} & \frac{4202367}{11628100}& 0& -\frac{3899844}{2907025}& \frac{3982992}{2907025}& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{93}{200} & \frac{5611}{114400}& 0& 0& \frac{31744}{135025}& \frac{923521}{5106400}& 0& 0& 0& 0& 0& 0& 0& 0\\ + \frac{31}{200} & \frac{21173}{343200}& 0& 0& \frac{8602624}{76559175}& -\frac{26782109}{689364000}& \frac{5611}{283500}& 0& 0& 0& 0& 0& 0& 0\\ + \frac{943}{1000} & -\frac{1221101821869329}{690812928000000}& 0& 0& -\frac{125}{2}& -\frac{1024030607959889}{168929280000000}& \frac{1501408353528689}{265697280000000}& \frac{6070139212132283}{92502016000000}& 0& 0& 0& 0& 0& 0\\ + \frac{7067558016280}{7837150160667} & -\frac{1472514264486215803881384708877264246346044433307094207829051978044531801133057155}{1246894801620032001157059621643986024803301558393487900440453636168046069686436608}& 0& 0& -\frac{5172294311085668458375175655246981230039025336933699114138315270772319372469280000}{124619381004809145897278630571215298365257079410236252921850936749076487132995191}& -\frac{12070679258469254807978936441733187949484571516120469966534514296406891652614970375}{2722031154761657221710478184531100699497284085048389015085076961673446140398628096}& \frac{780125155843893641323090552530431036567795592568497182701460674803126770111481625}{183110425412731972197889874507158786859226102980861859505241443073629143100805376}& \frac{664113122959911642134782135839106469928140328160577035357155340392950009492511875}{15178465598586248136333023107295349175279765150089078301139943253016877823170816}& \frac{10332848184452015604056836767286656859124007796970668046446015775000000}{1312703550036033648073834248740727914537972028638950165249582733679393783}& 0& 0& 0& 0& 0\\ + \frac{909}{1000} & -\frac{29055573360337415088538618442231036441314060511}{22674759891089577691327962602370597632000000000}& 0& 0& -\frac{20462749524591049105403365239069}{454251913499893469596231268750}& -\frac{180269259803172281163724663224981097}{38100922558256871086579832832000000}& \frac{21127670214172802870128286992003940810655221489}{4679473877997892906145822697976708633673728000}& \frac{318607235173649312405151265849660869927653414425413}{6714716715558965303132938072935465423910912000000}& \frac{212083202434519082281842245535894}{20022426044775672563822865371173879}& -\frac{2698404929400842518721166485087129798562269848229517793703413951226714583}{469545674913934315077000442080871141884676035902717550325616728175875000000}& 0& 0& 0& 0\\ + \frac{47}{50} & -\frac{2342659845814086836951207140065609179073838476242943917}{1358480961351056777022231400139158760857532162795520000}& 0& 0& -\frac{996286030132538159613930889652}{16353068885996164905464325675}& -\frac{26053085959256534152588089363841}{4377552804565683061011299942400}& \frac{20980822345096760292224086794978105312644533925634933539}{3775889992007550803878727839115494641972212962174156800}& \frac{890722993756379186418929622095833835264322635782294899}{13921242001395112657501941955594013822830119803764736}& \frac{161021426143124178389075121929246710833125}{10997207722131034650667041364346422894371443}& \frac{300760669768102517834232497565452434946672266195876496371874262392684852243925359864884962513}{4655443337501346455585065336604505603760824779615521285751892810315680492364106674524398280000}& -\frac{31155237437111730665923206875}{392862141594230515010338956291}& 0& 0& 0\\ + 1 & -\frac{2866556991825663971778295329101033887534912787724034363}{868226711619262703011213925016143612030669233795338240}& 0& 0& -\frac{16957088714171468676387054358954754000}{143690415119654683326368228101570221}& -\frac{4583493974484572912949314673356033540575}{451957703655250747157313034270335135744}& \frac{2346305388553404258656258473446184419154740172519949575}{256726716407895402892744978301151486254183185289662464}& \frac{1657121559319846802171283690913610698586256573484808662625}{13431480411255146477259155104956093505361644432088109056}& \frac{345685379554677052215495825476969226377187500}{74771167436930077221667203179551347546362089}& -\frac{3205890962717072542791434312152727534008102774023210240571361570757249056167015230160352087048674542196011}{947569549683965814783015124451273604984657747127257615372449205973192657306017239103491074738324033259120}& \frac{40279545832706233433100438588458933210937500}{8896460842799482846916972126377338947215101}& -\frac{6122933601070769591613093993993358877250}{1050517001510235513198246721302027675953}& 0& 0\\ + 1 & -\frac{618675905535482500672800859344538410358660153899637}{203544282118214047100119475340667684874292102389760}& 0& 0& -\frac{4411194916804718600478400319122931000}{40373053902469967450761491269633019}& -\frac{16734711409449292534539422531728520225}{1801243715290088669307203927210237952}& \frac{135137519757054679098042184152749677761254751865630525}{16029587794486289597771326361911895112703716593983488}& \frac{38937568367409876012548551903492196137929710431584875}{340956454090191606099548798001469306974758443147264}& -\frac{6748865855011993037732355335815350667265625}{7002880395717424621213565406715087764770357}& -\frac{1756005520307450928195422767042525091954178296002788308926563193523662404739779789732685671}{348767814578469983605688098046186480904607278021030540735333862087061574934154942830062320}& \frac{53381024589235611084013897674181629296875}{8959357584795694524874969598508592944141}& 0& 0& 0\\ + \hline + 8 & \frac{44901867737754616851973}{1014046409980231013380680}& 0& 0& 0& 0& \frac{791638675191615279648100000}{2235604725089973126411512319}& \frac{3847749490868980348119500000}{15517045062138271618141237517}& -\frac{13734512432397741476562500000}{875132892924995907746928783}& \frac{12274765470313196878428812037740635050319234276006986398294443554969616342274215316330684448207141}{489345147493715517650385834143510934888829280686609654482896526796523353052166757299452852166040}& -\frac{9798363684577739445312500000}{308722986341456031822630699}& \frac{282035543183190840068750}{12295407629873040425991}& -\frac{306814272936976936753}{1299331183183744997286}& 0\\ + 7 & \frac{10835401739407019406577}{244521829356935137978320}& 0& 0& 0& 0& \frac{13908189778321895491375000}{39221135527894265375640567}& \frac{73487947527027243487625000}{296504045773342769773399443}& \frac{68293140641257649609375000}{15353208647806945749946119}& \frac{22060647948996678611017711379974578860522018208949721559448560203338437626022142776381}{1111542009262325874512959185795727215759010577565736079641376621381577236680929558640}& -\frac{547971229495642458203125000}{23237214025700991642563601}& 0& 0& -\frac{28735456870978964189}{79783493704265043693} + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. + + +.. figure:: /figs/arkode/v87_erk_stab_region.png + :scale: 75 % + :align: center + + Linear stability region for the Verner-13-7-8 method. The method's + region is outlined in blue; the embedding's region is in red. + + + +.. _Butcher.Verner-9-8: + +Verner-16-8-9 +^^^^^^^^^^^^^^ + +.. index:: Verner-16-8-9 ERK method + +Accessible via the constant ``ARKODE_VERNER_16_8_9`` to +:c:func:`ARKStepSetTableNum`, :c:func:`ERKStepSetTableNum` +or :c:func:`ARKodeButcherTable_LoadERK`. +Accessible via the string ``"ARKODE_VERNER_16_8_9"`` to +:c:func:`ARKStepSetTableName`, :c:func:`ERKStepSetTableName` or +:c:func:`ARKodeButcherTable_LoadERKByName`. +This is the default 9th order explicit method (from :cite:p:`Ver:10`). + + +.. only:: html + + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|cccccccccccccccc} + 0 & 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 0.03462 & 0.03462& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 0.09702435063878044594828361677100617517633 & -0.0389335438857287327017042687229284478532& 0.1359578945245091786499878854939346230295& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 0.1455365259581706689224254251565092627645 & 0.03638413148954266723060635628912731569111& 0& 0.1091523944686280016918190688673819470733& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 0.561 & 2.025763914393969636805657604282571047511& 0& -7.638023836496292020387602153091964592952& 6.173259922102322383581944548809393545442& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 0.2290079115904850126662751771814700052182 & 0.05112275589406060872792270881648288397197& 0& 0& 0.1770823794555021537929910813839068684087& 0.00080277624092225014536138698108025283759& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 0.5449920884095149873337248228185299947818 & 0.1316006357975216279279871693164256985334& 0& 0& -0.2957276252669636417685183174672273730699& 0.0878137803564295237421124704053886667082& 0.6213052975225274774321435005639430026100& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 0.645 & 0.07166666666666666666666666666666666666667& 0& 0& 0& 0& 0.3305533578915319409260346730051472207728& 0.2427799754418013924072986603281861125606& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 0.48375 & 0.071806640625& 0& 0& 0& 0& 0.3294380283228177160744825466257672816401& 0.1165190029271822839255174533742327183599& -0.034013671875& 0& 0& 0& 0& 0& 0& 0& 0\\ + 0.06757 & 0.04836757646340646986611287718844085773549& 0& 0& 0& 0& 0.03928989925676163974333190042057047002852& 0.1054740945890344608263649267140088017604& -0.02143865284648312665982642293830533996214& -0.1041229174627194437759832813847147895623& 0& 0& 0& 0& 0& 0& 0\\ + 0.25 & -0.02664561487201478635337289243849737340534& 0& 0& 0& 0& 0.03333333333333333333333333333333333333333& -0.1631072244872467239162704487554706387141& 0.03396081684127761199487954930015522928244& 0.1572319413814626097110769806810024118077& 0.2152267478031879552303534778794770376960& 0& 0& 0& 0& 0& 0\\ + 0.6590650618730998549405331618649220295334 & 0.03689009248708622334786359863227633989718& 0& 0& 0& 0& -0.1465181576725542928653609891758501156785& 0.2242577768172024345345469822625833796001& 0.02294405717066072637090897902753790803034& -0.0035850052905728761357394424889330334334& 0.08669223316444385506869203619044453906053& 0.4383840651968337846196219974168630120572& 0& 0& 0& 0& 0\\ + 0.8206 & -0.4866012215113340846662212357570395295088& 0& 0& 0& 0& -6.304602650282852990657772792012007122988& -0.281245618289472564778284183790118418111& -2.679019236219849057687906597489223155566& 0.518815663924157511565311164615012522024& 1.365353187603341710683633635235238678626& 5.885091088503946585721274891680604830712& 2.802808786272062889819965117517532194812& 0& 0& 0& 0\\ + 0.9012 & 0.4185367457753471441471025246471931649633& 0& 0& 0& 0& 6.724547581906459363100870806514855026676& -0.425444280164611790606983409697113064616& 3.343279153001265577811816947557982637749& 0.617081663117537759528421117507709784737& -0.929966123939932833937749523988800852013& -6.099948804751010722472962837945508844846& -3.002206187889399044804158084895173690015& 0.2553202529443445472336424602988558373637& 0& 0& 0\\ + 1 & -0.779374086122884664644623040843840506343& 0& 0& 0& 0& -13.93734253810777678786523664804936051203& 1.252048853379357320949735183924200895136& -14.69150040801686878191527989293072091588& -0.494705058533141685655191992136962873577& 2.242974909146236657906984549543692874755& 13.36789380382864375813864978592679139881& 14.39665048665068644512236935340272139005& -0.7975813331776800379127866056663258667437& 0.4409353709534277758753793068298041158235& 0& 0\\ + 1 & 2.058051337466886442151242368989994043993& 0& 0& 0& 0& 22.35793772796803295519317565842520212899& 0.90949810997556332745009198137971890783& 35.89110098240264104710550686568482456493& -3.442515027624453437985000403608480262211& -4.865481358036368826566013387928704014496& -18.90980381354342625688427480879773032857& -34.26354448030451782929251177395134170515& 1.264756521695642578827783499806516664686& 0& 0& 0\\ + \hline + 9 & 0.01461197685842315252051541915018784713459& 0& 0& 0& 0& 0& 0& -0.3915211862331339089410228267288242030810& 0.2310932500289506415909675644868993669908& 0.1274766769992852382560589467488989175618& 0.2246434176204157731566981937082069688984& 0.5684352689748512932705226972873692126743& 0.05825871557215827200814768021863420902155& 0.1364317403482215641609022744494239843327& 0.03057013983082797397721005067920369646664& 0\\ + 8 & 0.01996996514886773085518508418098868756464& 0& 0& 0& 0& 0& 0& 2.191499304949330054530747099310837524864& 0.08857071848208438030833722031786358862953& 0.1140560234865965622484956605091432032674& 0.2533163805345107065564577734569651977347& -2.056564386240941011158999594595981300493& 0.3408096799013119935160094894224543812830& 0& 0& 0.04834231373823958314376726739772871714902 + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. + + +.. figure:: /figs/arkode/v98_erk_stab_region.png + :scale: 75 % + :align: center + + Linear stability region for the Verner-16-8-9 method. The method's + region is outlined in blue; the embedding's region is in red. + + + .. _Butcher.implicit: @@ -1303,19 +1568,26 @@ Accessible via the string ``"ARKODE_KVAERNO_5_3_4"`` to :c:func:`ARKodeButcherTable_LoadDIRKByName`. Both the method and embedding are A-stable (from :cite:p:`Kva:04`). -.. math:: +.. only:: html + + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|ccccc} + 0 & 0 & 0 & 0 & 0 & 0 \\ + 0.871733043 & 0.4358665215 & 0.4358665215 & 0 & 0 & 0 \\ + 0.468238744853136 & 0.140737774731968 & -0.108365551378832 & 0.4358665215 & 0 & 0 \\ + 1 & 0.102399400616089 & -0.376878452267324 & 0.838612530151233 & 0.4358665215 & 0 \\ + 1 & 0.157024897860995 & 0.117330441357768 & 0.61667803039168 & -0.326899891110444 & 0.4358665215 \\ + \hline + 4 & 0.157024897860995 & 0.117330441357768 & 0.61667803039168 & -0.326899891110444 & 0.4358665215 \\ + 3 & 0.102399400616089 & -0.376878452267324 & 0.838612530151233 & 0.4358665215 & 0 + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. - \renewcommand{\arraystretch}{1.5} - \begin{array}{r|ccccc} - 0 & 0 & 0 & 0 & 0 & 0 \\ - 0.871733043 & 0.4358665215 & 0.4358665215 & 0 & 0 & 0 \\ - 0.468238744853136 & 0.140737774731968 & -0.108365551378832 & 0.4358665215 & 0 & 0 \\ - 1 & 0.102399400616089 & -0.376878452267324 & 0.838612530151233 & 0.4358665215 & 0 \\ - 1 & 0.157024897860995 & 0.117330441357768 & 0.61667803039168 & -0.326899891110444 & 0.4358665215 \\ - \hline - 4 & 0.157024897860995 & 0.117330441357768 & 0.61667803039168 & -0.326899891110444 & 0.4358665215 \\ - 3 & 0.102399400616089 & -0.376878452267324 & 0.838612530151233 & 0.4358665215 & 0 - \end{array} .. figure:: /figs/arkode/stab_region_19.png :scale: 50 % @@ -1521,21 +1793,28 @@ Accessible via the string ``"ARKODE_KVAERNO_7_4_5"`` to Both the method and embedding are A-stable; additionally the method is L-stable (from :cite:p:`Kva:04`). -.. math:: +.. only:: html + + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|ccccccc} + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0.52 & 0.26 & 0.26 & 0 & 0 & 0 & 0 & 0 \\ + 1.230333209967908 & 0.13 & 0.84033320996790809 & 0.26 & 0 & 0 & 0 & 0 \\ + 0.895765984350076 & 0.22371961478320505 & 0.47675532319799699 & -0.06470895363112615 & 0.26 & 0 & 0 & 0 \\ + 0.436393609858648 & 0.16648564323248321 & 0.10450018841591720 & 0.03631482272098715 & -0.13090704451073998 & 0.26 & 0 & 0 \\ + 1 & 0.13855640231268224 & 0 & -0.04245337201752043 & 0.02446657898003141 & 0.61943039072480676 & 0.26 & 0 \\ + 1 & 0.13659751177640291 & 0 & -0.05496908796538376 & -0.04118626728321046 & 0.62993304899016403 & 0.06962479448202728 & 0.26 \\ + \hline + 5 & 0.13659751177640291 & 0 & -0.05496908796538376 & -0.04118626728321046 & 0.62993304899016403 & 0.06962479448202728 & 0.26 \\ + 4 & 0.13855640231268224 & 0 & -0.04245337201752043 & 0.02446657898003141 & 0.61943039072480676 & 0.26 & 0 + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. - \renewcommand{\arraystretch}{1.5} - \begin{array}{r|ccccccc} - 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ - 0.52 & 0.26 & 0.26 & 0 & 0 & 0 & 0 & 0 \\ - 1.230333209967908 & 0.13 & 0.84033320996790809 & 0.26 & 0 & 0 & 0 & 0 \\ - 0.895765984350076 & 0.22371961478320505 & 0.47675532319799699 & -0.06470895363112615 & 0.26 & 0 & 0 & 0 \\ - 0.436393609858648 & 0.16648564323248321 & 0.10450018841591720 & 0.03631482272098715 & -0.13090704451073998 & 0.26 & 0 & 0 \\ - 1 & 0.13855640231268224 & 0 & -0.04245337201752043 & 0.02446657898003141 & 0.61943039072480676 & 0.26 & 0 \\ - 1 & 0.13659751177640291 & 0 & -0.05496908796538376 & -0.04118626728321046 & 0.62993304899016403 & 0.06962479448202728 & 0.26 \\ - \hline - 5 & 0.13659751177640291 & 0 & -0.05496908796538376 & -0.04118626728321046 & 0.62993304899016403 & 0.06962479448202728 & 0.26 \\ - 4 & 0.13855640231268224 & 0 & -0.04245337201752043 & 0.02446657898003141 & 0.61943039072480676 & 0.26 & 0 - \end{array} .. figure:: /figs/arkode/stab_region_21.png :scale: 50 % @@ -1568,22 +1847,29 @@ default 5th order additive method. Both the method and embedding are A-stable; additionally the method is L-stable (the implicit portion of the ARK5(4)8L[2]SA method from :cite:p:`KenCarp:03`). -.. math:: +.. only:: html + + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|cccccccc} + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{41}{100} & \frac{41}{200} & \frac{41}{200} & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{2935347310677}{11292855782101} & \frac{41}{400} & -\frac{567603406766}{11931857230679} & \frac{41}{200} & 0 & 0 & 0 & 0 & 0 \\ + \frac{1426016391358}{7196633302097} & \frac{683785636431}{9252920307686} & 0 & -\frac{110385047103}{1367015193373} & \frac{41}{200} & 0 & 0 & 0 & 0 \\ + \frac{92}{100} & \frac{3016520224154}{10081342136671} & 0 & \frac{30586259806659}{12414158314087} & -\frac{22760509404356}{11113319521817} & \frac{41}{200} & 0 & 0 & 0 \\ + \frac{24}{100} & \frac{218866479029}{1489978393911} & 0 & \frac{638256894668}{5436446318841} & -\frac{1179710474555}{5321154724896} & -\frac{60928119172}{8023461067671} & \frac{41}{200} & 0 & 0 \\ + \frac{3}{5} & \frac{1020004230633}{5715676835656} & 0 & \frac{25762820946817}{25263940353407} & -\frac{2161375909145}{9755907335909} & -\frac{211217309593}{5846859502534} & -\frac{4269925059573}{7827059040749} & \frac{41}{200} & 0 \\ + 1 & -\frac{872700587467}{9133579230613} & 0 & 0 & \frac{22348218063261}{9555858737531} & -\frac{1143369518992}{8141816002931} & -\frac{39379526789629}{19018526304540} & \frac{32727382324388}{42900044865799} & \frac{41}{200} \\ + \hline + 5 & -\frac{872700587467}{9133579230613} & 0 & 0 & \frac{22348218063261}{9555858737531} & -\frac{1143369518992}{8141816002931} & -\frac{39379526789629}{19018526304540} & \frac{32727382324388}{42900044865799} & \frac{41}{200} \\ + 4 & -\frac{975461918565}{9796059967033} & 0 & 0 & \frac{78070527104295}{32432590147079} & -\frac{548382580838}{3424219808633} & -\frac{33438840321285}{15594753105479} & \frac{3629800801594}{4656183773603} & \frac{4035322873751}{18575991585200} + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. - \renewcommand{\arraystretch}{1.5} - \begin{array}{r|cccccccc} - 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{41}{100} & \frac{41}{200} & \frac{41}{200} & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{2935347310677}{11292855782101} & \frac{41}{400} & -\frac{567603406766}{11931857230679} & \frac{41}{200} & 0 & 0 & 0 & 0 & 0 \\ - \frac{1426016391358}{7196633302097} & \frac{683785636431}{9252920307686} & 0 & -\frac{110385047103}{1367015193373} & \frac{41}{200} & 0 & 0 & 0 & 0 \\ - \frac{92}{100} & \frac{3016520224154}{10081342136671} & 0 & \frac{30586259806659}{12414158314087} & -\frac{22760509404356}{11113319521817} & \frac{41}{200} & 0 & 0 & 0 \\ - \frac{24}{100} & \frac{218866479029}{1489978393911} & 0 & \frac{638256894668}{5436446318841} & -\frac{1179710474555}{5321154724896} & -\frac{60928119172}{8023461067671} & \frac{41}{200} & 0 & 0 \\ - \frac{3}{5} & \frac{1020004230633}{5715676835656} & 0 & \frac{25762820946817}{25263940353407} & -\frac{2161375909145}{9755907335909} & -\frac{211217309593}{5846859502534} & -\frac{4269925059573}{7827059040749} & \frac{41}{200} & 0 \\ - 1 & -\frac{872700587467}{9133579230613} & 0 & 0 & \frac{22348218063261}{9555858737531} & -\frac{1143369518992}{8141816002931} & -\frac{39379526789629}{19018526304540} & \frac{32727382324388}{42900044865799} & \frac{41}{200} \\ - \hline - 5 & -\frac{872700587467}{9133579230613} & 0 & 0 & \frac{22348218063261}{9555858737531} & -\frac{1143369518992}{8141816002931} & -\frac{39379526789629}{19018526304540} & \frac{32727382324388}{42900044865799} & \frac{41}{200} \\ - 4 & -\frac{975461918565}{9796059967033} & 0 & 0 & \frac{78070527104295}{32432590147079} & -\frac{548382580838}{3424219808633} & -\frac{33438840321285}{15594753105479} & \frac{3629800801594}{4656183773603} & \frac{4035322873751}{18575991585200} - \end{array} .. figure:: /figs/arkode/stab_region_22.png :scale: 50 % @@ -1612,22 +1898,28 @@ Both the method and embedding are A-stable; additionally the method is L-stable (this is the implicit portion of the 5th order ARK5(4)8L[2]SA method from :cite:p:`KenCarp:19`). -.. math:: +.. only:: html - \renewcommand{\arraystretch}{1.5} - \begin{array}{r|cccccccc} - 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{4}{9} & \frac{2}{9} & \frac{2}{9} & 0 & 0 & 0 & 0 & 0 & 0 \\ - \frac{6456083330201}{8509243623797} & \frac{2366667076620}{8822750406821} & \frac{2366667076620}{8822750406821} & \frac{2}{9} & 0 & 0 & 0 & 0 & 0 \\ - \frac{1632083962415}{14158861528103} & -\frac{257962897183}{4451812247028} & -\frac{257962897183}{4451812247028} & \frac{128530224461}{14379561246022} & \frac{2}{9} & 0 & 0 & 0 & 0 \\ - \frac{6365430648612}{17842476412687} & -\frac{486229321650}{11227943450093} & -\frac{486229321650}{11227943450093} & -\frac{225633144460}{6633558740617} & \frac{1741320951451}{6824444397158} & \frac{2}{9} & 0 & 0 & 0 \\ - \frac{18}{25} & \frac{621307788657}{4714163060173} & \frac{621307788657}{4714163060173} & -\frac{125196015625}{3866852212004} & \frac{940440206406}{7593089888465} & \frac{961109811699}{6734810228204} & \frac{2}{9} & 0 & 0 \\ - \frac{191}{200} & \frac{2036305566805}{6583108094622} & \frac{2036305566805}{6583108094622} & -\frac{3039402635899}{4450598839912} & -\frac{1829510709469}{31102090912115} & -\frac{286320471013}{6931253422520} & \frac{8651533662697}{9642993110008} & \frac{2}{9} & 0 \\ - 1 & 0 & 0 & \frac{3517720773327}{20256071687669} & \frac{4569610470461}{17934693873752} & \frac{2819471173109}{11655438449929} & \frac{3296210113763}{10722700128969} & -\frac{1142099968913}{5710983926999} & \frac{2}{9} \\ - \hline - 5 & 0 & 0 & \frac{3517720773327}{20256071687669} & \frac{4569610470461}{17934693873752} & \frac{2819471173109}{11655438449929} & \frac{3296210113763}{10722700128969} & -\frac{1142099968913}{5710983926999} & \frac{2}{9} \\ - 4 & 0 & 0 & \frac{520639020421}{8300446712847} & \frac{4550235134915}{17827758688493} & \frac{1482366381361}{6201654941325} & \frac{5551607622171}{13911031047899} & -\frac{5266607656330}{36788968843917} & \frac{1074053359553}{5740751784926} - \end{array} + .. math:: + + \renewcommand{\arraystretch}{1.5} + \begin{array}{r|cccccccc} + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{4}{9} & \frac{2}{9} & \frac{2}{9} & 0 & 0 & 0 & 0 & 0 & 0 \\ + \frac{6456083330201}{8509243623797} & \frac{2366667076620}{8822750406821} & \frac{2366667076620}{8822750406821} & \frac{2}{9} & 0 & 0 & 0 & 0 & 0 \\ + \frac{1632083962415}{14158861528103} & -\frac{257962897183}{4451812247028} & -\frac{257962897183}{4451812247028} & \frac{128530224461}{14379561246022} & \frac{2}{9} & 0 & 0 & 0 & 0 \\ + \frac{6365430648612}{17842476412687} & -\frac{486229321650}{11227943450093} & -\frac{486229321650}{11227943450093} & -\frac{225633144460}{6633558740617} & \frac{1741320951451}{6824444397158} & \frac{2}{9} & 0 & 0 & 0 \\ + \frac{18}{25} & \frac{621307788657}{4714163060173} & \frac{621307788657}{4714163060173} & -\frac{125196015625}{3866852212004} & \frac{940440206406}{7593089888465} & \frac{961109811699}{6734810228204} & \frac{2}{9} & 0 & 0 \\ + \frac{191}{200} & \frac{2036305566805}{6583108094622} & \frac{2036305566805}{6583108094622} & -\frac{3039402635899}{4450598839912} & -\frac{1829510709469}{31102090912115} & -\frac{286320471013}{6931253422520} & \frac{8651533662697}{9642993110008} & \frac{2}{9} & 0 \\ + 1 & 0 & 0 & \frac{3517720773327}{20256071687669} & \frac{4569610470461}{17934693873752} & \frac{2819471173109}{11655438449929} & \frac{3296210113763}{10722700128969} & -\frac{1142099968913}{5710983926999} & \frac{2}{9} \\ + \hline + 5 & 0 & 0 & \frac{3517720773327}{20256071687669} & \frac{4569610470461}{17934693873752} & \frac{2819471173109}{11655438449929} & \frac{3296210113763}{10722700128969} & -\frac{1142099968913}{5710983926999} & \frac{2}{9} \\ + 4 & 0 & 0 & \frac{520639020421}{8300446712847} & \frac{4550235134915}{17827758688493} & \frac{1482366381361}{6201654941325} & \frac{5551607622171}{13911031047899} & -\frac{5266607656330}{36788968843917} & \frac{1074053359553}{5740751784926} + \end{array} + +.. only:: latex + + The Butcher table is too large to fit in the PDF version of this documentation. Please see the HTML documentation for the table coefficients. .. figure:: /figs/arkode/stab_region_37.png diff --git a/doc/arkode/guide/source/Constants.rst b/doc/arkode/guide/source/Constants.rst index 95b6a43125..9510f656a0 100644 --- a/doc/arkode/guide/source/Constants.rst +++ b/doc/arkode/guide/source/Constants.rst @@ -106,6 +106,16 @@ contains the ARKODE output constants. +-----------------------------------------------+------------------------------------------------------------+ | :index:`ARKODE_ARK548L2SAb_ERK_8_4_5` | Use the ARK-8-4-5b ERK method. | +-----------------------------------------------+------------------------------------------------------------+ + | :index:`ARKODE_SHU_OSHER_3_2_3` | Use the Shu-Osher-3-2-3 ERK method. | + +-----------------------------------------------+------------------------------------------------------------+ + | :index:`ARKODE_VERNER_9_5_6` | Use the Verner-9-5-6 ERK method. | + +-----------------------------------------------+------------------------------------------------------------+ + | :index:`ARKODE_VERNER_10_6_7` | Use the Verner-10-6-7 ERK method. | + +-----------------------------------------------+------------------------------------------------------------+ + | :index:`ARKODE_VERNER_13_7_8` | Use the Verner-13-7-8 ERK method. | + +-----------------------------------------------+------------------------------------------------------------+ + | :index:`ARKODE_VERNER_16_8_9` | Use the Verner-16-8-9 ERK method. | + +-----------------------------------------------+------------------------------------------------------------+ | :index:`ARKSTEP_DEFAULT_ERK_2` | Use ARKStep's default second-order ERK method | | | (ARKODE_HEUN_EULER_2_1_2). | +-----------------------------------------------+------------------------------------------------------------+ @@ -121,9 +131,15 @@ contains the ARKODE output constants. | :index:`ARKSTEP_DEFAULT_ERK_6` | Use ARKStep's default sixth-order ERK method | | | (ARKODE_VERNER_8_5_6). | +-----------------------------------------------+------------------------------------------------------------+ + | :index:`ARKSTEP_DEFAULT_ERK_7` | Use ARKStep's default seventh-order ERK method | + | | (ARKODE_VERNER_10_6_7). | + +-----------------------------------------------+------------------------------------------------------------+ | :index:`ARKSTEP_DEFAULT_ERK_8` | Use ARKStep's default eighth-order ERK method | | | (ARKODE_FEHLBERG_13_7_8). | +-----------------------------------------------+------------------------------------------------------------+ + | :index:`ARKSTEP_DEFAULT_ERK_9` | Use ARKStep's default ninth-order ERK method | + | | (ARKODE_VERNER_16_8_9). | + +-----------------------------------------------+------------------------------------------------------------+ | :index:`ERKSTEP_DEFAULT_2` | Use ERKStep's default second-order ERK method | | | (ARKODE_HEUN_EULER_2_1_2). | +-----------------------------------------------+------------------------------------------------------------+ @@ -139,9 +155,15 @@ contains the ARKODE output constants. | :index:`ERKSTEP_DEFAULT_6` | Use ERKStep's default sixth-order ERK method | | | (ARKODE_VERNER_8_5_6). | +-----------------------------------------------+------------------------------------------------------------+ + | :index:`ERKSTEP_DEFAULT_7` | Use ERKStep's default seventh-order ERK method | + | | (ARKODE_VERNER_10_6_7). | + +-----------------------------------------------+------------------------------------------------------------+ | :index:`ERKSTEP_DEFAULT_8` | Use ERKStep's default eighth-order ERK method | | | (ARKODE_FEHLBERG_13_7_8). | +-----------------------------------------------+------------------------------------------------------------+ + | :index:`ERKSTEP_DEFAULT_9` | Use ERKStep's default ninth-order ERK method | + | | (ARKODE_VERNER_16_8_9). | + +-----------------------------------------------+------------------------------------------------------------+ | | | +-----------------------------------------------+------------------------------------------------------------+ | **Implicit Butcher table specification** | | diff --git a/doc/arkode/guide/source/Introduction.rst b/doc/arkode/guide/source/Introduction.rst index c33aca7415..8a0e8702d2 100644 --- a/doc/arkode/guide/source/Introduction.rst +++ b/doc/arkode/guide/source/Introduction.rst @@ -64,8 +64,8 @@ for splittings tuned for use with optimal implicit solver algorithms. This framework allows for significant freedom over the constitutive methods used for each component, and ARKODE is packaged with a wide array of built-in methods for use. These built-in Butcher tables -include adaptive explicit methods of orders 2-8, adaptive implicit -methods of orders 2-5, and adaptive ImEx methods of orders 3-5. +include adaptive explicit methods of orders 2-9, adaptive implicit +methods of orders 2-5, and adaptive ImEx methods of orders 2-5. *ERKStep* focuses specifically on problems posed in explicit form, @@ -77,7 +77,7 @@ methods of orders 2-5, and adaptive ImEx methods of orders 3-5. allowing for increased computational efficiency and memory savings. The algorithms used in ERKStep are adaptive- and fixed-step explicit Runge--Kutta methods. As with ARKStep, the ERKStep module is packaged -with adaptive explicit methods of orders 2-8. +with adaptive explicit methods of orders 2-9. *SPRKStep* focuses on Hamiltonian systems posed in the form, @@ -156,10 +156,13 @@ Fixed scaling bug in ``SUNMatScaleAddI_Sparse`` for non-square matrices. Fixed missing soversions in some ``SUNLinearSolver`` and ``SUNNonlinearSolver`` CMake targets. -Added Fortran support for the LAPACK dense ``SUNLinearSolver`` implementation. - -Added the fourth order ERK method ``ARKODE_SOFRONIOU_SPALETTA_5_3_4``. +Added the third order ERK method ``ARKODE_SHU_OSHER_3_2_3``, the fourth order +ERK method ``ARKODE_SOFRONIOU_SPALETTA_5_3_4``, the sixth order ERK method +``ARKODE_VERNER_9_5_6``, the seventh order ERK method ``ARKODE_VERNER_10_6_7``, +the eighth order ERK method ``ARKODE_VERNER_13_7_8``, and the ninth order ERK +method ``ARKODE_VERNER_16_8_9``. +Added Fortran support for the LAPACK dense ``SUNLinearSolver`` implementation. Changes in v5.6.1 ----------------- diff --git a/doc/arkode/guide/source/Mathematics.rst b/doc/arkode/guide/source/Mathematics.rst index ec66f9838b..6c9b7ec4e2 100644 --- a/doc/arkode/guide/source/Mathematics.rst +++ b/doc/arkode/guide/source/Mathematics.rst @@ -375,10 +375,11 @@ described in the section :numref:`Butcher`. For mixed stiff/nonstiff problems, a user should provide both of the functions :math:`f^E` and :math:`f^I` that define the IVP system. For such problems, ARKStep currently implements the ARK methods proposed in -:cite:p:`KenCarp:03`, allowing for methods having order of accuracy :math:`q = -\{3,4,5\}` and embeddings with orders :math:`p = \{2, 3, 4\}`; -the tables for these methods are given in section :numref:`Butcher.additive`. -Additionally, user-defined ARK tables are supported. +:cite:p:`KenCarp:03,KenCarp:19,giraldo2013implicit`, allowing for methods having +order of accuracy :math:`q = \{2,3,4,5\}` and embeddings with orders :math:`p = +\{1,2,3,4\}`; the tables for these methods are given in section +:numref:`Butcher.additive`. Additionally, user-defined ARK tables are +supported. For nonstiff problems, a user may specify that :math:`f^I = 0`, i.e. the equation :eq:`ARKODE_IMEX_IVP` reduces to the non-split IVP @@ -391,8 +392,8 @@ In this scenario, the coefficients :math:`A^I=0`, :math:`c^I=0`, :math:`b^I=0` and :math:`\tilde{b}^I=0` in :eq:`ARKODE_ARK`, and the ARK methods reduce to classical :index:`explicit Runge--Kutta methods` (ERK). For these classes of methods, ARKODE provides coefficients -with orders of accuracy :math:`q = \{2,3,4,5,6,8\}`, with embeddings -of orders :math:`p = \{1,2,3,4,5,7\}`. These default to the methods in +with orders of accuracy :math:`q = \{2,3,4,5,6,7,8,9\}`, with embeddings +of orders :math:`p = \{1,2,3,4,5,6,7,8\}`. These default to the methods in sections :numref:`Butcher.Heun_Euler`, :numref:`Butcher.Bogacki_Shampine`, :numref:`Butcher.Zonneveld`, diff --git a/doc/shared/figs/arkode/shu_osher_erk_stab_region.png b/doc/shared/figs/arkode/shu_osher_erk_stab_region.png new file mode 100644 index 0000000000..25c75d6ed8 Binary files /dev/null and b/doc/shared/figs/arkode/shu_osher_erk_stab_region.png differ diff --git a/doc/shared/figs/arkode/v65b_erk_stab_region.png b/doc/shared/figs/arkode/v65b_erk_stab_region.png new file mode 100644 index 0000000000..8a13299753 Binary files /dev/null and b/doc/shared/figs/arkode/v65b_erk_stab_region.png differ diff --git a/doc/shared/figs/arkode/v76_erk_stab_region.png b/doc/shared/figs/arkode/v76_erk_stab_region.png new file mode 100644 index 0000000000..eed5da6a7c Binary files /dev/null and b/doc/shared/figs/arkode/v76_erk_stab_region.png differ diff --git a/doc/shared/figs/arkode/v87_erk_stab_region.png b/doc/shared/figs/arkode/v87_erk_stab_region.png new file mode 100644 index 0000000000..237f215969 Binary files /dev/null and b/doc/shared/figs/arkode/v87_erk_stab_region.png differ diff --git a/doc/shared/figs/arkode/v98_erk_stab_region.png b/doc/shared/figs/arkode/v98_erk_stab_region.png new file mode 100644 index 0000000000..cfbf657c42 Binary files /dev/null and b/doc/shared/figs/arkode/v98_erk_stab_region.png differ diff --git a/doc/shared/sundials.bib b/doc/shared/sundials.bib index af8882cc04..7e9bf27d08 100644 --- a/doc/shared/sundials.bib +++ b/doc/shared/sundials.bib @@ -445,9 +445,9 @@ @book{HaWa:91 address = {Berlin}, year = 1991, } -@book{HaWa:06, -author = {Hairer, Ernst and Wanner, Gerhard and Lubich, Christian}, -title = {{Geometric Numerical Integration, Structure-Preserving Algorithms for Ordinary Differential Equations}}, +@book{HaWa:06, +author = {Hairer, Ernst and Wanner, Gerhard and Lubich, Christian}, +title = {{Geometric Numerical Integration, Structure-Preserving Algorithms for Ordinary Differential Equations}}, publisher = {Springer Series in Computational Mathematics}, doi = {10.1007/3-540-30666-8}, year = {2006} @@ -1806,6 +1806,17 @@ @article{HaSo:05 publisher={SIAM} } +@article{FCS:21, + author = {Imre Fekete and Sidafa Conde and John N. Shadid}, + title = {Embedded pairs for optimal explicit strong stability preserving {Runge--Kutta} methods}, + journal = {Journal of Computational and Applied Mathematics}, + volume = {412}, + pages = {114325}, + year = {2022}, + issn = {0377-0427}, + doi = {10.1016/j.cam.2022.114325} +} + @article{FFKMS:14, author = {Falgout, R.D. and Friedhoff, S. and Kolev, TZ.V. and MacLachlan, S.P. and Schroder, J.B.}, title = {Parallel Time Integration with Multigrid}, @@ -1998,6 +2009,18 @@ @article{Shampine:80 doi = {10.1137/0901005} } +@article{ShOs:88, + author = {Chi-Wang Shu and Stanley Osher}, + title = {Efficient implementation of essentially non-oscillatory shock-capturing schemes}, + journal = {Journal of Computational Physics}, + volume = {77}, + number = {2}, + pages = {439-471}, + year = {1988}, + issn = {0021-9991}, + doi = {10.1016/0021-9991(88)90177-5} +} + @article{Sod:98, author = {Soderlind, G.}, title = {The automatic control of numerical integration}, @@ -2076,6 +2099,17 @@ @article{Ver:78 doi = {10.1137/0715051} } +@article{Ver:10, + author = {Verner, J.H}, + title = {Numerically optimal {Runge–Kutta} pairs with interpolants}, + journal = {Numerical Algorithms}, + volume = {53}, + number = {2}, + pages = {383-396}, + year = {2010}, + doi = {10.1007/s11075-009-9290-3} +} + @article{Ruth:93, title = {A canonical integration technique}, author = {Ruth, Ronald D}, diff --git a/include/arkode/arkode_arkstep.h b/include/arkode/arkode_arkstep.h index a4951bb888..361d637e72 100644 --- a/include/arkode/arkode_arkstep.h +++ b/include/arkode/arkode_arkstep.h @@ -41,7 +41,9 @@ static const int ARKSTEP_DEFAULT_ERK_3 = ARKODE_BOGACKI_SHAMPINE_4_2_3; static const int ARKSTEP_DEFAULT_ERK_4 = ARKODE_ZONNEVELD_5_3_4; static const int ARKSTEP_DEFAULT_ERK_5 = ARKODE_CASH_KARP_6_4_5; static const int ARKSTEP_DEFAULT_ERK_6 = ARKODE_VERNER_8_5_6; +static const int ARKSTEP_DEFAULT_ERK_7 = ARKODE_VERNER_10_6_7; static const int ARKSTEP_DEFAULT_ERK_8 = ARKODE_FEHLBERG_13_7_8; +static const int ARKSTEP_DEFAULT_ERK_9 = ARKODE_VERNER_16_8_9; /* implicit */ static const int ARKSTEP_DEFAULT_DIRK_2 = ARKODE_SDIRK_2_1_2; diff --git a/include/arkode/arkode_butcher_erk.h b/include/arkode/arkode_butcher_erk.h index 1fa298ae75..cd552f58e3 100644 --- a/include/arkode/arkode_butcher_erk.h +++ b/include/arkode/arkode_butcher_erk.h @@ -64,7 +64,7 @@ extern "C" { /* DEPRECATED MIN_ERK_NUM: use ARKODE_MIN_ERK_NUM */ #define MIN_ERK_NUM 0 /* DEPRECATED MAX_ERK_NUM: use ARKODE_MAX_ERK_NUM */ -#define MAX_ERK_NUM 14 +#define MAX_ERK_NUM 21 typedef enum { ARKODE_ERK_NONE = -1, /* ensure enum is signed int */ @@ -86,7 +86,12 @@ typedef enum { ARKODE_ARK548L2SAb_ERK_8_4_5, ARKODE_ARK2_ERK_3_1_2, ARKODE_SOFRONIOU_SPALETTA_5_3_4, - ARKODE_MAX_ERK_NUM = ARKODE_SOFRONIOU_SPALETTA_5_3_4 + ARKODE_SHU_OSHER_3_2_3, + ARKODE_VERNER_9_5_6, + ARKODE_VERNER_10_6_7, + ARKODE_VERNER_13_7_8, + ARKODE_VERNER_16_8_9, + ARKODE_MAX_ERK_NUM = ARKODE_VERNER_16_8_9 } ARKODE_ERKTableID; /* Accessor routine to load built-in ERK table */ diff --git a/include/arkode/arkode_erkstep.h b/include/arkode/arkode_erkstep.h index 9f5b56f072..de656604d1 100644 --- a/include/arkode/arkode_erkstep.h +++ b/include/arkode/arkode_erkstep.h @@ -36,7 +36,9 @@ static const int ERKSTEP_DEFAULT_3 = ARKODE_BOGACKI_SHAMPINE_4_2_3; static const int ERKSTEP_DEFAULT_4 = ARKODE_ZONNEVELD_5_3_4; static const int ERKSTEP_DEFAULT_5 = ARKODE_CASH_KARP_6_4_5; static const int ERKSTEP_DEFAULT_6 = ARKODE_VERNER_8_5_6; +static const int ERKSTEP_DEFAULT_7 = ARKODE_VERNER_10_6_7; static const int ERKSTEP_DEFAULT_8 = ARKODE_FEHLBERG_13_7_8; +static const int ERKSTEP_DEFAULT_9 = ARKODE_VERNER_16_8_9; #ifndef DEFAULT_ERK_2 /* DEPRECATED DEFAULT_ERK_2: use ERKSTEP_DEFAULT_2 */ diff --git a/src/arkode/arkode_arkstep.c b/src/arkode/arkode_arkstep.c index e1245168e0..ba5e4c3885 100644 --- a/src/arkode/arkode_arkstep.c +++ b/src/arkode/arkode_arkstep.c @@ -2031,14 +2031,19 @@ int arkStep_SetButcherTables(ARKodeMem ark_mem) etable = ARKSTEP_DEFAULT_ERK_6; break; case(7): + etable = ARKSTEP_DEFAULT_ERK_7; + break; case(8): etable = ARKSTEP_DEFAULT_ERK_8; break; + case(9): + etable = ARKSTEP_DEFAULT_ERK_9; + break; default: /* no available method, set default */ arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE::ARKStep", "arkStep_SetButcherTables", - "No explicit method at requested order, using q=6."); - etable = ARKSTEP_DEFAULT_ERK_6; + "No explicit method at requested order, using q=9."); + etable = ARKSTEP_DEFAULT_ERK_9; break; } diff --git a/src/arkode/arkode_butcher_erk.def b/src/arkode/arkode_butcher_erk.def index 5cfb3f2af6..ba719b24bc 100644 --- a/src/arkode/arkode_butcher_erk.def +++ b/src/arkode/arkode_butcher_erk.def @@ -36,11 +36,12 @@ are known precisely enough for use in quad precision (128-bit) calculations. - imeth QP - -------------------------------- + imeth QP + -------------------------------------- ARKODE_HEUN_EULER_2_1_2 Y ARKODE_BOGACKI_SHAMPINE_4_2_3 Y ARKODE_ARK324L2SA_ERK_4_2_3* N + ARKODE_SHU_OSHER_3_2_3 Y ARKODE_SOFRONIOU_SPALETTA_5_3_4 Y ARKODE_ZONNEVELD_5_3_4 Y ARKODE_ARK436L2SA_ERK_6_3_4* N @@ -54,9 +55,13 @@ ARKODE_VERNER_8_5_6 Y ARKODE_FEHLBERG_13_7_8 Y ARKODE_ARK2_ERK_3_1_2 Y - -------------------------------- + ARKODE_VERNER_9_5_6 Y + ARKODE_VERNER_10_6_7 Y + ARKODE_VERNER_13_7_8 Y + ARKODE_VERNER_16_8_9 Y + -------------------------------------- ARKODE_KNOTH_WOLKE_3_3^ Y - -------------------------------- + -------------------------------------- */ ARK_BUTCHER_TABLE(ARKODE_ERK_NONE, { @@ -166,6 +171,29 @@ ARK_BUTCHER_TABLE(ARKODE_ARK324L2SA_ERK_4_2_3, { /* ARK3(2)4L[2]SA-ERK */ return B; }) +ARK_BUTCHER_TABLE(ARKODE_SHU_OSHER_3_2_3, { /* Shu-Osher-ERK */ + ARKodeButcherTable B = ARKodeButcherTable_Alloc(3, SUNTRUE); + B->q = 3; + B->p = 2; + + B->A[1][0] = RCONST(1.0); + B->A[2][0] = RCONST(1.0)/RCONST(4.0); + B->A[2][1] = RCONST(1.0)/RCONST(4.0); + + B->b[0] = RCONST(1.0)/RCONST(6.0); + B->b[1] = RCONST(1.0)/RCONST(6.0); + B->b[2] = RCONST(2.0)/RCONST(3.0); + + B->d[0] = RCONST(291485418878409.0)/RCONST(1.0e15); + B->d[1] = RCONST(291485418878409.0)/RCONST(1.0e15); + B->d[2] = RCONST(208514581121591.0)/RCONST(5.0e14); + + B->c[1] = RCONST(1.0); + B->c[2] = RCONST(1.0)/RCONST(2.0); + + return B; + }) + ARK_BUTCHER_TABLE(ARKODE_SOFRONIOU_SPALETTA_5_3_4, { /* Sofroniou-Spaletta-ERK */ ARKodeButcherTable B = ARKodeButcherTable_Alloc(5, SUNTRUE); B->q = 4; @@ -642,6 +670,350 @@ ARK_BUTCHER_TABLE(ARKODE_VERNER_8_5_6, { /* Verner-6-5 */ return B; }) +ARK_BUTCHER_TABLE(ARKODE_VERNER_9_5_6, { /* Verner-6-5b (DOI: 10.1007/s11075-009-9290-3) */ + ARKodeButcherTable B = ARKodeButcherTable_Alloc(9, SUNTRUE); + B->q = 6; + B->p = 5; + + B->A[1][0] = RCONST(0.06); + B->A[2][0] = RCONST(0.01923996296296296218408805600574851268902); + B->A[2][1] = RCONST(0.07669337037037037008158080197972594760358); + B->A[3][0] = RCONST(0.035975); + B->A[3][2] = RCONST(0.107925); + B->A[4][0] = RCONST(1.318683415233148359391179837984964251518); + B->A[4][2] = RCONST(-5.042058063628561903612990136025473475456); + B->A[4][3] = RCONST(4.220674648395413619539340288611128926277); + B->A[5][0] = RCONST(-41.87259166432750845388000016100704669952); + B->A[5][2] = RCONST(159.432562163137475863550207577645778656); + B->A[5][3] = RCONST(-122.1192135650100425436903606168925762177); + B->A[5][4] = RCONST(5.531743066200053071668207849143072962761); + B->A[6][0] = RCONST(-54.43015693531650356362661113962531089783); + B->A[6][2] = RCONST(207.0672513650184782818541862070560455322); + B->A[6][3] = RCONST(-158.6108137845899932472093496471643447876); + B->A[6][4] = RCONST(6.99181658595024213553870140458457171917); + B->A[6][5] = RCONST(-0.01859723106220323093906721112489321967587); + B->A[7][0] = RCONST(-54.66374178728197819054912542924284934998); + B->A[7][2] = RCONST(207.9528062553893619224254507571458816528); + B->A[7][3] = RCONST(-159.2889574744995115906931459903717041016); + B->A[7][4] = RCONST(7.018743740796944408089075295720249414444); + B->A[7][5] = RCONST(-0.01833878590504572220210022237552038859576); + B->A[7][6] = RCONST(-0.000511948499788209866745436471546781831421); + B->A[8][0] = RCONST(0.0343895786835703570760713887466408777982); + B->A[8][3] = RCONST(0.2582624555633503682372520415810868144035); + B->A[8][4] = RCONST(0.4209371189673536961528554911637911573052); + B->A[8][5] = RCONST(4.405396469669310199890333024086430668831); + B->A[8][6] = RCONST(-176.4831190242986451721662888303399085999); + B->A[8][7] = RCONST(172.3641334014150743314530700445175170898); + + B->b[0] = RCONST(0.0343895786835703570760713887466408777982); + B->b[3] = RCONST(0.2582624555633503682372520415810868144035); + B->b[4] = RCONST(0.4209371189673536961528554911637911573052); + B->b[5] = RCONST(4.405396469669310199890333024086430668831); + B->b[6] = RCONST(-176.4831190242986451721662888303399085999); + B->b[7] = RCONST(172.3641334014150743314530700445175170898); + + B->d[0] = RCONST(0.04909967648382489863179145572757988702506); + B->d[3] = RCONST(0.2251112229516524232408869465871248394251); + B->d[4] = RCONST(0.4694682253029561769253064085205551236868); + B->d[5] = RCONST(0.806579224998886790132246460416354238987); + B->d[7] = RCONST(-0.607119489177795901291290192602900788188); + B->d[8] = RCONST(0.05686113944047568868889186433079885318875); + + B->c[1] = RCONST(0.06); + B->c[2] = RCONST(0.09593333333333333333333333333333333333333); + B->c[3] = RCONST(0.1439); + B->c[4] = RCONST(0.4973); + B->c[5] = RCONST(0.9725); + B->c[6] = RCONST(0.9995); + B->c[7] = RCONST(1.0); + B->c[8] = RCONST(1.0); + return B; + }) + +ARK_BUTCHER_TABLE(ARKODE_VERNER_10_6_7, { /* Verner-7-6 (DOI: 10.1007/s11075-009-9290-3) */ + ARKodeButcherTable B = ARKodeButcherTable_Alloc(10, SUNTRUE); + B->q = 7; + B->p = 6; + + B->A[1][0] = RCONST(0.005); + B->A[2][0] = RCONST(-1.076790123456790123456790123456790123457); + B->A[2][1] = RCONST(1.185679012345679012345679012345679012346); + B->A[3][0] = RCONST(0.04083333333333333333333333333333333333333); + B->A[3][2] = RCONST(0.1225); + B->A[4][0] = RCONST(0.6389139236255726439495106205868069082499); + B->A[4][2] = RCONST(-2.45567263822365688952231721486896276474); + B->A[4][3] = RCONST(2.272258714598084150537715686368755996227); + B->A[5][0] = RCONST(-2.661577375018756796976049372460693120956); + B->A[5][2] = RCONST(10.80451388645613874928130826447159051895); + B->A[5][3] = RCONST(-8.353914657396199316963247838430106639862); + B->A[5][4] = RCONST(0.8204875949566569071080834874010179191828); + B->A[6][0] = RCONST(6.067741434696771740675558248767629265785); + B->A[6][2] = RCONST(-24.71127363591108760942915978375822305679); + B->A[6][3] = RCONST(20.42751793078889477328630164265632629395); + B->A[6][4] = RCONST(-1.906157978816647169395537275704555213451); + B->A[6][5] = RCONST(1.006172249242067939789535557792987674475); + B->A[7][0] = RCONST(12.05467007625320441377425595419481396675); + B->A[7][2] = RCONST(-49.75478495046898785858502378687262535095); + B->A[7][3] = RCONST(41.14288863860467415634047938510775566101); + B->A[7][4] = RCONST(-4.461760149974003830664059933042153716087); + B->A[7][5] = RCONST(2.042334822239175284863677006796933710575); + B->A[7][6] = RCONST(-0.0983484366540610666085342472797492519021); + B->A[8][0] = RCONST(10.13814652288180795380867493804544210434); + B->A[8][2] = RCONST(-42.64113603171750099818382295779883861542); + B->A[8][3] = RCONST(35.76384003992257021309342235326766967773); + B->A[8][4] = RCONST(-4.348022840392907539808220462873578071594); + B->A[8][5] = RCONST(2.009862268377035743327496675192378461361); + B->A[8][6] = RCONST(0.3487490460338271702767087845131754875183); + B->A[8][7] = RCONST(-0.2714390051048312657577810114162275567651); + B->A[9][0] = RCONST(-45.03007203429867644217665656469762325287); + B->A[9][2] = RCONST(187.3272437654588884470285847783088684082); + B->A[9][3] = RCONST(-154.0288236935018630902050063014030456543); + B->A[9][4] = RCONST(18.56465306347536170505918562412261962891); + B->A[9][5] = RCONST(-7.141809679295079149596858769655227661133); + B->A[9][6] = RCONST(1.3088085781613787439425777847645804286); + + B->b[0] = RCONST(0.04715561848627222024665783806085528340191); + B->b[3] = RCONST(0.2575056429843415317648691598151344805956); + B->b[4] = RCONST(0.2621665397741262393260797125549288466573); + B->b[5] = RCONST(0.1521609265673855848621798259046045131981); + B->b[6] = RCONST(0.4939969170032484924171001239301403984427); + B->b[7] = RCONST(-0.2943031171403250323415079492406221106648); + B->b[8] = RCONST(0.08131747232495110944139327102675451897085); + + B->d[0] = RCONST(0.04460860660634117375034080055229424033314); + B->d[3] = RCONST(0.2671640378571372709259890143584925681353); + B->d[4] = RCONST(0.2201018300177293163244485185714438557625); + B->d[5] = RCONST(0.2188431703143156881186115469972719438374); + B->d[6] = RCONST(0.2289871705411202773561285539472009986639); + B->d[9] = RCONST(0.02029518466335628046337546948052477091551); + + B->c[1] = RCONST(0.005); + B->c[2] = RCONST(0.1088888888888888888888888888888888888889); + B->c[3] = RCONST(0.1633333333333333333333333333333333333333); + B->c[4] = RCONST(0.4555); + B->c[5] = RCONST(0.6095094489978380991601625282783061265945); + B->c[6] = RCONST(0.884); + B->c[7] = RCONST(0.925); + B->c[8] = RCONST(1.0); + B->c[9] = RCONST(1.0); + return B; + }) + +ARK_BUTCHER_TABLE(ARKODE_VERNER_13_7_8, { /* Verner-8-7 (DOI: 10.1007/s11075-009-9290-3) */ + ARKodeButcherTable B = ARKodeButcherTable_Alloc(13, SUNTRUE); + B->q = 8; + B->p = 7; + + B->A[1][0] = RCONST(0.05); + B->A[2][0] = RCONST(-0.006993164062499999597544153573380754096434); + B->A[2][1] = RCONST(0.1135556640625000057731597280508140102029); + B->A[3][0] = RCONST(0.0399609375); + B->A[3][2] = RCONST(0.1198828125); + B->A[4][0] = RCONST(0.3613975628004575391116759419674053788185); + B->A[4][2] = RCONST(-1.341524066700492845427561405813321471214); + B->A[4][3] = RCONST(1.370126503900035208616259296832140535116); + B->A[5][0] = RCONST(0.04904720279720279491053602782812959048897); + B->A[5][3] = RCONST(0.2350972042214404811311112553084967657924); + B->A[5][4] = RCONST(0.1808555929813567275665775468951324000955); + B->A[6][0] = RCONST(0.06169289044289043982827180911954201292247); + B->A[6][3] = RCONST(0.112365683146402772774052891691098921001); + B->A[6][4] = RCONST(-0.03885046071451366683779937716280983295292); + B->A[6][5] = RCONST(0.01979188712522046006414555563424073625356); + B->A[7][0] = RCONST(-1.767630240222326953869469434721395373344); + B->A[7][3] = RCONST(-62.5); + B->A[7][4] = RCONST(-6.061889377376669330033109872601926326752); + B->A[7][5] = RCONST(5.6508231982227634659921022830531001091); + B->A[7][6] = RCONST(65.6216964193762350987526588141918182373); + B->A[8][0] = RCONST(-1.180945066554970779293398663867264986038); + B->A[8][3] = RCONST(-41.50473441114321104805640061385929584503); + B->A[8][4] = RCONST(-4.434438319103724879255423729773610830307); + B->A[8][5] = RCONST(4.26040818858613334896290325559675693512); + B->A[8][6] = RCONST(43.75364022446171219371535698883235454559); + B->A[8][7] = RCONST(0.007871425489912309975126802896738809067756); + B->A[9][0] = RCONST(-1.281405999441488363643770753697026520967); + B->A[9][3] = RCONST(-45.04713996013986587740873801521956920624); + B->A[9][4] = RCONST(-4.731362069449575713520061981398612260818); + B->A[9][5] = RCONST(4.514967016593807613844546722248196601868); + B->A[9][6] = RCONST(47.4490955717298490412758837919682264328); + B->A[9][7] = RCONST(0.01059228297111661047658071055366235668771); + B->A[9][8] = RCONST(-0.005746842263844615696088968803678653785028); + B->A[10][0] = RCONST(-1.724470134262485077059068316884804517031); + B->A[10][3] = RCONST(-60.92349008483054007001555874012410640717); + B->A[10][4] = RCONST(-5.951518376222391992769189528189599514008); + B->A[10][5] = RCONST(5.55652373069845673114741657627746462822); + B->A[10][6] = RCONST(63.98301198033306036450085230171680450439); + B->A[10][7] = RCONST(0.01464202825041496271174512600055095390417); + B->A[10][8] = RCONST(0.06460408772358203211005900357122300192714); + B->A[10][9] = RCONST(-0.07930323169008879347074980614706873893738); + B->A[11][0] = RCONST(-3.30162266774707902072805154602974653244); + B->A[11][3] = RCONST(-118.0112723597525103969019255600869655609); + B->A[11][4] = RCONST(-10.14142238845611210251718148356303572655); + B->A[11][5] = RCONST(9.139311332232058049385159392841160297394); + B->A[11][6] = RCONST(123.3759428284042769519146531820297241211); + B->A[11][7] = RCONST(4.623244378874581173022306757047772407532); + B->A[11][8] = RCONST(-3.383277738068201756505004595965147018433); + B->A[11][9] = RCONST(4.527592100324618229478801367804408073425); + B->A[11][10] = RCONST(-5.828495485811623133542980212951079010963); + B->A[12][0] = RCONST(-3.039515033766308604867845133412629365921); + B->A[12][3] = RCONST(-109.260868089417627402326615992933511734); + B->A[12][4] = RCONST(-9.290642497400291688336437800899147987366); + B->A[12][5] = RCONST(8.43050498176491203139448771253228187561); + B->A[12][6] = RCONST(114.2010010378331372749016736634075641632); + B->A[12][7] = RCONST(-0.9637271342145479202656588313402608036995); + B->A[12][8] = RCONST(-5.034884088802189516798080148873850703239); + B->A[12][9] = RCONST(5.958130824002923375815043982584029436111); + + B->b[0] = RCONST(0.04427989419007950788742533632103004492819); + B->b[5] = RCONST(0.3541049391724448991425333588267676532269); + B->b[6] = RCONST(0.2479692154956437688539949704136233776808); + B->b[7] = RCONST(-15.69420203883808540012978482991456985474); + B->b[8] = RCONST(25.08406496555856435293208051007241010666); + B->b[9] = RCONST(-31.73836778626027665950459777377545833588); + B->b[10] = RCONST(22.93828327398878386134128959383815526962); + B->b[11] = RCONST(-0.2361324633071542056228508954518474638462); + + B->d[0] = RCONST(0.04431261522908979538781792939516890328377); + B->d[5] = RCONST(0.3546095642343226606030270886549260467291); + B->d[6] = RCONST(0.2478480431366653080615947146725375205278); + B->d[7] = RCONST(4.448134732475784502980786783155053853989); + B->d[8] = RCONST(19.8468863661187349123338208300992846489); + B->d[9] = RCONST(-23.58162337746561831863800762221217155457); + B->d[12] = RCONST(-0.3601679437289775354003040774841792881489); + + B->c[1] = RCONST(0.05); + B->c[2] = RCONST(0.1065625); + B->c[3] = RCONST(0.15984375); + B->c[4] = RCONST(0.39); + B->c[5] = RCONST(0.465); + B->c[6] = RCONST(0.155); + B->c[7] = RCONST(0.943); + B->c[8] = RCONST(0.9018020417358569851273841777583584189415); + B->c[9] = RCONST(0.909); + B->c[10] = RCONST(0.94); + B->c[11] = RCONST(1.0); + B->c[12] = RCONST(1.0); + return B; + }) + +ARK_BUTCHER_TABLE(ARKODE_VERNER_16_8_9, { /* Verner-9-8 (DOI: 10.1007/s11075-009-9290-3) */ + ARKodeButcherTable B = ARKodeButcherTable_Alloc(16, SUNTRUE); + B->q = 9; + B->p = 8; + + B->A[1][0] = RCONST(0.3462e-1); + B->A[2][0] = RCONST(-0.389335438857287327017042687229284478532e-1); + B->A[2][1] = RCONST(0.1359578945245091786499878854939346230295); + B->A[3][0] = RCONST(0.3638413148954266723060635628912731569111e-1); + B->A[3][2] = RCONST(0.1091523944686280016918190688673819470733); + B->A[4][0] = RCONST(2.025763914393969636805657604282571047511); + B->A[4][2] = RCONST(-7.638023836496292020387602153091964592952); + B->A[4][3] = RCONST(6.173259922102322383581944548809393545442); + B->A[5][0] = RCONST(0.5112275589406060872792270881648288397197e-1); + B->A[5][3] = RCONST(0.1770823794555021537929910813839068684087); + B->A[5][4] = RCONST(0.80277624092225014536138698108025283759e-3); + B->A[6][0] = RCONST(0.1316006357975216279279871693164256985334); + B->A[6][3] = RCONST(-0.2957276252669636417685183174672273730699); + B->A[6][4] = RCONST(0.878137803564295237421124704053886667082e-1); + B->A[6][5] = RCONST(0.6213052975225274774321435005639430026100); + B->A[7][0] = RCONST(0.7166666666666666666666666666666666666667e-1); + B->A[7][5] = RCONST(0.3305533578915319409260346730051472207728); + B->A[7][6] = RCONST(0.2427799754418013924072986603281861125606); + B->A[8][0] = RCONST(0.7180664062500000000000000000000000000000e-1); + B->A[8][5] = RCONST(0.3294380283228177160744825466257672816401); + B->A[8][6] = RCONST(0.1165190029271822839255174533742327183599); + B->A[8][7] = RCONST(-0.3401367187500000000000000000000000000000e-1); + B->A[9][0] = RCONST(0.4836757646340646986611287718844085773549e-1); + B->A[9][5] = RCONST(0.3928989925676163974333190042057047002852e-1); + B->A[9][6] = RCONST(0.1054740945890344608263649267140088017604); + B->A[9][7] = RCONST(-0.2143865284648312665982642293830533996214e-1); + B->A[9][8] = RCONST(-0.1041229174627194437759832813847147895623); + B->A[10][0] = RCONST(-0.2664561487201478635337289243849737340534e-1); + B->A[10][5] = RCONST(0.3333333333333333333333333333333333333333e-1); + B->A[10][6] = RCONST(-0.1631072244872467239162704487554706387141); + B->A[10][7] = RCONST(0.3396081684127761199487954930015522928244e-1); + B->A[10][8] = RCONST(0.1572319413814626097110769806810024118077); + B->A[10][9] = RCONST(0.2152267478031879552303534778794770376960); + B->A[11][0] = RCONST(0.3689009248708622334786359863227633989718e-1); + B->A[11][5] = RCONST(-0.1465181576725542928653609891758501156785); + B->A[11][6] = RCONST(0.2242577768172024345345469822625833796001); + B->A[11][7] = RCONST(0.2294405717066072637090897902753790803034e-1); + B->A[11][8] = RCONST(-0.35850052905728761357394424889330334334e-2); + B->A[11][9] = RCONST(0.8669223316444385506869203619044453906053e-1); + B->A[11][10] = RCONST(0.4383840651968337846196219974168630120572); + B->A[12][0] = RCONST(-0.4866012215113340846662212357570395295088); + B->A[12][5] = RCONST(-6.304602650282852990657772792012007122988); + B->A[12][6] = RCONST(-0.281245618289472564778284183790118418111); + B->A[12][7] = RCONST(-2.679019236219849057687906597489223155566); + B->A[12][8] = RCONST(0.518815663924157511565311164615012522024); + B->A[12][9] = RCONST(1.365353187603341710683633635235238678626); + B->A[12][10] = RCONST(5.885091088503946585721274891680604830712); + B->A[12][11] = RCONST(2.802808786272062889819965117517532194812); + B->A[13][0] = RCONST(0.4185367457753471441471025246471931649633); + B->A[13][5] = RCONST(6.724547581906459363100870806514855026676); + B->A[13][6] = RCONST(-0.425444280164611790606983409697113064616); + B->A[13][7] = RCONST(3.343279153001265577811816947557982637749); + B->A[13][8] = RCONST(0.617081663117537759528421117507709784737); + B->A[13][9] = RCONST(-0.929966123939932833937749523988800852013); + B->A[13][10] = RCONST(-6.099948804751010722472962837945508844846); + B->A[13][11] = RCONST(-3.002206187889399044804158084895173690015); + B->A[13][12] = RCONST(0.2553202529443445472336424602988558373637); + B->A[14][0] = RCONST(-0.779374086122884664644623040843840506343); + B->A[14][5] = RCONST(-13.93734253810777678786523664804936051203); + B->A[14][6] = RCONST(1.252048853379357320949735183924200895136); + B->A[14][7] = RCONST(-14.69150040801686878191527989293072091588); + B->A[14][8] = RCONST(-0.494705058533141685655191992136962873577); + B->A[14][9] = RCONST(2.242974909146236657906984549543692874755); + B->A[14][10] = RCONST(13.36789380382864375813864978592679139881); + B->A[14][11] = RCONST(14.39665048665068644512236935340272139005); + B->A[14][12] = RCONST(-0.7975813331776800379127866056663258667437); + B->A[14][13] = RCONST(0.4409353709534277758753793068298041158235); + B->A[15][0] = RCONST(2.058051337466886442151242368989994043993); + B->A[15][5] = RCONST(22.35793772796803295519317565842520212899); + B->A[15][6] = RCONST(0.90949810997556332745009198137971890783); + B->A[15][7] = RCONST(35.89110098240264104710550686568482456493); + B->A[15][8] = RCONST(-3.442515027624453437985000403608480262211); + B->A[15][9] = RCONST(-4.865481358036368826566013387928704014496); + B->A[15][10] = RCONST(-18.90980381354342625688427480879773032857); + B->A[15][11] = RCONST(-34.26354448030451782929251177395134170515); + B->A[15][12] = RCONST(1.264756521695642578827783499806516664686); + + B->b[0] = RCONST(0.1461197685842315252051541915018784713459e-1); + B->b[7] = RCONST(-0.3915211862331339089410228267288242030810); + B->b[8] = RCONST(0.2310932500289506415909675644868993669908); + B->b[9] = RCONST(0.1274766769992852382560589467488989175618); + B->b[10] = RCONST(0.2246434176204157731566981937082069688984); + B->b[11] = RCONST(0.5684352689748512932705226972873692126743); + B->b[12] = RCONST(0.5825871557215827200814768021863420902155e-1); + B->b[13] = RCONST(0.1364317403482215641609022744494239843327); + B->b[14] = RCONST(0.3057013983082797397721005067920369646664e-1); + + B->d[0] = RCONST(0.1996996514886773085518508418098868756464e-1); + B->d[7] = RCONST(2.191499304949330054530747099310837524864); + B->d[8] = RCONST(0.8857071848208438030833722031786358862953e-1); + B->d[9] = RCONST(0.1140560234865965622484956605091432032674); + B->d[10] = RCONST(0.2533163805345107065564577734569651977347); + B->d[11] = RCONST(-2.056564386240941011158999594595981300493); + B->d[12] = RCONST(0.3408096799013119935160094894224543812830); + B->d[15] = RCONST(0.4834231373823958314376726739772871714902e-1); + + B->c[1] = RCONST(0.3462e-1); + B->c[2] = RCONST(0.9702435063878044594828361677100617517633e-1); + B->c[3] = RCONST(0.1455365259581706689224254251565092627645); + B->c[4] = RCONST(0.561); + B->c[5] = RCONST(0.2290079115904850126662751771814700052182); + B->c[6] = RCONST(0.5449920884095149873337248228185299947818); + B->c[7] = RCONST(0.645); + B->c[8] = RCONST(0.48375); + B->c[9] = RCONST(0.6757e-1); + B->c[10] = RCONST(0.25); + B->c[11] = RCONST(0.6590650618730998549405331618649220295334); + B->c[12] = RCONST(0.8206); + B->c[13] = RCONST(0.9012); + B->c[14] = RCONST(1.0); + B->c[15] = RCONST(1.0); + return B; + }) + ARK_BUTCHER_TABLE(ARKODE_FEHLBERG_13_7_8, { /* Fehlberg-8-7 */ ARKodeButcherTable B = ARKodeButcherTable_Alloc(13, SUNTRUE); B->q = 8; diff --git a/src/arkode/arkode_erkstep.c b/src/arkode/arkode_erkstep.c index f21aa2602b..ebc413e576 100644 --- a/src/arkode/arkode_erkstep.c +++ b/src/arkode/arkode_erkstep.c @@ -957,14 +957,19 @@ int erkStep_SetButcherTable(ARKodeMem ark_mem) etable = ERKSTEP_DEFAULT_6; break; case(7): + etable = ERKSTEP_DEFAULT_7; + break; case(8): etable = ERKSTEP_DEFAULT_8; break; + case(9): + etable = ERKSTEP_DEFAULT_9; + break; default: /* no available method, set default */ arkProcessError(ark_mem, ARK_ILL_INPUT, "ARKODE::ERKStep", "erkStep_SetButcherTable", - "No explicit method at requested order, using q=6."); - etable = ERKSTEP_DEFAULT_6; + "No explicit method at requested order, using q=9."); + etable = ERKSTEP_DEFAULT_9; break; } diff --git a/test/answers b/test/answers index 8f1d469a42..37f4e6b5b6 160000 --- a/test/answers +++ b/test/answers @@ -1 +1 @@ -Subproject commit 8f1d469a426ffb562361ab2aa1702ad15194cb2c +Subproject commit 37f4e6b5b68e407ea302facba92883126dd39bf7 diff --git a/test/unit_tests/arkode/CXX_serial/ark_test_butcher.cpp b/test/unit_tests/arkode/CXX_serial/ark_test_butcher.cpp index 8ad033603d..3bf3f3e4c1 100644 --- a/test/unit_tests/arkode/CXX_serial/ark_test_butcher.cpp +++ b/test/unit_tests/arkode/CXX_serial/ark_test_butcher.cpp @@ -34,7 +34,9 @@ int main() { "ARKODE_ARK436L2SA_ERK_6_3_4", "ARKODE_SAYFY_ABURUB_6_3_4", "ARKODE_CASH_KARP_6_4_5", "ARKODE_FEHLBERG_6_4_5", "ARKODE_DORMAND_PRINCE_7_4_5", "ARKODE_ARK548L2SA_ERK_8_4_5", "ARKODE_VERNER_8_5_6", "ARKODE_FEHLBERG_13_7_8", "ARKODE_ARK437L2SA_ERK_7_3_4", - "ARKODE_ARK548L2SAb_ERK_8_4_5"}; + "ARKODE_ARK548L2SAb_ERK_8_4_5", "ARKODE_SOFRONIOU_SPALETTA_5_3_4", + "ARKODE_SHU_OSHER_3_2_3", "ARKODE_VERNER_9_5_6", "ARKODE_VERNER_10_6_7", + "ARKODE_VERNER_13_7_8", "ARKODE_VERNER_16_8_9"}; std::vector Tables_DIRK = {"ARKODE_SDIRK_2_1_2", "ARKODE_ARK2_DIRK_3_1_2", "ARKODE_BILLINGTON_3_3_2", "ARKODE_TRBDF2_3_3_2", "ARKODE_KVAERNO_4_2_3", "ARKODE_ARK324L2SA_DIRK_4_2_3", "ARKODE_CASH_5_2_4", "ARKODE_CASH_5_3_4", diff --git a/test/unit_tests/arkode/CXX_serial/ark_test_butcher.out b/test/unit_tests/arkode/CXX_serial/ark_test_butcher.out index 8d7971338b..b7c11bcecf 100644 --- a/test/unit_tests/arkode/CXX_serial/ark_test_butcher.out +++ b/test/unit_tests/arkode/CXX_serial/ark_test_butcher.out @@ -22,6 +22,30 @@ ARKodeButcherTable_CheckOrder: embedding order = 6 Testing method ARKODE_ARK437L2SA_ERK_7_3_4: table matches predicted method/embedding orders of 4/3 Testing method ARKODE_ARK548L2SAb_ERK_8_4_5: table matches predicted method/embedding orders of 5/4 +Testing method ARKODE_SOFRONIOU_SPALETTA_5_3_4: table matches predicted method/embedding orders of 4/3 +Testing method ARKODE_SHU_OSHER_3_2_3: table matches predicted method/embedding orders of 3/2 +Testing method ARKODE_VERNER_9_5_6: table matches predicted method/embedding orders of 6/5 +Testing method ARKODE_VERNER_10_6_7: WARNING: +ARKodeButcherTable_CheckOrder: + method order >= 6; reverting to simplifying assumptions + method order = 6 + + embedding order >= 6; reverting to simplifying assumptions + embedding order = 6 +Testing method ARKODE_VERNER_13_7_8: WARNING: +ARKodeButcherTable_CheckOrder: + method order >= 6; reverting to simplifying assumptions + method order = 6 + + embedding order >= 6; reverting to simplifying assumptions + embedding order = 6 +Testing method ARKODE_VERNER_16_8_9: WARNING: +ARKodeButcherTable_CheckOrder: + method order >= 6; reverting to simplifying assumptions + method order = 6 + + embedding order >= 6; reverting to simplifying assumptions + embedding order = 6 Testing individual DIRK methods: