diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 638b278e3248d633c29932e2172ca4fdfc075654..c0a24ef2981a166fa51367676a58b671db392d35 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -187,22 +187,22 @@ DynamicModel::computeTemporaryTermsOrdered() v_temporary_terms.clear(); map_idx.clear(); - unsigned int nb_blocks = getNbBlocks(); + int nb_blocks = getNbBlocks(); v_temporary_terms = vector<vector<temporary_terms_t>>(nb_blocks); v_temporary_terms_inuse = vector<temporary_terms_inuse_t>(nb_blocks); temporary_terms.clear(); if (!global_temporary_terms) { - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { reference_count.clear(); temporary_terms.clear(); - unsigned int block_size = getBlockSize(block); - unsigned int block_nb_mfs = getBlockMfs(block); - unsigned int block_nb_recursives = block_size - block_nb_mfs; + int block_size = getBlockSize(block); + int block_nb_mfs = getBlockMfs(block); + int block_nb_recursives = block_size - block_nb_mfs; v_temporary_terms[block] = vector<temporary_terms_t>(block_size); - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { if (i < block_nb_recursives && isBlockEquationRenormalized(block, i)) getBlockEquationRenormalizedExpr(block, i)->computeTemporaryTerms(reference_count, temporary_terms, first_occurence, block, v_temporary_terms, i); @@ -226,14 +226,14 @@ DynamicModel::computeTemporaryTermsOrdered() } else { - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { // Compute the temporary terms reordered - unsigned int block_size = getBlockSize(block); - unsigned int block_nb_mfs = getBlockMfs(block); - unsigned int block_nb_recursives = block_size - block_nb_mfs; + int block_size = getBlockSize(block); + int block_nb_mfs = getBlockMfs(block); + int block_nb_recursives = block_size - block_nb_mfs; v_temporary_terms[block] = vector<temporary_terms_t>(block_size); - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { if (i < block_nb_recursives && isBlockEquationRenormalized(block, i)) getBlockEquationRenormalizedExpr(block, i)->computeTemporaryTerms(reference_count, temporary_terms, first_occurence, block, v_temporary_terms, i); @@ -253,14 +253,14 @@ DynamicModel::computeTemporaryTermsOrdered() for (const auto &it : derivative_other_endo[block]) it.second->computeTemporaryTerms(reference_count, temporary_terms, first_occurence, block, v_temporary_terms, block_size-1); } - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { // Collect the temporary terms reordered - unsigned int block_size = getBlockSize(block); - unsigned int block_nb_mfs = getBlockMfs(block); - unsigned int block_nb_recursives = block_size - block_nb_mfs; + int block_size = getBlockSize(block); + int block_nb_mfs = getBlockMfs(block); + int block_nb_recursives = block_size - block_nb_mfs; set<int> temporary_terms_in_use; - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { if (i < block_nb_recursives && isBlockEquationRenormalized(block, i)) getBlockEquationRenormalizedExpr(block, i)->collectTemporary_terms(temporary_terms, temporary_terms_in_use, block); @@ -320,7 +320,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const //---------------------------------------------------------------------- //For each block - for (unsigned int block = 0; block < getNbBlocks(); block++) + for (int block = 0; block < getNbBlocks(); block++) { //recursive_variables.clear(); @@ -331,16 +331,16 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const nze_exo = derivative_exo[block].size(); nze_exo_det = derivative_exo_det[block].size(); BlockSimulationType simulation_type = getBlockSimulationType(block); - unsigned int block_size = getBlockSize(block); - unsigned int block_mfs = getBlockMfs(block); - unsigned int block_recursive = block_size - block_mfs; + int block_size = getBlockSize(block); + int block_mfs = getBlockMfs(block); + int block_recursive = block_size - block_mfs; deriv_node_temp_terms_t tef_terms; local_output_type = ExprNodeOutputType::matlabDynamicModelSparse; if (global_temporary_terms) local_temporary_terms = temporary_terms; int prev_lag; - unsigned int prev_var, count_col, count_col_endo, count_col_exo, count_col_exo_det, count_col_other_endo; + int prev_var, count_col, count_col_endo, count_col_exo, count_col_exo_det, count_col_other_endo; map<tuple<int, int, int>, expr_t> tmp_block_endo_derivative; for (const auto &it : blocks_derivatives[block]) tmp_block_endo_derivative[{ get<2>(it), get<1>(it), get<0>(it) }] = get<3>(it); @@ -349,8 +349,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const count_col_endo = 0; for (const auto &it : tmp_block_endo_derivative) { - int lag = get<0>(it.first); - unsigned int var = get<1>(it.first); + auto [lag, var, ignore] = it.first; if (var != prev_var || lag != prev_lag) { prev_var = var; @@ -366,8 +365,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const count_col_exo = 0; for (const auto &it : tmp_block_exo_derivative) { - int lag = get<0>(it.first); - unsigned int var = get<1>(it.first); + auto [lag, var, ignore] = it.first; if (var != prev_var || lag != prev_lag) { prev_var = var; @@ -383,8 +381,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const count_col_exo_det = 0; for (const auto &it : tmp_block_exo_det_derivative) { - int lag = get<0>(it.first); - unsigned int var = get<1>(it.first); + auto [lag, var, ignore] = it.first; if (var != prev_var || lag != prev_lag) { prev_var = var; @@ -400,8 +397,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const count_col_other_endo = 0; for (const auto &it : tmp_block_other_endo_derivative) { - int lag = get<0>(it.first); - unsigned int var = get<1>(it.first); + auto [lag, var, ignore] = it.first; if (var != prev_var || lag != prev_lag) { prev_var = var; @@ -449,7 +445,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const || simulation_type == BlockSimulationType::solveBackwardSimple || simulation_type == BlockSimulationType::evaluateBackward || simulation_type == BlockSimulationType::evaluateForward) - && getBlockFirstEquation(block) >= equations.size() - epilogue) + && getBlockFirstEquation(block) >= static_cast<int>(equations.size()) - epilogue) block_type = BlockType::epilogue; else block_type = BlockType::simultans; @@ -501,7 +497,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const || simulation_type == BlockSimulationType::solveTwoBoundariesSimple) { temporary_terms_t tt2; - for (int i = 0; i < static_cast<int>(block_size); i++) + for (int i = 0; i < block_size; i++) { if (v_temporary_terms[block][i].size() && global_temporary_terms) { @@ -548,7 +544,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const sps = ""; // The equations temporary_terms_idxs_t temporary_terms_idxs; - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { temporary_terms_t tt2; if (v_temporary_terms[block].size()) @@ -670,9 +666,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const count_col = 0; for (const auto &it : tmp_block_endo_derivative) { - int lag; - unsigned int var, eq; - tie(lag, var, eq) = it.first; + auto [lag, var, eq] = it.first; int eqr = getBlockEquationID(block, eq); int varr = getBlockVariableID(block, var); if (var != prev_var || lag != prev_lag) @@ -696,9 +690,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const count_col = 0; for (const auto &it : tmp_block_exo_derivative) { - int lag; - unsigned int var, eq; - tie(lag, var, eq) = it.first; + auto [lag, var, eq] = it.first; int eqr = getBlockInitialEquationID(block, eq); if (var != prev_var || lag != prev_lag) { @@ -719,9 +711,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const count_col = 0; for (const auto &it : tmp_block_exo_det_derivative) { - int lag; - unsigned int var, eq; - tie(lag, var, eq) = it.first; + auto [lag, var, eq] = it.first; int eqr = getBlockInitialEquationID(block, eq); if (var != prev_var || lag != prev_lag) { @@ -742,9 +732,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const count_col = 0; for (const auto &it : tmp_block_other_endo_derivative) { - int lag; - unsigned int var, eq; - tie(lag, var, eq) = it.first; + auto [lag, var, eq] = it.first; int eqr = getBlockInitialEquationID(block, eq); if (var != prev_var || lag != prev_lag) { @@ -777,14 +765,10 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const case BlockSimulationType::solveBackwardComplete: case BlockSimulationType::solveForwardComplete: output << " else" << endl; - for (const auto &it : blocks_derivatives[block]) + for (const auto &[eq, var, lag, id] : blocks_derivatives[block]) { - unsigned int eq, var; - expr_t id; - int lag; - tie(eq, var, lag, id) = it; - unsigned int eqr = getBlockEquationID(block, eq); - unsigned int varr = getBlockVariableID(block, var); + int eqr = getBlockEquationID(block, eq); + int varr = getBlockVariableID(block, var); if (lag == 0) { output << " g1(" << eq+1 << ", " << var+1-block_recursive << ") = "; @@ -801,14 +785,10 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const case BlockSimulationType::solveTwoBoundariesSimple: case BlockSimulationType::solveTwoBoundariesComplete: output << " else" << endl; - for (const auto &it : blocks_derivatives[block]) + for (const auto &[eq, var, lag, id] : blocks_derivatives[block]) { - unsigned int eq, var; - int lag; - expr_t id; - tie(eq, var, lag, id) = it; - unsigned int eqr = getBlockEquationID(block, eq); - unsigned int varr = getBlockVariableID(block, var); + int eqr = getBlockEquationID(block, eq); + int varr = getBlockVariableID(block, var); ostringstream tmp_output; if (eq >= block_recursive && var >= block_recursive) { @@ -856,7 +836,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const << " condition(" << eqr << ")=u(" << u << "+Per_u_);" << endl; #endif } - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { if (i >= block_recursive) output << " " << Uf[getBlockEquationID(block, i)] << ";" << endl; @@ -871,10 +851,10 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const k = m-ModelBlock->Block_List[block].Max_Lag; for (i = 0; i < ModelBlock->Block_List[block].IM_lead_lag[m].size; i++) { - unsigned int eq = ModelBlock->Block_List[block].IM_lead_lag[m].Equ_Index[i]; - unsigned int var = ModelBlock->Block_List[block].IM_lead_lag[m].Var_Index[i]; - unsigned int u = ModelBlock->Block_List[block].IM_lead_lag[m].u[i]; - unsigned int eqr = ModelBlock->Block_List[block].IM_lead_lag[m].Equ[i]; + int eq = ModelBlock->Block_List[block].IM_lead_lag[m].Equ_Index[i]; + int var = ModelBlock->Block_List[block].IM_lead_lag[m].Var_Index[i]; + int u = ModelBlock->Block_List[block].IM_lead_lag[m].u[i]; + int eqr = ModelBlock->Block_List[block].IM_lead_lag[m].Equ[i]; output << " u(" << u+1 << "+Per_u_) = u(" << u+1 << "+Per_u_) / condition(" << eqr+1 << ");" << endl; } } @@ -940,9 +920,9 @@ DynamicModel::writeModelEquationsCode(const string &basename, const map_idx_t &m for (const auto & [indices, d1] : derivatives[1]) { int deriv_id = indices[1]; - unsigned int eq = indices[0]; + int eq = indices[0]; int symb = getSymbIDByDerivID(deriv_id); - unsigned int var = symbol_table.getTypeSpecificID(symb); + int var = symbol_table.getTypeSpecificID(symb); int lag = getLagByDerivID(deriv_id); if (getTypeByDerivID(deriv_id) == SymbolType::endogenous) first_derivatives_reordered_endo[{ lag, var, eq }] = d1; @@ -1030,9 +1010,9 @@ DynamicModel::writeModelEquationsCode(const string &basename, const map_idx_t &m int deriv_id = indices[1]; if (getTypeByDerivID(deriv_id) == SymbolType::endogenous) { - unsigned int eq = indices[0]; + int eq = indices[0]; int symb = getSymbIDByDerivID(deriv_id); - unsigned int var = symbol_table.getTypeSpecificID(symb); + int var = symbol_table.getTypeSpecificID(symb); int lag = getLagByDerivID(deriv_id); FNUMEXPR_ fnumexpr(FirstEndoDerivative, eq, var, lag); fnumexpr.write(code_file, instruction_number); @@ -1091,9 +1071,7 @@ DynamicModel::writeModelEquationsCode(const string &basename, const map_idx_t &m count_col_endo = 0; for (const auto &it : first_derivatives_reordered_endo) { - unsigned int eq; - int var, lag; - tie(lag, var, eq) = it.first; + auto [lag, var, eq] = it.first; expr_t d1 = it.second; FNUMEXPR_ fnumexpr(FirstEndoDerivative, eq, var, lag); fnumexpr.write(code_file, instruction_number); @@ -1112,8 +1090,7 @@ DynamicModel::writeModelEquationsCode(const string &basename, const map_idx_t &m count_col_exo = 0; for (const auto &it : first_derivatives_reordered_exo) { - int lag, var, eq; - tie(lag, ignore, var, eq) = it.first; + auto [lag, ignore, var, eq] = it.first; expr_t d1 = it.second; FNUMEXPR_ fnumexpr(FirstExoDerivative, eq, var, lag); fnumexpr.write(code_file, instruction_number); @@ -1184,7 +1161,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id FDIMT_ fdimt(temporary_terms.size()); fdimt.write(code_file, instruction_number); - for (unsigned int block = 0; block < getNbBlocks(); block++) + for (int block = 0; block < getNbBlocks(); block++) { feedback_variables.clear(); if (block > 0) @@ -1195,9 +1172,9 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id int count_u; int u_count_int = 0; BlockSimulationType simulation_type = getBlockSimulationType(block); - unsigned int block_size = getBlockSize(block); - unsigned int block_mfs = getBlockMfs(block); - unsigned int block_recursive = block_size - block_mfs; + int block_size = getBlockSize(block); + int block_mfs = getBlockMfs(block); + int block_recursive = block_size - block_mfs; int block_max_lag = max_leadlag_block[block].first; int block_max_lead = max_leadlag_block[block].second; @@ -1236,7 +1213,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id count_col_endo++; } } - unsigned int count_col_det_exo = 0; + int count_col_det_exo = 0; vector<unsigned int> exo_det; for (const auto &it : exo_det_block[block]) for (const auto &it1 : it.second) @@ -1246,7 +1223,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id exo_det.push_back(it1); } - unsigned int count_col_exo = 0; + int count_col_exo = 0; vector<unsigned int> exo; for (const auto &it : exo_block[block]) for (const auto &it1 : it.second) @@ -1257,7 +1234,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id } vector<unsigned int> other_endo; - unsigned int count_col_other_endo = 0; + int count_col_other_endo = 0; for (const auto &it : other_endo_block[block]) for (const auto &it1 : it.second) { @@ -1294,7 +1271,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id compileTemporaryTerms(code_file, instruction_number, temporary_terms, map_idx, true, false); // The equations - for (i = 0; i < static_cast<int>(block_size); i++) + for (i = 0; i < block_size; i++) { //The Temporary terms temporary_terms_t tt2; @@ -1364,7 +1341,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id case BlockSimulationType::solveForwardComplete: case BlockSimulationType::solveTwoBoundariesComplete: case BlockSimulationType::solveTwoBoundariesSimple: - if (i < static_cast<int>(block_recursive)) + if (i < block_recursive) goto evaluation; variable_ID = getBlockVariableID(block, i); equation_ID = getBlockEquationID(block, i); @@ -1419,13 +1396,10 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id case BlockSimulationType::solveTwoBoundariesComplete: case BlockSimulationType::solveTwoBoundariesSimple: count_u = feedback_variables.size(); - for (const auto &it : blocks_derivatives[block]) + for (const auto &[eq, var, lag, ignore] : blocks_derivatives[block]) { - unsigned int eq, var; - int lag; - tie(eq, var, lag, ignore) = it; - unsigned int eqr = getBlockEquationID(block, eq); - unsigned int varr = getBlockVariableID(block, var); + int eqr = getBlockEquationID(block, eq); + int varr = getBlockVariableID(block, var); if (eq >= block_recursive and var >= block_recursive) { if (lag != 0 @@ -1454,9 +1428,9 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id count_u++; } } - for (i = 0; i < static_cast<int>(block_size); i++) + for (i = 0; i < block_size; i++) { - if (i >= static_cast<int>(block_recursive)) + if (i >= block_recursive) { FLDR_ fldr(i-block_recursive); fldr.write(code_file, instruction_number); @@ -1515,11 +1489,9 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id count_col_endo = 0; for (const auto &it : tmp_block_endo_derivative) { - int lag, var; - unsigned int eq; - tie(lag, var, eq) = it.first; - unsigned int eqr = getBlockEquationID(block, eq); - unsigned int varr = getBlockVariableID(block, var); + auto [lag, var, eq] = it.first; + int eqr = getBlockEquationID(block, eq); + int varr = getBlockVariableID(block, var); if (prev_var != var || prev_lag != lag) { prev_var = var; @@ -1537,8 +1509,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id count_col_exo = 0; for (const auto &it : tmp_exo_derivative) { - int lag, eq, var; - tie(lag, var, eq) = it.first; + auto [lag, var, eq] = it.first; int eqr = getBlockInitialEquationID(block, eq); int varr = getBlockInitialExogenousID(block, var); if (prev_var != var || prev_lag != lag) @@ -1560,8 +1531,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id int count_col_exo_det = 0; for (const auto &it : tmp_exo_det_derivative) { - int lag, eq, var; - tie(lag, var, eq) = it.first; + auto [lag, var, eq] = it.first; int eqr = getBlockInitialEquationID(block, eq); int varr = getBlockInitialDetExogenousID(block, var); if (prev_var != var || prev_lag != lag) @@ -1583,8 +1553,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id count_col_other_endo = 0; for (const auto &it : tmp_other_endo_derivative) { - int lag, eq, var; - tie(lag, var, eq) = it.first; + auto [lag, var, eq] = it.first; int eqr = getBlockInitialEquationID(block, eq); int varr = getBlockInitialOtherEndogenousID(block, var);; if (prev_var != var || prev_lag != lag) @@ -1839,14 +1808,11 @@ DynamicModel::Write_Inf_To_Bin_File_Block(const string &basename, int num, exit(EXIT_FAILURE); } u_count_int = 0; - unsigned int block_size = getBlockSize(num); - unsigned int block_mfs = getBlockMfs(num); - unsigned int block_recursive = block_size - block_mfs; - for (const auto &it : blocks_derivatives[num]) - { - unsigned int eq, var; - int lag; - tie(eq, var, lag, ignore) = it; + int block_size = getBlockSize(num); + int block_mfs = getBlockMfs(num); + int block_recursive = block_size - block_mfs; + for (const auto &[eq, var, lag, ignore] : blocks_derivatives[num]) + { if (lag != 0 && !is_two_boundaries) continue; if (eq >= block_recursive && var >= block_recursive) @@ -1855,7 +1821,7 @@ DynamicModel::Write_Inf_To_Bin_File_Block(const string &basename, int num, SaveCode.write(reinterpret_cast<char *>(&v), sizeof(v)); int varr = var - block_recursive + lag * block_mfs; SaveCode.write(reinterpret_cast<char *>(&varr), sizeof(varr)); - SaveCode.write(reinterpret_cast<char *>(&lag), sizeof(lag)); + SaveCode.write(reinterpret_cast<const char *>(&lag), sizeof(lag)); int u = u_count_int + block_mfs; SaveCode.write(reinterpret_cast<char *>(&u), sizeof(u)); u_count_int++; @@ -1864,14 +1830,14 @@ DynamicModel::Write_Inf_To_Bin_File_Block(const string &basename, int num, if (is_two_boundaries) u_count_int += block_mfs; - for (j = block_recursive; j < static_cast<int>(block_size); j++) + for (j = block_recursive; j < block_size; j++) { - unsigned int varr = getBlockVariableID(num, j); + int varr = getBlockVariableID(num, j); SaveCode.write(reinterpret_cast<char *>(&varr), sizeof(varr)); } - for (j = block_recursive; j < static_cast<int>(block_size); j++) + for (j = block_recursive; j < block_size; j++) { - unsigned int eqr = getBlockEquationID(num, j); + int eqr = getBlockEquationID(num, j); SaveCode.write(reinterpret_cast<char *>(&eqr), sizeof(eqr)); } SaveCode.close(); @@ -1945,11 +1911,11 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const << " ys=y(it_,:);" << endl; tmp.str(""); tmp_eq.str(""); - unsigned int nb_blocks = getNbBlocks(); - unsigned int block = 0; + int nb_blocks = getNbBlocks(); + int block = 0; for (int count_call = 1; block < nb_blocks; block++, count_call++) { - unsigned int block_size = getBlockSize(block), + int block_size = getBlockSize(block), block_mfs = getBlockMfs(block), block_recursive = block_size - block_mfs; BlockSimulationType simulation_type = getBlockSimulationType(block); @@ -1957,7 +1923,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const if (simulation_type == BlockSimulationType::evaluateForward || simulation_type == BlockSimulationType::evaluateBackward) { - for (unsigned int ik = 0; ik < block_size; ik++) + for (int ik = 0; ik < block_size; ik++) { tmp << " " << getBlockVariableID(block, ik)+1; tmp_eq << " " << getBlockEquationID(block, ik)+1; @@ -1965,7 +1931,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const } else { - for (unsigned int ik = block_recursive; ik < block_size; ik++) + for (int ik = block_recursive; ik < block_size; ik++) { tmp << " " << getBlockVariableID(block, ik)+1; tmp_eq << " " << getBlockEquationID(block, ik)+1; @@ -2040,9 +2006,9 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const << " oo_.deterministic_simulation.status = 0;" << endl; for (block = 0; block < nb_blocks; block++) { - unsigned int block_size = getBlockSize(block); - unsigned int block_mfs = getBlockMfs(block); - unsigned int block_recursive = block_size - block_mfs; + int block_size = getBlockSize(block); + int block_mfs = getBlockMfs(block); + int block_recursive = block_size - block_mfs; BlockSimulationType simulation_type = getBlockSimulationType(block); if (simulation_type == BlockSimulationType::evaluateForward && block_size) @@ -2106,7 +2072,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const mDynamicModelFile << " g1=0;" << endl << " r=0;" << endl; tmp.str(""); - for (unsigned int ik = block_recursive; ik < block_size; ik++) + for (int ik = block_recursive; ik < block_size; ik++) tmp << " " << getBlockVariableID(block, ik)+1; mDynamicModelFile << " y_index = [" << tmp.str() << "];" << endl; int nze = blocks_derivatives[block].size(); @@ -2137,7 +2103,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const mDynamicModelFile << " g1=0;" << endl << " r=0;" << endl; tmp.str(""); - for (unsigned int ik = block_recursive; ik < block_size; ik++) + for (int ik = block_recursive; ik < block_size; ik++) tmp << " " << getBlockVariableID(block, ik)+1; mDynamicModelFile << " y_index = [" << tmp.str() << "];" << endl; int nze = blocks_derivatives[block].size(); @@ -2169,7 +2135,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const Nb_SGE++; int nze = blocks_derivatives[block].size(); mDynamicModelFile << " y_index=["; - for (unsigned int ik = block_recursive; ik < block_size; ik++) + for (int ik = block_recursive; ik < block_size; ik++) mDynamicModelFile << " " << getBlockVariableID(block, ik)+1; mDynamicModelFile << " ];" << endl << " if(isfield(oo_.deterministic_simulation,'block'))" << endl @@ -3169,8 +3135,8 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de vector<int> state_equ; int count_lead_lag_incidence = 0; int max_lead, max_lag, max_lag_endo, max_lead_endo, max_lag_exo, max_lead_exo, max_lag_exo_det, max_lead_exo_det; - unsigned int nb_blocks = getNbBlocks(); - for (unsigned int block = 0; block < nb_blocks; block++) + int nb_blocks = getNbBlocks(); + for (int block = 0; block < nb_blocks; block++) { //For a block composed of a single equation determines wether we have to evaluate or to solve the equation count_lead_lag_incidence = 0; @@ -3252,9 +3218,9 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de if (other_endo >= 0) { bool OK = true; - unsigned int j; + int j; for (j = 0; j < block && OK; j++) - for (unsigned int k = 0; k < getBlockSize(j) && OK; k++) + for (int k = 0; k < getBlockSize(j) && OK; k++) OK = other_endo != getBlockVariableID(j, k); if (!OK) output << " " << j; @@ -3353,7 +3319,7 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de bool done = false; for (int i = 0; i < block_size; i++) { - unsigned int eq = getBlockEquationID(block, i); + int eq = getBlockEquationID(block, i); if (derivative_other_endo[block].find({ lag, eq, other_endo }) != derivative_other_endo[block].end()) { @@ -3438,9 +3404,9 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de vector<int> i_nz_state_var(n); for (int i = 0; i < n_obs; i++) i_nz_state_var[i] = n; - unsigned int lp = n_obs; + int lp = n_obs; - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { int block_size = getBlockSize(block); int nze = 0; @@ -3501,7 +3467,7 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de lp += nze; } output << modstruct << "nz_state_var = ["; - for (unsigned int i = 0; i < lp; i++) + for (int i = 0; i < lp; i++) output << i_nz_state_var[i] << " "; output << "];" << endl; output << modstruct << "n_diag = " << nb_diag << ";" << endl; @@ -4846,7 +4812,7 @@ DynamicModel::computingPass(bool jacobianExo, int derivsOrder, int paramsDerivsO map<tuple<int, int, int>, expr_t> first_order_endo_derivatives; // for each block contains pair<Size, Feddback_variable> vector<pair<int, int>> blocks; - vector<unsigned int> n_static, n_forward, n_backward, n_mixed; + vector<int> n_static, n_forward, n_backward, n_mixed; if (linear_decomposition) { @@ -4919,9 +4885,9 @@ DynamicModel::computingPass(bool jacobianExo, int derivsOrder, int paramsDerivsO equation_block.resize(equations.size()); variable_block_lead_lag.clear(); variable_block_lead_lag.resize(equations.size()); - for (unsigned int i = 0; i < getNbBlocks(); i++) + for (int i = 0; i < getNbBlocks(); i++) { - for (unsigned int j = 0; j < getBlockSize(i); j++) + for (int j = 0; j < getBlockSize(i); j++) { equation_block[equation_reordered[k]] = i; int l = variable_reordered[k]; @@ -5107,9 +5073,9 @@ void DynamicModel::computeChainRuleJacobian() { map<int, expr_t> recursive_variables; - unsigned int nb_blocks = getNbBlocks(); + int nb_blocks = getNbBlocks(); blocks_derivatives.resize(nb_blocks); - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { block_derivatives_equation_variable_laglead_nodeid_t tmp_derivatives; recursive_variables.clear(); @@ -5151,11 +5117,11 @@ DynamicModel::collect_block_first_order_derivatives() { //! vector for an equation or a variable indicates the block number vector<int> equation_2_block(equation_reordered.size()), variable_2_block(variable_reordered.size()); - unsigned int nb_blocks = getNbBlocks(); - for (unsigned int block = 0; block < nb_blocks; block++) + int nb_blocks = getNbBlocks(); + for (int block = 0; block < nb_blocks; block++) { - unsigned int block_size = getBlockSize(block); - for (unsigned int i = 0; i < block_size; i++) + int block_size = getBlockSize(block); + for (int i = 0; i < block_size; i++) { equation_2_block[getBlockEquationID(block, i)] = block; variable_2_block[getBlockVariableID(block, i)] = block; @@ -5289,7 +5255,7 @@ DynamicModel::collect_block_first_order_derivatives() void DynamicModel::collectBlockVariables() { - for (unsigned int block = 0; block < getNbBlocks(); block++) + for (int block = 0; block < getNbBlocks(); block++) { int prev_var = -1; int prev_lag = -999999999; diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh index 36eee44829822aee1b6c514ba76a5db3163aa416..b834310dfd93a67a382b89ca8cae463eb51f1127 100644 --- a/src/DynamicModel.hh +++ b/src/DynamicModel.hh @@ -556,7 +556,7 @@ public: }; //! Return the number of blocks - unsigned int + int getNbBlocks() const override { return block_type_firstequation_size_mfs.size(); @@ -568,43 +568,43 @@ public: return get<0>(block_type_firstequation_size_mfs[block_number]); }; //! Return the first equation number of a block - unsigned int + int getBlockFirstEquation(int block_number) const override { return get<1>(block_type_firstequation_size_mfs[block_number]); }; //! Return the size of the block block_number - unsigned int + int getBlockSize(int block_number) const override { return get<2>(block_type_firstequation_size_mfs[block_number]); }; //! Return the number of exogenous variable in the block block_number - unsigned int + int getBlockExoSize(int block_number) const override { return block_var_exo[block_number].first.size(); }; //! Return the number of colums in the jacobian matrix for exogenous variable in the block block_number - unsigned int + int getBlockExoColSize(int block_number) const override { return block_var_exo[block_number].second; }; //! Return the number of feedback variable of the block block_number - unsigned int + int getBlockMfs(int block_number) const override { return get<3>(block_type_firstequation_size_mfs[block_number]); }; //! Return the maximum lag in a block - unsigned int + int getBlockMaxLag(int block_number) const override { return block_lag_lead[block_number].first; }; //! Return the maximum lead in a block - unsigned int + int getBlockMaxLead(int block_number) const override { return block_lag_lead[block_number].second; @@ -655,13 +655,13 @@ public: int getBlockInitialEquationID(int block_number, int equation_number) const override { - return static_cast<int>(inv_equation_reordered[equation_number]) - static_cast<int>(get<1>(block_type_firstequation_size_mfs[block_number])); + return inv_equation_reordered[equation_number] - get<1>(block_type_firstequation_size_mfs[block_number]); }; //! Return the position of variable_number in the block number belonging to the block block_number int getBlockInitialVariableID(int block_number, int variable_number) const override { - return static_cast<int>(inv_variable_reordered[variable_number]) - static_cast<int>(get<1>(block_type_firstequation_size_mfs[block_number])); + return inv_variable_reordered[variable_number] - get<1>(block_type_firstequation_size_mfs[block_number]); }; //! Return the block number containing the endogenous variable variable_number int diff --git a/src/ExprNode.cc b/src/ExprNode.cc index 2e262a306c1cadec195e59e5de7d621ab56bbe00..e555224dfedf900b94be4175643ce76bdb6942ed 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -8163,7 +8163,7 @@ FirstDerivExternalFunctionNode::compileExternalFunctionOutput(ostream &CompileCo { unsigned int nb_input_arguments = 0; unsigned int nb_output_arguments = 1; - unsigned int indx = getIndxInTefTerms(symb_id, tef_terms); + int indx = getIndxInTefTerms(symb_id, tef_terms); FCALL_ fcall(nb_output_arguments, nb_input_arguments, "jacob_element", indx); fcall.set_arg_func_name(datatree.symbol_table.getName(symb_id)); fcall.set_row(inputIndex); diff --git a/src/MinimumFeedbackSet.cc b/src/MinimumFeedbackSet.cc index bdeb3221bcf3a04c7fd41161b973b72cd13e004f..a162ce33b4de92485e9a3dd6c4a8a0ea747fc94f 100644 --- a/src/MinimumFeedbackSet.cc +++ b/src/MinimumFeedbackSet.cc @@ -123,18 +123,18 @@ namespace MFS } AdjacencyList_t - AM_2_AdjacencyList(bool *AM, unsigned int n) + AM_2_AdjacencyList(bool *AM, int n) { AdjacencyList_t G(n); auto v_index = get(vertex_index, G); auto v_index1 = get(vertex_index1, G); - for (unsigned int i = 0; i < n; i++) + for (int i = 0; i < n; i++) { put(v_index, vertex(i, G), i); put(v_index1, vertex(i, G), i); } - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < n; j++) + for (int i = 0; i < n; i++) + for (int j = 0; j < n; j++) if (AM[i*n+j]) add_edge(vertex(j, G), vertex(i, G), G); return G; @@ -143,14 +143,14 @@ namespace MFS AdjacencyList_t extract_subgraph(AdjacencyList_t &G1, set<int> select_index) { - unsigned int n = select_index.size(); + int n = select_index.size(); AdjacencyList_t G(n); auto v_index = get(vertex_index, G); auto v_index1 = get(vertex_index1, G); auto v1_index = get(vertex_index, G1); map<int, int> reverse_index; set<int>::iterator it; - unsigned int i; + int i; for (it = select_index.begin(), i = 0; i < n; i++, ++it) { reverse_index[get(v1_index, vertex(*it, G1))] = i; @@ -205,11 +205,11 @@ namespace MFS { if (it_in != in_end || it_out != out_end) agree = false; - unsigned int i = 1; - while (i < liste.size() && agree) + int i = 1; + while (i < static_cast<int>(liste.size()) && agree) { - unsigned int j = i + 1; - while (j < liste.size() && agree) + int j = i + 1; + while (j < static_cast<int>(liste.size()) && agree) { AdjacencyList_t::edge_descriptor ed; bool exist1, exist2; @@ -379,10 +379,10 @@ namespace MFS if (num_vertices(G) > 0) { /*if nothing has been done in the five previous rule then cut the vertex with the maximum in_degree+out_degree*/ - unsigned int max_degree = 0, num = 0; + int max_degree = 0, num = 0; AdjacencyList_t::vertex_iterator it, it_end, max_degree_index; for (tie(it, it_end) = vertices(G); it != it_end; ++it, num++) - if (in_degree(*it, G) + out_degree(*it, G) > max_degree) + if (static_cast<int>(in_degree(*it, G) + out_degree(*it, G)) > max_degree) { max_degree = in_degree(*it, G) + out_degree(*it, G); max_degree_index = it; diff --git a/src/ModelTree.cc b/src/ModelTree.cc index 54cb93eec6e2cea3de3f39a0d60dfa0bc42e7661..ec93b9d6c544a13a890c27651413afd1526cfdfe 100644 --- a/src/ModelTree.cc +++ b/src/ModelTree.cc @@ -465,11 +465,11 @@ ModelTree::evaluateAndReduceJacobian(const eval_context_t &eval_context, double } tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, - vector<unsigned int>, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>> + vector<int>, vector<int>, vector<int>, vector<int>> ModelTree::select_non_linear_equations_and_variables(const vector<bool> &is_equation_linear) { vector<int> eq2endo(equations.size(), 0); - unsigned int num = 0; + int num = 0; for (auto it : endo2eq) if (!is_equation_linear[it]) num++; @@ -487,9 +487,9 @@ ModelTree::select_non_linear_equations_and_variables(const vector<bool> &is_equa j++; } auto [equation_lag_lead, variable_lag_lead] = getVariableLeadLagByBlock(endo2block, endo2block.size()); - vector<unsigned int> n_static(endo2eq.size(), 0), n_forward(endo2eq.size(), 0), + vector<int> n_static(endo2eq.size(), 0), n_forward(endo2eq.size(), 0), n_backward(endo2eq.size(), 0), n_mixed(endo2eq.size(), 0); - for (unsigned int i = 0; i < endo2eq.size(); i++) + for (int i = 0; i < static_cast<int>(endo2eq.size()); i++) { if (variable_lag_lead[variable_reordered[i]].first != 0 && variable_lag_lead[variable_reordered[i]].second != 0) n_mixed[i]++; @@ -621,7 +621,7 @@ ModelTree::computePrologueAndEpilogue(const jacob_map_t &static_jacobian) { something_has_been_done = false; int new_epilogue = epilogue; - for (int i = prologue; i < n - static_cast<int>(epilogue); i++) + for (int i = prologue; i < n - epilogue; i++) { int nze = 0; int k = 0; @@ -658,7 +658,7 @@ ModelTree::equationTypeDetermination(const map<tuple<int, int, int>, expr_t> &fi EquationType Equation_Simulation_Type; equation_type_and_normalized_equation.clear(); equation_type_and_normalized_equation.resize(equations.size()); - for (unsigned int i = 0; i < equations.size(); i++) + for (int i = 0; i < static_cast<int>(equations.size()); i++) { int eq = equation_reordered[i]; int var = variable_reordered[i]; @@ -703,12 +703,12 @@ ModelTree::getVariableLeadLagByBlock(const vector<int> &components_set, int nb_b vector<int> variable_blck(nb_endo), equation_blck(nb_endo); for (int i = 0; i < nb_endo; i++) { - if (i < static_cast<int>(prologue)) + if (i < prologue) { variable_blck[variable_reordered[i]] = i; equation_blck[equation_reordered[i]] = i; } - else if (i < static_cast<int>(components_set.size() + prologue)) + else if (i < static_cast<int>(components_set.size()) + prologue) { variable_blck[variable_reordered[i]] = components_set[i-prologue] + prologue; equation_blck[equation_reordered[i]] = components_set[i-prologue] + prologue; @@ -738,7 +738,7 @@ ModelTree::getVariableLeadLagByBlock(const vector<int> &components_set, int nb_b } tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, - vector<unsigned int>, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>> + vector<int>, vector<int>, vector<int>, vector<int>> ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob_map_t &static_jacobian, const equation_type_and_normalized_equation_t &Equation_Type, bool verbose_, bool select_feedback_variable) { int nb_var = variable_reordered.size(); @@ -773,8 +773,8 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob else tmp_normalized_contemporaneous_jacobian = static_jacobian; for (const auto &[key, value] : tmp_normalized_contemporaneous_jacobian) - if (reverse_equation_reordered[key.first] >= static_cast<int>(prologue) && reverse_equation_reordered[key.first] < static_cast<int>(nb_var - epilogue) - && reverse_variable_reordered[key.second] >= static_cast<int>(prologue) && reverse_variable_reordered[key.second] < static_cast<int>(nb_var - epilogue) + if (reverse_equation_reordered[key.first] >= prologue && reverse_equation_reordered[key.first] < nb_var - epilogue + && reverse_variable_reordered[key.second] >= prologue && reverse_variable_reordered[key.second] < nb_var - epilogue && key.first != endo2eq[key.second]) add_edge(vertex(reverse_equation_reordered[endo2eq[key.second]]-prologue, G2), vertex(reverse_equation_reordered[key.first]-prologue, G2), @@ -792,7 +792,7 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob using DirectedGraph = boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS>; DirectedGraph dag(num); - for (unsigned int i = 0; i < num_vertices(G2); i++) + for (int i = 0; i < static_cast<int>(num_vertices(G2)); i++) { MFS::AdjacencyList_t::out_edge_iterator it_out, out_end; MFS::AdjacencyList_t::vertex_descriptor vi = vertex(i, G2); @@ -819,7 +819,7 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob // - second set = the feeback variables, // - third vector = the reordered non-feedback variables. vector<tuple<set<int>, set<int>, vector<int>>> components_set(num); - for (unsigned int i = 0; i < endo2block.size(); i++) + for (int i = 0; i < static_cast<int>(endo2block.size()); i++) { endo2block[i] = unordered2ordered[endo2block[i]]; blocks[endo2block[i]].first++; @@ -848,10 +848,10 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob add_edge(vertex(i, G2), vertex(i, G2), G2); //Determines the dynamic structure of each equation - vector<unsigned int> n_static(prologue+num+epilogue, 0), n_forward(prologue+num+epilogue, 0), + vector<int> n_static(prologue+num+epilogue, 0), n_forward(prologue+num+epilogue, 0), n_backward(prologue+num+epilogue, 0), n_mixed(prologue+num+epilogue, 0); - for (int i = 0; i < static_cast<int>(prologue); i++) + for (int i = 0; i < prologue; i++) if (variable_lag_lead[tmp_variable_reordered[i]].first != 0 && variable_lag_lead[tmp_variable_reordered[i]].second != 0) n_mixed[i]++; else if (variable_lag_lead[tmp_variable_reordered[i]].first == 0 && variable_lag_lead[tmp_variable_reordered[i]].second != 0) @@ -944,7 +944,7 @@ ModelTree::computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob } } - for (int i = 0; i < static_cast<int>(epilogue); i++) + for (int i = 0; i < epilogue; i++) if (variable_lag_lead[tmp_variable_reordered[prologue+n+i]].first != 0 && variable_lag_lead[tmp_variable_reordered[prologue+n+i]].second != 0) n_mixed[prologue+num+i]++; else if (variable_lag_lead[tmp_variable_reordered[prologue+n+i]].first == 0 && variable_lag_lead[tmp_variable_reordered[prologue+n+i]].second != 0) @@ -971,8 +971,8 @@ ModelTree::printBlockDecomposition(const vector<pair<int, int>> &blocks) const int largest_block = 0, Nb_SimulBlocks = 0, Nb_feedback_variable = 0; - unsigned int Nb_TotalBlocks = getNbBlocks(); - for (unsigned int block = 0; block < Nb_TotalBlocks; block++) + int Nb_TotalBlocks = getNbBlocks(); + for (int block = 0; block < Nb_TotalBlocks; block++) { BlockSimulationType simulation_type = getBlockSimulationType(block); if (simulation_type == BlockSimulationType::solveForwardComplete @@ -997,7 +997,7 @@ ModelTree::printBlockDecomposition(const vector<pair<int, int>> &blocks) const } void -ModelTree::reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks, const equation_type_and_normalized_equation_t &Equation_Type, const vector<unsigned int> &n_static, const vector<unsigned int> &n_forward, const vector<unsigned int> &n_backward, const vector<unsigned int> &n_mixed, bool linear_decomposition) +ModelTree::reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks, const equation_type_and_normalized_equation_t &Equation_Type, const vector<int> &n_static, const vector<int> &n_forward, const vector<int> &n_backward, const vector<int> &n_mixed, bool linear_decomposition) { int i = 0; int count_equ = 0, blck_count_simult = 0; @@ -1006,22 +1006,22 @@ ModelTree::reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks block_type_firstequation_size_mfs.clear(); BlockSimulationType Simulation_Type, prev_Type = BlockSimulationType::unknown; int eq = 0; - unsigned int l_n_static = 0, l_n_forward = 0, l_n_backward = 0, l_n_mixed = 0; - for (i = 0; i < static_cast<int>(prologue+blocks.size()+epilogue); i++) + int l_n_static = 0, l_n_forward = 0, l_n_backward = 0, l_n_mixed = 0; + for (i = 0; i < prologue+static_cast<int>(blocks.size())+epilogue; i++) { int first_count_equ = count_equ; - if (i < static_cast<int>(prologue)) + if (i < prologue) { Blck_Size = 1; MFS_Size = 1; } - else if (i < static_cast<int>(prologue+blocks.size())) + else if (i < prologue+static_cast<int>(blocks.size())) { Blck_Size = blocks[blck_count_simult].first; MFS_Size = blocks[blck_count_simult].second; blck_count_simult++; } - else if (i < static_cast<int>(prologue+blocks.size()+epilogue)) + else if (i < prologue+static_cast<int>(blocks.size())+epilogue) { Blck_Size = 1; MFS_Size = 1; @@ -1176,10 +1176,10 @@ ModelTree::equationLinear(const map<tuple<int, int, int>, expr_t> &first_order_e void ModelTree::determineLinearBlocks() { - unsigned int nb_blocks = getNbBlocks(); + int nb_blocks = getNbBlocks(); blocks_linear.clear(); blocks_linear.resize(nb_blocks, true); - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { BlockSimulationType simulation_type = getBlockSimulationType(block); int block_size = getBlockSize(block); @@ -1801,9 +1801,9 @@ ModelTree::Write_Inf_To_Bin_File(const string &filename, } if (is_two_boundaries) u_count_int += symbol_table.endo_nbr(); - for (j = 0; j < static_cast<int>(symbol_table.endo_nbr()); j++) + for (j = 0; j < symbol_table.endo_nbr(); j++) SaveCode.write(reinterpret_cast<char *>(&j), sizeof(j)); - for (j = 0; j < static_cast<int>(symbol_table.endo_nbr()); j++) + for (j = 0; j < symbol_table.endo_nbr(); j++) SaveCode.write(reinterpret_cast<char *>(&j), sizeof(j)); SaveCode.close(); } diff --git a/src/ModelTree.hh b/src/ModelTree.hh index c083341a89161901fb19ea3092e9a6415edabf19..b6dfbc49b6eb08680270fbadd1237922776e2781 100644 --- a/src/ModelTree.hh +++ b/src/ModelTree.hh @@ -261,7 +261,7 @@ protected: vector<int> endo2eq; //! number of equation in the prologue and in the epilogue - unsigned int epilogue, prologue; + int epilogue, prologue; //! for each block contains pair< max_lag, max_lead> lag_lead_vector_t block_lag_lead; @@ -290,7 +290,7 @@ protected: //! Select and reorder the non linear equations of the model /*! Returns a tuple (blocks, equation_lag_lead, variable_lag_lead, n_static, n_forward, n_backward, n_mixed) */ - tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>> select_non_linear_equations_and_variables(const vector<bool> &is_equation_linear); + tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, vector<int>, vector<int>, vector<int>, vector<int>> select_non_linear_equations_and_variables(const vector<bool> &is_equation_linear); //! Search the equations and variables belonging to the prologue and the epilogue of the model void computePrologueAndEpilogue(const jacob_map_t &static_jacobian); //! Determine the type of each equation of model and try to normalize the unnormalized equation @@ -298,9 +298,9 @@ protected: //! Compute the block decomposition and for a non-recusive block find the minimum feedback set /*! Returns a tuple (blocks, equation_lag_lead, variable_lag_lead, n_static, n_forward, n_backward, n_mixed) */ - tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>, vector<unsigned int>> computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob_map_t &static_jacobian, const equation_type_and_normalized_equation_t &Equation_Type, bool verbose_, bool select_feedback_variable); + tuple<vector<pair<int, int>>, lag_lead_vector_t, lag_lead_vector_t, vector<int>, vector<int>, vector<int>, vector<int>> computeBlockDecompositionAndFeedbackVariablesForEachBlock(const jacob_map_t &static_jacobian, const equation_type_and_normalized_equation_t &Equation_Type, bool verbose_, bool select_feedback_variable); //! Reduce the number of block merging the same type equation in the prologue and the epilogue and determine the type of each block - void reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks, const equation_type_and_normalized_equation_t &Equation_Type, const vector<unsigned int> &n_static, const vector<unsigned int> &n_forward, const vector<unsigned int> &n_backward, const vector<unsigned int> &n_mixed, bool linear_decomposition); + void reduceBlocksAndTypeDetermination(const vector<pair<int, int>> &blocks, const equation_type_and_normalized_equation_t &Equation_Type, const vector<int> &n_static, const vector<int> &n_forward, const vector<int> &n_backward, const vector<int> &n_mixed, bool linear_decomposition); //! Determine the maximum number of lead and lag for the endogenous variable in a bloc /*! Returns a pair { equation_lead,lag, variable_lead_lag } */ pair<lag_lead_vector_t, lag_lead_vector_t> getVariableLeadLagByBlock(const vector<int> &components_set, int nb_blck_sim) const; @@ -318,21 +318,21 @@ protected: //! Determine the simulation type of each block virtual BlockSimulationType getBlockSimulationType(int block_number) const = 0; //! Return the number of blocks - virtual unsigned int getNbBlocks() const = 0; + virtual int getNbBlocks() const = 0; //! Return the first equation number of a block - virtual unsigned int getBlockFirstEquation(int block_number) const = 0; + virtual int getBlockFirstEquation(int block_number) const = 0; //! Return the size of the block block_number - virtual unsigned int getBlockSize(int block_number) const = 0; + virtual int getBlockSize(int block_number) const = 0; //! Return the number of exogenous variable in the block block_number - virtual unsigned int getBlockExoSize(int block_number) const = 0; + virtual int getBlockExoSize(int block_number) const = 0; //! Return the number of colums in the jacobian matrix for exogenous variable in the block block_number - virtual unsigned int getBlockExoColSize(int block_number) const = 0; + virtual int getBlockExoColSize(int block_number) const = 0; //! Return the number of feedback variable of the block block_number - virtual unsigned int getBlockMfs(int block_number) const = 0; + virtual int getBlockMfs(int block_number) const = 0; //! Return the maximum lag in a block - virtual unsigned int getBlockMaxLag(int block_number) const = 0; + virtual int getBlockMaxLag(int block_number) const = 0; //! Return the maximum lead in a block - virtual unsigned int getBlockMaxLead(int block_number) const = 0; + virtual int getBlockMaxLead(int block_number) const = 0; inline void setBlockLeadLag(int block, int max_lag, int max_lead) { diff --git a/src/StaticModel.cc b/src/StaticModel.cc index c0d7cd9e42b25be9ac99de20a0951b5da9112f71..c8f477738b1049fbaf3765135b53547951ad41c8 100644 --- a/src/StaticModel.cc +++ b/src/StaticModel.cc @@ -161,7 +161,7 @@ StaticModel::computeTemporaryTermsOrdered() ostringstream tmp_s; map_idx.clear(); - unsigned int nb_blocks = getNbBlocks(); + int nb_blocks = getNbBlocks(); v_temporary_terms = vector< vector<temporary_terms_t>>(nb_blocks); v_temporary_terms_local = vector< vector<temporary_terms_t>>(nb_blocks); @@ -172,18 +172,18 @@ StaticModel::computeTemporaryTermsOrdered() temporary_terms.clear(); //local temporay terms - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { map<expr_t, int> reference_count_local; map<expr_t, pair<int, int>> first_occurence_local; temporary_terms_t temporary_terms_l; - unsigned int block_size = getBlockSize(block); - unsigned int block_nb_mfs = getBlockMfs(block); - unsigned int block_nb_recursives = block_size - block_nb_mfs; + int block_size = getBlockSize(block); + int block_nb_mfs = getBlockMfs(block); + int block_nb_recursives = block_size - block_nb_mfs; v_temporary_terms_local[block] = vector<temporary_terms_t>(block_size); - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { if (i < block_nb_recursives && isBlockEquationRenormalized(block, i)) getBlockEquationRenormalizedExpr(block, i)->computeTemporaryTerms(reference_count_local, temporary_terms_l, first_occurence_local, block, v_temporary_terms_local, i); @@ -203,14 +203,14 @@ StaticModel::computeTemporaryTermsOrdered() } // global temporay terms - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { // Compute the temporary terms reordered - unsigned int block_size = getBlockSize(block); - unsigned int block_nb_mfs = getBlockMfs(block); - unsigned int block_nb_recursives = block_size - block_nb_mfs; + int block_size = getBlockSize(block); + int block_nb_mfs = getBlockMfs(block); + int block_nb_recursives = block_size - block_nb_mfs; v_temporary_terms[block] = vector<temporary_terms_t>(block_size); - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { if (i < block_nb_recursives && isBlockEquationRenormalized(block, i)) getBlockEquationRenormalizedExpr(block, i)->computeTemporaryTerms(reference_count, temporary_terms, first_occurence, block, v_temporary_terms, i); @@ -227,14 +227,14 @@ StaticModel::computeTemporaryTermsOrdered() } } - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { // Collecte the temporary terms reordered - unsigned int block_size = getBlockSize(block); - unsigned int block_nb_mfs = getBlockMfs(block); - unsigned int block_nb_recursives = block_size - block_nb_mfs; + int block_size = getBlockSize(block); + int block_nb_mfs = getBlockMfs(block); + int block_nb_recursives = block_size - block_nb_mfs; set<int> temporary_terms_in_use; - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { if (i < block_nb_recursives && isBlockEquationRenormalized(block, i)) getBlockEquationRenormalizedExpr(block, i)->collectTemporary_terms(temporary_terms, temporary_terms_in_use, block); @@ -249,7 +249,7 @@ StaticModel::computeTemporaryTermsOrdered() expr_t id = get<3>(it); id->collectTemporary_terms(temporary_terms, temporary_terms_in_use, block); } - for (int i = 0; i < static_cast<int>(getBlockSize(block)); i++) + for (int i = 0; i < getBlockSize(block); i++) for (const auto &it : v_temporary_terms[block][i]) it->collectTemporary_terms(temporary_terms, temporary_terms_in_use, block); v_temporary_terms_inuse[block] = temporary_terms_in_use; @@ -286,15 +286,15 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const //---------------------------------------------------------------------- //For each block - for (unsigned int block = 0; block < getNbBlocks(); block++) + for (int block = 0; block < getNbBlocks(); block++) { //recursive_variables.clear(); feedback_variables.clear(); //For a block composed of a single equation determines wether we have to evaluate or to solve the equation BlockSimulationType simulation_type = getBlockSimulationType(block); - unsigned int block_size = getBlockSize(block); - unsigned int block_mfs = getBlockMfs(block); - unsigned int block_recursive = block_size - block_mfs; + int block_size = getBlockSize(block); + int block_mfs = getBlockMfs(block); + int block_recursive = block_size - block_mfs; tmp1_output.str(""); tmp1_output << packageDir(basename + ".block") << "/static_" << block+1 << ".m"; @@ -325,7 +325,7 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const || simulation_type == BlockSimulationType::solveBackwardSimple || simulation_type == BlockSimulationType::evaluateBackward || simulation_type == BlockSimulationType::evaluateForward) - && getBlockFirstEquation(block) >= equations.size() - epilogue) + && getBlockFirstEquation(block) >= static_cast<int>(equations.size()) - epilogue) block_type = BlockType::epilogue; else block_type = BlockType::simultans; @@ -355,7 +355,7 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const // The equations temporary_terms_idxs_t temporary_terms_idxs; - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { if (!global_temporary_terms) local_temporary_terms = v_temporary_terms[block][i]; @@ -456,13 +456,10 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const case BlockSimulationType::solveForwardSimple: case BlockSimulationType::solveBackwardComplete: case BlockSimulationType::solveForwardComplete: - for (const auto &it : blocks_derivatives[block]) + for (const auto &[eq, var, ignore, id] : blocks_derivatives[block]) { - unsigned int eq, var; - expr_t id; - tie(eq, var, ignore, id) = it; - unsigned int eqr = getBlockEquationID(block, eq); - unsigned int varr = getBlockVariableID(block, var); + int eqr = getBlockEquationID(block, eq); + int varr = getBlockVariableID(block, var); output << " g1(" << eq+1-block_recursive << ", " << var+1-block_recursive << ") = "; id->writeOutput(output, local_output_type, local_temporary_terms, {}); output << "; % variable=" << symbol_table.getName(symbol_table.getID(SymbolType::endogenous, varr)) @@ -544,9 +541,9 @@ StaticModel::writeModelEquationsCode(const string &basename, map_idx_t map_idx) int deriv_id = indices[1]; if (getTypeByDerivID(deriv_id) == SymbolType::endogenous) { - unsigned int eq = indices[0]; + int eq = indices[0]; int symb = getSymbIDByDerivID(deriv_id); - unsigned int var = symbol_table.getTypeSpecificID(symb); + int var = symbol_table.getTypeSpecificID(symb); FNUMEXPR_ fnumexpr(FirstEndoDerivative, eq, var); fnumexpr.write(code_file, instruction_number); if (!my_derivatives[eq].size()) @@ -606,9 +603,9 @@ StaticModel::writeModelEquationsCode(const string &basename, map_idx_t map_idx) int deriv_id = indices[1]; if (getTypeByDerivID(deriv_id) == SymbolType::endogenous) { - unsigned int eq = indices[0]; + int eq = indices[0]; int symb = getSymbIDByDerivID(deriv_id); - unsigned int var = symbol_table.getTypeSpecificID(symb); + int var = symbol_table.getTypeSpecificID(symb); FNUMEXPR_ fnumexpr(FirstEndoDerivative, eq, var); fnumexpr.write(code_file, instruction_number); if (!my_derivatives[eq].size()) @@ -676,7 +673,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map FDIMST_ fdimst(temporary_terms.size()); fdimst.write(code_file, instruction_number); - for (unsigned int block = 0; block < getNbBlocks(); block++) + for (int block = 0; block < getNbBlocks(); block++) { feedback_variables.clear(); if (block > 0) @@ -687,9 +684,9 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map int count_u; int u_count_int = 0; BlockSimulationType simulation_type = getBlockSimulationType(block); - unsigned int block_size = getBlockSize(block); - unsigned int block_mfs = getBlockMfs(block); - unsigned int block_recursive = block_size - block_mfs; + int block_size = getBlockSize(block); + int block_mfs = getBlockMfs(block); + int block_recursive = block_size - block_mfs; if (simulation_type == BlockSimulationType::solveTwoBoundariesSimple || simulation_type == BlockSimulationType::solveTwoBoundariesComplete @@ -721,7 +718,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map fjmp_if_eval.write(code_file, instruction_number); int prev_instruction_number = instruction_number; - for (i = 0; i < static_cast<int>(block_size); i++) + for (i = 0; i < block_size; i++) { //The Temporary terms temporary_terms_t tt2; @@ -774,7 +771,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map break; case BlockSimulationType::solveBackwardComplete: case BlockSimulationType::solveForwardComplete: - if (i < static_cast<int>(block_recursive)) + if (i < block_recursive) goto evaluation; variable_ID = getBlockVariableID(block, i); equation_ID = getBlockEquationID(block, i); @@ -823,12 +820,10 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map case BlockSimulationType::solveBackwardComplete: case BlockSimulationType::solveForwardComplete: count_u = feedback_variables.size(); - for (const auto &it : blocks_derivatives[block]) + for (const auto &[eq, var, ignore, ignore2] : blocks_derivatives[block]) { - unsigned int eq, var; - tie(eq, var, ignore, ignore) = it; - unsigned int eqr = getBlockEquationID(block, eq); - unsigned int varr = getBlockVariableID(block, var); + int eqr = getBlockEquationID(block, eq); + int varr = getBlockVariableID(block, var); if (eq >= block_recursive && var >= block_recursive) { if (!Uf[eqr].Ufl) @@ -852,9 +847,9 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map count_u++; } } - for (i = 0; i < static_cast<int>(block_size); i++) + for (i = 0; i < block_size; i++) { - if (i >= static_cast<int>(block_recursive)) + if (i >= block_recursive) { FLDR_ fldr(i-block_recursive); fldr.write(code_file, instruction_number); @@ -912,7 +907,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map temporary_terms_t tt2, tt3; deriv_node_temp_terms_t tef_terms2; - for (i = 0; i < static_cast<int>(block_size); i++) + for (i = 0; i < block_size; i++) { if (v_temporary_terms_local[block].size()) { @@ -966,7 +961,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map break; case BlockSimulationType::solveBackwardComplete: case BlockSimulationType::solveForwardComplete: - if (i < static_cast<int>(block_recursive)) + if (i < block_recursive) goto evaluation_l; variable_ID = getBlockVariableID(block, i); equation_ID = getBlockEquationID(block, i); @@ -1013,12 +1008,10 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map case BlockSimulationType::solveBackwardComplete: case BlockSimulationType::solveForwardComplete: count_u = feedback_variables.size(); - for (const auto &it : blocks_derivatives[block]) + for (const auto &[eq, var, ignore, ignore2] : blocks_derivatives[block]) { - unsigned int eq, var; - tie(eq, var, ignore, ignore) = it; - unsigned int eqr = getBlockEquationID(block, eq); - unsigned int varr = getBlockVariableID(block, var); + int eqr = getBlockEquationID(block, eq); + int varr = getBlockVariableID(block, var); FNUMEXPR_ fnumexpr(FirstEndoDerivative, eqr, varr, 0); fnumexpr.write(code_file, instruction_number); @@ -1062,13 +1055,11 @@ StaticModel::Write_Inf_To_Bin_File_Block(const string &basename, int num, exit(EXIT_FAILURE); } u_count_int = 0; - unsigned int block_size = getBlockSize(num); - unsigned int block_mfs = getBlockMfs(num); - unsigned int block_recursive = block_size - block_mfs; - for (const auto &it : blocks_derivatives[num]) + int block_size = getBlockSize(num); + int block_mfs = getBlockMfs(num); + int block_recursive = block_size - block_mfs; + for (const auto &[eq, var, ignore, ignore2] : blocks_derivatives[num]) { - unsigned int eq, var; - tie(eq, var, ignore, ignore) = it; int lag = 0; if (eq >= block_recursive && var >= block_recursive) { @@ -1083,14 +1074,14 @@ StaticModel::Write_Inf_To_Bin_File_Block(const string &basename, int num, } } - for (j = block_recursive; j < static_cast<int>(block_size); j++) + for (j = block_recursive; j < block_size; j++) { - unsigned int varr = getBlockVariableID(num, j); + int varr = getBlockVariableID(num, j); SaveCode.write(reinterpret_cast<char *>(&varr), sizeof(varr)); } - for (j = block_recursive; j < static_cast<int>(block_size); j++) + for (j = block_recursive; j < block_size; j++) { - unsigned int eqr = getBlockEquationID(num, j); + int eqr = getBlockEquationID(num, j); SaveCode.write(reinterpret_cast<char *>(&eqr), sizeof(eqr)); } SaveCode.close(); @@ -1119,7 +1110,7 @@ StaticModel::computingPass(int derivsOrder, int paramsDerivsOrder, const eval_co initializeVariablesAndEquations(); vector<BinaryOpNode *> neweqs; - for (unsigned int eq = 0; eq < equations.size() - aux_equations.size(); eq++) + for (int eq = 0; eq < static_cast<int>(equations.size() - aux_equations.size()); eq++) { expr_t eq_tmp = equations[eq]->substituteStaticAuxiliaryVariable(); neweqs.push_back(dynamic_cast<BinaryOpNode *>(eq_tmp->toStatic(*this))); @@ -1996,9 +1987,9 @@ StaticModel::writeStaticBlockMFSFile(const string &basename) const << " var_index = [];" << endl << endl << " switch nblock" << endl; - unsigned int nb_blocks = getNbBlocks(); + int nb_blocks = getNbBlocks(); - for (int b = 0; b < static_cast<int>(nb_blocks); b++) + for (int b = 0; b < nb_blocks; b++) { set<int> local_var; @@ -2011,7 +2002,7 @@ StaticModel::writeStaticBlockMFSFile(const string &basename) const { output << " y_tmp = " << basename << ".block.static_" << b+1 << "(y, x, params);" << endl; ostringstream tmp; - for (int i = 0; i < static_cast<int>(getBlockSize(b)); i++) + for (int i = 0; i < getBlockSize(b); i++) tmp << " " << getBlockVariableID(b, i)+1; output << " var_index = [" << tmp.str() << "];" << endl << " residual = y(var_index) - y_tmp(var_index);" << endl @@ -2037,15 +2028,15 @@ StaticModel::writeOutput(ostream &output, bool block) const if (!block) return; - unsigned int nb_blocks = getNbBlocks(); - for (int b = 0; b < static_cast<int>(nb_blocks); b++) + int nb_blocks = getNbBlocks(); + for (int b = 0; b < nb_blocks; b++) { BlockSimulationType simulation_type = getBlockSimulationType(b); - unsigned int block_size = getBlockSize(b); + int block_size = getBlockSize(b); ostringstream tmp_s, tmp_s_eq; tmp_s.str(""); tmp_s_eq.str(""); - for (unsigned int i = 0; i < block_size; i++) + for (int i = 0; i < block_size; i++) { tmp_s << " " << getBlockVariableID(b, i)+1; tmp_s_eq << " " << getBlockEquationID(b, i)+1; @@ -2185,9 +2176,9 @@ void StaticModel::computeChainRuleJacobian() { map<int, expr_t> recursive_variables; - unsigned int nb_blocks = getNbBlocks(); + int nb_blocks = getNbBlocks(); blocks_derivatives.resize(nb_blocks); - for (unsigned int block = 0; block < nb_blocks; block++) + for (int block = 0; block < nb_blocks; block++) { block_derivatives_equation_variable_laglead_nodeid_t tmp_derivatives; recursive_variables.clear(); @@ -2257,11 +2248,11 @@ StaticModel::collect_block_first_order_derivatives() { //! vector for an equation or a variable indicates the block number vector<int> equation_2_block(equation_reordered.size()), variable_2_block(variable_reordered.size()); - unsigned int nb_blocks = getNbBlocks(); - for (unsigned int block = 0; block < nb_blocks; block++) + int nb_blocks = getNbBlocks(); + for (int block = 0; block < nb_blocks; block++) { - unsigned int block_size = getBlockSize(block); - for (unsigned int i = 0; i < block_size; i++) + int block_size = getBlockSize(block); + for (int i = 0; i < block_size; i++) { equation_2_block[getBlockEquationID(block, i)] = block; variable_2_block[getBlockVariableID(block, i)] = block; diff --git a/src/StaticModel.hh b/src/StaticModel.hh index 3c85d9a70f3ed82a6749272266921ac1f2b70361..d44febc477d8de12e4230bc90eff7c51276bc6cf 100644 --- a/src/StaticModel.hh +++ b/src/StaticModel.hh @@ -193,7 +193,7 @@ public: void addAllParamDerivId(set<int> &deriv_id_set) override; //! Return the number of blocks - unsigned int + int getNbBlocks() const override { return (block_type_firstequation_size_mfs.size()); @@ -205,43 +205,43 @@ public: return (get<0>(block_type_firstequation_size_mfs[block_number])); }; //! Return the first equation number of a block - unsigned int + int getBlockFirstEquation(int block_number) const override { return (get<1>(block_type_firstequation_size_mfs[block_number])); }; //! Return the size of the block block_number - unsigned int + int getBlockSize(int block_number) const override { return (get<2>(block_type_firstequation_size_mfs[block_number])); }; //! Return the number of exogenous variable in the block block_number - unsigned int + int getBlockExoSize(int block_number) const override { return 0; }; //! Return the number of colums in the jacobian matrix for exogenous variable in the block block_number - unsigned int + int getBlockExoColSize(int block_number) const override { return 0; } //! Return the number of feedback variable of the block block_number - unsigned int + int getBlockMfs(int block_number) const override { return (get<3>(block_type_firstequation_size_mfs[block_number])); }; //! Return the maximum lag in a block - unsigned int + int getBlockMaxLag(int block_number) const override { return (block_lag_lead[block_number].first); }; //! Return the maximum lead in a block - unsigned int + int getBlockMaxLead(int block_number) const override { return (block_lag_lead[block_number].second); @@ -292,13 +292,13 @@ public: int getBlockInitialEquationID(int block_number, int equation_number) const override { - return (static_cast<int>(inv_equation_reordered[equation_number]) - static_cast<int>(get<1>(block_type_firstequation_size_mfs[block_number]))); + return inv_equation_reordered[equation_number] - get<1>(block_type_firstequation_size_mfs[block_number]); }; //! Return the position of variable_number in the block number belonging to the block block_number int getBlockInitialVariableID(int block_number, int variable_number) const override { - return (static_cast<int>(inv_variable_reordered[variable_number]) - static_cast<int>(get<1>(block_type_firstequation_size_mfs[block_number]))); + return inv_variable_reordered[variable_number] - get<1>(block_type_firstequation_size_mfs[block_number]); }; //! Return the position of variable_number in the block number belonging to the block block_number int