/* 
8 May 2010
Replicating Ireland's model
*/


/* ------- Start VARIABLES AND PARAMETERS ------- */

  var c h h_c h_i i i_c i_i k_c k_i lam_c lam_i xi_c xi_i a al ag z_c z_i zl_c zl_i zg_c zg_i;      /* endogenous variables (Format ab_c means a is the var, b is the superscript or power, c is the subscript) */
  varexo epsl_a epsg_a epsl_c epsg_c epsl_i epsg_i;     /* the variables to be shocked (exogenous), found on in table page 14/20 in Ireland */
  parameters gamma theta_c theta_i phi_hc phi_hi phi_kc phi_ki conag conzg_c conzg_i rhol_a rhog_a rhol_c rhog_c rhol_i rhog_i sigl_a sigg_a sigl_c sigg_c sigl_i sigg_i beta eta_i eta_c kap_i kap_c del_i del_c; /* beta eta_i eta_c kap_i kap_c del_i del_c are defined in the note at the bottom of the table on page 9/20 in Ireland */

  gamma = 0.0775;
  theta_c = 0.3918;        /* theta_c = theta_i */
  theta_i = 0.3918;        /* theta_c = theta_i */
  phi_hc = 4.3788;         /* phi_hc = phi_hi */
  phi_hi = 4.3788;         /* phi_hc = phi_hi */
  phi_kc = 17.3319;        /* phi_kc = phi_ki */
  phi_ki = 17.3319;        /* phi_kc = phi_ki */
  
  conag = 0.9999;          /* Constant (no t subscript) */
  conzg_c = 1.0047;        /* Constant (no t subscript) */
  conzg_i = 1.0063;        /* Constant (no t subscript) */
  
  rhol_a = 0.3652;
  rhog_a = 0.0000;
  rhol_c = 0.0000;
  rhog_c = 0.5964;
  rhol_i = 0.8229;
  /*rhog_i =                 /* This is undefined, since sigg_i = 0.0000 */ */
  
  sigl_a = 0.0363;
  sigg_a = 0.0088;
  sigl_c = 0.0063;
  sigg_c = 0.0068;
  sigl_i = 0.0706;
  sigg_i = 0.0000;
  
  beta = 0.99;
  eta_i = 0.9999;             /* eta_i = eta_c = conag, which is necessary to have zero steady state labour adjustment costs*/
  eta_c = 0.9999;             /* eta_i = eta_c = conag, which is necessary to have zero steady state labour adjustment costs*/
  kap_i = 0.03119937;         /* conag*conzg_i - 1 + del_i */
  kap_c = 0.03119937;         /* conag*conzg_i - 1 + del_c */
  del_i = 0.025;              /* del_i =  del_c*/
  del_c = 0.025;              /* del_i =  del_c*/

/* ------- End VARIABLES AND PARAMETERS ------- */




/* ------- Start MODEL ------- */

  model;     /* Note that the model will have the same number of equations as there are endogenous + exogenous variables defined in VARIABLES AND PARAMETERS. The following equations taken from pages 4-6 of Ireland's supplement */

    1/(c-gamma*(c(-1)/(ag(-1)*zg_i(-1)^theta_c*zg_c(-1)^(1-theta_c)))) - 1/((ag*zg_i^theta_c*zg_c^(1-theta_c))*c(+1)-gamma*c) = lam_c;
    
    1/a = ((1-theta_c)*lam_c*c)/h_c - phi_hc*lam_c*(ag(-1)*h_c/h_c(-1) - eta_c)*(ag(-1)/h_c(-1))*(1-phi_kc/2*(i_c/k_c - kap_c)^2)*k_c^theta_c*(z_c*h_c)^(1-theta_c) + beta*phi_hc*(lam_c(+1)*(ag*h_c(+1)/h_c - eta_c)*ag*h_c(+1)/h_c/h_c*(1 - phi_kc/2*(i_c(+1)/k_c(+1))^2)*(k_c(+1))^theta_c*(z_c(+1)*h_c(+1)^(1-theta_c)));
    
    1/a = (1-theta_i)*lam_i*i/h_i - phi_hi*lam_i*(ag(-1)*h_i/(h_i(-1)) - eta_i)*(ag(-1)/h_i(-1))*(1- phi_ki/2*(i_i/k_i - kap_i)^2)*k_i^theta_i*(z_i*h_i)^(1-theta_i) + beta*phi_hi*(lam_i(+1)*(ag*h_i(+1)/h_i - eta_i)*(ag*h_i(+1)/h_i/h_i)* (1-phi_ki/2*(i_i(+1)/k_i(+1)-kap_i)^2)*(k_i(+1))^theta_i*(z_i(+1)*h_i(+1))^(1-theta_i));
    
    xi_c = lam_i + phi_kc*lam_c*(1-phi_hc/2*(ag(-1)*h_c/h_c(-1) - eta_c)^2)*(i_c/k_c-kap_c)*k_c^(theta_c-1)*(z_c*h_c)^(1-theta_c);
    
    xi_i = lam_i*(1+phi_ki*(1-phi_hi/2*(ag(-1)*h_i/h_i(-1)-eta_i)^2)*(i_i/k_i - kap_i)*k_i^(theta_i-1)*(z_i*h_i)^(1-theta_i));    /*watch out for this one it might not have the right number of brackets */     
  
    ag*zg_i*xi_c = beta*(1-del_c)*xi_c(+1) + beta*theta_c*(lam_c(+1)*c(+1)/(k_c(+1))) + beta*phi_kc*(lam_c(+1)*(1- phi_hc/2*( ag*h_c(+1)/h_c - eta_c )^2)*(i_c(+1)/k_c(+1) - kap_c)*(i_c(+1)/k_c(+1))*(k_c(+1))^(theta_c-1)*(z_c(+1)*h_c(+1))^(1-theta_c));
    
    ag*zg_i*xi_i = beta*(1-del_i)*xi_i(+1) + beta*theta_i*(lam_i(+1)*i(+1)/(k_i(+1))) + beta*phi_ki*(lam_i(+1)*(1- phi_hi/2*( ag*h_i(+1)/h_i - eta_i )^2)*(i_i(+1)/k_i(+1) - kap_i)*(i_i(+1)/k_i(+1))*(k_i(+1))^(theta_i-1)*(z_i(+1)*h_i(+1))^(1-theta_i)); /* Note that the Ireland supplement uses the following, nearly identical equation: ag*zg_i*xi_i = beta*(1-del_i)*xi_i(+1) + beta*theta_i*(lam_i(+1)*i(+1)/(k_i(+1))) + beta*phi_ki*(lam_i(+1)*(1- phi_hi/2*( ag*h_i(+1)/h_i - eta_i )^2)*(i_i(+1)/k_i(+1) - kap_i)*(i_i(+1)/k_i(+1))*(k_i)^(theta_i-1)*(z_i(+1)*h_i(+1))^(1-theta_i)) */
    
    c = (1-phi_hc/2*(ag(-1)*h_c/h_c(-1) - eta_c)^2)*(1-phi_kc/2*(i_c/k_c-kap_c)^2)*k_c^theta_c*(z_c*h_c)^(1-theta_c);
    
    i = (1-phi_hi/2*(ag(-1)*h_i/h_i(-1) - eta_i)^2)*(1-phi_ki/2*(i_i/k_i-kap_i)^2)*k_i^theta_i*(z_i*h_i)^(1-theta_i);
    
    (1-del_c)*k_c + i_c = ag*zg_i*k_c(+1);
    
    (1-del_i)*k_i + i_i = ag*zg_i*k_i(+1);
    
    i = i_c + i_i;
    
    h = h_c + h_i;
    
    ln(a) = ln(al) + ln(ag);
    
    ln(al) = rhol_a*ln(al(-1)) + epsl_a;
    
    ln(ag) = (1-rhog_a)*ln(conag) + rhog_a*ln(ag(-1)) + epsg_a;
    
    ln(z_c) = ln(zl_c) + ln(zg_c);
    
    ln(zl_c) = rhol_c*ln(zl_c(-1)) + epsl_c;
    
    ln(zg_c) = (1-rhog_c)*ln(conzg_c) + rhog_c*ln(zg_c(-1)) + epsg_c;
    
    ln(z_i) = ln(zl_i) + ln(zg_i);
    
    ln(zl_i) = rhol_i*ln(zl_i(-1)) + epsl_i;
    
    ln(zg_i) =  (1-rhog_i)*ln(conzg_i) + rhog_i*ln(zg_i(-1)) + epsg_i;
    
  end;

/* ------- End MODEL ------- */



/* ------- Start STEADY STATE description ------- */

  initval;          /* starting values */
    c =1;
    h =1;
    h_c =1;
    h_i =1;
    i =1;
    i_c =1;
    i_i =1;
    k_c =1;
    k_i =1;
    lam_c =1;
    lam_i =1;
    xi_c =1;
    xi_i =1;
    a =1;
    al =1;
    ag =1;
    z_c =1;
    z_i =1;
    zl_c =1;
    zl_i =1;
    zg_c =1;
    zg_i =1;
  end;

  steady;
  check;        /* Blanchard and Kahn conditions. "Check" computes and displays the eigenvalues of my system. For unique stable equilibrium in the neighborhood of the steady state, we want there to be as many eigenvalues larger than one in modulus as there are forward looking variables in the system */ 



/* ------- End STEADY STATE description ------- */




/* ------- Start SHOCKS ------- */

  shocks;
    var epsl_a = sigl_a^2;       /* add a shock with variance sigma squared, where esp*_* are introduced in VARIABLES AND PARAMETERS section of the code */    
    var epsl_c = sigl_c^2;
    var epsl_i = sigl_i^2;
    var epsg_a = sigg_a^2;
    var epsg_c = sigg_c^2;
    var epsg_i = sigg_i^2;
  end;
  

/* ------- End SHOCKS ------- */



/* ------- Start COMPUTATION (forecasting, estimating impulse response functions, etc.) ------- */

/* ------- End COMPUTATION */