diff --git a/dynare++/kord/dynamic_model.cc b/dynare++/kord/dynamic_model.cc index 118e7f1251a2ec3c4114b0bbf8eba9ac6a4a564e..80c4914f6aa3d2d6b5ba940535e9bd7048be1279 100644 --- a/dynare++/kord/dynamic_model.cc +++ b/dynare++/kord/dynamic_model.cc @@ -22,7 +22,7 @@ NameList::writeMat(mat_t *fd, const std::string &vname) const if (maxlen == 0) return; - std::vector<char> m(getNum()*maxlen); + auto m = std::make_unique<char[]>(getNum()*maxlen); for (int i = 0; i < getNum(); i++) for (int j = 0; j < maxlen; j++) @@ -35,7 +35,7 @@ NameList::writeMat(mat_t *fd, const std::string &vname) const dims[0] = getNum(); dims[1] = maxlen; - matvar_t *v = Mat_VarCreate(vname.c_str(), MAT_C_CHAR, MAT_T_UINT8, 2, dims, m.data(), 0); + matvar_t *v = Mat_VarCreate(vname.c_str(), MAT_C_CHAR, MAT_T_UINT8, 2, dims, m.get(), 0); Mat_VarWrite(fd, v, MAT_COMPRESSION_NONE); diff --git a/dynare++/kord/first_order.cc b/dynare++/kord/first_order.cc index d5672342937c85c42257d58965daf029baf01f71..eb5243c6f5b8d8ad2d21a3a35d1357dd960d7e35 100644 --- a/dynare++/kord/first_order.cc +++ b/dynare++/kord/first_order.cc @@ -163,7 +163,7 @@ FirstOrder::solve(const TwoDMatrix &fd) lapack_int ldvsl = vsl.getLD(), ldvsr = vsr.getLD(); lapack_int lwork = 100*n+16; Vector work(lwork); - std::vector<lapack_int> bwork(n); + auto bwork = std::make_unique<lapack_int[]>(n); lapack_int info; lapack_int sdim2 = sdim; { @@ -172,7 +172,7 @@ FirstOrder::solve(const TwoDMatrix &fd) dgges("N", "V", "S", order_eigs, &n, matE.getData().base(), &lda, matD.getData().base(), &ldb, &sdim2, alphar.base(), alphai.base(), beta.base(), vsl.getData().base(), &ldvsl, vsr.getData().base(), &ldvsr, - work.base(), &lwork, bwork.data(), &info); + work.base(), &lwork, bwork.get(), &info); } if (info) throw KordException(__FILE__, __LINE__, diff --git a/dynare++/sylv/cc/GeneralMatrix.cc b/dynare++/sylv/cc/GeneralMatrix.cc index 61317d9331f12ddf32bb53e61097fca8f5cfe130..4b8c098bc527f2c21c34e56fbf470e70258e6fcf 100644 --- a/dynare++/sylv/cc/GeneralMatrix.cc +++ b/dynare++/sylv/cc/GeneralMatrix.cc @@ -13,7 +13,6 @@ #include <cstdlib> #include <cmath> #include <limits> -#include <vector> GeneralMatrix::GeneralMatrix(const GeneralMatrix &m) : data(m.rows*m.cols), rows(m.rows), cols(m.cols), ld(m.rows) @@ -431,11 +430,11 @@ ConstGeneralMatrix::multInvLeft(const std::string &trans, int mrows, int mcols, if (rows > 0) { GeneralMatrix inv(*this); - std::vector<lapack_int> ipiv(rows); + auto ipiv = std::make_unique<lapack_int[]>(rows); lapack_int info; lapack_int rows2 = rows, mcols2 = mcols, mld2 = mld, lda = inv.ld; - dgetrf(&rows2, &rows2, inv.getData().base(), &lda, ipiv.data(), &info); - dgetrs(trans.c_str(), &rows2, &mcols2, inv.base(), &lda, ipiv.data(), d, + dgetrf(&rows2, &rows2, inv.getData().base(), &lda, ipiv.get(), &info); + dgetrs(trans.c_str(), &rows2, &mcols2, inv.base(), &lda, ipiv.get(), d, &mld2, &info); } } @@ -538,15 +537,15 @@ SVDDecomp::construct(const GeneralMatrix &A) lapack_int lwork = -1; lapack_int info; - std::vector<lapack_int> iwork(8*minmn); + auto iwork = std::make_unique<lapack_int[]>(8*minmn); // query for optimal lwork dgesdd("A", &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, &tmpwork, - &lwork, iwork.data(), &info); + &lwork, iwork.get(), &info); lwork = static_cast<lapack_int>(tmpwork); Vector work(lwork); // do the decomposition dgesdd("A", &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work.base(), - &lwork, iwork.data(), &info); + &lwork, iwork.get(), &info); if (info < 0) throw SYLV_MES_EXCEPTION("Internal error in SVDDecomp constructor"); if (info == 0) diff --git a/dynare++/sylv/cc/SchurDecomp.cc b/dynare++/sylv/cc/SchurDecomp.cc index 6d9779e024004e5e40fdb31010f78267dada621b..acafa9a357ec2d32360b5bd49709c2d4bfbabfcc 100644 --- a/dynare++/sylv/cc/SchurDecomp.cc +++ b/dynare++/sylv/cc/SchurDecomp.cc @@ -4,7 +4,7 @@ #include "SchurDecomp.hh" -#include <vector> +#include <memory> #include <dynlapack.h> @@ -15,13 +15,14 @@ SchurDecomp::SchurDecomp(const SqSylvMatrix &m) SqSylvMatrix auxt(m); lapack_int lda = auxt.getLD(), ldvs = q.getLD(); lapack_int sdim; - std::vector<double> wr(rows), wi(rows); + auto wr = std::make_unique<double []>(rows); + auto wi = std::make_unique<double []>(rows); lapack_int lwork = 6*rows; - std::vector<double> work(lwork); + auto work = std::make_unique<double []>(lwork); lapack_int info; dgees("V", "N", nullptr, &rows, auxt.base(), &lda, &sdim, - wr.data(), wi.data(), q.base(), &ldvs, - work.data(), &lwork, nullptr, &info); + wr.get(), wi.get(), q.base(), &ldvs, + work.get(), &lwork, nullptr, &info); t_storage = std::make_unique<QuasiTriangular>(auxt.getData(), rows); t = t_storage.get(); } diff --git a/dynare++/sylv/cc/SchurDecompEig.cc b/dynare++/sylv/cc/SchurDecompEig.cc index 68eeca87494b53db083dd416a5a3a71d8b84370a..c491feaef31c72bbd58e69484c34374c1d829e14 100644 --- a/dynare++/sylv/cc/SchurDecompEig.cc +++ b/dynare++/sylv/cc/SchurDecompEig.cc @@ -3,7 +3,7 @@ #include <dynlapack.h> -#include <vector> +#include <memory> /* Bubble diagonal 1×1 or 2×2 block from position ‘from’ to position ‘to’. If an eigenvalue cannot be swapped with its neighbour, the @@ -55,9 +55,9 @@ SchurDecompEig::tryToSwap(diag_iter &it, diag_iter &itadd) lapack_int n = getDim(), ldt = getT().getLD(), ldq = getQ().getLD(); lapack_int ifst = it->getIndex() + 1; lapack_int ilst = itadd->getIndex() + 1; - std::vector<double> work(n); + auto work = std::make_unique<double[]>(n); lapack_int info; - dtrexc("V", &n, getT().base(), &ldt, getQ().base(), &ldq, &ifst, &ilst, work.data(), + dtrexc("V", &n, getT().base(), &ldt, getQ().base(), &ldq, &ifst, &ilst, work.get(), &info); if (info < 0) throw SYLV_MES_EXCEPTION("Wrong argument to dtrexc."); diff --git a/dynare++/sylv/cc/SylvMatrix.cc b/dynare++/sylv/cc/SylvMatrix.cc index b9326e5ac342e807172efa7c878d224fc63dc75a..a66ede20cffc17320da7a70d6098958c129d4afb 100644 --- a/dynare++/sylv/cc/SylvMatrix.cc +++ b/dynare++/sylv/cc/SylvMatrix.cc @@ -10,7 +10,7 @@ #include <dynlapack.h> #include <cmath> -#include <vector> +#include <memory> void SylvMatrix::multLeftI(const SqSylvMatrix &m) @@ -220,30 +220,30 @@ SqSylvMatrix::multInvLeft2(GeneralMatrix &a, GeneralMatrix &b, // PLU factorization Vector inv(data); - std::vector<lapack_int> ipiv(rows); + auto ipiv = std::make_unique<lapack_int[]>(rows); lapack_int info; lapack_int rows2 = rows, lda = ld; - dgetrf(&rows2, &rows2, inv.base(), &lda, ipiv.data(), &info); + dgetrf(&rows2, &rows2, inv.base(), &lda, ipiv.get(), &info); // solve a lapack_int acols = a.ncols(); double *abase = a.base(); - dgetrs("N", &rows2, &acols, inv.base(), &lda, ipiv.data(), + dgetrs("N", &rows2, &acols, inv.base(), &lda, ipiv.get(), abase, &rows2, &info); // solve b lapack_int bcols = b.ncols(); double *bbase = b.base(); - dgetrs("N", &rows2, &bcols, inv.base(), &lda, ipiv.data(), + dgetrs("N", &rows2, &bcols, inv.base(), &lda, ipiv.get(), bbase, &rows2, &info); // condition numbers - std::vector<double> work(4*rows); - std::vector<lapack_int> iwork(rows); + auto work = std::make_unique<double[]>(4*rows); + auto iwork = std::make_unique<lapack_int[]>(rows); double norm1 = getNorm1(); dgecon("1", &rows2, inv.base(), &lda, &norm1, &rcond1, - work.data(), iwork.data(), &info); + work.get(), iwork.get(), &info); double norminf = getNormInf(); dgecon("I", &rows2, inv.base(), &lda, &norminf, &rcondinf, - work.data(), iwork.data(), &info); + work.get(), iwork.get(), &info); } void diff --git a/dynare++/sylv/cc/SymSchurDecomp.cc b/dynare++/sylv/cc/SymSchurDecomp.cc index 238f53d584feaacd2172d95f2b631d1d07f0d1ca..e6df5437527a9a09440c50259a605430be1d6e2c 100644 --- a/dynare++/sylv/cc/SymSchurDecomp.cc +++ b/dynare++/sylv/cc/SymSchurDecomp.cc @@ -9,7 +9,7 @@ #include <algorithm> #include <cmath> -#include <vector> +#include <memory> SymSchurDecomp::SymSchurDecomp(const ConstGeneralMatrix &mata) : lambda(mata.nrows()), q(mata.nrows()) @@ -34,7 +34,7 @@ SymSchurDecomp::SymSchurDecomp(const ConstGeneralMatrix &mata) double *w = lambda.base(); double *z = q.base(); lapack_int ldz = q.getLD(); - std::vector<lapack_int> isuppz(2*std::max(1, static_cast<int>(m))); + auto isuppz = std::make_unique<lapack_int[]>(2*std::max(1, static_cast<int>(m))); double tmpwork; lapack_int lwork = -1; lapack_int tmpiwork; @@ -43,16 +43,16 @@ SymSchurDecomp::SymSchurDecomp(const ConstGeneralMatrix &mata) // query for lwork and liwork dsyevr("V", "A", "U", &n, a, &lda, vl, vu, il, iu, &abstol, - &m, w, z, &ldz, isuppz.data(), &tmpwork, &lwork, &tmpiwork, &liwork, &info); + &m, w, z, &ldz, isuppz.get(), &tmpwork, &lwork, &tmpiwork, &liwork, &info); lwork = static_cast<lapack_int>(tmpwork); liwork = tmpiwork; // allocate work arrays - std::vector<double> work(lwork); - std::vector<lapack_int> iwork(liwork); + auto work = std::make_unique<double[]>(lwork); + auto iwork = std::make_unique<lapack_int[]>(liwork); // do the calculation dsyevr("V", "A", "U", &n, a, &lda, vl, vu, il, iu, &abstol, - &m, w, z, &ldz, isuppz.data(), work.data(), &lwork, iwork.data(), &liwork, &info); + &m, w, z, &ldz, isuppz.get(), work.get(), &lwork, iwork.get(), &liwork, &info); if (info < 0) throw SYLV_MES_EXCEPTION("Internal error in SymSchurDecomp constructor"); diff --git a/dynare++/tl/cc/twod_matrix.cc b/dynare++/tl/cc/twod_matrix.cc index 00969cc2bee5a97c780995c104ef98c001a91e13..afac960de66b02ac901aae1deb4efe9974f53956 100644 --- a/dynare++/tl/cc/twod_matrix.cc +++ b/dynare++/tl/cc/twod_matrix.cc @@ -3,7 +3,7 @@ #include "twod_matrix.hh" #include "tl_exception.hh" -#include <vector> +#include <memory> #include <fstream> #include <iomanip> #include <limits> @@ -39,13 +39,13 @@ ConstTwoDMatrix::writeMat(mat_t *fd, const std::string &vname) const size_t dims[2]; dims[0] = nrows(); dims[1] = ncols(); - std::vector<double> data(nrows()*ncols()); + auto data = std::make_unique<double[]>(nrows()*ncols()); for (int j = 0; j < ncols(); j++) for (int i = 0; i < nrows(); i++) data[j*nrows()+i] = get(i, j); - matvar_t *v = Mat_VarCreate(vname.c_str(), MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, data.data(), 0); + matvar_t *v = Mat_VarCreate(vname.c_str(), MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, data.get(), 0); Mat_VarWrite(fd, v, MAT_COMPRESSION_NONE);