Skip to content
Snippets Groups Projects
Select Git revision
  • b4ac9aac8da9df9b8da41935b7821c1e2c9fa4cc
  • master default protected
  • pac_composite_target_mce
  • ramsey_k_order
  • 4.6
  • occbin
  • uop
  • rework_pac
  • aux_vars_fix
  • created_preprocessor_repo
10 results

NumericalInitialization.cc

Blame
  • Forked from Dynare / preprocessor
    Source project has a limited visibility.
    IncidenceMatrix.cc 6.99 KiB
    /*
     * Copyright (C) 2007-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/>.
     */
    
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    
    #include "IncidenceMatrix.hh"
    
    
    IncidenceMatrix::IncidenceMatrix(const SymbolTable &symbol_table_arg) :
      symbol_table(symbol_table_arg)
    {
      Model_Max_Lead = Model_Max_Lead_Endo = Model_Max_Lead_Exo = 0;
      Model_Max_Lag = Model_Max_Lag_Endo = Model_Max_Lag_Exo = 0;
    }
    //------------------------------------------------------------------------------
    //For a lead or a lag build the Incidence Matrix structures
    bool*
    IncidenceMatrix::Build_IM(int lead_lag, SymbolType type)
    {
      int size;
      bool *IM;
      if(type==eEndogenous)
        {
          size = symbol_table.endo_nbr() * symbol_table.endo_nbr() * sizeof(IM[0]);
          List_IM[lead_lag] = IM = (bool*)malloc(size);
          for(int i = 0; i< symbol_table.endo_nbr() * symbol_table.endo_nbr(); i++) IM[i] = 0;
          if(lead_lag > 0)
            {
              if(lead_lag > Model_Max_Lead_Endo)
                {
                  Model_Max_Lead_Endo = lead_lag;
                  if(lead_lag > Model_Max_Lead)
                    Model_Max_Lead = lead_lag;
                }
            }
          else
            {
              if( -lead_lag > Model_Max_Lag_Endo)
                {
                  Model_Max_Lag_Endo = -lead_lag;
                  if(-lead_lag > Model_Max_Lag)
                    Model_Max_Lag = -lead_lag;
                }
            }
        }
      else
        {  //eExogenous
          size = symbol_table.endo_nbr() * symbol_table.exo_nbr() * sizeof(IM[0]);
          List_IM_X[lead_lag] = IM = (bool*)malloc(size);
          for(int i = 0; i< symbol_table.endo_nbr() * symbol_table.exo_nbr(); i++) IM[i] = 0;
          if(lead_lag > 0)
            {