inline solver::AugRie_SIMD::AugRie_SIMD ( real i_dryTolerance, real i_gravity, real i_newtonTolerance, int i_maxNumberOfNewtonIterations, real i_zeroTolerance ) : scalar_solver(i_dryTolerance, i_gravity, i_newtonTolerance, i_maxNumberOfNewtonIterations, i_zeroTolerance), newtonTol (i_newtonTolerance), maxNumberOfNewtonIterations (i_maxNumberOfNewtonIterations) #if VECTOR_EXTENSION != VECTOR_NOVEC , DryDry_V(SETV_I(DryDry)), WetWet_V(SETV_I(WetWet)), DryWetInundation_V(SETV_I(DryWetInundation)), WetDryInundation_V(SETV_I(WetDryInundation)), DryWetWallInundation_V(SETV_I(DryWetWallInundation)), DryWetWall_V(SETV_I(DryWetWall)), WetDryWallInundation_V(SETV_I(WetDryWallInundation)), WetDryWall_V(SETV_I(WetDryWall)), ShockShock_V(SETV_I(ShockShock)), RarefactionRarefaction_V(SETV_I(RarefactionRarefaction)), ShockRarefaction_V(SETV_I(ShockRarefaction)), RarefactionShock_V(SETV_I(RarefactionShock)), DrySingleRarefaction_V(SETV_I(DrySingleRarefaction)), SingleRarefactionDry_V(SETV_I(SingleRarefactionDry)), sqrt_g_v(SETV_R(std::sqrt(i_gravity))), zeroTol_v(SETV_R(i_zeroTolerance)), zeroTol_v_neg(SETV_R(-i_zeroTolerance)), dryTol_v(SETV_R(i_dryTolerance)), dryTol_v_neg(SETV_R(-i_dryTolerance)), g_v(SETV_R(i_gravity)) #endif /* VECTOR_NOVEC */ { #ifndef NDEBUG #ifndef SUPPRESS_SOLVER_DEBUG_OUTPUT //print some information about the used solver std::cout << " *** solver::AugRie_SIMD created" << std::endl << " zeroTolerance=" << i_zeroTolerance << std::endl << " gravity=" << i_gravity << std::endl << " dryTolerance=" << i_dryTolerance << std::endl << " newtonTolerance=" << i_newtonTolerance << std::endl << " maxNumberOfNewtonIterations=" << maxNumberOfNewtonIterations << std::endl << "\n ***\n\n"; #endif #endif }
/* * Check, whether a real_vector contains infinity or NaN */ inline bool checkVector (const __m128 x) { static const real_vector infinity = SETV_R(std :: numeric_limits<float> :: infinity()); return MOVEMASK(ANDV_R(CMP_EQ_R(x, x), NOTV_R(CMP_EQ_R(x, infinity)))) == VECTOR_FULL_MASK; }