LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
ode_singly_diagonally_implicit.c 文件参考

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"
ode_singly_diagonally_implicit.c 的引用(Include)关系图:

浏览该文件的源代码.

结构体

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 中定义.


结构体说明

◆ ode_sdirk_state_t

struct ode_sdirk_state_t

在文件 ode_singly_diagonally_implicit.c 第 56 行定义.

ode_sdirk_state_t 的协作图:
成员变量
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

宏定义说明

◆ SDIRK_STAGES

#define SDIRK_STAGES   5

在文件 ode_singly_diagonally_implicit.c 第 18 行定义.

被这些函数引用 lmmc_ode_sdirk4_solve().

◆ SDIRK_VECTORS

#define SDIRK_VECTORS   16

在文件 ode_singly_diagonally_implicit.c 第 19 行定义.

被这些函数引用 lmmc_ode_sdirk4_solve().

◆ SDIRK_NEWTON_MAX

#define SDIRK_NEWTON_MAX   12

在文件 ode_singly_diagonally_implicit.c 第 20 行定义.

函数说明

◆ lmmc_ode_sdirk4_solve()

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().

函数调用图:
这是这个函数的调用关系图: