Skip to content
Snippets Groups Projects
Commit d0c77118 authored by 数学の武士's avatar 数学の武士
Browse files

ESM CXX impl refactor

parent 0dbab68b
Branches obl-lib-update
No related tags found
No related merge requests found
Pipeline #1706 failed
...@@ -4,85 +4,47 @@ ...@@ -4,85 +4,47 @@
#include "sfx-data.h" #include "sfx-data.h"
template<typename T, MemType memIn, MemType memOut, MemType RunMem > template<typename T, MemType memIn, MemType memOut, MemType RunMem >
class FluxEsmBase : public ModelBase<T, memIn, memOut, RunMem> class FluxEsm : public ModelBase<T, memIn, memOut, RunMem>
{
public:
using ModelBase<T, memIn, memOut, RunMem>::res_sfx;
using ModelBase<T, memIn, memOut, RunMem>::sfx;
using ModelBase<T, memIn, memOut, RunMem>::meteo;
using ModelBase<T, memIn, memOut, RunMem>::grid_size;
using ModelBase<T, memIn, memOut, RunMem>::ifAllocated;
using ModelBase<T, memIn, memOut, RunMem>::allocated_size;
sfx_surface_param surface;
sfx_phys_constants phys;
sfx_esm_param_C model;
sfx_esm_numericsType_C numerics;
FluxEsmBase(sfxDataVecTypeC* sfx,
meteoDataVecTypeC* meteo,
const sfx_esm_param_C model,
const sfx_surface_param surface,
const sfx_esm_numericsType_C numerics,
const sfx_phys_constants phys,
const int grid_size);
~FluxEsmBase();
};
template<typename T, MemType memIn, MemType memOut, MemType RunMem >
class FluxEsm : public FluxEsmBase<T, memIn, memOut, RunMem>
{}; {};
template<typename T, MemType memIn, MemType memOut > template<typename T, MemType memIn, MemType memOut >
class FluxEsm<T, memIn, memOut, MemType::CPU> : public FluxEsmBase<T, memIn, memOut, MemType::CPU> class FluxEsm<T, memIn, memOut, MemType::CPU> : public ModelBase<T, memIn, memOut, MemType::CPU>
{ {
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::res_sfx; using ModelBase<T, memIn, memOut, MemType::CPU>::res_sfx;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::sfx; using ModelBase<T, memIn, memOut, MemType::CPU>::sfx;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::meteo; using ModelBase<T, memIn, memOut, MemType::CPU>::meteo;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::surface; using ModelBase<T, memIn, memOut, MemType::CPU>::grid_size;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::phys; using ModelBase<T, memIn, memOut, MemType::CPU>::ifAllocated;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::grid_size; using ModelBase<T, memIn, memOut, MemType::CPU>::allocated_size;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::ifAllocated;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::allocated_size;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::model;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::numerics;
public: public:
FluxEsm(sfxDataVecTypeC* sfx, FluxEsm(sfxDataVecTypeC* sfx,
meteoDataVecTypeC* meteo, meteoDataVecTypeC* meteo,
const sfx_esm_param_C model, const int grid_size) : ModelBase<T, memIn, memOut, MemType::CPU>(sfx, meteo, grid_size) {}
~FluxEsm() = default;
void compute_flux(const sfx_esm_param_C model,
const sfx_surface_param surface, const sfx_surface_param surface,
const sfx_esm_numericsType_C numerics, const sfx_esm_numericsType_C numerics,
const sfx_phys_constants phys, const sfx_phys_constants phys);
const int grid_size) : FluxEsmBase<T, memIn, memOut, MemType::CPU>(sfx, meteo, model,
surface, numerics, phys, grid_size) {}
~FluxEsm() = default;
void compute_flux();
}; };
#ifdef INCLUDE_CUDA #ifdef INCLUDE_CUDA
template<typename T, MemType memIn, MemType memOut > template<typename T, MemType memIn, MemType memOut >
class FluxEsm<T, memIn, memOut, MemType::GPU> : public FluxEsmBase<T, memIn, memOut, MemType::GPU> class FluxEsm<T, memIn, memOut, MemType::GPU> : public ModelBase<T, memIn, memOut, MemType::GPU>
{ {
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::res_sfx; using ModelBase<T, memIn, memOut, MemType::GPU>::res_sfx;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::sfx; using ModelBase<T, memIn, memOut, MemType::GPU>::sfx;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::meteo; using ModelBase<T, memIn, memOut, MemType::GPU>::meteo;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::surface; using ModelBase<T, memIn, memOut, MemType::GPU>::grid_size;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::phys; using ModelBase<T, memIn, memOut, MemType::GPU>::ifAllocated;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::grid_size; using ModelBase<T, memIn, memOut, MemType::GPU>::allocated_size;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::ifAllocated;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::allocated_size;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::model;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::numerics;
public: public:
FluxEsm(sfxDataVecTypeC* sfx, FluxEsm(sfxDataVecTypeC* sfx,
meteoDataVecTypeC* meteo, meteoDataVecTypeC* meteo,
const sfx_esm_param_C model, const int grid_size) : ModelBase<T, memIn, memOut, MemType::GPU>(sfx, meteo, grid_size) {}
~FluxEsm() = default;
void compute_flux(const sfx_esm_param_C model,
const sfx_surface_param surface, const sfx_surface_param surface,
const sfx_esm_numericsType_C numerics, const sfx_esm_numericsType_C numerics,
const sfx_phys_constants phys, const sfx_phys_constants phys);
const int grid_size) : FluxEsmBase<T, memIn, memOut, MemType::GPU>(sfx, meteo, model,
surface, numerics, phys, grid_size) {}
~FluxEsm() = default;
void compute_flux();
}; };
#endif #endif
\ No newline at end of file
...@@ -119,7 +119,10 @@ __global__ void sfx_kernel::compute_flux(sfxDataVecTypeC sfx, ...@@ -119,7 +119,10 @@ __global__ void sfx_kernel::compute_flux(sfxDataVecTypeC sfx,
} }
template<typename T, MemType memIn, MemType memOut > template<typename T, MemType memIn, MemType memOut >
void FluxEsm<T, memIn, memOut, MemType::GPU>::compute_flux() void FluxEsm<T, memIn, memOut, MemType::GPU>::compute_flux(const sfx_esm_param_C model,
const sfx_surface_param surface,
const sfx_esm_numericsType_C numerics,
const sfx_phys_constants phys)
{ {
const int BlockCount = int(ceil(float(grid_size) / 1024.0)); const int BlockCount = int(ceil(float(grid_size) / 1024.0));
dim3 cuBlock = dim3(1024, 1, 1); dim3 cuBlock = dim3(1024, 1, 1);
...@@ -145,14 +148,6 @@ void FluxEsm<T, memIn, memOut, MemType::GPU>::compute_flux() ...@@ -145,14 +148,6 @@ void FluxEsm<T, memIn, memOut, MemType::GPU>::compute_flux()
} }
} }
template class FluxEsmBase<float, MemType::GPU, MemType::GPU, MemType::GPU>;
template class FluxEsmBase<float, MemType::GPU, MemType::GPU, MemType::CPU>;
template class FluxEsmBase<float, MemType::GPU, MemType::CPU, MemType::GPU>;
template class FluxEsmBase<float, MemType::CPU, MemType::GPU, MemType::GPU>;
template class FluxEsmBase<float, MemType::CPU, MemType::CPU, MemType::GPU>;
template class FluxEsmBase<float, MemType::CPU, MemType::GPU, MemType::CPU>;
template class FluxEsmBase<float, MemType::GPU, MemType::CPU, MemType::CPU>;
template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::GPU>; template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::GPU>;
template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::CPU>; template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::CPU>;
template class FluxEsm<float, MemType::GPU, MemType::CPU, MemType::GPU>; template class FluxEsm<float, MemType::GPU, MemType::CPU, MemType::GPU>;
......
...@@ -15,11 +15,11 @@ void esm_compute_flux (sfxDataVecTypeC* sfx, ...@@ -15,11 +15,11 @@ void esm_compute_flux (sfxDataVecTypeC* sfx,
const int grid_size) const int grid_size)
{ {
#ifdef INCLUDE_CUDA #ifdef INCLUDE_CUDA
static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::GPU> F(sfx, meteo, *model_param, *surface_param, *numerics, *constants, grid_size); static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::GPU> F(sfx, meteo, grid_size);
F.compute_flux(); F.compute_flux(*model_param, *surface_param, *numerics, *constants);
#else #else
static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU> F(sfx, meteo, *model_param, *surface_param, *numerics, *constants, grid_size); static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU> F(sfx, meteo, grid_size);
F.compute_flux(); F.compute_flux(*model_param, *surface_param, *numerics, *constants);
#endif #endif
} }
......
...@@ -10,26 +10,11 @@ ...@@ -10,26 +10,11 @@
#include "sfx-surface.cuh" #include "sfx-surface.cuh"
#include "sfx-model-compute-subfunc.cuh" #include "sfx-model-compute-subfunc.cuh"
template<typename T, MemType memIn, MemType memOut, MemType RunMem >
FluxEsmBase<T, memIn, memOut, RunMem>::FluxEsmBase(sfxDataVecTypeC* sfx_in,
meteoDataVecTypeC* meteo_in,
const sfx_esm_param_C model_param_in,
const sfx_surface_param surface_param_in,
const sfx_esm_numericsType_C numerics_in,
const sfx_phys_constants phys_constants_in,
const int grid_size_in) : ModelBase<T, memIn, memOut, RunMem>(sfx_in, meteo_in, grid_size_in)
{
surface = surface_param_in;
phys = phys_constants_in;
model = model_param_in;
numerics = numerics_in;
}
template<typename T, MemType memIn, MemType memOut, MemType RunMem >
FluxEsmBase<T, memIn, memOut, RunMem>::~FluxEsmBase() {}
template<typename T, MemType memIn, MemType memOut > template<typename T, MemType memIn, MemType memOut >
void FluxEsm<T, memIn, memOut, MemType::CPU>::compute_flux() void FluxEsm<T, memIn, memOut, MemType::CPU>::compute_flux(const sfx_esm_param_C model,
const sfx_surface_param surface,
const sfx_esm_numericsType_C numerics,
const sfx_phys_constants phys)
{ {
T h, U, dT, Tsemi, dQ, z0_m; T h, U, dT, Tsemi, dQ, z0_m;
T Re, z0_t, B, h0_m, h0_t, u_dyn0, zeta, Rib, zeta_conv_lim, Rib_conv_lim, f_m_conv_lim, f_h_conv_lim, psi_m, psi_h, phi_m, phi_h, Km, Pr_t_inv, Cm, Ct; T Re, z0_t, B, h0_m, h0_t, u_dyn0, zeta, Rib, zeta_conv_lim, Rib_conv_lim, f_m_conv_lim, f_h_conv_lim, psi_m, psi_h, phi_m, phi_h, Km, Pr_t_inv, Cm, Ct;
...@@ -138,17 +123,8 @@ void FluxEsm<T, memIn, memOut, MemType::CPU>::compute_flux() ...@@ -138,17 +123,8 @@ void FluxEsm<T, memIn, memOut, MemType::CPU>::compute_flux()
} }
template class FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU>; template class FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU>;
template class FluxEsmBase<float, MemType::CPU, MemType::CPU, MemType::CPU>;
#ifdef INCLUDE_CUDA #ifdef INCLUDE_CUDA
template class FluxEsmBase<float, MemType::GPU, MemType::GPU, MemType::GPU>;
template class FluxEsmBase<float, MemType::GPU, MemType::GPU, MemType::CPU>;
template class FluxEsmBase<float, MemType::GPU, MemType::CPU, MemType::GPU>;
template class FluxEsmBase<float, MemType::CPU, MemType::GPU, MemType::GPU>;
template class FluxEsmBase<float, MemType::CPU, MemType::CPU, MemType::GPU>;
template class FluxEsmBase<float, MemType::CPU, MemType::GPU, MemType::CPU>;
template class FluxEsmBase<float, MemType::GPU, MemType::CPU, MemType::CPU>;
template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::GPU>; template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::GPU>;
template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::CPU>; template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::CPU>;
template class FluxEsm<float, MemType::GPU, MemType::CPU, MemType::GPU>; template class FluxEsm<float, MemType::GPU, MemType::CPU, MemType::GPU>;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment