diff --git a/mex/sources/k_order_perturbation/dynamic_dll.hh b/mex/sources/k_order_perturbation/dynamic_dll.hh index 147f92104..10b6615ae 100644 --- a/mex/sources/k_order_perturbation/dynamic_dll.hh +++ b/mex/sources/k_order_perturbation/dynamic_dll.hh @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2009 Dynare Team + * Copyright (C) 2008-2010 Dynare Team * * This file is part of Dynare. * @@ -17,18 +17,8 @@ * along with Dynare. If not, see . */ -// The following ifdef block is the standard way of creating macros which make exporting -// from a DLL simpler. All files within this DLL are compiled with the K_ORDER_PERTURBATION_EXPORTS -// symbol defined on the command line. this symbol should not be defined on any project -// that uses this DLL. This way any other project whose source files include this file see -// K_ORDER_PERTURBATION_API functions as being imported from a DLL, wheras this DLL sees symbols -// defined with this macro as being exported. - #if defined(_WIN32) || defined(__CYGWIN32__) # include -# ifdef _MSC_VER -# define K_ORDER_PERTURBATION_API __declspec(dllexport) -# endif #else # include // unix/linux DLL (.so) handling routines #endif diff --git a/mex/sources/k_order_perturbation/k_ord_dynare.cc b/mex/sources/k_order_perturbation/k_ord_dynare.cc index 2622a7de1..9735e5918 100644 --- a/mex/sources/k_order_perturbation/k_ord_dynare.cc +++ b/mex/sources/k_order_perturbation/k_ord_dynare.cc @@ -34,10 +34,10 @@ /**************************************************************************************/ KordpDynare::KordpDynare(const char **endo, int num_endo, - const char **exo, int nexog, int npar, //const char** par, + const char **exo, int nexog, int npar, Vector *ysteady, TwoDMatrix *vcov, Vector *inParams, int nstat, int npred, int nforw, int nboth, const int jcols, const Vector *nnzd, - const int nsteps, int norder, //const char* modName, + const int nsteps, int norder, Journal &jr, DynamicModelDLL &dynamicDLL, double sstol, const vector *var_order, const TwoDMatrix *llincidence, double criterium) throw (TLException) : nStat(nstat), nBoth(nboth), nPred(npred), nForw(nforw), nExog(nexog), nPar(npar), @@ -58,25 +58,7 @@ KordpDynare::KordpDynare(const char **endo, int num_endo, FSSparseTensor *t = new FSSparseTensor(iord, nY+nYs+nYss+nExog, nY); md.insert(t); } -} -KordpDynare::KordpDynare(const KordpDynare &dynare) : - nStat(dynare.nStat), nBoth(dynare.nBoth), nPred(dynare.nPred), - nForw(dynare.nForw), nExog(dynare.nExog), nPar(dynare.nPar), - nYs(dynare.nYs), nYss(dynare.nYss), nY(dynare.nY), nJcols(dynare.nJcols), - NNZD(dynare.NNZD), nSteps(dynare.nSteps), nOrder(dynare.nOrder), - journal(dynare.journal), dynamicDLL(dynare.dynamicDLL), - ySteady(NULL), params(NULL), vCov(NULL), md(dynare.md), - dnl(NULL), denl(NULL), dsnl(NULL), ss_tol(dynare.ss_tol), - varOrder(dynare.varOrder), ll_Incidence(dynare.ll_Incidence), - JacobianIndices(dynare.JacobianIndices), qz_criterium(dynare.qz_criterium) -{ - ySteady = new Vector(*(dynare.ySteady)); - params = new Vector(*(dynare.params)); - vCov = new TwoDMatrix(*(dynare.vCov)); - dnl = new DynareNameList(dynare); - denl = new DynareExogNameList(dynare); - dsnl = new DynareStateNameList(*this, *dnl, *denl); } KordpDynare::~KordpDynare() @@ -103,19 +85,6 @@ KordpDynare::~KordpDynare() delete NNZD; } -/** This clears the container of model derivatives and initializes it - * inserting empty sparse tensors up to the given order. */ -ModelDerivativeContainer::ModelDerivativeContainer(const KordpDynare &model, - TensorContainer &mod_ders, int order) : md(mod_ders) -{ - md.clear(); - for (int iord = 1; iord <= order; iord++) - { - FSSparseTensor *t = new FSSparseTensor(iord, model.ny()+model.nys()+model.nyss()+model.nexog(), model.ny()); - md.insert(t); - } -} - void KordpDynare::solveDeterministicSteady() { @@ -296,26 +265,6 @@ KordpDynare::populateDerivativesContainer(TwoDMatrix *g, int ord, const vector *varOrder) throw (TL return JacobianIndices; } -/************************************ - * Reorder first set of columns of variables in a (jacobian) matrix - * according to order given in varsOrder together with the extras - * assuming tdx ncols() - nExog is eaqual or less than length of varOrder and - * of any of its elements too. - ************************************/ - -void -KordpDynare::ReorderCols(TwoDMatrix *tdx, const vector *vOrder) throw (DynareException, TLException) -{ - - if (tdx->ncols() > vOrder->size()) - throw DynareException(__FILE__, __LINE__, "Size of order var is too small"); - - TwoDMatrix tmp(*tdx); // temporary 2D matrix - TwoDMatrix &tmpR = tmp; - tdx->zeros(); // empty original matrix - // reorder the columns - - for (int i = 0; i < tdx->ncols(); i++) - tdx->copyColumn(tmpR, (*vOrder)[i], i); -} - -void -KordpDynare::ReorderCols(TwoDMatrix *tdx, const int *vOrder) throw (TLException) -{ - - TwoDMatrix tmp(*tdx); // temporary 2D matrix - TwoDMatrix &tmpR = tmp; - tdx->zeros(); // empty original matrix - // reorder the columns - for (int i = 0; i < tdx->ncols(); i++) - tdx->copyColumn(tmpR, vOrder[i], i); -} - -/*********************************************************************** - * Recursive hierarchical block reordering of the higher order, input model - * derivatives inc. Hessian - * This is now obsolete but kept in in case it is needed - ***********************************************************************/ - -void -KordpDynare::ReorderBlocks(TwoDMatrix *tdx, const vector *vOrder) throw (DynareException, TLException) -{ - // determine order of the matrix - - double dbOrder = log((double) tdx->ncols())/log((double) nJcols); - int ibOrder = (int) dbOrder; - if ((double) ibOrder != dbOrder || ibOrder > nOrder) - { - ostringstream msg; - msg << "Wrong order " << dbOrder; - throw DynareException(__FILE__, __LINE__, msg.str()); - } - - TwoDMatrix tmp(*tdx); // temporary 2D matrix - TwoDMatrix &tmpR = tmp; - tdx->zeros(); // empty original matrix - - if (ibOrder > 1) - { - int nBlocks = tmp.ncols()/ nJcols; - int bSize = tmp.ncols()/nBlocks; - for (int j = 0; j < nBlocks; ++j) - { - TwoDMatrix subtdx(tmpR, bSize*((*vOrder)[j]), bSize); - ReorderBlocks(&subtdx, vOrder); - tdx->place(subtdx, 0, bSize*j); - } - } - else - { - if (tdx->ncols() > vOrder->size()) - throw DynareException(__FILE__, __LINE__, "Size of order var is too small"); - - // reorder the columns - for (int i = 0; i < tdx->ncols(); i++) - tdx->copyColumn(tmpR, (*vOrder)[i], i); - } -} - -void -KordpVectorFunction::eval(const ConstVector &in, Vector &out) throw (DynareException) -{ - check_for_eval(in, out); - Vector xx(d.nexog()); - xx.zeros(); - d.evaluateSystem(out, in, xx); -} - /**************************************************************************************/ /* DynareNameList class */ /**************************************************************************************/ diff --git a/mex/sources/k_order_perturbation/k_ord_dynare.hh b/mex/sources/k_order_perturbation/k_ord_dynare.hh index 7a5323cf7..1f1ee9139 100644 --- a/mex/sources/k_order_perturbation/k_ord_dynare.hh +++ b/mex/sources/k_order_perturbation/k_ord_dynare.hh @@ -1,6 +1,6 @@ /* * Copyright (C) 2005 Ondra Kamenik - * Copyright (C) 2008-2009 Dynare Team + * Copyright (C) 2008-2010 Dynare Team * * This file is part of Dynare. * @@ -110,7 +110,6 @@ class KordpDynare : public DynamicModel friend class DynareNameList; friend class DynareExogNameList; friend class DynareStateNameList; - friend class KordpDynareJacobian; friend class DynamicModelDLL; const int nStat; @@ -150,8 +149,6 @@ public: const vector *varOrder, const TwoDMatrix *ll_Incidence, double qz_criterium) throw (TLException); - /** Makes a deep copy of the object. */ - KordpDynare(const KordpDynare &dyn); virtual ~KordpDynare(); int nstat() const @@ -257,58 +254,11 @@ public: { return new KordpDynare(*this); } - void ReorderCols(TwoDMatrix *tdx, const int *varOrder) throw (TLException); - void ReorderCols(TwoDMatrix *tdx, const vector *varOrder) throw (DynareException, TLException); Vector *LLxSteady(const Vector &yS) throw (DynareException, TLException); // returns ySteady extended with leads and lags private: - void writeModelInfo(Journal &jr) const; vector *ReorderDynareJacobianIndices(const vector *varOrder) throw (TLException); - void ReorderBlocks(TwoDMatrix *tdx, const vector *vOrder) throw (DynareException, TLException); void populateDerivativesContainer(TwoDMatrix *g, int ord, const vector *vOrder); }; -/**************************** - * ModelDerivativeContainer manages derivatives container - ************************************/ - -class ModelDerivativeContainer -{ -protected: - TensorContainer &md; -public: - ModelDerivativeContainer(const KordpDynare &model, TensorContainer &mod_ders, - int order); - void load(int i, int iord, const int *vars, double res); -}; - -/**************************** - * K-Order Perturbation instance of VectorFunction: - ************************************/ - -class KordpVectorFunction : public ogu::VectorFunction -{ -protected: - KordpDynare &d; -public: - KordpVectorFunction(KordpDynare &dyn) : - d(dyn) - { - } - virtual ~KordpVectorFunction() - { - } - int - inDim() const - { - return d.ny(); - } - int - outDim() const - { - return d.ny(); - } - void eval(const ConstVector &in, Vector &out) throw (DynareException); -}; - #endif diff --git a/mex/sources/k_order_perturbation/k_order_perturbation.cc b/mex/sources/k_order_perturbation/k_order_perturbation.cc index 975deacc7..5047dc2a2 100644 --- a/mex/sources/k_order_perturbation/k_order_perturbation.cc +++ b/mex/sources/k_order_perturbation/k_order_perturbation.cc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2009 Dynare Team + * Copyright (C) 2008-2010 Dynare Team * * This file is part of Dynare. * @@ -46,38 +46,6 @@ #include #include -#ifdef _MSC_VER - -BOOL APIENTRY -DllMain(HANDLE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) -{ - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - return TRUE; -} - -// Some MS Windows preambles -// This is an example of an exported variable -K_ORDER_PERTURBATION_API int nK_order_perturbation = 0; - -// This is an example of an exported function. -K_ORDER_PERTURBATION_API int -fnK_order_perturbation(void) -{ - return 42; -} - -#endif // _MSC_VER - #if defined(MATLAB_MEX_FILE) || defined(OCTAVE_MEX_FILE) // exclude mexFunction for other applications const char ** @@ -235,7 +203,7 @@ extern "C" { const int widthExog = (int) mxGetN(mxFldp); const char **exoNamesMX = DynareMxArrayToString(mxFldp, nexo, widthExog); - if ((nEndo != nendo) || (nExog != nexo)) //(nPar != npar) + if ((nEndo != nendo) || (nExog != nexo)) mexErrMsgTxt("Incorrect number of input parameters."); /* Fetch time index */ @@ -290,14 +258,8 @@ extern "C" { app.getFoldDecisionRule().writeMMap(mm, string()); // get latest ysteady - double *dYsteady = (dynare.getSteady().base()); ySteady = (Vector *)(&dynare.getSteady()); - // developement of the output. - double *dgy, *dgu, *ysteady; - int nb_row_x; - - ysteady = NULL; if (kOrder == 1) { /* Set the output pointer to the output matrix ysteady. */