Loading MultiphaseFlow/main.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading MultiphaseFlow/multiphaseflow.h +20 −37 Original line number Diff line number Diff line Loading @@ -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) ); Loading Loading @@ -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. Loading Loading @@ -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); Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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; Loading src/Debug/VariableExport.h +7 −7 Original line number Diff line number Diff line Loading @@ -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 && Loading @@ -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(", "); } Loading @@ -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 && Loading @@ -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(", "); } Loading @@ -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(", "); } Loading src/Macros/MacroForEach.h +2 −0 Original line number Diff line number Diff line Loading @@ -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) Loading src/Traits/Traits.h +23 −6 Original line number Diff line number Diff line Loading @@ -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>{ \ Loading @@ -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();}\ } Loading @@ -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 Loading @@ -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 Loading
MultiphaseFlow/main.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading
MultiphaseFlow/multiphaseflow.h +20 −37 Original line number Diff line number Diff line Loading @@ -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) ); Loading Loading @@ -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. Loading Loading @@ -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); Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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; Loading
src/Debug/VariableExport.h +7 −7 Original line number Diff line number Diff line Loading @@ -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 && Loading @@ -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(", "); } Loading @@ -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 && Loading @@ -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(", "); } Loading @@ -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(", "); } Loading
src/Macros/MacroForEach.h +2 −0 Original line number Diff line number Diff line Loading @@ -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) Loading
src/Traits/Traits.h +23 −6 Original line number Diff line number Diff line Loading @@ -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>{ \ Loading @@ -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();}\ } Loading @@ -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 Loading @@ -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