// CelerisLab – core/params.cuh
// Runtime parameter structures transported via __constant__ memory.
// Includes: LBMParams, RigidBodyState2D, RigidBodyControl2D.
// ============================================================================

#ifndef CELERIS_CORE_PARAMS_CUH
#define CELERIS_CORE_PARAMS_CUH

#include <stdint.h>

// ============================================================================
// LBM runtime parameters  (uploaded once per run or on parameter change)
// ============================================================================
struct LBMParams {
    //--- grid ---
    unsigned int  Nx, Ny, Nz;
    unsigned long N;               // Nx * Ny * Nz

    //--- relaxation ---
    float omega;                   // SRT/TRT主松弛率  w = 1/(3ν + 0.5)
    float omega_bulk;              // MRT bulk 松弛率   (s_e / s_eps)

    //--- external body force ---
    float fx, fy, fz;

    //--- reference quantities ---
    float rho_ref;                 // 参考密度 (通常 1.0)
    float u_inlet;                 // 入口参考速度

    //--- diagnostics ---
    unsigned int n_objects;        // 观测对象数量
};

__constant__ LBMParams d_params;

// ============================================================================
// Rigid-body state / control  (2D, per architecture §17.3)
// ============================================================================
struct RigidBodyState2D {
    float x, y, theta;            // 位姿 (position + orientation)
    float vx, vy, omega;          // 速度 (translational + rotational)
};

struct RigidBodyControl2D {
    float ax_cmd, ay_cmd;         // 目标加速度（或目标速度/位移, 取决于 mode）
    float alpha_cmd;              // 目标角加速度 / 角速度
    int   control_mode;           // 0=力控, 1=速度控, 2=位移控
};

// ============================================================================
// Halo plan (multi-GPU / AMR 预留)
// ============================================================================
struct HaloPlan {
    int       face_id;
    int       peer_gpu;
    int       level;              // AMR level (0 = base)
    size_t    count;
    int*      send_idx;
    int*      recv_idx;
};

#endif // CELERIS_CORE_PARAMS_CUH
