Skip to content
Snippets Groups Projects
Commit 25b3c84b authored by Ferhat Mihoubi's avatar Ferhat Mihoubi
Browse files

RESID command is compatible now with block option and without bytecode option (closes ticket #45)

parent 0ecfc5ee
No related branches found
No related tags found
No related merge requests found
...@@ -55,7 +55,20 @@ end ...@@ -55,7 +55,20 @@ end
% Compute the residuals % Compute the residuals
if options_.block && ~options_.bytecode if options_.block && ~options_.bytecode
error('RESID: incompatibility with "block" without "bytecode" option') z = zeros(M_.endo_nbr,1);
for i = 1:length(M_.blocksMFS)
[r, g, yy, var_indx] = feval([M_.fname '_static'],...
i,...
oo_.steady_state,...
[oo_.exo_steady_state; ...
oo_.exo_det_steady_state], M_.params);
if isempty(M_.blocksMFS{i})
idx = var_indx;
else
idx = M_.blocksMFS{i};
end
z(idx) = r;
end
elseif options_.block && options_.bytecode elseif options_.block && options_.bytecode
[z,check] = bytecode('evaluate','static'); [z,check] = bytecode('evaluate','static');
else else
......
...@@ -1069,9 +1069,10 @@ StaticModel::writeStaticBlockMFSFile(const string &basename) const ...@@ -1069,9 +1069,10 @@ StaticModel::writeStaticBlockMFSFile(const string &basename) const
string func_name = basename + "_static"; string func_name = basename + "_static";
output << "function [residual, g1, y] = " << func_name << "(nblock, y, x, params)" << endl output << "function [residual, g1, y, var_index] = " << func_name << "(nblock, y, x, params)" << endl
<< " residual = [];" << endl << " residual = [];" << endl
<< " g1 = [];" << endl << " g1 = [];" << endl
<< " var_index = [];\n" << endl
<< " switch nblock" << endl; << " switch nblock" << endl;
unsigned int nb_blocks = getNbBlocks(); unsigned int nb_blocks = getNbBlocks();
...@@ -1086,9 +1087,18 @@ StaticModel::writeStaticBlockMFSFile(const string &basename) const ...@@ -1086,9 +1087,18 @@ StaticModel::writeStaticBlockMFSFile(const string &basename) const
BlockSimulationType simulation_type = getBlockSimulationType(b); BlockSimulationType simulation_type = getBlockSimulationType(b);
if (simulation_type == EVALUATE_BACKWARD || simulation_type == EVALUATE_FORWARD) if (simulation_type == EVALUATE_BACKWARD || simulation_type == EVALUATE_FORWARD)
output << " y = " << func_name << "_" << b+1 << "(y, x, params);\n"; {
output << " y_tmp = " << func_name << "_" << b+1 << "(y, x, params);\n";
ostringstream tmp;
for (int i = 0; i < getBlockSize(b); i++)
tmp << " " << getBlockVariableID(b, i)+1;
output << " var_index = [" << tmp.str() << "];\n";
output << " residual = y(var_index) - y_tmp(var_index);\n";
output << " y = y_tmp;\n";
}
else else
output << " [residual, y, g1] = " << func_name << "_" << b+1 << "(y, x, params);\n"; output << " [residual, y, g1] = " << func_name << "_" << b+1 << "(y, x, params);\n";
} }
output << " end" << endl output << " end" << endl
<< "end" << endl; << "end" << endl;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment