Skip to content

Commit

Permalink
make real_t typedefs public
Browse files Browse the repository at this point in the history
  • Loading branch information
mwarusz committed Mar 13, 2019
1 parent da38808 commit b79e7f3
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 25 deletions.
3 changes: 2 additions & 1 deletion libmpdata++/solvers/detail/mpdata_rhs_vip_common.hpp
Expand Up @@ -43,9 +43,10 @@ namespace libmpdataxx
template <class ct_params_t, int minhalo>
class mpdata_rhs_vip_common : public mpdata_rhs<ct_params_vip_default_t<ct_params_t>, minhalo>
{
using parent_t = mpdata_rhs<ct_params_vip_default_t<ct_params_t>, minhalo>;

public:
using ix = typename ct_params_t::ix;
using parent_t = mpdata_rhs<ct_params_vip_default_t<ct_params_t>, minhalo>;
using real_t = typename ct_params_t::real_t;

protected:
Expand Down
3 changes: 3 additions & 0 deletions libmpdata++/solvers/detail/mpdata_rhs_vip_prs_sgs_common.hpp
Expand Up @@ -36,6 +36,9 @@ namespace libmpdataxx
class mpdata_rhs_vip_prs_sgs_common : public mpdata_rhs_vip_prs<ct_params_t, minhalo>
{
using parent_t = mpdata_rhs_vip_prs<ct_params_t, minhalo>;

public:

using real_t = typename ct_params_t::real_t;

protected:
Expand Down
3 changes: 3 additions & 0 deletions libmpdata++/solvers/detail/mpdata_rhs_vip_prs_sgs_smg.hpp
Expand Up @@ -18,6 +18,9 @@ namespace libmpdataxx
class mpdata_rhs_vip_prs_sgs_smg : public detail::mpdata_rhs_vip_prs_sgs_common<ct_params_t, minhalo>
{
using parent_t = detail::mpdata_rhs_vip_prs_sgs_common<ct_params_t, minhalo>;

public:

using real_t = typename ct_params_t::real_t;

protected:
Expand Down
18 changes: 11 additions & 7 deletions libmpdata++/solvers/detail/solver_1d.hpp
Expand Up @@ -25,6 +25,10 @@ namespace libmpdataxx
{
using parent_t = solver_common<ct_params_t, n_tlev, minhalo>;

public:

using real_t = typename ct_params_t::real_t;

protected:

const rng_t i; //TODO: to be removed
Expand Down Expand Up @@ -65,21 +69,21 @@ namespace libmpdataxx
this->mem->barrier();
}

typename parent_t::real_t courant_number(const arrvec_t<typename parent_t::arr_t> &arrvec) final
real_t courant_number(const arrvec_t<typename parent_t::arr_t> &arrvec) final
{
stat_field(this->ijk) = typename parent_t::real_t(0.5) * (abs(arrvec[0](i+h) + arrvec[0](i-h)));
stat_field(this->ijk) = real_t(0.5) * (abs(arrvec[0](i+h) + arrvec[0](i-h)));
return this->mem->max(this->rank, stat_field(this->ijk));
}

typename parent_t::real_t max_abs_vctr_div(const arrvec_t<typename parent_t::arr_t> &arrvec) final
real_t max_abs_vctr_div(const arrvec_t<typename parent_t::arr_t> &arrvec) final
{
stat_field(this->ijk) = abs((arrvec[0](i+h) - arrvec[0](i-h)));
return this->mem->max(this->rank, stat_field(this->ijk));
}

void scale_gc(const typename parent_t::real_t time,
const typename parent_t::real_t cur_dt,
const typename parent_t::real_t old_dt) final
void scale_gc(const real_t time,
const real_t cur_dt,
const real_t old_dt) final
{
this->mem->GC[0](rng_t(i.first(), i.last()-1)^h) *= cur_dt / old_dt;
this->xchng_vctr_alng(this->mem->GC);
Expand All @@ -99,7 +103,7 @@ namespace libmpdataxx

struct rt_params_t : parent_t::rt_params_t
{
typename parent_t::real_t di = 0;
real_t di = 0;
};

protected:
Expand Down
20 changes: 12 additions & 8 deletions libmpdata++/solvers/detail/solver_2d.hpp
Expand Up @@ -26,6 +26,10 @@ namespace libmpdataxx
{
using parent_t = solver_common<ct_params_t, n_tlev, minhalo>;

public:

using real_t = typename ct_params_t::real_t;

protected:

const rng_t i, j; // TODO: to be removed
Expand Down Expand Up @@ -191,23 +195,23 @@ namespace libmpdataxx
// TODO: same in 1D
if (!opts::isset(ct_params_t::opts, opts::dfl))
{
typename ct_params_t::real_t max_abs_div = max_abs_vctr_div(this->mem->GC);
real_t max_abs_div = max_abs_vctr_div(this->mem->GC);

if (max_abs_div > this->max_abs_div_eps)
throw std::runtime_error("initial advector field is divergent");
}
}

typename parent_t::real_t courant_number(const arrvec_t<typename parent_t::arr_t> &arrvec) final
real_t courant_number(const arrvec_t<typename parent_t::arr_t> &arrvec) final
{
stat_field(this->ijk) = typename parent_t::real_t(0.5) * (
stat_field(this->ijk) = real_t(0.5) * (
abs(arrvec[0](i+h, j) + arrvec[0](i-h, j))
+ abs(arrvec[1](i, j+h) + arrvec[1](i, j-h))
) / formulae::G<ct_params_t::opts, 0>(*this->mem->G, i, j);
return this->mem->max(this->rank, stat_field(this->ijk));
}

typename parent_t::real_t max_abs_vctr_div(const arrvec_t<typename parent_t::arr_t> &arrvec) final
real_t max_abs_vctr_div(const arrvec_t<typename parent_t::arr_t> &arrvec) final
{
stat_field(this->ijk) = abs(
(arrvec[0](i+h, j) - arrvec[0](i-h, j))
Expand All @@ -216,9 +220,9 @@ namespace libmpdataxx
return this->mem->max(this->rank, stat_field(this->ijk));
}

void scale_gc(const typename parent_t::real_t time,
const typename parent_t::real_t cur_dt,
const typename parent_t::real_t old_dt) final
void scale_gc(const real_t time,
const real_t cur_dt,
const real_t old_dt) final
{
this->mem->GC[0](rng_t(i.first(), i.last()-1)^h, j) *= cur_dt / old_dt;
this->mem->GC[1](i, rng_t(j.first(), j.last()-1)^h) *= cur_dt / old_dt;
Expand All @@ -241,7 +245,7 @@ namespace libmpdataxx

struct rt_params_t : parent_t::rt_params_t
{
typename parent_t::real_t di = 0, dj = 0;
real_t di = 0, dj = 0;
};

protected:
Expand Down
20 changes: 12 additions & 8 deletions libmpdata++/solvers/detail/solver_3d.hpp
Expand Up @@ -26,6 +26,10 @@ namespace libmpdataxx
{
using parent_t = solver_common<ct_params_t, n_tlev, minhalo>;

public:

using real_t = typename ct_params_t::real_t;

protected:

const rng_t i, j, k; // TODO: we have ijk in solver_common - could it be removed?
Expand Down Expand Up @@ -232,24 +236,24 @@ namespace libmpdataxx
// TODO: same in 1D
if (!opts::isset(ct_params_t::opts, opts::dfl))
{
typename ct_params_t::real_t max_abs_div = max_abs_vctr_div(this->mem->GC);
real_t max_abs_div = max_abs_vctr_div(this->mem->GC);

if (max_abs_div > this->max_abs_div_eps)
throw std::runtime_error("initial advector field is divergent");
}
}

typename parent_t::real_t courant_number(const arrvec_t<typename parent_t::arr_t> &arrvec) final
real_t courant_number(const arrvec_t<typename parent_t::arr_t> &arrvec) final
{
stat_field(this->ijk) = typename parent_t::real_t(0.5) * (
stat_field(this->ijk) = real_t(0.5) * (
abs(arrvec[0](i+h, j, k) + arrvec[0](i-h, j, k))
+ abs(arrvec[1](i, j+h, k) + arrvec[1](i, j-h, k))
+ abs(arrvec[2](i, j, k+h) + arrvec[2](i, j, k-h))
) / formulae::G<ct_params_t::opts, 0>(*this->mem->G, i, j, k);
return this->mem->max(this->rank, stat_field(this->ijk));
}

typename parent_t::real_t max_abs_vctr_div(const arrvec_t<typename parent_t::arr_t> &arrvec) final
real_t max_abs_vctr_div(const arrvec_t<typename parent_t::arr_t> &arrvec) final
{
stat_field(this->ijk) = abs(
(arrvec[0](i+h, j, k) - arrvec[0](i-h, j, k))
Expand All @@ -260,9 +264,9 @@ namespace libmpdataxx
return this->mem->max(this->rank, stat_field(this->ijk));
}

void scale_gc(const typename parent_t::real_t time,
const typename parent_t::real_t cur_dt,
const typename parent_t::real_t old_dt) final
void scale_gc(const real_t time,
const real_t cur_dt,
const real_t old_dt) final
{
this->mem->GC[0](rng_t(i.first(), i.last()-1)^h, j, k) *= cur_dt / old_dt;
this->mem->GC[1](i, rng_t(j.first(), j.last()-1)^h, k) *= cur_dt / old_dt;
Expand All @@ -289,7 +293,7 @@ namespace libmpdataxx

struct rt_params_t : parent_t::rt_params_t
{
typename parent_t::real_t di = 0, dj = 0, dk = 0;
real_t di = 0, dj = 0, dk = 0;
};

protected:
Expand Down
2 changes: 1 addition & 1 deletion libmpdata++/solvers/detail/solver_common.hpp
Expand Up @@ -40,7 +40,7 @@ namespace libmpdataxx
enum { n_tlev = n_tlev_ };

using ct_params_t_ = ct_params_t; // propagate ct_params_t mainly for output purposes
typedef typename ct_params_t::real_t real_t;
using real_t = typename ct_params_t::real_t;
typedef blitz::Array<real_t, n_dims> arr_t;
using bcp_t = std::unique_ptr<bcond::detail::bcond_common<real_t, halo>>;

Expand Down

0 comments on commit b79e7f3

Please sign in to comment.