StaticModel.hh 3.48 KB
Newer Older
sebastien's avatar
sebastien committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/*
 * Copyright (C) 2003-2009 Dynare Team
 *
 * This file is part of Dynare.
 *
 * Dynare is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Dynare is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef _STATICMODEL_HH
#define _STATICMODEL_HH

#include "ModelTree.hh"

//! Stores a static model
26
/*! Derivation IDs are allocated only for endogenous, and are equal to symbol ID in that case */
sebastien's avatar
sebastien committed
27 28 29 30 31 32 33 34 35 36 37
class StaticModel : public ModelTree
{
private:
  //! Writes the static model equations and its derivatives
  /*! \todo handle hessian in C output */
  void writeStaticModel(ostream &StaticOutput) const;
  //! Writes static model file (Matlab version)
  void writeStaticMFile(const string &static_basename) const;
  //! Writes static model file (C version)
  void writeStaticCFile(const string &static_basename) const;

38 39
  virtual int computeDerivID(int symb_id, int lag);

40
  //! Computes normalization of the static model
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
  /*! Maps each endogenous type specific ID to the equation to which it is associated */
  void computeNormalization(vector<int> &endo2eq) const;

  //! Computes blocks of the static model, sorted in topological order
  /*!
    \param blocks ordered list of blocks, each one containing a list of type specific IDs of endogenous variables
    \param endo2eq chosen normalization (mapping from type specific IDs of endogenous to equations)
  */
  void computeSortedBlockDecomposition(vector<set<int> > &blocks, const vector<int> &endo2eq) const;

  //! For each block of the static model, computes minimum feedback set (MFS)
  /*!
    \param blocksMFS for each block, contains the subset of type specific IDs which are in the MFS
    \param blocks ordered list of blocks, each one containing a list of type specific IDs of endogenous variables
    \param endo2eq chosen normalization (mapping from type specific IDs of endogenous to equations)
  */
  void computeMFS(vector<set<int> > &blocksMFS, const vector<set<int> > &blocks, const vector<int> &endo2eq) const;
sebastien's avatar
sebastien committed
58 59 60

  //! Computes the list of equations which are already in normalized form
  /*! Returns a multimap mapping endogenous which are normalized (represented by their type specific ID) to the equation(s) which define it */
61
  void computeNormalizedEquations(multimap<int, int> &endo2eqs) const;
62

sebastien's avatar
sebastien committed
63 64 65
public:
  StaticModel(SymbolTable &symbol_table_arg, NumericalConstants &num_constants);
  //! Execute computations (derivation)
66 67
  /*!
    \param block_mfs whether block decomposition and minimum feedback set should be computed
68
    \param hessian whether Hessian (w.r. to endogenous only) should be computed
sebastien's avatar
sebastien committed
69
    \param no_tmp_terms if true, no temporary terms will be computed in the static and dynamic files */
70
  void computingPass(bool block_mfs, bool hessian, bool no_tmp_terms);
sebastien's avatar
sebastien committed
71 72
  //! Writes static model file
  void writeStaticFile(const string &basename) const;
73

74 75 76
  //! Writes LaTeX file with the equations of the static model
  void writeLatexFile(const string &basename) const;

77
  virtual int getDerivID(int symb_id, int lag) const throw (UnknownDerivIDException);
sebastien's avatar
sebastien committed
78 79 80
};

#endif