Commit 626c8f40 authored by Tomáš Jakubec's avatar Tomáš Jakubec
Browse files

fix VariableExport for stdio

MAKE TRAITS macros for template classes (change of syntax)
parent 527f68d8
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -551,8 +551,8 @@ void MultiphaseFlowCalculation(string name) {
    MPFType::ResultType::rho_s = 1700;


    mpf.artificialDisspationGas = 0.05;
    mpf.artificialDisspationSolid = 0.05;
    mpf.artificialDissipationGas = 0.05;
    mpf.artificialDissipationSolid = 0.05;
    mpf.R_spec = MPFType::ResultType::R_spec;
    mpf.myu = 1e-5;
    mpf.rho_s = MPFType::ResultType::rho_s;
+20 −37
Original line number Diff line number Diff line
@@ -198,33 +198,16 @@ double FlowData<Dim>::R_spec = 0;
template<unsigned int Dim>
double FlowData<Dim>::T = 0;

MAKE_ATTRIBUTE_TRAIT_ARITHMETIC(FlowData<2>, rho_g_x_eps_g, eps_s, p_g, p_s);
MAKE_ATTRIBUTE_TEMPLATE_TRAIT_ARITHMETIC((FlowData<dim>), (unsigned int dim), rho_g_x_eps_g, eps_s, p_g, p_s);

// TODO only temporary
//MAKE_ATTRIBUTE_TRAIT_IO(FlowData, rho_g, eps_s, p_g, p_s)


MAKE_CUSTOM_TRAIT( FlowData<2>,
                   "eps_g", std::make_pair(&FlowData<2>::getEps_g, &FlowData<2>::setEps_g),
                   "pressure", std::make_pair(&FlowData<2>::getPressure, &FlowData<2>::setPressure),
                   "rho_g", std::make_pair(&FlowData<2>::getRho_g, &FlowData<2>::setRho_g),
                   "eps_s", &FlowData<2>::eps_s,
                   "velocity_gas", std::make_pair(&FlowData<2>::getVelocityGas, &FlowData<2>::setVelocityGas),
                   "velocity_solid", std::make_pair(&FlowData<2>::getVelocitySolid, &FlowData<2>::setVelocitySolid) );

MAKE_ATTRIBUTE_TRAIT_ARITHMETIC(FlowData<3>, rho_g_x_eps_g, eps_s, p_g, p_s);

// TODO only temporary
//MAKE_ATTRIBUTE_TRAIT_IO(FlowData, rho_g, eps_s, p_g, p_s)


MAKE_CUSTOM_TRAIT( FlowData<3>,
                   "eps_g", std::make_pair(&FlowData<3>::getEps_g, &FlowData<3>::setEps_g),
                   "pressure", std::make_pair(&FlowData<3>::getPressure, &FlowData<3>::setPressure),
                   "rho_g", std::make_pair(&FlowData<3>::getRho_g, &FlowData<3>::setRho_g),
                   "eps_s", &FlowData<3>::eps_s,
                   "velocity_gas", std::make_pair(&FlowData<3>::getVelocityGas, &FlowData<3>::setVelocityGas),
                   "velocity_solid", std::make_pair(&FlowData<3>::getVelocitySolid, &FlowData<3>::setVelocitySolid) );
MAKE_CUSTOM_TEMPLATE_TRAIT( (FlowData<Dim>),(unsigned int Dim),
                   "eps_g", std::make_pair(&FlowData<Dim>::getEps_g, &FlowData<Dim>::setEps_g),
                   "pressure", std::make_pair(&FlowData<Dim>::getPressure, &FlowData<Dim>::setPressure),
                   "rho_g", std::make_pair(&FlowData<Dim>::getRho_g, &FlowData<Dim>::setRho_g),
                   "eps_s", &FlowData<Dim>::eps_s,
                   "velocity_gas", std::make_pair(&FlowData<Dim>::getVelocityGas, &FlowData<Dim>::setVelocityGas),
                   "velocity_solid", std::make_pair(&FlowData<Dim>::getVelocitySolid, &FlowData<Dim>::setVelocitySolid) );



@@ -375,12 +358,12 @@ public:
     * @brief
     * Coefitient of artificial diffusion added to calculation of convective flux at all inner edges in order to guarantee numerial stability.
     */
    double artificialDisspationGas;
    double artificialDissipationGas;
    /**
     * @brief
     * Coefitient of artificial diffusion added to calculation of convective flux at all inner edges in order to guarantee numerial stability.
     */
    double artificialDisspationSolid;
    double artificialDissipationSolid;
    /**
     * @brief d_s
     * Average diameter of the solid particle.
@@ -546,9 +529,9 @@ public:

};

MAKE_ATTRIBUTE_TEMPLATE_TRAIT(PASS(MultiphaseFlow<Dim, BC, Res...>),
                              PASS(unsigned int Dim, typename BC, unsigned int... Res),
                              myu, myu_s, R_spec, T, artificialDisspationGas, artificialDisspationSolid, d_s, phi_s, rho_s,
MAKE_ATTRIBUTE_TEMPLATE_TRAIT((MultiphaseFlow<Dim, BC, Res...>),
                              (unsigned int Dim, typename BC, unsigned int... Res),
                              myu, myu_s, R_spec, T, artificialDissipationGas, artificialDissipationSolid, d_s, phi_s, rho_s,
                              outFlow, inFlow_u_s, inFlow_u_g, inFlow_eps_s, inFlow_eps_g);


@@ -628,7 +611,7 @@ inline void MultiphaseFlow< Dimension, BoundaryCond, Reserve... >::ComputeFluxGa

    // flux of density
    double delta_rho = - faceVal.rho_g_x_eps_g * product_of_u_and_n * edgeData.Measure +
                       (rightData.rho_g_x_eps_g - leftData.rho_g_x_eps_g) * edgeData.MeasureOverDist * artificialDisspationGas;
                       (rightData.rho_g_x_eps_g - leftData.rho_g_x_eps_g) * edgeData.MeasureOverDist * artificialDissipationGas;


    // computing the flux of momentum
@@ -639,7 +622,7 @@ inline void MultiphaseFlow< Dimension, BoundaryCond, Reserve... >::ComputeFluxGa
    fluxP_g *= edgeData.Measure;

    // add artificial dissipation
    fluxP_g += (edgeData.MeasureOverDist * artificialDisspationGas * ((rightData.p_g) - (leftData.p_g)));
    fluxP_g += (edgeData.MeasureOverDist * artificialDissipationGas * ((rightData.p_g) - (leftData.p_g)));

    // computation of grad_p
    edgeData.grad_p = ((leftData.getPressure() * edgeData.LeftCellKoef + rightData.getPressure() * edgeData.RightCellKoef) * edgeData.Measure) * edgeData.n;
@@ -669,7 +652,7 @@ inline void MultiphaseFlow< Dimension, BoundaryCond, Reserve... >::ComputeFluxGa

    // flux of density
    double delta_rho = -innerCellData.getRho_g() * inFlow_eps_g * product_of_u_and_n * edgeData.Measure +
                        (innerCellData.getRho_g() * inFlow_eps_g - innerCellData.rho_g_x_eps_g) * edgeData.MeasureOverDist * artificialDisspationGas;
                        (innerCellData.getRho_g() * inFlow_eps_g - innerCellData.rho_g_x_eps_g) * edgeData.MeasureOverDist * artificialDissipationGas;



@@ -682,7 +665,7 @@ inline void MultiphaseFlow< Dimension, BoundaryCond, Reserve... >::ComputeFluxGa

    flux *= edgeData.Measure;
    // artificial dissipation
    flux += (edgeData.MeasureOverDist * artificialDisspationGas * ((inFlow_u_g * inFlow_eps_g * innerCellData.getRho_g()) - (innerCellData.p_g)));
    flux += (edgeData.MeasureOverDist * artificialDissipationGas * ((inFlow_u_g * inFlow_eps_g * innerCellData.getRho_g()) - (innerCellData.p_g)));

    // adding the element of pressure gradient
    edgeData.grad_p = (innerCellData.getPressure() * edgeData.Measure) * edgeData.n;
@@ -853,7 +836,7 @@ inline void MultiphaseFlow< Dimension, BoundaryCond, Reserve... >::ComputeFluxSo

    // flux of mass
    double fluxRho_s = (-rho_s * faceVal.eps_s * edgeData.Measure * product_of_u_s_and_n  +
                       (rightData.eps_s - leftData.eps_s) * rho_s * edgeData.MeasureOverDist * artificialDisspationSolid);
                       (rightData.eps_s - leftData.eps_s) * rho_s * edgeData.MeasureOverDist * artificialDissipationSolid);


    // computing the flux of momentum
@@ -872,7 +855,7 @@ inline void MultiphaseFlow< Dimension, BoundaryCond, Reserve... >::ComputeFluxSo
    fluxP_s *= edgeData.Measure;

    // add artificial dissipation
    fluxP_s += (edgeData.MeasureOverDist * artificialDisspationSolid ) * (rightData.p_s - leftData.p_s);
    fluxP_s += (edgeData.MeasureOverDist * artificialDissipationSolid ) * (rightData.p_s - leftData.p_s);

    edgeData.grad_eps_s = (((leftData.eps_s * edgeData.LeftCellKoef) + (rightData.eps_s * edgeData.RightCellKoef)) * edgeData.Measure) * edgeData.n;

@@ -911,7 +894,7 @@ inline void MultiphaseFlow< Dimension, BoundaryCond, Reserve... >::ComputeFluxSo

    fluxP_s *= edgeData.Measure;

    fluxP_s += (edgeData.MeasureOverDist * artificialDisspationSolid * ((inFlow_u_s * inFlow_eps_s * rho_s) - (innerCellData.p_s)));
    fluxP_s += (edgeData.MeasureOverDist * artificialDissipationSolid * ((inFlow_u_s * inFlow_eps_s * rho_s) - (innerCellData.p_s)));

    edgeData.grad_eps_s = (inFlow_eps_s * edgeData.Measure) * edgeData.n;

+7 −7
Original line number Diff line number Diff line
@@ -282,7 +282,7 @@ struct VariableExport<VARIABLE_EXPORT_METHOD::stdio> {


    template<typename T>
    static auto exportVariable(std::ostream& ost, const T &list)
    static auto exportVariable( const T &list)
      -> typename std::enable_if<
              IsIndexable<T>::value &&
             !IsIterable<T>::value &&
@@ -292,7 +292,7 @@ struct VariableExport<VARIABLE_EXPORT_METHOD::stdio> {
    {
        printf("[ ");
        for (decltype (list.size())i = 0; i < list.size(); i++){
            exportVariable(ost, list[i]);
            exportVariable(list[i]);
            if (i < list.size() - 1){
                printf(", ");
            }
@@ -302,7 +302,7 @@ struct VariableExport<VARIABLE_EXPORT_METHOD::stdio> {


    template<typename T>
    static auto exportVariable(std::ostream& ost, const T &list)
    static auto exportVariable(const T &list)
      -> typename std::enable_if<
              IsTNLIndexable<T>::value &&
             !IsIndexable<T>::value &&
@@ -312,8 +312,8 @@ struct VariableExport<VARIABLE_EXPORT_METHOD::stdio> {
         >::type
    {
        printf("[ ");
        for (decltype (list.size())i = 0; i < list.size(); i++){
            exportVariable(ost, list[i]);
        for (decltype (list.size())i = 0; i < list.getSize(); i++){
            exportVariable(list[i]);
            if (i <  list.getSize() - 1){
                printf(", ");
            }
@@ -324,12 +324,12 @@ struct VariableExport<VARIABLE_EXPORT_METHOD::stdio> {


    template<typename T>
    static void exportVariable(std::ostream& ost, const std::initializer_list<T> &list)
    static void exportVariable(const std::initializer_list<T> &list)
    {
        static auto it = list.begin();
        printf("[ ");
        while (it != list.end()){
            exportVariable(ost, *it);
            exportVariable(*it);
            if (++it != list.end()){
                printf(", ");
            }
+2 −0
Original line number Diff line number Diff line
@@ -147,6 +147,8 @@
#define FOR_EACH_3ARGS_1STAT(what, x_stat, ...) FOR_EACH_3ARGS_1STAT_(FOR_EACH_NARG(__VA_ARGS__), what, x_stat, __VA_ARGS__)

#define PASS(...) __VA_ARGS__
#define WRAP(...) (__VA_ARGS__)
#define UNWRAP(arg) PASS arg

#define FOR_EACH_3ARGS_1STAT_PASS_00(what, ...)
#define FOR_EACH_3ARGS_1STAT_PASS_02(what,x_stat, x1, x2, ...)   what(PASS(x_stat), x1, x2)
+23 −6
Original line number Diff line number Diff line
@@ -348,6 +348,8 @@ auto& get(ArythmeticTraitT* arg){
#define IMPL_NAME_AND_REF(Class, name, member) name, (&Class::member)
#define IMPL_NAME_ATT(attribute) #attribute, attribute

#define IMPL_NAME_AND_REF_TEMPLATE(Class, name, member) name, (&UNWRAP(Class)::member)

#define IMPL_MAKE_CUSTOM_TRAIT(TraitName,Class,...) \
template<> \
class TraitName<Class>{ \
@@ -358,10 +360,10 @@ public: \
}

#define IMPL_MAKE_CUSTOM_TEMPLATE_TRAIT(TraitName, TemplateParameters, Class,...) \
template<TemplateParameters> \
class TraitName<Class>{ \
template<UNWRAP(TemplateParameters)> \
class TraitName<UNWRAP(Class)>{ \
public: \
    using traitsType = ::Traits<PASS(Class), FOR_EACH_2ARGS(IMPL_MEMREF_TYPE_CUSTOM, __VA_ARGS__)>; \
    using traitsType = ::Traits<UNWRAP(Class), FOR_EACH_2ARGS(IMPL_MEMREF_TYPE_CUSTOM, __VA_ARGS__)>; \
    static const traitsType getTraits() {return traitsType(__VA_ARGS__);} \
    static constexpr unsigned int size() {return traitsType::size();}\
}
@@ -373,11 +375,11 @@ public: \
#define MAKE_ATTRIBUTE_TRAIT(Class, ...) MAKE_NAMED_ATTRIBUTE_TRAIT(Class, FOR_EACH(IMPL_NAME_ATT, __VA_ARGS__))


#define MAKE_CUSTOM_TEMPLATE_TRAIT(Class, TemplateParameters, ...) IMPL_MAKE_CUSTOM_TEMPLATE_TRAIT(Traits, PASS(TemplateParameters), PASS(Class), __VA_ARGS__) // defining specialization for Traits
#define MAKE_CUSTOM_TEMPLATE_TRAIT(Class, TemplateParameters, ...) IMPL_MAKE_CUSTOM_TEMPLATE_TRAIT(Traits, TemplateParameters, Class, __VA_ARGS__) // defining specialization for Traits

#define MAKE_NAMED_ATTRIBUTE_TEMPLATE_TRAIT(Class, TemplateParameters, ...) MAKE_CUSTOM_TEMPLATE_TRAIT(PASS(Class), PASS(TemplateParameters), FOR_EACH_3ARGS_1STAT_PASS(IMPL_NAME_AND_REF, PASS(Class), __VA_ARGS__))
#define MAKE_NAMED_ATTRIBUTE_TEMPLATE_TRAIT(Class, TemplateParameters, ...) MAKE_CUSTOM_TEMPLATE_TRAIT(Class, TemplateParameters, FOR_EACH_3ARGS_1STAT(IMPL_NAME_AND_REF_TEMPLATE, Class, __VA_ARGS__))

#define MAKE_ATTRIBUTE_TEMPLATE_TRAIT(Class, TemplateParameters, ...) MAKE_NAMED_ATTRIBUTE_TEMPLATE_TRAIT(PASS(Class), PASS(TemplateParameters), FOR_EACH(IMPL_NAME_ATT, __VA_ARGS__))
#define MAKE_ATTRIBUTE_TEMPLATE_TRAIT(Class, TemplateParameters, ...) MAKE_NAMED_ATTRIBUTE_TEMPLATE_TRAIT(Class, TemplateParameters, FOR_EACH(IMPL_NAME_ATT, __VA_ARGS__))


#define MAKE_CUSTOM_TRAIT_IO(Class,...) IMPL_MAKE_CUSTOM_TRAIT(DefaultIOTraits, Class,__VA_ARGS__) // defining specialization for DefaultIOTraits
@@ -387,10 +389,25 @@ public: \
#define MAKE_ATTRIBUTE_TRAIT_IO(Class, ...) MAKE_NAMED_ATTRIBUTE_TRAIT_IO(Class, FOR_EACH(IMPL_NAME_ATT, __VA_ARGS__))


#define MAKE_CUSTOM_TEMPLATE_TRAIT_IO(Class, TemplateParameters, ...) IMPL_MAKE_CUSTOM_TEMPLATE_TRAIT(DefaultIOTraits, TemplateParameters, Class, __VA_ARGS__) // defining specialization for Traits

#define MAKE_NAMED_ATTRIBUTE_TEMPLATE_TRAIT_IO(Class, TemplateParameters, ...) MAKE_CUSTOM_TEMPLATE_TRAIT_IO(Class, TemplateParameters, FOR_EACH_3ARGS_1STAT(IMPL_NAME_AND_REF_TEMPLATE, Class, __VA_ARGS__))

#define MAKE_ATTRIBUTE_TEMPLATE_TRAIT_IO(Class, TemplateParameters, ...) MAKE_NAMED_ATTRIBUTE_TEMPLATE_TRAIT_IO(Class, TemplateParameters, FOR_EACH(IMPL_NAME_ATT, __VA_ARGS__))



#define MAKE_CUSTOM_TRAIT_ARITHMETIC(Class,...) IMPL_MAKE_CUSTOM_TRAIT(DefaultArithmeticTraits, Class,__VA_ARGS__) // defining specialization for DefaultArithmeticTraits

#define MAKE_NAMED_ATTRIBUTE_TRAIT_ARITHMETIC(Class, ...) MAKE_CUSTOM_TRAIT_ARITHMETIC(Class, FOR_EACH_3ARGS_1STAT(IMPL_NAME_AND_REF, Class, __VA_ARGS__))

#define MAKE_ATTRIBUTE_TRAIT_ARITHMETIC(Class, ...) MAKE_NAMED_ATTRIBUTE_TRAIT_ARITHMETIC(Class, FOR_EACH(IMPL_NAME_ATT, __VA_ARGS__))


#define MAKE_CUSTOM_TEMPLATE_TRAIT_ARITHMETIC(Class, TemplateParameters, ...) IMPL_MAKE_CUSTOM_TEMPLATE_TRAIT(DefaultArithmeticTraits, TemplateParameters, Class, __VA_ARGS__) // defining specialization for Traits

#define MAKE_NAMED_ATTRIBUTE_TEMPLATE_TRAIT_ARITHMETIC(Class, TemplateParameters, ...) MAKE_CUSTOM_TEMPLATE_TRAIT_ARITHMETIC(Class, TemplateParameters, FOR_EACH_3ARGS_1STAT(IMPL_NAME_AND_REF_TEMPLATE, Class, __VA_ARGS__))

#define MAKE_ATTRIBUTE_TEMPLATE_TRAIT_ARITHMETIC(Class, TemplateParameters, ...) MAKE_NAMED_ATTRIBUTE_TEMPLATE_TRAIT_ARITHMETIC(Class, TemplateParameters, FOR_EACH(IMPL_NAME_ATT, __VA_ARGS__))

#endif // TRAITS_H