- Bugs corrections in deterministic simulation with sparse option

git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1994 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
ferhat 2008-08-25 15:09:01 +00:00
parent 3bcff08e87
commit f18859fef2
3 changed files with 48 additions and 12 deletions

Binary file not shown.

View File

@ -93,19 +93,25 @@ Interpreter::compute_block_time() /*throw(EvalException)*/
case eEndogenous :
var=get_code_int
lag=get_code_int
#ifdef DEBUGC
mexPrintf(" y[%d]=%f\n",(it_+lag)*y_size+var,y[(it_+lag)*y_size+var]);
mexEvalString("drawnow;");
#endif
//#ifdef DEBUGC
if(var==153)
{
mexPrintf(" FLD y[var=%d,time=%d,lag=%d,%d]=%f\n",var,it_,lag,(it_+lag)*y_size+var,y[(it_+lag)*y_size+var]);
mexEvalString("drawnow;");
}
//#endif
Stack.push(y[(it_+lag)*y_size+var]);
break;
case eExogenous :
var=get_code_int
lag=get_code_int
#ifdef DEBUGC
mexPrintf(" x[%d]=%f\n",it_+lag+var*nb_row_x,x[it_+lag+var*nb_row_x]);
mexEvalString("drawnow;");
#endif
//#ifdef DEBUGC
if(var==6)
{
mexPrintf(" FLD x[%d, time=%d, var=%d, lag=%d]=%f\n",it_+lag+var*nb_row_x,it_,var,lag,x[it_+lag+var*nb_row_x]);
mexEvalString("drawnow;");
}
//#endif
Stack.push(x[it_+lag+var*nb_row_x]);
break;
case eExogenousDet :
@ -187,6 +193,11 @@ Interpreter::compute_block_time() /*throw(EvalException)*/
mexEvalString("drawnow;");
#endif
y[(it_+lag)*y_size+var] = Stack.top();
if(var==153)
{
mexPrintf(" FSTP y[var=%d,time=%d,lag=%d,%d]=%f\n",var,it_,lag,(it_+lag)*y_size+var,y[(it_+lag)*y_size+var]);
mexEvalString("drawnow;");
}
#ifdef DEBUGC
mexPrintf("%f\n",y[(it_+lag)*y_size+var]);
mexEvalString("drawnow;");
@ -980,8 +991,10 @@ Interpreter::simulate_a_block(int size,int type, string file_name, string bin_ba
//mexPrintf("Per_u_=%d\n",Per_u_);
Per_y_=it_*y_size;
//mexPrintf("ok\n");
//mexPrintf("compute_block_time\n");
set_code_pointer(begining);
compute_block_time();
//mexPrintf("end of compute_block_time\n");
/*if(Gaussian_Elimination)
initialize(periods, nb_endo, y_kmin, y_kmax, y_size, u_count, u_count_init, u, y, ya, slowc, y_decal, markowitz_c, res1, res2, max_res);*/
//mexPrintf("ok1\n");
@ -996,7 +1009,11 @@ Interpreter::simulate_a_block(int size,int type, string file_name, string bin_ba
{
double rr;
/*if(fabs(y[Per_y_+Block_Contain[i].Variable])>solve_tolf)*/
rr=r[i]/(1+y[Per_y_+Block_Contain[i].Variable]);
//mexPrintf("res[%d]=%f\n",i,r[i]);
if(fabs(1+y[Per_y_+Block_Contain[i].Variable])>eps)
rr=r[i]/(1+y[Per_y_+Block_Contain[i].Variable]);
else
rr=r[i];
/*else
rr=r[i];*/
if (max_res<fabs(rr))

View File

@ -114,11 +114,11 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
mexWarnMsgTxt("Not enough space. Filename is truncated.");
//mexPrintf("fname=%s\n",fname);
col_y=mxGetN(mxGetFieldByNumber(oo_, 0, mxGetFieldNumber(oo_,"endo_simul")));;
if (col_y<row_x)
/*if (col_y<row_x)
{
row_y=row_y/row_x;
col_y=row_x;
}
}*/
solve_tolf=*(mxGetPr(mxGetFieldByNumber(options_, 0, mxGetFieldNumber(options_,"dynatol"))));
//mexPrintf("col_y=%d row_y=%d\n",col_y, row_y);
size_of_direction=col_y*row_y*sizeof(double);
@ -128,7 +128,26 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
memset(direction,0,size_of_direction);
x=(double*)mxMalloc(col_x*row_x*sizeof(double));
for (i=0;i<row_x*col_x;i++)
x[i]=double(xd[i]);
x[i]=double(xd[i]);
/*mexPrintf("1 ");
for (i=0;i<row_x*col_x;i++)
{
x[i]=double(xd[i]);
if(!(i % row_x) && i>0)
mexPrintf("\n%d %f ",i/row_x+1,x[i]);
else
mexPrintf("%f ",x[i]);
}
for(i=0;i<row_x;i++)
{
for(j=0;j<col_x;j++)
{
x[j*row_x+i]=xd[i*col_x+j];
mexPrintf("%f ",xd[i*col_x+j]);
}
mexPrintf("\n");
}
*/
for (i=0;i<row_y*col_y;i++)
y[i]=double(yd[i]);
y_size=row_y;