// 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();
}
Exemplo n.º 3
0
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();
}