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

ESM CXX impl refactor

parent 0dbab68b
No related branches found
No related tags found
No related merge requests found
Pipeline #1706 failed
......@@ -4,85 +4,47 @@
#include "sfx-data.h"
template<typename T, MemType memIn, MemType memOut, MemType RunMem >
class FluxEsmBase : 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>
class FluxEsm : public ModelBase<T, memIn, memOut, RunMem>
{};
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 FluxEsmBase<T, memIn, memOut, MemType::CPU>::sfx;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::meteo;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::surface;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::phys;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::grid_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;
using ModelBase<T, memIn, memOut, MemType::CPU>::res_sfx;
using ModelBase<T, memIn, memOut, MemType::CPU>::sfx;
using ModelBase<T, memIn, memOut, MemType::CPU>::meteo;
using ModelBase<T, memIn, memOut, MemType::CPU>::grid_size;
using ModelBase<T, memIn, memOut, MemType::CPU>::ifAllocated;
using ModelBase<T, memIn, memOut, MemType::CPU>::allocated_size;
public:
FluxEsm(sfxDataVecTypeC* sfx,
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_esm_numericsType_C numerics,
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();
const sfx_phys_constants phys);
};
#ifdef INCLUDE_CUDA
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 FluxEsmBase<T, memIn, memOut, MemType::GPU>::sfx;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::meteo;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::surface;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::phys;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::grid_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;
using ModelBase<T, memIn, memOut, MemType::GPU>::res_sfx;
using ModelBase<T, memIn, memOut, MemType::GPU>::sfx;
using ModelBase<T, memIn, memOut, MemType::GPU>::meteo;
using ModelBase<T, memIn, memOut, MemType::GPU>::grid_size;
using ModelBase<T, memIn, memOut, MemType::GPU>::ifAllocated;
using ModelBase<T, memIn, memOut, MemType::GPU>::allocated_size;
public:
FluxEsm(sfxDataVecTypeC* sfx,
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_esm_numericsType_C numerics,
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();
const sfx_phys_constants phys);
};
#endif
\ No newline at end of file
......@@ -119,7 +119,10 @@ __global__ void sfx_kernel::compute_flux(sfxDataVecTypeC sfx,
}
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));
dim3 cuBlock = dim3(1024, 1, 1);
......@@ -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::CPU>;
template class FluxEsm<float, MemType::GPU, MemType::CPU, MemType::GPU>;
......
......@@ -15,11 +15,11 @@ void esm_compute_flux (sfxDataVecTypeC* sfx,
const int grid_size)
{
#ifdef INCLUDE_CUDA
static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::GPU> F(sfx, meteo, *model_param, *surface_param, *numerics, *constants, grid_size);
F.compute_flux();
static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::GPU> F(sfx, meteo, grid_size);
F.compute_flux(*model_param, *surface_param, *numerics, *constants);
#else
static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU> F(sfx, meteo, *model_param, *surface_param, *numerics, *constants, grid_size);
F.compute_flux();
static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU> F(sfx, meteo, grid_size);
F.compute_flux(*model_param, *surface_param, *numerics, *constants);
#endif
}
......
......@@ -10,26 +10,11 @@
#include "sfx-surface.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 >
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 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()
}
template class FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU>;
template class FluxEsmBase<float, MemType::CPU, MemType::CPU, MemType::CPU>;
#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::CPU>;
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