在单次 Jacobian 构建内按完整输入精确复用储气物性、PH 反算、密度和管路求根结果,保持原有求值副作用、差分政策与失败回退。八路模型求解 CPU 中位数减少 19.27%,循环和不循环的完整原始采样均与恢复基线一致。 增加独立的跨平台时间剖析工具,记录互斥阶段耗时、Newton/LU 统计、矩阵复用与内核复用,保存 UD00 两种工况的调查报告和机器可读汇总。 补充 Windows/Linux 运行、测试、原生编译和剖析所需依赖文档及索引,不修改依赖清单、版本锁或安装环境。 验证:8 项新增专项回归通过;2270 次完整 Jacobian 核对零差异;16 次剖析配对及预热运行保持完整数值一致。既有固定样本哈希失败和 Linux 实机验收限制见报告。
71 lines
3.2 KiB
C
71 lines
3.2 KiB
C
#ifndef NATIVE_RUNTIME_H
|
|
#define NATIVE_RUNTIME_H
|
|
#include "model.h"
|
|
#include <stddef.h>
|
|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#ifndef NFRICTIONS
|
|
#define NFRICTIONS 0
|
|
#endif
|
|
#define NATIVE_JACOBIAN_STATS_COUNT 3
|
|
typedef struct {
|
|
double start, stop, sample_step, max_step, rtol, timeout;
|
|
int bdf, record_samples;
|
|
const char *cancel_path;
|
|
} NativeOptions;
|
|
typedef struct {
|
|
int seen;
|
|
double first_time, first_temperature, extreme_time, extreme_temperature;
|
|
} NativePropertyWarning;
|
|
typedef struct {
|
|
NativeOptions options;
|
|
double *times, *states;
|
|
size_t count, capacity, sample_index;
|
|
/* Result history is a bounded buffer, independent of integrator memory. */
|
|
size_t buffered, committed, output_count;
|
|
FILE *sample_file, *output_file;
|
|
const char *sample_path, *output_blocks_path;
|
|
int storage_control, storage_failed;
|
|
double final_time, final_state[NSTATES];
|
|
double wall_start, cpu_start, solve_seconds, solve_cpu_seconds, last_progress;
|
|
double max_accepted_step;
|
|
unsigned long nfev, accepted, rejected, events, starts, njev, nlu;
|
|
/* Structure coloring is automatic; verification is diagnostic only. */
|
|
int jacobian_verify, jacobian_colored;
|
|
unsigned long jacobian_rhs, jacobian_colored_evals, jacobian_fallbacks;
|
|
unsigned long jacobian_checks, jacobian_mismatches, cvode_rhs, linear_rhs;
|
|
unsigned long jacobian_gas_evaluations, jacobian_gas_reuses;
|
|
/* PH, density, pipe. Keep runtime-only harnesses independent of kernels.h. */
|
|
unsigned long jacobian_scalar_evaluations[NATIVE_JACOBIAN_STATS_COUNT], jacobian_scalar_reuses[NATIVE_JACOBIAN_STATS_COUNT];
|
|
unsigned long same_time_returns, same_time_streak, max_same_time_streak;
|
|
int stagnating, cvode_flag;
|
|
double cvode_return_time, cvode_internal_time, cvode_last_step, cvode_next_step;
|
|
const char *failure_reason, *failure_operation;
|
|
char message_buffer[384];
|
|
int status; /* 0 completed, 1 cancelled, 2 failed */
|
|
const char *message;
|
|
NativePropertyWarning property_warnings[6];
|
|
} NativeRun;
|
|
typedef int (*NativeDense)(void *context, double t, double *state);
|
|
double native_wall_time(void);
|
|
double native_cpu_time(void);
|
|
int native_poll(NativeRun *run, double time);
|
|
void native_property_warnings_json(NativeRun *run, FILE *file);
|
|
int native_fail(NativeRun *run, const char *reason, const char *operation, const char *message);
|
|
int native_rhs(NativeRun *run, double t, const double *y, double *dy);
|
|
int native_jacobian_rhs(NativeRun *run, double t, const double *y, double *dy);
|
|
int native_append(NativeRun *run, double t, const double *y);
|
|
int native_accept(NativeRun *run, double t, double next, const double *old,
|
|
const double *trial, NativeDense dense, void *context,
|
|
double *accepted_time, double *accepted_state);
|
|
int native_rk45(NativeRun *run);
|
|
int native_bdf(NativeRun *run);
|
|
int native_solve(NativeRun *run);
|
|
void native_run_free(NativeRun *run);
|
|
int native_samples_append(NativeRun *run, double t, const double *state);
|
|
int native_samples_flush(NativeRun *run);
|
|
int native_samples_outputs(NativeRun *run);
|
|
int native_samples_json(NativeRun *run, FILE *file, size_t column);
|
|
int64_t native_file_tell(FILE *file);
|
|
#endif
|