Newer
Older
protected:
struct sfxDataVecTypeC sfx;
struct meteoDataVecTypeC meteo;
struct sfx_esm_param model_param;
struct sfx_surface_param surface_param;
struct sfx_esm_numericsTypeC numerics;
struct sfx_phys_constants phys_constants;
int grid_size;
bool ifAllocated;
size_t allocated_size;
public:
FluxEsmBase() = default;
FluxEsmBase(struct sfxDataVecTypeC* sfx,
struct meteoDataVecTypeC* meteo,
const struct sfx_esm_param model_param,
const struct sfx_surface_param surface_param,
const struct sfx_esm_numericsTypeC numerics,
const struct sfx_phys_constants phys_constants,
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 >
class FluxEsm<T, memIn, memOut, MemType::CPU> : public FluxEsmBase<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>::model_param;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::surface_param;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::numerics;
using FluxEsmBase<T, memIn, memOut, MemType::CPU>::phys_constants;
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;
public:
FluxEsm() = default;
FluxEsm(struct sfxDataVecTypeC* sfx,
struct meteoDataVecTypeC* meteo,
const struct sfx_esm_param model_param,
const struct sfx_surface_param surface_param,
const struct sfx_esm_numericsTypeC numerics,
const struct sfx_phys_constants phys_constants,
const int grid_size) : FluxEsmBase<T, memIn, memOut, MemType::CPU>(sfx, meteo,
model_param, surface_param, numerics, phys_constants, grid_size) {};
~FluxEsm() = default;
void compute_flux();
};
#ifdef INCLUDE_CUDA
template<typename T, MemType memIn, MemType memOut >
class FluxEsm<T, memIn, memOut, MemType::GPU> : public FluxEsmBase<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>::model_param;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::surface_param;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::numerics;
using FluxEsmBase<T, memIn, memOut, MemType::GPU>::phys_constants;
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;
public:
FluxEsm() = default;
FluxEsm(struct sfxDataVecTypeC* sfx,
struct meteoDataVecTypeC* meteo,
const struct sfx_esm_param model_param,
const struct sfx_surface_param surface_param,
const struct sfx_esm_numericsTypeC numerics,
const struct sfx_phys_constants phys_constants,
const int grid_size) : FluxEsmBase<T, memIn, memOut, MemType::GPU>(sfx, meteo,
model_param, surface_param, numerics, phys_constants, grid_size) {};
~FluxEsm() = default;
void compute_flux();
};
#endif