|
LMMC
Lamina Mathematic core
|
Hairer-Wanner SDIRK4(3) 五级嵌入式求解器. 更多...
#include <math.h>#include <string.h>#include "memory_bridge.h"#include "internal.h"#include "ode_internal.h"#include "lmmc/ode.h"#include "lmmc/dense.h"#include "lmmc/linear_algebra.h"结构体 | |
| struct | ode_sdirk_state_t |
宏定义 | |
| #define | SDIRK_STAGES 5 |
| #define | SDIRK_VECTORS 16 |
| #define | SDIRK_NEWTON_MAX 12 |
函数 | |
| lmmc_status_t | lmmc_ode_sdirk4_solve (lmmc_ode_rhs_t rhs, void *user_data, size_t dim, lmmc_real_t t_start, lmmc_real_t t_end, lmmc_real_t *y, const lmmc_ode_config_t *cfg, lmmc_ode_result_t *out_result) |
| 4 阶 SDIRK 求解器,采用嵌入误差估计和自适应步长。 非线性阶段按 abs_tol/rel_tol、当前及阶段状态计算 h*残差与 h*修正的加权 RMS。 迭代耗尽时保留最后接受的 y、final_t 和 num_steps,当前步不提交。 容差控制局部误差,不保证全局严格误差界;纯相对容差保持零绝对误差下限。 | |
Hairer-Wanner SDIRK4(3) 五级嵌入式求解器.
系数和缺陷平滑对应 https://www.unige.ch/~hairer/prog/stiff/Oldies/sdirk4.f 的 METH=1 路径. 阶段向量采用导数归一化.
在文件 ode_singly_diagonally_implicit.c 中定义.
| struct ode_sdirk_state_t |
在文件 ode_singly_diagonally_implicit.c 第 56 行定义.
| 成员变量 | ||
|---|---|---|
| lmmc_ode_rhs_t | rhs | |
| void * | user_data | |
| size_t | dim | |
| size_t | work_bytes | |
| lmmc_real_t * | y | |
| lmmc_ode_config_t | local_cfg | |
| lmmc_ode_result_t * | out_result | |
| lmmc_real_t | t | |
| lmmc_real_t | h | |
| lmmc_real_t * | work | |
| lmmc_real_t * | matrix_data | |
| size_t * | pivots | |
| lmmc_real_t * | k[SDIRK_STAGES] | |
| lmmc_real_t * | rhs_sum | |
| lmmc_real_t * | y_stage | |
| lmmc_real_t * | f_stage | |
| lmmc_real_t * | y_pert | |
| lmmc_real_t * | f_pert | |
| lmmc_real_t * | residual | |
| lmmc_real_t * | delta | |
| lmmc_real_t * | y_new | |
| lmmc_real_t * | y_hat | |
| lmmc_real_t * | error | |
| lmmc_real_t * | smoothed | |
| lmmc_mat_t | matrix | |
| #define SDIRK_STAGES 5 |
在文件 ode_singly_diagonally_implicit.c 第 18 行定义.
被这些函数引用 lmmc_ode_sdirk4_solve().
| #define SDIRK_VECTORS 16 |
在文件 ode_singly_diagonally_implicit.c 第 19 行定义.
被这些函数引用 lmmc_ode_sdirk4_solve().
| #define SDIRK_NEWTON_MAX 12 |
在文件 ode_singly_diagonally_implicit.c 第 20 行定义.
| lmmc_status_t lmmc_ode_sdirk4_solve | ( | lmmc_ode_rhs_t | rhs, |
| void * | user_data, | ||
| size_t | dim, | ||
| lmmc_real_t | t_start, | ||
| lmmc_real_t | t_end, | ||
| lmmc_real_t * | y, | ||
| const lmmc_ode_config_t * | cfg, | ||
| lmmc_ode_result_t * | out_result ) |
4 阶 SDIRK 求解器,采用嵌入误差估计和自适应步长。 非线性阶段按 abs_tol/rel_tol、当前及阶段状态计算 h*残差与 h*修正的加权 RMS。 迭代耗尽时保留最后接受的 y、final_t 和 num_steps,当前步不提交。 容差控制局部误差,不保证全局严格误差界;纯相对容差保持零绝对误差下限。
在文件 ode_singly_diagonally_implicit.c 第 288 行定义.
引用了 ode_sdirk_state_t::delta, ode_sdirk_state_t::dim, ode_sdirk_state_t::error, ode_sdirk_state_t::f_pert, ode_sdirk_state_t::f_stage, lmmc_ode_result_t::failure_reason, ode_sdirk_state_t::h, lmmc_ode_config_t::initial_step, ode_sdirk_state_t::k, lmmc_memory_alloc(), lmmc_ode_do_log(), LMMC_ODE_FAILURE_INVALID_DIMENSION, lmmc_ode_sdirk4_solve(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, ode_sdirk_state_t::local_cfg, ode_sdirk_state_t::matrix, ode_sdirk_state_t::matrix_data, lmmc_ode_config_t::max_step, lmmc_ode_config_t::min_step, ode_sdirk_state_t::out_result, ode_sdirk_state_t::pivots, ode_sdirk_state_t::residual, ode_sdirk_state_t::rhs, ode_sdirk_state_t::rhs_sum, SDIRK_STAGES, SDIRK_VECTORS, ode_sdirk_state_t::smoothed, ode_sdirk_state_t::t, ode_sdirk_state_t::user_data, validate_and_init_ode_config(), ode_sdirk_state_t::work, ode_sdirk_state_t::work_bytes, ode_sdirk_state_t::y, ode_sdirk_state_t::y_hat, ode_sdirk_state_t::y_new, ode_sdirk_state_t::y_pert , 以及 ode_sdirk_state_t::y_stage.
被这些函数引用 lmmc_ode_sdirk4_solve().