From e0510d4a490296cae3b6899480c30d43838e26b7 Mon Sep 17 00:00:00 2001 From: sebastien Date: Mon, 16 Jun 2008 16:33:28 +0000 Subject: [PATCH] v4: dropped Scilab support git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1878 ac1d8469-bf42-47a9-8791-bf33cf982152 --- ComputingTasks.cc | 14 ++- InterfaceMatlab.cc | 65 ----------- InterfaceScilab.cc | 65 ----------- Makefile | 24 +--- ModFile.cc | 32 +++-- ModelTree.cc | 231 +++++++++++++++++++------------------ NumericalInitialization.cc | 41 ++++--- Shocks.cc | 17 ++- SymbolList.cc | 6 +- SymbolTable.cc | 21 ++-- include/Interface.hh | 36 ------ 11 files changed, 188 insertions(+), 364 deletions(-) delete mode 100644 InterfaceMatlab.cc delete mode 100644 InterfaceScilab.cc delete mode 100644 include/Interface.hh diff --git a/ComputingTasks.cc b/ComputingTasks.cc index bed269b2..9afcb7e2 100644 --- a/ComputingTasks.cc +++ b/ComputingTasks.cc @@ -23,7 +23,6 @@ using namespace std; #include "ComputingTasks.hh" -#include "Interface.hh" #include "Statement.hh" SteadyStatement::SteadyStatement(const OptionsList &options_list_arg) : @@ -570,8 +569,9 @@ void CalibVarStatement::writeOutput(ostream &output, const string &basename) const { - output << interfaces::comment() << "\n" << interfaces::comment() << "CALIB_VAR \n" - << interfaces::comment() << "\n"; + output << "%" << endl + << "% CALIB_VAR" << endl + << "%" << endl; for(int i = 1; i < 4 ; i++) { @@ -728,9 +728,11 @@ OptimWeightsStatement::OptimWeightsStatement(const var_weights_type &var_weights void OptimWeightsStatement::writeOutput(ostream &output, const string &basename) const { - output << interfaces::comment() << "OPTIM_WEIGHTS\n\n"; - output << "optim_weights_ = sparse(M_.endo_nbr,M_.endo_nbr);\n"; - output << "obj_var_ = [];\n\n"; + output << "%" << endl + << "% OPTIM_WEIGHTS" << endl + << "%" << endl + << "optim_weights_ = sparse(M_.endo_nbr,M_.endo_nbr);" << endl + << "obj_var_ = [];" << endl << endl; for(var_weights_type::const_iterator it = var_weights.begin(); it != var_weights.end(); it++) diff --git a/InterfaceMatlab.cc b/InterfaceMatlab.cc deleted file mode 100644 index d18a8a78..00000000 --- a/InterfaceMatlab.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2006-2008 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 . - */ - -#include - -#include "Interface.hh" - -namespace interfaces -{ - string comment() - { - return "% "; - } - - string delete_file(string s) - { - return "delete " + s; - } - - string file_exist(string s) - { - return "exist('" + s + "')"; - } - - string compile(string s) - { - return "mex -O " + s + "\n"; - } - - string function_close() - { - return ""; - } - - string function_file_extension() - { - return ".m"; - } - - string strvcat(string s1, string s2) - { - return "strvcat(" + s1 + "," + s2 + ")"; - } - - string load_model_function_files(string filename) - { - return ""; - } -} diff --git a/InterfaceScilab.cc b/InterfaceScilab.cc deleted file mode 100644 index 35fc51e1..00000000 --- a/InterfaceScilab.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2006-2008 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 . - */ - -#include - -#include "Interface.hh" - -namespace interfaces -{ - string comment() - { - return "// "; - } - - string delete_file(string s) - { - return "mdelete " + s; - } - - string file_exist(string s) - { - return "file_exist(" + s + ")"; - } - - string compile(string s) - { - return ""; - } - - string function_close() - { - return "endfunction\n"; - } - - string function_file_extension() - { - return ".sci"; - } - - string strvcat(string s1, string s2) - { - return "[" + s1 + ";" + s2 + "]"; - } - - string load_model_function_files(string filename) - { - return "getf('" + filename + "_static.sci');\ngetf('" + filename + "_dynamic.sci');\n"; - } -} diff --git a/Makefile b/Makefile index a71440f5..37c3da5a 100644 --- a/Makefile +++ b/Makefile @@ -2,18 +2,15 @@ include Makefile.include ifeq ($(shell uname -o), Cygwin) DYNARE_M = dynare_m.exe - DYNARE_S = dynare_s.exe else DYNARE_M = dynare_m - DYNARE_S = dynare_s endif ifeq ($(CROSS_WIN32), yes) DYNARE_M = dynare_m.exe - DYNARE_S = dynare_s.exe endif -COMMON_OBJ = \ +OBJS = \ DynareFlex.o \ DynareBison.o \ ComputingTasks.o \ @@ -38,30 +35,22 @@ COMMON_OBJ = \ DynareMain.o \ DynareMain2.o -MATLAB_OBJ = InterfaceMatlab.o - -SCILAB_OBJ = InterfaceScilab.o - # Build rules -all: all-recursive $(DYNARE_M) $(DYNARE_S) +all: all-recursive $(DYNARE_M) all-recursive: make -C macro -$(DYNARE_M): $(COMMON_OBJ) $(MATLAB_OBJ) macro/libmacro.a - $(CPP) $(CPPFLAGS) -o $(DYNARE_M) $(COMMON_OBJ) $(MATLAB_OBJ) -Lmacro -lmacro +$(DYNARE_M): $(OBJS) macro/libmacro.a + $(CPP) $(CPPFLAGS) -o $(DYNARE_M) $(OBJS) -Lmacro -lmacro cp $(DYNARE_M) ../matlab/ -$(DYNARE_S): $(COMMON_OBJ) $(SCILAB_OBJ) macro/libmacro.a - $(CPP) $(CPPFLAGS) -o $(DYNARE_S) $(COMMON_OBJ) $(SCILAB_OBJ) -Lmacro -lmacro - cp $(DYNARE_S) ../scilab/ - # Dependencies --include $(COMMON_OBJ:.o=.P) $(MATLAB_OBJ:.o=.P) $(SCILAB_OBJ:.o=.P) +-include $(OBJS:.o=.P) DynareFlex.cc: DynareFlex.ll include/DynareBison.hh include/ParsingDriver.hh flex -oDynareFlex.cc DynareFlex.ll @@ -83,8 +72,7 @@ clean: clean-recursive include/stack.hh \ include/location.hh \ include/DynareBison.hh \ - $(DYNARE_M) \ - $(DYNARE_S) + $(DYNARE_M) clean-recursive: make -C macro clean diff --git a/ModFile.cc b/ModFile.cc index 45f5ab3b..fd15bb14 100644 --- a/ModFile.cc +++ b/ModFile.cc @@ -21,7 +21,6 @@ #include #include "ModFile.hh" -#include "Interface.hh" ModFile::ModFile() : expressions_tree(symbol_table, num_constants), model_tree(symbol_table, num_constants), @@ -110,7 +109,7 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all) const if (basename.size()) { string fname(basename); - fname += interfaces::function_file_extension(); + fname += ".m"; mOutputFile.open(fname.c_str(), ios::out | ios::binary); if (!mOutputFile.is_open()) { @@ -125,11 +124,11 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all) const exit(-1); } - mOutputFile << interfaces::comment() << endl; - mOutputFile << interfaces::comment() << "Status : main Dynare file " << endl; - mOutputFile << interfaces::comment() << endl; - mOutputFile << interfaces::comment() << "Warning : this file is generated automatically by Dynare" << endl; - mOutputFile << interfaces::comment() << " from model file (.mod)" << endl << endl; + mOutputFile << "%" << endl + << "% Status : main Dynare file " << endl + << "%" << endl + << "% Warning : this file is generated automatically by Dynare" << endl + << "% from model file (.mod)" << endl << endl; if (clear_all) mOutputFile << "clear all" << endl; @@ -139,12 +138,12 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all) const mOutputFile << "global ys0_ recurs0_ ex0_ ct_" << endl; mOutputFile << "options_ = [];" << endl; mOutputFile << "M_.fname = '" << basename << "';" << endl; - mOutputFile << interfaces::comment() << endl; - mOutputFile << interfaces::comment() << "Some global variables initialisation" << endl; - mOutputFile << interfaces::comment() << endl; + mOutputFile << "%" << endl; + mOutputFile << "% Some global variables initialization" << endl; + mOutputFile << "%" << endl; mOutputFile << "global_initialization;" << endl; mOutputFile << "diary off;" << endl << "warning off;" << endl << endl; - mOutputFile << interfaces::delete_file(basename + ".log") << ";" << endl; + mOutputFile << "delete " << basename << ".log;" << endl; mOutputFile << "warning on;" << endl << "warning backtrace;" << endl; mOutputFile << "logname_ = '" << basename << ".log';" << endl; mOutputFile << "diary '" << basename << ".log';" << endl; @@ -154,22 +153,19 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all) const { if (model_tree.mode == eDLLMode) { - mOutputFile << "if "; - mOutputFile << interfaces::file_exist(basename + "_static.c") << endl; + mOutputFile << "if exist('" << basename << "_static.c')" << endl; mOutputFile << " clear " << basename << "_static" << endl; - mOutputFile << " " << interfaces::compile(basename +"_static.c") << endl; + mOutputFile << " mex -O " << basename << "_static.c" << endl; mOutputFile << "end" << endl; - mOutputFile << "if "; - mOutputFile << interfaces::file_exist(basename + "_dynamic.c") << endl; + mOutputFile << "if exist('" << basename << "_dynamic.c')" << endl; mOutputFile << " clear " << basename << "_dynamic" << endl; - mOutputFile << " " + interfaces::compile(basename+"_dynamic.c") << endl; + mOutputFile << " mex -O " << basename << "_dynamic.c" << endl; mOutputFile << "end" << endl; } else { mOutputFile << "erase_compiled_function('" + basename +"_static');" << endl; mOutputFile << "erase_compiled_function('" + basename +"_dynamic');" << endl; - mOutputFile << interfaces::load_model_function_files(basename); } } diff --git a/ModelTree.cc b/ModelTree.cc index 8090ef0e..ca1c056f 100644 --- a/ModelTree.cc +++ b/ModelTree.cc @@ -24,7 +24,6 @@ #include #include "ModelTree.hh" -#include "Interface.hh" #include "Model_Graph.hh" @@ -656,12 +655,12 @@ ModelTree::writeModelEquationsOrdered_M(ostream &output, Model_Block *ModelBlock output << "function [residual, g1, g2, g3, b] = " << dynamic_basename << "_" << j+1 << "(y, x, it_)\n"; else output << "function [residual, g1, g2, g3, b] = " << dynamic_basename << "_" << j+1 << "(y, x, y_kmin, y_size, periods)\n"; - output << " " << interfaces::comment() << "////////////////////////////////////////////////////////////////////////\n" << - " " << interfaces::comment() << "//" << string(" Block ").substr(int(log10(j + 1))) << j + 1 << " " << BlockTriangular::BlockType0(ModelBlock->Block_List[j].Type) << - " //\n" << - " " << interfaces::comment() << "// Simulation type "; - output << BlockTriangular::BlockSim(ModelBlock->Block_List[j].Simulation_Type) << " //\n" << - " " << interfaces::comment() << "////////////////////////////////////////////////////////////////////////\n"; + output << " % ////////////////////////////////////////////////////////////////////////" << endl + << " % //" << string(" Block ").substr(int(log10(j + 1))) << j + 1 << " " << BlockTriangular::BlockType0(ModelBlock->Block_List[j].Type) + << " //" << endl + << " % // Simulation type " + << BlockTriangular::BlockSim(ModelBlock->Block_List[j].Simulation_Type) << " //" << endl + << " % ////////////////////////////////////////////////////////////////////////" << endl; //The Temporary terms output << global_output.str(); output << " if M_.param_nbr > 0\n"; @@ -687,7 +686,7 @@ ModelTree::writeModelEquationsOrdered_M(ostream &output, Model_Block *ModelBlock else sps=""; if (ModelBlock->Block_List[j].Temporary_terms->size()) - output << " " << sps << interfaces::comment() << "//Temporary variables\n"; + output << " " << sps << "% //Temporary variables" << endl; i=0; for(temporary_terms_type::const_iterator it = ModelBlock->Block_List[j].Temporary_terms->begin(); it != ModelBlock->Block_List[j].Temporary_terms->end(); it++) @@ -706,8 +705,8 @@ ModelTree::writeModelEquationsOrdered_M(ostream &output, Model_Block *ModelBlock { ModelBlock->Block_List[j].Variable_Sorted[i] = variable_table.getID(eEndogenous, ModelBlock->Block_List[j].Variable[i], 0); string sModel = symbol_table.getNameByID(eEndogenous, ModelBlock->Block_List[j].Variable[i]) ; - output << sps << " " << interfaces::comment() << "equation " << ModelBlock->Block_List[j].Equation[i] << " variable : " << - sModel << " (" << ModelBlock->Block_List[j].Variable[i] << ")\n"; + output << sps << " % equation " << ModelBlock->Block_List[j].Equation[i] << " variable : " << sModel + << " (" << ModelBlock->Block_List[j].Variable[i] << ")" << endl; if (!lhs_rhs_done) { eq_node = equations[ModelBlock->Block_List[j].Equation[i]]; @@ -764,16 +763,17 @@ ModelTree::writeModelEquationsOrdered_M(ostream &output, Model_Block *ModelBlock && ModelBlock->Block_List[j].Simulation_Type!=EVALUATE_BACKWARD_R && ModelBlock->Block_List[j].Simulation_Type!=EVALUATE_FOREWARD_R) { - output << " " << sps << interfaces::comment() << "Jacobian \n"; + output << " " << sps << "% Jacobian " << endl; switch(ModelBlock->Block_List[j].Simulation_Type) { case SOLVE_BACKWARD_SIMPLE: case SOLVE_FOREWARD_SIMPLE: output << " g1(1)="; writeDerivative(output, ModelBlock->Block_List[j].Equation[0], ModelBlock->Block_List[j].Variable[0], 0, oMatlabDynamicModelSparse, temporary_terms); - output << "; " << interfaces::comment() << "variable=" << symbol_table.getNameByID(eEndogenous, ModelBlock->Block_List[j].Variable[0]) - <<"(" << variable_table.getLag(variable_table.getSymbolID(ModelBlock->Block_List[j].Variable[0])) << ") " << ModelBlock->Block_List[j].Variable[0] - << ", equation=" << ModelBlock->Block_List[j].Equation[0] << "\n"; + output << "; % variable=" << symbol_table.getNameByID(eEndogenous, ModelBlock->Block_List[j].Variable[0]) + << "(" << variable_table.getLag(variable_table.getSymbolID(ModelBlock->Block_List[j].Variable[0])) + << ") " << ModelBlock->Block_List[j].Variable[0] + << ", equation=" << ModelBlock->Block_List[j].Equation[0] << endl; break; case SOLVE_BACKWARD_COMPLETE: case SOLVE_FOREWARD_COMPLETE: @@ -787,9 +787,9 @@ ModelTree::writeModelEquationsOrdered_M(ostream &output, Model_Block *ModelBlock Uf[ModelBlock->Block_List[j].Equation[eqr]] << "-u(" << u << ")*y(Per_y_+" << var << ")"; output << " u(" << u+1 << ") = "; writeDerivative(output, eq, var, 0, oMatlabDynamicModelSparse, temporary_terms); - output << "; " << interfaces::comment() << "variable=" << symbol_table.getNameByID(eEndogenous, var) - <<"(" << variable_table.getLag(variable_table.getSymbolID(var))<< ") " << var - << ", equation=" << eq << "\n"; + output << "; % variable=" << symbol_table.getNameByID(eEndogenous, var) + << "(" << variable_table.getLag(variable_table.getSymbolID(var)) << ") " << var + << ", equation=" << eq << endl; } for(i = 0;i < ModelBlock->Block_List[j].Size;i++) output << Uf[ModelBlock->Block_List[j].Equation[i]].str() << ";\n"; @@ -820,9 +820,9 @@ ModelTree::writeModelEquationsOrdered_M(ostream &output, Model_Block *ModelBlock else if(k<0) output << " g1(" << eqr+1 << "+Per_J_, " << varr+1 << "+y_size*(it_" << k << "-1)) = "; writeDerivative(output, eq, var, k, oMatlabDynamicModelSparse, temporary_terms); - output << "; " << interfaces::comment() << "variable=" << symbol_table.getNameByID(eEndogenous, var) - <<"(" << k << ") " << var - << ", equation=" << eq << "\n"; + output << "; % variable=" << symbol_table.getNameByID(eEndogenous, var) + << "(" << k << ") " << var + << ", equation=" << eq << endl; #ifdef CONDITION output << " if (fabs(condition[" << eqr << "])Block_List[j].Type) << - " //\n" << - " " << interfaces::comment() << "// Simulation type "; - output << BlockTriangular::BlockSim(ModelBlock->Block_List[j].Simulation_Type) << " //\n" << - " " << interfaces::comment() << "////////////////////////////////////////////////////////////////////////\n"; + output << " % ////////////////////////////////////////////////////////////////////////" << endl + << " % //" << string(" Block ").substr(int(log10(j + 1))) << j + 1 << " " + << BlockTriangular::BlockType0(ModelBlock->Block_List[j].Type) << " //" << endl + << " % // Simulation type "; + output << BlockTriangular::BlockSim(ModelBlock->Block_List[j].Simulation_Type) << " //" << endl + << " % ////////////////////////////////////////////////////////////////////////" << endl; //The Temporary terms output << global_output.str(); output << " if M_.param_nbr > 0\n"; @@ -977,7 +977,7 @@ ModelTree::writeModelStaticEquationsOrdered_M(ostream &output, Model_Block *Mode output << " g1=spalloc(" << ModelBlock->Block_List[j].Size << ", " << ModelBlock->Block_List[j].Size << ", " << nze << ");\n"; sps=""; if (ModelBlock->Block_List[j].Temporary_terms->size()) - output << " " << sps << interfaces::comment() << "//Temporary variables\n"; + output << " " << sps << "% //Temporary variables" << endl; i=0; for(temporary_terms_type::const_iterator it = ModelBlock->Block_List[j].Temporary_terms->begin(); it != ModelBlock->Block_List[j].Temporary_terms->end(); it++) @@ -996,8 +996,8 @@ ModelTree::writeModelStaticEquationsOrdered_M(ostream &output, Model_Block *Mode { ModelBlock->Block_List[j].Variable_Sorted[i] = variable_table.getID(eEndogenous, ModelBlock->Block_List[j].Variable[i], 0); string sModel = symbol_table.getNameByID(eEndogenous, ModelBlock->Block_List[j].Variable[i]) ; - output << sps << " " << interfaces::comment() << "equation " << ModelBlock->Block_List[j].Equation[i] << " variable : " << - sModel << " (" << ModelBlock->Block_List[j].Variable[i] << ")\n"; + output << sps << " % equation " << ModelBlock->Block_List[j].Equation[i] << " variable : " + << sModel << " (" << ModelBlock->Block_List[j].Variable[i] << ")" << endl; if (!lhs_rhs_done) { eq_node = equations[ModelBlock->Block_List[j].Equation[i]]; @@ -1047,16 +1047,17 @@ ModelTree::writeModelStaticEquationsOrdered_M(ostream &output, Model_Block *Mode && ModelBlock->Block_List[j].Simulation_Type!=EVALUATE_BACKWARD_R && ModelBlock->Block_List[j].Simulation_Type!=EVALUATE_FOREWARD_R) { - output << " " << sps << interfaces::comment() << "Jacobian \n"; + output << " " << sps << "% Jacobian " << endl; switch(ModelBlock->Block_List[j].Simulation_Type) { case SOLVE_BACKWARD_SIMPLE: case SOLVE_FOREWARD_SIMPLE: output << " g1(1)="; writeDerivative(output, ModelBlock->Block_List[j].Equation[0], ModelBlock->Block_List[j].Variable[0], 0, oMatlabStaticModelSparse, temporary_terms); - output << "; " << interfaces::comment() << "variable=" << symbol_table.getNameByID(eEndogenous, ModelBlock->Block_List[j].Variable[0]) - <<"(" << variable_table.getLag(variable_table.getSymbolID(ModelBlock->Block_List[j].Variable[0])) << ") " << ModelBlock->Block_List[j].Variable[0] - << ", equation=" << ModelBlock->Block_List[j].Equation[0] << "\n"; + output << "; % variable=" << symbol_table.getNameByID(eEndogenous, ModelBlock->Block_List[j].Variable[0]) + << "(" << variable_table.getLag(variable_table.getSymbolID(ModelBlock->Block_List[j].Variable[0])) + << ") " << ModelBlock->Block_List[j].Variable[0] + << ", equation=" << ModelBlock->Block_List[j].Equation[0] << endl; break; case SOLVE_BACKWARD_COMPLETE: case SOLVE_FOREWARD_COMPLETE: @@ -1070,9 +1071,9 @@ ModelTree::writeModelStaticEquationsOrdered_M(ostream &output, Model_Block *Mode Uf[ModelBlock->Block_List[j].Equation[eqr]] << "-u(" << u << ")*y(Per_y_+" << var << ")"; output << " u(" << u+1 << ") = "; writeDerivative(output, eq, var, 0, oMatlabStaticModelSparse, temporary_terms); - output << "; " << interfaces::comment() << "variable=" << symbol_table.getNameByID(eEndogenous, var) - <<"(" << variable_table.getLag(variable_table.getSymbolID(var))<< ") " << var - << ", equation=" << eq << "\n"; + output << "; % variable=" << symbol_table.getNameByID(eEndogenous, var) + << "(" << variable_table.getLag(variable_table.getSymbolID(var)) << ") " << var + << ", equation=" << eq << endl; } for(i = 0;i < ModelBlock->Block_List[j].Size;i++) output << Uf[ModelBlock->Block_List[j].Equation[i]].str() << ";\n"; @@ -1099,9 +1100,9 @@ ModelTree::writeModelStaticEquationsOrdered_M(ostream &output, Model_Block *Mode } output << " g1(" << eqr+1 << ", " << varr+1 << ") = g1(" << eqr+1 << ", " << varr+1 << ") + "; writeDerivative(output, eq, var, k, oMatlabStaticModelSparse, temporary_terms); - output << "; " << interfaces::comment() << "variable=" << symbol_table.getNameByID(eEndogenous, var) - <<"(" << k << ") " << var - << ", equation=" << eq << "\n"; + output << "; % variable=" << symbol_table.getNameByID(eEndogenous, var) + << "(" << k << ") " << var + << ", equation=" << eq << endl; #ifdef CONDITION output << " if (fabs(condition[" << eqr << "])= 2,\n"; - StaticOutput << " g1 = " << - "zeros(" << equations.size() << ", " << - symbol_table.endo_nbr << ");\n" ; - StaticOutput << "\n\t"+interfaces::comment()+"\n\t"+interfaces::comment(); - StaticOutput << "Jacobian matrix\n\t"; - StaticOutput << interfaces::comment() + "\n\n"; - StaticOutput << jacobian_output.str(); - StaticOutput << " if ~isreal(g1)\n"; - StaticOutput << " g1 = real(g1)+2*imag(g1);\n"; - StaticOutput << " end\n"; - StaticOutput << "end\n"; + StaticOutput << "residual = zeros( " << equations.size() << ", 1);" << endl << endl + << "%" << endl + << "% Model equations" << endl + << "%" << endl + << endl + << model_output.str() + << "if ~isreal(residual)" << endl + << " residual = real(residual)+imag(residual).^2;" << endl + << "end" << endl + << "if nargout >= 2," << endl + << " g1 = zeros(" << equations.size() << ", " << symbol_table.endo_nbr << ");" << endl + << endl + << "%" << endl + << "% Jacobian matrix" << endl + << "%" << endl + << endl + << jacobian_output.str() + << " if ~isreal(g1)" << endl + << " g1 = real(g1)+2*imag(g1);" << endl + << " end" << endl + << "end" << endl; if (computeStaticHessian) { StaticOutput << "if nargout >= 3,\n"; // Writing initialization instruction for matrix g2 int ncols = symbol_table.endo_nbr * symbol_table.endo_nbr; - StaticOutput << " g2 = " << - "sparse([],[],[]," << equations.size() << ", " << ncols << ", " << - 5*ncols << ");\n"; - StaticOutput << "\n\t"+interfaces::comment()+"\n\t"+interfaces::comment(); - StaticOutput << "Hessian matrix\n\t"; - StaticOutput << interfaces::comment() + "\n\n"; - StaticOutput << hessian_output.str() << lsymetric.str(); - StaticOutput << "end;\n"; + StaticOutput << " g2 = sparse([],[],[], " << equations.size() << ", " << ncols << ", " << 5*ncols << ");" << endl + << endl + << "%" << endl + << "% Hessian matrix" << endl + << "%" << endl + << endl + << hessian_output.str() + << lsymetric.str() + << "end;" << endl; } } else @@ -3401,47 +3400,53 @@ ModelTree::writeDynamicModel(ostream &DynamicOutput) const if (mode == eStandardMode) { - DynamicOutput << interfaces::comment() << endl << interfaces::comment(); - DynamicOutput << "Model equations" << endl; - DynamicOutput << interfaces::comment() + "\n\n"; - DynamicOutput << "residual = zeros(" << nrows << ", 1);\n"; - - DynamicOutput << model_output.str(); + DynamicOutput << "%" << endl + << "% Model equations" << endl + << "%" << endl + << endl + << "residual = zeros(" << nrows << ", 1);" << endl + << model_output.str(); if (computeJacobian || computeJacobianExo) { - DynamicOutput << "if nargout >= 2,\n"; // Writing initialization instruction for matrix g1 - DynamicOutput << " g1 = " << - "zeros(" << nrows << ", " << nvars << ");\n" ; - DynamicOutput << "\n\t"+interfaces::comment()+"\n\t"+interfaces::comment(); - DynamicOutput << "Jacobian matrix\n\t"; - DynamicOutput << interfaces::comment()+"\n\n"; - DynamicOutput << jacobian_output.str(); - DynamicOutput << "end\n"; + DynamicOutput << "if nargout >= 2," << endl + << " g1 = zeros(" << nrows << ", " << nvars << ");" << endl + << endl + << "%" << endl + << "% Jacobian matrix" << endl + << "%" << endl + << endl + << jacobian_output.str() + << "end" << endl; } if (computeHessian) { - DynamicOutput << "if nargout >= 3,\n"; // Writing initialization instruction for matrix g2 int ncols = nvars_sq; - DynamicOutput << " g2 = sparse([],[],[]," << nrows << ", " << ncols << ", " - << 5*ncols << ");\n"; - DynamicOutput << "\n\t"+interfaces::comment() << "\n\t" << interfaces::comment(); - DynamicOutput << "Hessian matrix\n\t" << interfaces::comment() << "\n\n"; - DynamicOutput << hessian_output.str() << lsymetric.str(); - DynamicOutput << "end;\n"; + DynamicOutput << "if nargout >= 3," << endl + << " g2 = sparse([],[],[], " << nrows << ", " << ncols << ", " << 5*ncols << ");" << endl + << endl + << "%" << endl + << "% Hessian matrix" << endl + << "%" << endl + << endl + << hessian_output.str() + << lsymetric.str() + << "end;" << endl; } if (computeThirdDerivatives) { - DynamicOutput << "if nargout >= 4,\n"; int ncols = nvars_sq * nvars; - DynamicOutput << " g3 = sparse([],[],[]," << nrows << ", " << ncols << ", " - << 5*ncols << ");\n"; - DynamicOutput << "\n\t" + interfaces::comment() + "\n\t" + interfaces::comment(); - DynamicOutput << "Third order derivatives\n\t" << interfaces::comment() << "\n\n"; - DynamicOutput << third_derivatives_output.str(); - DynamicOutput << "end;\n"; + DynamicOutput << "if nargout >= 4," << endl + << " g3 = sparse([],[],[], " << nrows << ", " << ncols << ", " << 5*ncols << ");" << endl + << endl + << "%" << endl + << "% Third order derivatives" << endl + << "%" << endl + << endl + << third_derivatives_output.str() + << "end;" << endl; } } else diff --git a/NumericalInitialization.cc b/NumericalInitialization.cc index d0d38ff6..020e4cbe 100644 --- a/NumericalInitialization.cc +++ b/NumericalInitialization.cc @@ -18,7 +18,6 @@ */ #include "NumericalInitialization.hh" -#include "Interface.hh" InitParamStatement::InitParamStatement(const string ¶m_name_arg, const NodeID param_value_arg, @@ -80,10 +79,12 @@ InitValStatement::InitValStatement(const init_values_type &init_values_arg, void InitValStatement::writeOutput(ostream &output, const string &basename) const { - output << interfaces::comment() << "\n" << interfaces::comment() << "INITVAL instructions \n" - << interfaces::comment() << "\n"; + output << "%" << endl + << "% INITVAL instructions" << endl + << "%" << endl; // Writing initval block to set initial values for variables - output << "options_.initval_file = 0;\nendval_=0;\n"; + output << "options_.initval_file = 0;" << endl + << "endval_=0;" << endl; if (symbol_table.recur_nbr > 0) output << "recurs_ = zeros(" << symbol_table.recur_nbr << ", 1);\n"; @@ -110,10 +111,14 @@ EndValStatement::EndValStatement(const init_values_type &init_values_arg, void EndValStatement::writeOutput(ostream &output, const string &basename) const { - output << interfaces::comment() << "\n" << interfaces::comment() << "ENDVAL instructions\n" - << interfaces::comment() << "\n"; + output << "%" << endl + << "% ENDVAL instructions" << endl + << "%" << endl; // Writing endval block to set terminal values for variables - output << "ys0_= oo_.steady_state;\nex0_ = oo_.exo_steady_state;\nrecurs0_ = recurs_;\nendval_ = 1;\n"; + output << "ys0_= oo_.steady_state;" << endl + << "ex0_ = oo_.exo_steady_state;" << endl + << "recurs0_ = recurs_;" << endl + << "endval_ = 1;" << endl; writeInitValues(output); } @@ -128,8 +133,9 @@ HistValStatement::HistValStatement(const hist_values_type &hist_values_arg, void HistValStatement::writeOutput(ostream &output, const string &basename) const { - output << interfaces::comment() << "\n" << interfaces::comment() << "HISTVAL instructions\n" - << interfaces::comment() << "\n"; + output << "%" << endl + << "% HISTVAL instructions" << endl + << "%" << endl; for(hist_values_type::const_iterator it = hist_values.begin(); it != hist_values.end(); it++) @@ -161,12 +167,11 @@ InitvalFileStatement::InitvalFileStatement(const string &filename_arg) : void InitvalFileStatement::writeOutput(ostream &output, const string &basename) const { - output << interfaces::comment() << endl - << interfaces::comment() << "INITVAL_FILE statement" << endl - << interfaces::comment() << endl - << "options_.initval_file = 1;" << endl; - - output << "initvalf('" << filename << "');" << endl; + output << "%" << endl + << "% INITVAL_FILE statement" << endl + << "%" << endl + << "options_.initval_file = 1;" << endl + << "initvalf('" << filename << "');" << endl; } HomotopyStatement::HomotopyStatement(const homotopy_values_type &homotopy_values_arg, @@ -179,9 +184,9 @@ HomotopyStatement::HomotopyStatement(const homotopy_values_type &homotopy_values void HomotopyStatement::writeOutput(ostream &output, const string &basename) const { - output << interfaces::comment() << endl - << interfaces::comment() << "HOMOTOPY_SETUP instructions" << endl - << interfaces::comment() << endl + output << "%" << endl + << "% HOMOTOPY_SETUP instructions" << endl + << "%" << endl << "options_.homotopy_values = [];" << endl; for(homotopy_values_type::const_iterator it = homotopy_values.begin(); diff --git a/Shocks.cc b/Shocks.cc index bb7c9952..eba24dee 100644 --- a/Shocks.cc +++ b/Shocks.cc @@ -22,7 +22,6 @@ using namespace std; #include #include "Shocks.hh" -#include "Interface.hh" AbstractShocksStatement::AbstractShocksStatement(bool mshocks_arg, const det_shocks_type &det_shocks_arg, @@ -149,12 +148,12 @@ ShocksStatement::ShocksStatement(const det_shocks_type &det_shocks_arg, void ShocksStatement::writeOutput(ostream &output, const string &basename) const { - output << interfaces::comment() << endl << interfaces::comment(); - output << "SHOCKS instructions \n"; - output << interfaces::comment() << "\n"; + output << "%" << endl + << "% SHOCKS instructions" << endl + << "%" << endl; // Write instruction that initializes a shock - output << "make_ex_;\n"; + output << "make_ex_;" << endl; writeDetShocks(output); writeVarAndStdShocks(output); @@ -175,12 +174,12 @@ MShocksStatement::MShocksStatement(const det_shocks_type &det_shocks_arg, void MShocksStatement::writeOutput(ostream &output, const string &basename) const { - output << interfaces::comment() << endl << interfaces::comment(); - output << "SHOCKS instructions \n"; - output << interfaces::comment() << "\n"; + output << "%" << endl + << "% SHOCKS instructions" << endl + << "%" << endl; // Write instruction that initializes a shock - output << "make_ex_;\n"; + output << "make_ex_;" << endl; writeDetShocks(output); writeVarAndStdShocks(output); diff --git a/SymbolList.cc b/SymbolList.cc index 95389144..24f3df58 100644 --- a/SymbolList.cc +++ b/SymbolList.cc @@ -18,7 +18,6 @@ */ #include "SymbolList.hh" -#include "Interface.hh" void SymbolList::addSymbol(const string &symbol) @@ -32,10 +31,7 @@ SymbolList::writeOutput(const string &varname, ostream &output) const output << varname << "=[];" << endl; for (vector::const_iterator it = symbols.begin(); it != symbols.end(); it++) - { - output << varname << " = " - << interfaces::strvcat(varname, "'" + *it + "'") << ";" << endl; - } + output << varname << " = strvcat(" << varname << ", '" << *it << "');" << endl; } void diff --git a/SymbolTable.cc b/SymbolTable.cc index e91590d0..5e2b84a1 100644 --- a/SymbolTable.cc +++ b/SymbolTable.cc @@ -21,7 +21,6 @@ #include #include "SymbolTable.hh" -#include "Interface.hh" SymbolTable::SymbolTable() : endo_nbr(0), exo_nbr(0), exo_det_nbr(0), recur_nbr(0), parameter_nbr(0), model_local_variable_nbr(0), @@ -83,8 +82,8 @@ SymbolTable::writeOutput(ostream &output) const output << "M_.exo_names_tex = '" << getTeXNameByID(eExogenous, 0) << "';" << endl; for (int id = 1; id < exo_nbr; id++) { - output << "M_.exo_names = " << interfaces::strvcat("M_.exo_names","'"+getNameByID(eExogenous, id)+"'") << ";" << endl; - output << "M_.exo_names_tex = " << interfaces::strvcat("M_.exo_names_tex","'"+getTeXNameByID(eExogenous, id)+"'") << ";" << endl; + output << "M_.exo_names = strvcat(M_.exo_names, '" << getNameByID(eExogenous, id) << "');" << endl + << "M_.exo_names_tex = strvcat(M_.exo_names_tex, '" << getTeXNameByID(eExogenous, id) << "');" << endl; } } if (exo_det_nbr > 0) @@ -93,8 +92,8 @@ SymbolTable::writeOutput(ostream &output) const output << "lgxdet_tex_ = '" << getTeXNameByID(eExogenousDet, 0) << "';" << endl; for (int id = 1; id < exo_det_nbr; id++) { - output << "lgxdet_ = " << interfaces::strvcat("lgxdet_","'"+getNameByID(eExogenousDet, id)+"'") << ";" << endl; - output << "lgxdet_tex_ = " << interfaces::strvcat("lgxdet_tex_","'"+getTeXNameByID(eExogenousDet, id)+"'") << ";" << endl; + output << "lgxdet_ = srtvcat(lgxdet_, '" << getNameByID(eExogenousDet, id) << "');" << endl + << "lgxdet_tex_ = strvcat(lgxdet_tex_, '" << getTeXNameByID(eExogenousDet, id) << "');" << endl; } } if (endo_nbr > 0) @@ -103,8 +102,8 @@ SymbolTable::writeOutput(ostream &output) const output << "M_.endo_names_tex = '" << getTeXNameByID(eEndogenous, 0) << "';" << endl; for (int id = 1; id < endo_nbr; id++) { - output << "M_.endo_names = " << interfaces::strvcat("M_.endo_names","'"+getNameByID(eEndogenous, id)+"'") << ";" << endl; - output << "M_.endo_names_tex = " << interfaces::strvcat("M_.endo_names_tex","'"+getTeXNameByID(eEndogenous, id)+"'") << ";" << endl; + output << "M_.endo_names = strvcat(M_.endo_names, '" << getNameByID(eEndogenous, id) << "');" << endl + << "M_.endo_names_tex = strvcat(M_.endo_names_tex, '" << getTeXNameByID(eEndogenous, id) << "');" << endl; } } if (recur_nbr > 0) @@ -113,8 +112,8 @@ SymbolTable::writeOutput(ostream &output) const output << "M_.recur_names_tex = '" << getTeXNameByID(eRecursiveVariable, 0) << "';" << endl; for (int id = 1; id < recur_nbr; id++) { - output << "M_.recur_names = " << interfaces::strvcat("M_.recur_names","'"+getNameByID(eRecursiveVariable, id)+"'") << ";" << endl; - output << "M_.recur_names_tex = " << interfaces::strvcat("M_.recur_names_tex","'"+getTeXNameByID(eRecursiveVariable, id)+"'") << ";" << endl; + output << "M_.recur_names = strvcat(M_.recur_names, '" << getNameByID(eRecursiveVariable, id) << "');" << endl + << "M_.recur_names_tex = strvcat(M_.recur_names_tex, '" << getTeXNameByID(eRecursiveVariable, id) << "');" << endl; } } if (parameter_nbr > 0) @@ -123,8 +122,8 @@ SymbolTable::writeOutput(ostream &output) const output << "M_.param_names_tex = '" << getTeXNameByID(eParameter, 0) << "';" << endl; for (int id = 1; id < parameter_nbr; id++) { - output << "M_.param_names = " << interfaces::strvcat("M_.param_names","'"+getNameByID(eParameter, id)+"'") << ";" << endl; - output << "M_.param_names_tex = " << interfaces::strvcat("M_.param_names_tex","'"+getTeXNameByID(eParameter, id)+"'") << ";" << endl; + output << "M_.param_names = strvcat(M_.param_names, '" << getNameByID(eParameter, id) << "');" << endl + << "M_.param_names_tex = strvcat(M_.param_names_tex, '" << getTeXNameByID(eParameter, id) << "');" << endl; } } diff --git a/include/Interface.hh b/include/Interface.hh deleted file mode 100644 index 25632b70..00000000 --- a/include/Interface.hh +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2006-2008 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 . - */ - -#ifndef _INTERFACE_HH -#define _INTERFACE_HH - -using namespace std; - -namespace interfaces -{ - string comment(); - string delete_file(string s); - string file_exist(string s); - string compile(string s); - string function_close(); - string function_file_extension(); - string strvcat(string s1, string s2); - string load_model_function_files(string filename); -} -#endif