init: 初始化krylov复现项目
This commit is contained in:
1
include/krylov/arnoldi.hpp
Normal file
1
include/krylov/arnoldi.hpp
Normal file
@@ -0,0 +1 @@
|
||||
#pragma once
|
||||
1
include/krylov/gmres.hpp
Normal file
1
include/krylov/gmres.hpp
Normal file
@@ -0,0 +1 @@
|
||||
#pragma once
|
||||
31
include/krylov/types/common.hpp
Normal file
31
include/krylov/types/common.hpp
Normal file
@@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
// Krylov 项目公共数值类型别名。
|
||||
//
|
||||
// 约定:算法代码只使用本文件中的别名,不直接写裸 Eigen 类型。
|
||||
// 后续若要切换精度 (float/double)、索引宽度或矩阵存储布局,
|
||||
// 只需改动此文件,无需触碰算法实现。
|
||||
//
|
||||
// 规模变大后可拆分为:
|
||||
// - krylov/types/dense.hpp
|
||||
// - krylov/types/sparse.hpp
|
||||
// - krylov/types/traits.hpp
|
||||
|
||||
#include <Eigen/Dense>
|
||||
#include <Eigen/Sparse>
|
||||
|
||||
namespace krylov {
|
||||
|
||||
// 标量与索引
|
||||
using Scalar = double;
|
||||
using Index = Eigen::Index;
|
||||
|
||||
// 稠密
|
||||
using Vector = Eigen::Matrix<Scalar, Eigen::Dynamic, 1>;
|
||||
using Matrix = Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic>;
|
||||
|
||||
// 稀疏(行主序,方便按行遍历 SpMV)
|
||||
using SparseMatrix = Eigen::SparseMatrix<Scalar, Eigen::RowMajor, Index>;
|
||||
using Triplet = Eigen::Triplet<Scalar, Index>;
|
||||
|
||||
} // namespace krylov
|
||||
69
include/logger/logger.hpp
Normal file
69
include/logger/logger.hpp
Normal file
@@ -0,0 +1,69 @@
|
||||
#pragma once
|
||||
#include <spdlog/spdlog.h>
|
||||
#include <spdlog/async.h>
|
||||
#include <spdlog/sinks/rotating_file_sink.h>
|
||||
#include <spdlog/sinks/stdout_color_sinks.h>
|
||||
#include <spdlog/details/thread_pool.h> // 新增:引入thread_pool所在头文件
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector> // 新增:用于sink向量转换,避免编译报错
|
||||
|
||||
// 单例模式封装 logger,全局唯一,支持多模块、局部级别、异步输出
|
||||
class Logger {
|
||||
public:
|
||||
// 禁止拷贝构造和赋值运算符(单例)
|
||||
Logger(const Logger&) = delete;
|
||||
Logger& operator=(const Logger&) = delete;
|
||||
|
||||
// 初始化 logger(必须在程序启动时调用,建议main函数开头)
|
||||
// 参数:日志文件路径、日志文件最大大小(MB)、备份文件数量、是否开启异步
|
||||
static void Init(const std::string& log_path = "logs/app.log",
|
||||
size_t max_file_size_mb = 5,
|
||||
size_t max_backup_count = 3,
|
||||
bool is_async = true);
|
||||
|
||||
// 获取全局默认 logger(通用日志)
|
||||
static std::shared_ptr<spdlog::logger> GetDefaultLogger();
|
||||
|
||||
// 获取指定模块的 logger(局部 logger,支持单独设置级别)
|
||||
// 模块名示例:"net"(网络模块)、"db"(数据库模块)、"ui"(界面模块)
|
||||
static std::shared_ptr<spdlog::logger> GetModuleLogger(const std::string& module_name);
|
||||
|
||||
// 设置全局默认日志级别(对所有未单独设置级别的 logger 生效)
|
||||
static void SetGlobalLevel(spdlog::level::level_enum level);
|
||||
|
||||
// 设置指定模块 logger 的局部级别(优先级高于全局级别)
|
||||
static void SetModuleLevel(const std::string& module_name, spdlog::level::level_enum level);
|
||||
|
||||
// 关闭所有 logger,释放资源(建议程序退出时调用)
|
||||
static void Shutdown();
|
||||
|
||||
private:
|
||||
// 私有构造函数(单例)
|
||||
Logger();
|
||||
// 析构函数
|
||||
~Logger() = default;
|
||||
|
||||
// 单例实例
|
||||
static Logger& GetInstance();
|
||||
|
||||
// 全局线程池(异步日志使用)- 修复:thread_pool在spdlog::details命名空间下
|
||||
std::shared_ptr<spdlog::details::thread_pool> thread_pool_;
|
||||
// 全局默认 logger
|
||||
std::shared_ptr<spdlog::logger> default_logger_;
|
||||
// 新增:存储全局日志格式,供模块logger复用(避免formatter()方法兼容问题)
|
||||
std::string log_pattern_;
|
||||
};
|
||||
|
||||
// 便捷宏定义(简化调用,可根据需求开启/关闭)
|
||||
#define LOG_INFO(...) Logger::GetDefaultLogger()->info(__VA_ARGS__)
|
||||
#define LOG_WARN(...) Logger::GetDefaultLogger()->warn(__VA_ARGS__)
|
||||
#define LOG_ERROR(...) Logger::GetDefaultLogger()->error(__VA_ARGS__)
|
||||
#define LOG_DEBUG(...) Logger::GetDefaultLogger()->debug(__VA_ARGS__)
|
||||
#define LOG_CRITICAL(...) Logger::GetDefaultLogger()->critical(__VA_ARGS__)
|
||||
#define LOG_TRACE(...) Logger::GetDefaultLogger()->trace(__VA_ARGS__)
|
||||
|
||||
// 模块日志宏定义(示例,可自行扩展)
|
||||
#define LOG_NET_INFO(...) Logger::GetModuleLogger("net")->info(__VA_ARGS__)
|
||||
#define LOG_DB_WARN(...) Logger::GetModuleLogger("db")->warn(__VA_ARGS__)
|
||||
#define LOG_UI_ERROR(...) Logger::GetModuleLogger("ui")->error(__VA_ARGS__)
|
||||
Reference in New Issue
Block a user