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 @@
#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