Skip to content
Snippets Groups Projects
Select Git revision
  • 161647922cf8c920843e6f32d8bc3c5a2aed2b35
  • master default protected
  • nlf-fixes
  • DSMH
  • OneStep2
  • SMC
  • online-filter-as-a-sampler
  • nonlinear-filter-fixes
  • SMCsamplers
  • smc-sampler
  • 4.5
  • dynamic-striated
  • occbin
  • exo_steady_state
  • filter_initial_state
  • declare_vars_in_model_block
  • exceptions
  • rmExtraExo
  • julia
  • error_msg_undeclared_model_vars
  • static_aux_vars
  • 4.5.6
  • 4.5.5
  • 4.5.4
  • 4.5.3
  • 4.5.2
  • 4.5.1
  • 4.5.0
  • 4.4.3
  • 4.4.2
  • 4.4.1
  • 4.4.0
  • 4.4-beta1
  • 4.3.3
  • 4.3.2
  • 4.3.1
  • 4.3.0
  • 4.2.5
  • 4.2.4
  • 4.2.3
  • 4.2.2
41 results

ModFile.hh

Blame
  • Forked from Dynare / dynare
    Source project has a limited visibility.
    ModelTree.hh 4.25 KiB
    /*
     * 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 _MODELTREE_HH
    #define _MODELTREE_HH
    
    using namespace std;
    
    #include <string>
    #include <vector>
    #include <map>
    #include <ostream>
    
    #include "DataTree.hh"
    
    //! The three in which ModelTree can work
    enum ModelTreeMode
      {
        eStandardMode, //!< Standard mode (static and dynamic files in Matlab)
        eSparseMode,  //!< Sparse mode (static file in Matlab, dynamic file in Matlab with block decomposition)
        eDLLMode,      //!< DLL mode (static and dynamic files in C)
        eSparseDLLMode //!< Sparse DLL mode (static file in Matlab, dynamic file in C with block decomposition plus a binary file)
      };
    
    //! Shared code for static and dynamic models
    class ModelTree : public DataTree
    {
    protected:
      //! Stores declared equations
      vector<BinaryOpNode *> equations;
    
      typedef map<pair<int, int>, NodeID> first_derivatives_type;
      //! First order derivatives
      /*! First index is equation number, second is variable w.r. to which is computed the derivative.
        Only non-null derivatives are stored in the map.
        Variable indexes used are those of the variable_table, before sorting.
      */
      first_derivatives_type first_derivatives;
    
      typedef map<pair<int, pair<int, int> >, NodeID> second_derivatives_type;
      //! Second order derivatives
      /*! First index is equation number, second and third are variables w.r. to which is computed the derivative.
        Only non-null derivatives are stored in the map.
        Contains only second order derivatives where var1 >= var2 (for obvious symmetry reasons).
        Variable indexes used are those of the variable_table, before sorting.
      */
      second_derivatives_type second_derivatives;
    
      typedef map<pair<int, pair<int, pair<int, int> > >, NodeID> third_derivatives_type;
      //! Third order derivatives
      /*! First index is equation number, second, third and fourth are variables w.r. to which is computed the derivative.
        Only non-null derivatives are stored in the map.
        Contains only third order derivatives where var1 >= var2 >= var3 (for obvious symmetry reasons).
        Variable indexes used are those of the variable_table, before sorting.
      */
      third_derivatives_type third_derivatives;
    
      //! Temporary terms (those which will be noted Txxxx)
      temporary_terms_type temporary_terms;
    
      //! Computes derivatives of ModelTree
      void derive(int order);
      //! Write derivative of an equation w.r. to a variable
      void writeDerivative(ostream &output, int eq, int symb_id, int lag, ExprNodeOutputType output_type, const temporary_terms_type &temporary_terms) const;
      //! Computes temporary terms
      void computeTemporaryTerms(int order);
      //! Writes temporary terms
      void writeTemporaryTerms(ostream &output, ExprNodeOutputType output_type) const;
      //! Writes model local variables
      /*! No temporary term is used in the output, so that local parameters declarations can be safely put before temporary terms declaration in the output files */
      void writeModelLocalVariables(ostream &output, ExprNodeOutputType output_type) const;
      //! Writes model equations
      void writeModelEquations(ostream &output, ExprNodeOutputType output_type) const;
    
      //! Writes either (i+1,j+1) or [i+j*n_i] whether we are in Matlab or C mode
      void matrixHelper(ostream &output, int eq_nb, int col_nb, ExprNodeOutputType output_type) const;
    
    public:
      ModelTree(SymbolTable &symbol_table_arg, NumericalConstants &num_constants);
      //! Mode in which the ModelTree is supposed to work (Matlab, DLL or SparseDLL)
      ModelTreeMode mode;
      //! Declare a node as an equation of the model
      void addEquation(NodeID eq);
      //! Returns the number of equations in the model
      int equation_number() const;
    };
    
    #endif