Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/DiffEq/WrightFisher/ConfigureWrightFisher.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 Register and compile configuration on the Wright-Fisher SDE 9 : : \details Register and compile configuration on the Wright-Fisher SDE. 10 : : */ 11 : : // ***************************************************************************** 12 : : 13 : : #include <set> 14 : : #include <map> 15 : : #include <vector> 16 : : #include <string> 17 : : #include <utility> 18 : : 19 : : #include <brigand/algorithms/for_each.hpp> 20 : : 21 : : #include "Tags.hpp" 22 : : #include "CartesianProduct.hpp" 23 : : #include "DiffEqFactory.hpp" 24 : : #include "Walker/Options/DiffEq.hpp" 25 : : #include "Walker/Options/InitPolicy.hpp" 26 : : 27 : : #include "ConfigureWrightFisher.hpp" 28 : : #include "WrightFisher.hpp" 29 : : #include "WrightFisherCoeffPolicy.hpp" 30 : : 31 : : namespace walker { 32 : : 33 : : void 34 : 323 : registerWrightFisher( DiffEqFactory& f, std::set< ctr::DiffEqType >& t ) 35 : : // ***************************************************************************** 36 : : // Register Wright-Fisher SDE into DiffEq factory 37 : : //! \param[in,out] f Differential equation factory to register to 38 : : //! \param[in,out] t Counters for equation types registered 39 : : // ***************************************************************************** 40 : : { 41 : : // Construct vector of vectors for all possible policies for SDE 42 : : using WrightFisherPolicies = 43 : : tk::cartesian_product< InitPolicies, WrightFisherCoeffPolicies >; 44 : : // Register SDE for all combinations of policies 45 : : brigand::for_each< WrightFisherPolicies >( 46 [ + - ]: 323 : registerDiffEq< WrightFisher >( f, ctr::DiffEqType::WRIGHTFISHER, t ) ); 47 : 323 : } 48 : : 49 : : std::vector< std::pair< std::string, std::string > > 50 : 0 : infoWrightFisher( std::map< ctr::DiffEqType, tk::ctr::ncomp_t >& cnt ) 51 : : // ***************************************************************************** 52 : : // Return information on the Wright-Fisher SDE 53 : : //! \param[inout] cnt std::map of counters for all differential equation types 54 : : //! \return vector of string pairs describing the SDE configuration 55 : : // ***************************************************************************** 56 : : { 57 [ - - ]: 0 : auto c = ++cnt[ ctr::DiffEqType::WRIGHTFISHER ]; // count eqs 58 : 0 : --c; // used to index vectors starting with 0 59 : : 60 : 0 : std::vector< std::pair< std::string, std::string > > nfo; 61 : : 62 [ - - ][ - - ]: 0 : nfo.emplace_back( ctr::DiffEq().name( ctr::DiffEqType::WRIGHTFISHER ), "" ); [ - - ] 63 : : 64 [ - - ]: 0 : nfo.emplace_back( "start offset in particle array", std::to_string( 65 [ - - ]: 0 : g_inputdeck.get< tag::component >().offset< tag::wrightfisher >(c) ) ); 66 : 0 : auto ncomp = g_inputdeck.get< tag::component >().get< tag::wrightfisher >()[c]; 67 [ - - ][ - - ]: 0 : nfo.emplace_back( "number of components", std::to_string( ncomp ) ); 68 : : 69 [ - - ]: 0 : nfo.emplace_back( "kind", "stochastic" ); 70 [ - - ]: 0 : nfo.emplace_back( "dependent variable", std::string( 1, 71 [ - - ]: 0 : g_inputdeck.get< tag::param, tag::wrightfisher, tag::depvar >()[c] ) ); 72 [ - - ]: 0 : nfo.emplace_back( "initialization policy", ctr::InitPolicy().name( 73 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::wrightfisher, tag::initpolicy >()[c] ) ); 74 [ - - ]: 0 : nfo.emplace_back( "coefficients policy", ctr::CoeffPolicy().name( 75 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::wrightfisher, tag::coeffpolicy >()[c] ) ); 76 [ - - ]: 0 : nfo.emplace_back( "random number generator", tk::ctr::RNG().name( 77 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::wrightfisher, tag::rng >()[c] ) ); 78 : : nfo.emplace_back( 79 [ - - ][ - - ]: 0 : "coeff omega [" + std::to_string( ncomp ) + "]", [ - - ] 80 : 0 : parameters( 81 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::wrightfisher, tag::omega >().at(c) ) ); [ - - ] 82 : 0 : spikes( nfo, g_inputdeck.get< tag::param, tag::wrightfisher, tag::init, 83 [ - - ][ - - ]: 0 : tag::spike >().at(c) 84 : : ); 85 : 0 : betapdfs( nfo, g_inputdeck.get< tag::param, tag::wrightfisher, tag::init, 86 [ - - ][ - - ]: 0 : tag::betapdf >().at(c) ); 87 : : 88 : 0 : return nfo; 89 : : } 90 : : 91 : : } // walker::