Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/Main/RNGPrint.cpp 4 : : \copyright 2012-2015 J. Bakosi, 5 : : 2016-2018 Los Alamos National Security, LLC., 6 : : 2019-2021 Triad National Security, LLC. 7 : : All rights reserved. See the LICENSE file for details. 8 : : \brief Pretty printer base for pretty printers supporting RNGs 9 : : \details Pretty printer base for pretty printers supporting RNGs. 10 : : */ 11 : : // ***************************************************************************** 12 : : 13 : : #include <map> 14 : : #include <utility> 15 : : 16 : : #include "NoWarning/format.hpp" 17 : : 18 : : #include "WalkerConfig.hpp" 19 : : #include "Tags.hpp" 20 : : #include "Print.hpp" 21 : : #include "RNGParam.hpp" 22 : : #include "RNGPrint.hpp" 23 : : #include "Options/RNG.hpp" 24 : : #include "Options/RNGSSESeqLen.hpp" 25 : : 26 : : #ifdef HAS_MKL 27 : : #include "Options/MKLGaussianMethod.hpp" 28 : : #include "Options/MKLGaussianMVMethod.hpp" 29 : : #include "Options/MKLUniformMethod.hpp" 30 : : #endif 31 : : 32 : : using tk::RNGPrint; 33 : : 34 : : #ifdef HAS_MKL 35 : : void 36 : 4 : RNGPrint::echoMKLParams( const ctr::RNGMKLParam& p ) const 37 : : // ***************************************************************************** 38 : : // Echo information on MKL random number generator 39 : : //! \param[in] p MKL RNG parameters 40 : : // ***************************************************************************** 41 : : { 42 [ + - ]: 8 : ctr::MKLUniformMethod um; 43 [ + - ]: 8 : ctr::MKLGaussianMethod gm; 44 [ + - ]: 8 : ctr::MKLGaussianMVMethod gmvm; 45 : : 46 : 4 : m_stream << m_item_name_value_fmt 47 [ + - ]: 4 : % m_item_indent 48 [ + - ]: 4 : % "seed" 49 [ + - ][ + - ]: 8 : % p.get< tag::seed >(); 50 : : 51 : 4 : m_stream << m_item_name_value_fmt 52 [ + - ]: 4 : % m_item_indent 53 [ + - ]: 4 : % um.group() 54 [ + - ][ + - ]: 8 : % um.name( p.get< tag::uniform_method >() ); [ + - ] 55 : : 56 : 4 : m_stream << m_item_name_value_fmt 57 [ + - ]: 4 : % m_item_indent 58 [ + - ]: 4 : % gm.group() 59 [ + - ][ + - ]: 8 : % gm.name( p.get< tag::gaussian_method >() ); [ + - ] 60 : : 61 : 4 : m_stream << m_item_name_value_fmt 62 [ + - ]: 4 : % m_item_indent 63 [ + - ]: 4 : % gmvm.group() 64 [ + - ][ + - ]: 8 : % gmvm.name( p.get< tag::gaussianmv_method >() ); [ + - ] 65 : 4 : } 66 : : #endif 67 : : 68 : : void 69 : 5 : RNGPrint::echoRNGSSEParams( const ctr::RNGSSEParam& p, 70 : : const ctr::RNG& rng, 71 : : const ctr::RNGType& r ) const 72 : : // ***************************************************************************** 73 : : // Echo information on RNGSSE random number generator 74 : : //! \param[in] p RNGSSE RNG parameters 75 : : //! \param[in] rng RNG options object 76 : : //! \param[in] r RNG type enum 77 : : // ***************************************************************************** 78 : : { 79 : 5 : m_stream << m_item_name_value_fmt 80 : 5 : % m_item_indent 81 : 5 : % "seed" 82 : 10 : % p.get< tag::seed >(); 83 : : 84 [ + + ]: 5 : if ( rng.supportsSeq(r) ) { 85 [ + - ]: 8 : ctr::RNGSSESeqLen seq; 86 : 4 : m_stream << m_item_name_value_fmt 87 [ + - ]: 4 : % m_item_indent 88 [ + - ]: 4 : % seq.group() 89 [ + - ][ + - ]: 8 : % seq.name( p.get< tag::seqlen >() ); [ + - ] 90 : : } 91 : 5 : } 92 : : 93 : : void 94 : 3 : RNGPrint::echoRandom123Params( const ctr::RNGRandom123Param& p ) const 95 : : // ***************************************************************************** 96 : : // Echo information on Random123 random number generator 97 : : //! \param[in] p Random123 RNG parameters 98 : : // ***************************************************************************** 99 : : { 100 : 3 : m_stream << m_item_name_value_fmt 101 : 3 : % m_item_indent 102 : 3 : % "seed" 103 : 6 : % p.get< tag::seed >(); 104 : 3 : } 105 : : 106 : : #ifdef HAS_MKL 107 : : void 108 : 4 : RNGPrint::MKLParams( const std::vector< ctr::RNGType >& vec, 109 : : const ctr::RNGMKLParameters& map ) const 110 : : // ***************************************************************************** 111 : : // Print all fields of MKL RNG parameters 112 : : //! \param[in] vec Vector of RNG type enums to print 113 : : //! \param[in] map MKL RNG parameters map 114 : : // ***************************************************************************** 115 : : { 116 [ + - ]: 8 : ctr::RNG rng; 117 : : 118 [ + + ]: 16 : for (auto& r : vec) { 119 [ + - ][ + + ]: 12 : if (rng.lib(r) == ctr::RNGLibType::MKL) { 120 [ + - ][ + - ]: 4 : subsection( rng.name(r) ); 121 [ + - ]: 4 : const auto& m = map.find(r); 122 [ + + ]: 4 : if (m == map.end()) { // no parameter map entry, print defaults 123 [ + - ]: 3 : echoMKLParams( ctr::RNGMKLParam() ); 124 : : } else { 125 [ + - ]: 1 : echoMKLParams( m->second ); 126 : : } 127 : : } 128 : : } 129 : 4 : } 130 : : #endif 131 : : 132 : : void 133 : 4 : RNGPrint::RNGSSEParams( const std::vector< ctr::RNGType >& vec, 134 : : const ctr::RNGSSEParameters& map ) const 135 : : // ***************************************************************************** 136 : : // Print all fields of RNGSSE RNG parameters 137 : : //! \param[in] vec Vector of RNG type enums to print 138 : : //! \param[in] map RNGSSE RNG parameters map 139 : : // ***************************************************************************** 140 : : { 141 [ + - ]: 8 : ctr::RNG rng; 142 : : 143 [ + + ]: 16 : for (auto& r : vec) { 144 [ + - ][ + + ]: 12 : if (rng.lib(r) == ctr::RNGLibType::RNGSSE) { 145 [ + - ][ + - ]: 5 : subsection( rng.name(r) ); 146 [ + - ]: 5 : const auto& m = map.find(r); 147 [ + + ]: 5 : if (m == map.end()) { // no parameter map entry, print defaults 148 [ + - ]: 4 : echoRNGSSEParams( ctr::RNGSSEParam(), rng, r ); 149 : : } else { 150 [ + - ]: 1 : echoRNGSSEParams( m->second, rng, r ); 151 : : } 152 : : } 153 : : } 154 : 4 : } 155 : : 156 : : void 157 : 4 : RNGPrint::Random123Params( const std::vector< ctr::RNGType >& vec, 158 : : const ctr::RNGRandom123Parameters& map ) const 159 : : // ***************************************************************************** 160 : : // Print all fields of Random123 RNG parameters 161 : : //! \param[in] vec Vector of RNG type enums to print 162 : : //! \param[in] map Random123 RNG parameters map 163 : : // ***************************************************************************** 164 : : { 165 [ + - ]: 8 : ctr::RNG rng; 166 : : 167 [ + + ]: 16 : for (auto& r : vec) { 168 [ + - ][ + + ]: 12 : if (rng.lib(r) == ctr::RNGLibType::R123) { 169 [ + - ][ + - ]: 3 : subsection( rng.name(r) ); 170 [ + - ]: 3 : const auto& m = map.find(r); 171 [ + + ]: 3 : if (m == map.end()) { // no parameter map entry, print defaults 172 [ + - ]: 2 : echoRandom123Params( ctr::RNGRandom123Param() ); 173 : : } else { 174 [ + - ]: 1 : echoRandom123Params( m->second ); 175 : : } 176 : : } 177 : : } 178 : 4 : }