initial upload

This commit is contained in:
2025-12-17 10:53:43 +08:00
commit f3f1778f77
308 changed files with 129940 additions and 0 deletions

123
cuda/grid_wrapper.cuh Normal file
View File

@@ -0,0 +1,123 @@
#ifndef GRID_WRAPPER_CUH
#define GRID_WRAPPER_CUH
#include <cuda_runtime.h>
#include <cuda_runtime_api.h>
#include <cuda.h>
#include <vector>
#include <iostream>
//#include "config.h"
#include "cuda_constants.cuh"
#include "cuda_utils.cuh"
// structure for storing grid information on device
typedef struct Grid_on_device {
// parameters
int loc_I_host, loc_J_host, loc_K_host;
int n_nodes_total_host;
int n_nodes_max_host=0;
int n_levels_host;
CUSTOMREAL dr_host, dt_host, dp_host;
// index storage
int* n_nodes_on_levels, *n_nodes_on_levels_host;
int* vv_i__j__k___0, *vv_i__j__k___1, *vv_i__j__k___2, *vv_i__j__k___3, *vv_i__j__k___4, *vv_i__j__k___5, *vv_i__j__k___6, *vv_i__j__k___7;
int* vv_ip1j__k___0, *vv_ip1j__k___1, *vv_ip1j__k___2, *vv_ip1j__k___3, *vv_ip1j__k___4, *vv_ip1j__k___5, *vv_ip1j__k___6, *vv_ip1j__k___7;
int* vv_im1j__k___0, *vv_im1j__k___1, *vv_im1j__k___2, *vv_im1j__k___3, *vv_im1j__k___4, *vv_im1j__k___5, *vv_im1j__k___6, *vv_im1j__k___7;
int* vv_i__jp1k___0, *vv_i__jp1k___1, *vv_i__jp1k___2, *vv_i__jp1k___3, *vv_i__jp1k___4, *vv_i__jp1k___5, *vv_i__jp1k___6, *vv_i__jp1k___7;
int* vv_i__jm1k___0, *vv_i__jm1k___1, *vv_i__jm1k___2, *vv_i__jm1k___3, *vv_i__jm1k___4, *vv_i__jm1k___5, *vv_i__jm1k___6, *vv_i__jm1k___7;
int* vv_i__j__kp1_0, *vv_i__j__kp1_1, *vv_i__j__kp1_2, *vv_i__j__kp1_3, *vv_i__j__kp1_4, *vv_i__j__kp1_5, *vv_i__j__kp1_6, *vv_i__j__kp1_7;
int* vv_i__j__km1_0, *vv_i__j__km1_1, *vv_i__j__km1_2, *vv_i__j__km1_3, *vv_i__j__km1_4, *vv_i__j__km1_5, *vv_i__j__km1_6, *vv_i__j__km1_7;
int* vv_ip2j__k___0, *vv_ip2j__k___1, *vv_ip2j__k___2, *vv_ip2j__k___3, *vv_ip2j__k___4, *vv_ip2j__k___5, *vv_ip2j__k___6, *vv_ip2j__k___7;
int* vv_im2j__k___0, *vv_im2j__k___1, *vv_im2j__k___2, *vv_im2j__k___3, *vv_im2j__k___4, *vv_im2j__k___5, *vv_im2j__k___6, *vv_im2j__k___7;
int* vv_i__jp2k___0, *vv_i__jp2k___1, *vv_i__jp2k___2, *vv_i__jp2k___3, *vv_i__jp2k___4, *vv_i__jp2k___5, *vv_i__jp2k___6, *vv_i__jp2k___7;
int* vv_i__jm2k___0, *vv_i__jm2k___1, *vv_i__jm2k___2, *vv_i__jm2k___3, *vv_i__jm2k___4, *vv_i__jm2k___5, *vv_i__jm2k___6, *vv_i__jm2k___7;
int* vv_i__j__kp2_0, *vv_i__j__kp2_1, *vv_i__j__kp2_2, *vv_i__j__kp2_3, *vv_i__j__kp2_4, *vv_i__j__kp2_5, *vv_i__j__kp2_6, *vv_i__j__kp2_7;
int* vv_i__j__km2_0, *vv_i__j__km2_1, *vv_i__j__km2_2, *vv_i__j__km2_3, *vv_i__j__km2_4, *vv_i__j__km2_5, *vv_i__j__km2_6, *vv_i__j__km2_7;
// constants
CUSTOMREAL* vv_fac_a_0, *vv_fac_a_1, *vv_fac_a_2, *vv_fac_a_3, *vv_fac_a_4, *vv_fac_a_5, *vv_fac_a_6, *vv_fac_a_7;
CUSTOMREAL* vv_fac_b_0, *vv_fac_b_1, *vv_fac_b_2, *vv_fac_b_3, *vv_fac_b_4, *vv_fac_b_5, *vv_fac_b_6, *vv_fac_b_7;
CUSTOMREAL* vv_fac_c_0, *vv_fac_c_1, *vv_fac_c_2, *vv_fac_c_3, *vv_fac_c_4, *vv_fac_c_5, *vv_fac_c_6, *vv_fac_c_7;
CUSTOMREAL* vv_fac_f_0, *vv_fac_f_1, *vv_fac_f_2, *vv_fac_f_3, *vv_fac_f_4, *vv_fac_f_5, *vv_fac_f_6, *vv_fac_f_7;
CUSTOMREAL* vv_T0v_0, *vv_T0v_1, *vv_T0v_2, *vv_T0v_3, *vv_T0v_4, *vv_T0v_5, *vv_T0v_6, *vv_T0v_7;
CUSTOMREAL* vv_T0r_0, *vv_T0r_1, *vv_T0r_2, *vv_T0r_3, *vv_T0r_4, *vv_T0r_5, *vv_T0r_6, *vv_T0r_7;
CUSTOMREAL* vv_T0t_0, *vv_T0t_1, *vv_T0t_2, *vv_T0t_3, *vv_T0t_4, *vv_T0t_5, *vv_T0t_6, *vv_T0t_7;
CUSTOMREAL* vv_T0p_0, *vv_T0p_1, *vv_T0p_2, *vv_T0p_3, *vv_T0p_4, *vv_T0p_5, *vv_T0p_6, *vv_T0p_7;
CUSTOMREAL* vv_fun_0, *vv_fun_1, *vv_fun_2, *vv_fun_3, *vv_fun_4, *vv_fun_5, *vv_fun_6, *vv_fun_7;
bool* vv_change_0, *vv_change_1, *vv_change_2, *vv_change_3, *vv_change_4, *vv_change_5, *vv_change_6, *vv_change_7;
// temporary variables
CUSTOMREAL* tau;
bool if_3rd_order = false;
// thead and grid for sweeping
dim3 grid_sweep_host, threads_sweep_host;
// array of streams
cudaStream_t* level_streams;
} Grid_on_device;
void cuda_initialize_grid_1st(std::vector< std::vector<int> >& ijk, Grid_on_device* grid_dv, int const& loc_I, int const& loc_J, int const& loc_K,
CUSTOMREAL const& dp, CUSTOMREAL const& dt, CUSTOMREAL const& dr, \
std::vector<std::vector<int*>> & vv_i__j__k__, \
std::vector<std::vector<int*>> & vv_ip1j__k__, \
std::vector<std::vector<int*>> & vv_im1j__k__, \
std::vector<std::vector<int*>> & vv_i__jp1k__, \
std::vector<std::vector<int*>> & vv_i__jm1k__, \
std::vector<std::vector<int*>> & vv_i__j__kp1, \
std::vector<std::vector<int*>> & vv_i__j__km1, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_a, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_b, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_c, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_f, \
std::vector<std::vector<CUSTOMREAL*>> & vv_T0v, \
std::vector<std::vector<CUSTOMREAL*>> & vv_T0r, \
std::vector<std::vector<CUSTOMREAL*>> & vv_T0t, \
std::vector<std::vector<CUSTOMREAL*>> & vv_T0p, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fun, \
std::vector<std::vector<bool*>> & vv_change);
void cuda_initialize_grid_3rd(std::vector< std::vector<int> >& ijk, Grid_on_device* grid_dv, int const& loc_I, int const& loc_J, int const& loc_K,
CUSTOMREAL const& dp, CUSTOMREAL const& dt, CUSTOMREAL const& dr, \
std::vector<std::vector<int*>> & vv_i__j__k__, \
std::vector<std::vector<int*>> & vv_ip1j__k__, \
std::vector<std::vector<int*>> & vv_im1j__k__, \
std::vector<std::vector<int*>> & vv_i__jp1k__, \
std::vector<std::vector<int*>> & vv_i__jm1k__, \
std::vector<std::vector<int*>> & vv_i__j__kp1, \
std::vector<std::vector<int*>> & vv_i__j__km1, \
std::vector<std::vector<int*>> & vv_ip2j__k__, \
std::vector<std::vector<int*>> & vv_im2j__k__, \
std::vector<std::vector<int*>> & vv_i__jp2k__, \
std::vector<std::vector<int*>> & vv_i__jm2k__, \
std::vector<std::vector<int*>> & vv_i__j__kp2, \
std::vector<std::vector<int*>> & vv_i__j__km2, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_a, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_b, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_c, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_f, \
std::vector<std::vector<CUSTOMREAL*>> & vv_T0v, \
std::vector<std::vector<CUSTOMREAL*>> & vv_T0r, \
std::vector<std::vector<CUSTOMREAL*>> & vv_T0t, \
std::vector<std::vector<CUSTOMREAL*>> & vv_T0p, \
std::vector<std::vector<CUSTOMREAL*>> & vv_fun, \
std::vector<std::vector<bool*>> & vv_change);
// finalize
void cuda_finalize_grid(Grid_on_device* grid_dv);
// copy tau from host to device
void cuda_copy_tau_to_device(Grid_on_device* grid_dv, CUSTOMREAL* tau_h);
// copy tau from device to host
void cuda_copy_tau_to_host(Grid_on_device* grid_dv, CUSTOMREAL* tau_h);
#endif // GRID_WRAPPER_CUH