Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/DiffEq/OrnsteinUhlenbeck/OrnsteinUhlenbeckCoeffPolicy.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 Ornstein-Uhlenbeck coefficients policies 9 : : \details This file defines coefficients policy classes for the diagonal 10 : : Ornstein-Uhlenbeck SDE, defined in 11 : : DiffEq/OrnsteinUhlenbeck/OrnsteinUhlenbeck.h. For general 12 : : requirements on the diagonal Ornstein-Uhlenbeck SDE coefficients 13 : : policy classes see the header file. 14 : : */ 15 : : // ***************************************************************************** 16 : : 17 : : #include "OrnsteinUhlenbeckCoeffPolicy.hpp" 18 : : 19 : 27 : walker::OrnsteinUhlenbeckCoeffConst::OrnsteinUhlenbeckCoeffConst( 20 : : tk::ctr::ncomp_t ncomp, 21 : : const std::vector< kw::sde_sigmasq::info::expect::type >& sigmasq_, 22 : : const std::vector< kw::sde_theta::info::expect::type >& theta_, 23 : : const std::vector< kw::sde_mu::info::expect::type >& mu_, 24 : : std::vector< kw::sde_sigmasq::info::expect::type >& sigmasq, 25 : : std::vector< kw::sde_theta::info::expect::type >& theta, 26 : : std::vector< kw::sde_mu::info::expect::type >& mu ) 27 : : // ***************************************************************************** 28 : : // Constructor: initialize coefficients 29 : : //! \param[in] ncomp Number of scalar components in this SDE system 30 : : //! \param[in] sigmasq_ Vector used to initialize coefficient vector sigmasq 31 : : //! \param[in] theta_ Vector used to initialize coefficient vector theta 32 : : //! \param[in] mu_ Vector used to initialize coefficient vector mu 33 : : //! \param[in,out] sigmasq Coefficient vector to be initialized 34 : : //! \param[in,out] theta Coefficient vector to be initialized 35 : : //! \param[in,out] mu Coefficient vector to be initialized 36 : : // ***************************************************************************** 37 : : { 38 [ - + ][ - - ]: 27 : ErrChk( sigmasq_.size() == ncomp*(ncomp+1)/2, [ - - ][ - - ] 39 : : "Wrong number of Ornstein-Uhlenbeck SDE parameters 'sigmasq'"); 40 [ - + ][ - - ]: 27 : ErrChk( theta_.size() == ncomp, [ - - ][ - - ] 41 : : "Wrong number of Ornstein-Uhlenbeck SDE parameters 'theta'"); 42 [ - + ][ - - ]: 27 : ErrChk( mu_.size() == ncomp, [ - - ][ - - ] 43 : : "Wrong number of Ornstein-Uhlenbeck SDE parameters 'mu'"); 44 : : 45 : : // Prepare upper triangle for Cholesky-decomposition using LAPACK 46 : 27 : sigmasq.resize( ncomp * ncomp ); 47 : 27 : std::size_t c = 0; 48 [ + + ]: 108 : for (tk::ctr::ncomp_t i=0; i<ncomp; ++i) 49 [ + + ]: 324 : for (tk::ctr::ncomp_t j=0; j<ncomp; ++j) 50 [ + + ]: 243 : if (i<=j) 51 : 162 : sigmasq[ i*ncomp+j ] = sigmasq_[ c++ ]; 52 : : else 53 : 81 : sigmasq[ i*ncomp+j ] = 0.0; 54 : : 55 : 27 : theta = theta_; 56 : 27 : mu = mu_; 57 : 27 : }