// TODO(stevescott): check this SparseVector ASSR::observation_matrix(int t)const { Ptr<FineNowcastingData> fine_data(this->fine_data(t)); int p = state_dimension(); SparseVector ans(p); ans[p-1] = 1; ans[p-2] = fine_data->fraction_in_initial_period(); return ans; }
// TODO(stevescott): This and other code involving model matrices is // an optimization opportunity. Test it out to see if // precomputation makes sense. const AccumulatorTransitionMatrix * ASSR::state_transition_matrix(int t)const { Ptr<FineNowcastingData> fine_data(this->fine_data(t)); if(!transition_matrix_) { transition_matrix_.reset(new AccumulatorTransitionMatrix( StateSpaceModelBase::state_transition_matrix(t), StateSpaceModelBase::observation_matrix(t+1), fine_data->fraction_in_initial_period(), fine_data->contains_end())); } else { transition_matrix_->reset( StateSpaceModelBase::state_transition_matrix(t), StateSpaceModelBase::observation_matrix(t+1), fine_data->fraction_in_initial_period(), fine_data->contains_end()); } return transition_matrix_.get(); }
void CleverNodeInjection<TYPE>::coarsen( SAMRAI::hier::Patch& coarse, const SAMRAI::hier::Patch& fine, const int dst_component, const int src_component, const SAMRAI::hier::Box& coarse_box, const SAMRAI::hier::IntVector& ratio) const { boost::shared_ptr<CleverNodeData<TYPE> > fine_data( SHARED_PTR_CAST(CleverNodeData<TYPE> , fine.getPatchData(src_component))); boost::shared_ptr<CleverNodeData<TYPE> > coarse_data( SHARED_PTR_CAST(CleverNodeData<TYPE> , coarse.getPatchData(dst_component))); const SAMRAI::hier::Box coarse_ghost_box = SAMRAI::pdat::NodeGeometry::toNodeBox(coarse_data->getGhostBox()); const SAMRAI::hier::Box fine_ghost_box = SAMRAI::pdat::NodeGeometry::toNodeBox(fine_data->getGhostBox()); const hier::Index filo = fine_data->getGhostBox().lower(); const hier::Index fihi = fine_data->getGhostBox().upper(); const hier::Index cilo = coarse_data->getGhostBox().lower(); const hier::Index cihi = coarse_data->getGhostBox().upper(); const hier::Index ifirstc = coarse_box.lower(); const hier::Index ilastc = coarse_box.upper(); for(int depth = 0; depth < coarse_data->getDepth(); depth++) { if (fine.getDim() == SAMRAI::tbox::Dimension(2)) { F90_FUNC(conavgclevernodedoub2d, CONAVGCLEVERNODEDOUB2D) (ifirstc(0), ifirstc(1), ilastc(0), ilastc(1), filo(0), filo(1), fihi(0), fihi(1), cilo(0), cilo(1), cihi(0), cihi(1), &ratio[0], fine_data->getPointer(depth), coarse_data->getPointer(depth)); } else { TBOX_ERROR("CleverNodeInjection error...\n" << "dim != 2 not supported." << std::endl); } } }
bool ASSR::is_missing_observation(int t)const { return !(fine_data(t)->coarse_observation_observed()); }
double ASSR::adjusted_observation(int t)const { return fine_data(t)->coarse_observation(); }