%---------------------------------------------------------------------------------------------------------------------------------------------------------;
% Two countries a and b, and a rest of the world (star);
var
%U_a                                                                                                   
%U_b
C_a                                                                                                     %Aggregate households consumption
C_b
L_a                                                                                                     %Labor supply of Household
L_b
P_a                                                                                                     % Consumer price index
P_b
W_a                                                                                                   % Wage level
W_b
tau_a                                                                                                 % Implicit tax on consumption
tau_b
R_a                                                                                                     % Nominal Return
R_b
R_star                                                                                                 % Rest of the world nominal return
TR_a                                                                                                    % Transfers
TR_b
R_k_a                                                                                                  % Return on capital
R_k_b
C_star_a                                                                                            % Domestic consumption of rest of the word's goods
C_star_b
C_z_a                                                                                                  % Domestic consumption of goods providing from the z area
C_z_b
C_a_a                                                                                                  % Domestic consomption of national goods
C_b_a                                                                                                  % Domestic consomption of goods providing from the country b
C_b_b                                                                                                  % Domestic consomption of national goods
C_a_b                                                                                                 % Domestic consomption of goods providing from the country a
I_a                                                                                                       % Aggregate investment
I_b
I_star_a                                                                                               %Rest of the Wold investment in domestic country
I_star_b
I_z_a                                                                                                      % Area z's investment in domestic country
I_z_b
I_a_a                                                                                                     % Domestic investment
I_b_a                                                                                                   % Investment of b in country a
I_b_b                                                                                                   % Domestic investment
I_a_b                                                                                                   % Investment of a in country a
P_star_a                                                                                               % Price of RW's good in country a
P_star_b
P_z_a                                                                                                   %Price of Z area's goods and services sold in country a
P_z_b
P_a_a                                                                                                    % Domestic price of national goods
P_b_a
P_b_b
P_a_b
s_ab                                                                                                        % Nominal exchange rate between country a and b
s_a                                                                                                         % Nominal exchange rate betweeen Country a and te RW
s_b                                                                                                         % Nominal exchange rate betweeen Country b and te RW
TT_b_a                                                                                                  % Terms of trade between b and a
TT_a_b                                                                                                  % Terms of trade between a and b   
TT_star_a                 % Terms of trade between RW and a
TT_star_b                  % Terms of trade between RW and b
Upsilon_a                                                                                              % Relative price (CPI and domestic price of national goods Country a) 
Upsilon_b                                                                                              % Relative price (CPI and domestic price of national goods Country b) 
Y_a                                                                                                         % Output of country a
Y_b
A_a                                                                                                         % Productivity shock
A_b
K_a                                                                                                         % Capital
K_b
Cm_a                                                                                                       % Marginal cost
Cm_b

RMC_a                                                                                                     % Real marginal cost
RMC_b
lmbd_a                                                                                                     % Lagragian multiplicator
lmbd_b
%P_opt_aa                              % Optimizing price
%P_opt_bb
%Y_opt_a                                 % Optimizing price
%Y_opt_b
Pi_a_a                                                                                                   % Inflation rate of domestic good
Pi_b_b
Pi_a                                                                                                        % Gross inflation rate
Pi_b
Lambda_a                                                                                           % Willingness to lend
Lambda_b

Nw_a                                                                                                    % Financial intermediairies net worth
Nw_b
TS_a                                                                                                        % Total Saving
TS_b
B_a                                                                                                         % Domestic bonds
B_b
Z_a                                                                                                        % Loans allocations shock
Z_b
D_a                                                                                                        % Financial intermediairies foreign debt
D_b

F_a                                                                                                         % External risk premium
F_b
TW_a                                                                                                    % Total Worth of financial internediairies
TW_b
EX_a                                                                                                        % Exogenous export shock
EX_b
G_a                                                                                                        % Public expenditures 
G_b
P_star
;
%91 equations
%---------------------------------------------------------------------------------------------------------------------------------------------------------;
% Déclaration des variables endogènes
%---------------------------------------------------------------------------------------------------------------------------------------------------------;
varexo
eps_aa 
eps_ab 
eps_za
eps_zb  
eps_r_star  
eps_tr_a 
eps_tr_b 
eps_tau_a  
eps_tau_b 
eps_ex_a 
eps_ex_b
eps_p_star
;

%-------------------------------------------------------------------------------------------------------------------------------------------------------;
% Parameters;
%-------------------------------------------------------------------------------------------------------------------------------------------------------;

parameters
beta eta phi delta nu alpha gamma mu varpi theta psi varphi vartheta kappa varsigma Lambda_bar omega 
rho_r_star rho_za rho_zb rho_aa rho_ab rho_tr_a rho_tr_b rho_tau_a rho_tau_b rho_ex_a rho_ex_b
sigma_r_star sigma_za sigma_zb sigma_aa sigma_ab sigma_tr_a sigma_tr_b sigma_tau_a sigma_tau_b 
sigma_ex_a sigma_ex_b Y_bar_a Y_bar_b tau_bar_a tau_bar_b TR_bar_a TR_bar_b varrho
rho_p_star sigma_p_star
;


beta=0.99; eta=2; phi=1; delta=0.025; nu=0.37; gamma=0.5;  mu=1.5; varpi=1.5; theta=7; alpha=0.63;  psi=0.67;
% 0.66, 0.74, 0.9; 
%0.79, 0.87, 0.9;
varphi=0.5; vartheta=0.75;  kappa=0.02; varsigma=1.47; Lambda_bar=0.793; omega=0.94; rho_r_star=0.95;
rho_za=0.8; rho_zb=0.8; rho_aa=0.8; rho_ab=0.8; rho_tr_a=0.8; rho_tr_b=0.8; rho_tau_a=0.8; rho_tau_b=0.8;
rho_ex_a=0.8; rho_ex_b=0.8; sigma_r_star=0.05; sigma_za=0.02; sigma_zb=0.02; sigma_aa=0.02; sigma_ab=0.02;
sigma_tr_a=0.02;  sigma_tr_b=0.02; sigma_tau_a=0.02; sigma_tau_b=0.02; sigma_ex_a=0.02; sigma_ex_b=0.02;
Y_bar_a=1.; Y_bar_b=1.; tau_bar_a=0.15; tau_bar_b=0.05; TR_bar_a=0.09; TR_bar_b=0.09;  
varrho=((1-vartheta)*(1-beta*vartheta))/vartheta;
rho_p_star=0.8;  sigma_p_star=0.02;

%----------------------------------------------------------------------------------------------------------------------------------------------------;
%Model;
%----------------------------------------------------------------------------------------------------------------------------------------------------;
model;

%---;
% Households(26);
%---;

%U_a=(C_a^(1-eta))/(1-eta)-(L_a^(1+phi))/(1+phi);
%U_b=(C_b^(1-eta))/(1-eta)-(L_b^(1+phi))/(1+phi);
lmbd_a=C_a^(-eta)/((1-tau_a)*P_a);
lmbd_b=C_b^(-eta)/((1-tau_b)*P_b);
C_a^eta*L_a^phi=(W_a/(1+tau_a)*P_a_a)*Upsilon_a^(-1);
C_b^eta*L_b^phi=(W_b/(1+tau_b)*P_b_b)*Upsilon_b^(-1);
Upsilon_a=P_a/P_a_a;
P_a/P_a_a=(alpha*TT_star_a^(1-mu)+(1-alpha)*((gamma+(1-gamma)*TT_b_a^(1-varpi))^(1/(1-varpi)))^(1-mu))^(1/(1-mu));
Upsilon_b=P_b/P_b_b;
P_b/P_b_b=(psi*TT_star_b^(1-mu)+(1-psi)*((varpi+(1-varpi)*TT_a_b^(1-varpi))^(1/(1-varpi)))^(1-mu))^(1/(1-mu));
((1+tau_a)/(1+tau_a(-1)))=beta*R_a*(C_a^eta(-1)/(Pi_a*C_a^eta));
Pi_a=P_a/P_a(-1);
((1+tau_b)/(1+tau_b(-1)))=beta*R_b*(C_b^eta(-1)/(Pi_b*C_b^eta));
Pi_b=P_b/P_b(-1);

% C_a=(alpha^(1/mu)*C_star_a^((mu-1)/mu)+ (1-alpha)^(1/mu)*C_z_a^((mu-1)/mu))^(mu/(mu-1));
% C_z_a=(gamma^(1/varpi)*C_a_a^((varpi-1)/varpi)+ (1-gamma)^(1/varpi)*C_b_a^((varpi-1)/varpi))^(varpi/(varpi-1));
P_a=(alpha*P_star_a^(1-mu)+(1-alpha)*P_z_a^(1-mu))^(1/(1-mu));
P_z_a=(gamma*P_a_a^(1-varpi)+(1-gamma)*P_b_a^(1-varpi))^(1/(1-varpi));
C_b_a=(1-gamma)*(1-alpha)*(P_b_a/P_z_a)^(-varpi)*(P_z_a/P_a)^(-mu)*C_a;
C_a_a=(1-alpha)*gamma*(P_a_a/P_z_a)^(-varpi)*(P_z_a/P_a)^(-mu)*C_a;
C_z_a= (1-alpha)*(P_z_a/P_a)^(-mu)*C_a;
C_star_a= alpha*(P_star_a/P_a)^(-mu)*C_a;

% C_b=(psi^(1/mu)*C_star_b^((mu-1)/mu)+ (1-psi)^(1/mu)*C_z_b^((mu-1)/mu))^(mu/(mu-1));
% C_z_b=(varphi^(1/varpi)*C_b_b^((varpi-1)/varpi)+ (1-varphi)^(1/varpi)*C_a_b^((varpi-1)/varpi))^(varpi/(varpi-1));
P_b=(psi*P_star_b^(1-mu)+(1-psi)*P_z_b^(1-mu))^(1/(1-mu));
P_z_b=(varphi*P_b_b^(1-varpi)+(1-varphi)*P_a_b^(1-varpi))^(1/(1-varpi));
C_z_b=(1-varphi)*(P_z_b/P_b)^(-mu)*C_b;
C_star_b=varphi*(P_star_b/P_b)^(-mu)*C_b;
C_a_b=(1-psi)*(1-varphi)*(P_a_b/P_z_b)^(-varpi)*(P_z_b/P_b)^(-mu)*C_b;
C_b_b/C_a_b=(varphi/(1-varphi))*(P_b_b/P_a_b)^(-varpi);

%---;
%Open economy (4);
%---;

TT_star_a=P_star_a/P_a_a;
TT_star_b=P_star_b/P_b_b;
TT_b_a=P_b_a/P_a_a;
TT_a_b=P_a_b/P_b_b;
%s_ab=P_b_b/P_b_a;
s_a=P_star/P_a;
s_b=P_star/P_b;
s_ab=P_a_b/P_a_a;

%---;
%Financial intermediairies (16);
%---;

K_a=Lambda_a(-1)*(Nw_a(-1)+TS_a);
TS_a=B_a+s_a(-1)*D_a;
Lambda_a=Lambda_bar*(Y_a/Y_bar_a)^varsigma*Z_a;
R_k_a=R_star*(s_a(-1)/s_a)*F_a;
%R_a=R_star*(s_a(-1)/s_a)*F_a;
F_a=(K_a/Nw_a(-1))^kappa;
Nw_a=omega*(R_k_a*K_a-R_a*B_a-R_star*s_a*D_a*F_a);
R_k_a=R_a+(1-delta);
K_b=Lambda_b(-1)*(Nw_b(-1)+TS_b);
TS_b=B_b+s_b(-1)*D_b;
Lambda_b=Lambda_bar*(Y_b/Y_bar_b)^varsigma*Z_b;
R_k_b=R_star*(s_b(-1)/s_b)*F_b;
%R_b=R_star*(s_b(-1)/s_b)*F_b;
F_b=(K_b/Nw_b(-1))^kappa;
Nw_b=omega*(R_k_b*K_b-R_b*B_b-R_star*s_b*D_b*F_b);
R_k_b=R_b+(1-delta);
TW_a=R_k_a*K_a-R_a*B_a-R_star*s_a*D_a*F_a;
TW_b=R_k_b*K_b-R_b*B_b-R_star*s_b*D_b*F_b;
s_a(-1)*Lambda_a(-1)*D_a=I_a(-1)+(1-delta)*K_a-Lambda_a*Nw_a-Lambda_a*(W_a(-1)*L_a(-1)+R_a(-1)*B_a(-1)+TR_a(-1)-P_a(1)*(1+tau_a(-1))*C_a(-1));
s_b(-1)*Lambda_b(-1)*D_b=I_b(-1)+(1-delta)*K_b-Lambda_b*Nw_b-Lambda_b*(W_b(-1)*L_b(-1)+R_b(-1)*B_b(-1)+TR_b(-1)-P_b(1)*(1+tau_b(-1))*C_b(-1));

%---;
% Public authorities (2);
%---;

G_a=tau_a*C_a-(TR_a/P_a_a)*Upsilon_a^(-1);
G_b=tau_b*C_b-(TR_b/P_b_b)*Upsilon_b^(-1);

%---;
% Firms (24);
%---;

Y_a=A_a*K_a^nu*L_a^(1-nu);
W_a/P_a_a=(1-nu)*(Y_a/L_a);
%R_k_a/P_a_a=nu*(Y_a/K_a);
(1-nu)*R_k_a*K_a=nu*W_a*L_a;
Cm_a=(R_k_a^nu*W_a^(1-nu))/((1-nu)^(1-nu)*nu^nu*A_a);
RMC_a=Cm_a/P_a_a;
Y_b=A_b*K_b^nu*L_b^(1-nu);
W_b/P_b_b=(1-nu)*(Y_b/L_b);
% R_k_b/P_b_b=nu*(Y_b/K_b);
(1-nu)*R_k_b*K_b=nu*W_b*L_b;
Cm_b=(R_k_b^nu*W_b^(1-nu))/((1-nu)^(1-nu)*nu^nu*A_b);
RMC_b=Cm_b/P_b_b;
K_a=(1-delta)*K_a(-1)+I_a(-1);
K_b=(1-delta)*K_b(-1)+I_b(-1);
I_b_a=(1-gamma)*(1-alpha)*(P_b_a/P_z_a)^(-varpi)*(P_z_a/P_a)^(-mu)*I_a;
I_a_a=(1-alpha)*gamma*(P_a_a/P_z_a)^(-varpi)*(P_z_a/P_a)^(-mu)*I_a;
I_z_a= (1-alpha)*(P_z_a/P_a)^(-mu)*I_a;
I_star_a= alpha*(P_star_a/P_a)^(-mu)*I_a;
%I_a=(alpha^(1/mu)*I_star_a^((mu-1)/mu)+ (1-alpha)^(1/mu)*I_z_a^((mu-1)/mu))^(mu/(mu-1));
% I_z_a=(gamma^(1/varpi)*I_a_a^(varpi-1)/varpi)+ (1-gamma)^(1/varpi)*I_b_a^((varpi-1)/varpi))^(varpi/(varpi-1));
%I_b=(psi^(1/mu)*I_star_b^((mu-1)/mu)+ (1-psi)^(1/mu)*I_z_b^((mu-1)/mu))^(mu/(mu-1));
% I_z_b=(varphi^(1/varpi)*I_b_b^(varpi-1)/varpi)+ (1-varphi)^(1/varpi)*I_a_b^((varpi-1)/varpi))^(varpi/(varpi-1));
I_z_b=(1-varphi)*(P_z_b/P_b)^(-mu)*I_b;
I_star_b=varphi*(P_star_b/P_b)^(-mu)*I_b;
I_a_b=(1-psi)*(1-varphi)*(P_a_b/P_z_b)^(-varpi)*(P_z_b/P_b)^(-mu)*I_b;
I_b_b/I_a_b=(varphi/(1-varphi))*(P_b_b/P_a_b)^(-varpi);
Pi_a_a=P_a_a/P_a_a(-1);
Pi_b_b=P_b_b/P_b_b(-1);
Pi_a_a(-1)=beta*Pi_a_a+varrho*RMC_a;
Pi_b_b(-1)=beta*Pi_b_b+varrho*RMC_b;

%---;
% Market clearing (2);
%---;

Y_a=(1-alpha)*gamma*(P_a_a/P_z_a)^(-varpi)*(P_z_a/P_a)^(-mu)*(C_a+I_a)+(1-psi)*(1-varphi)*(P_a_b/P_z_b)^(-varpi)*(P_z_b/P_b)^(-mu)*(C_b+I_b)+G_a+s_a*EX_a+(1-omega)*TW_a;
Y_b=(1-psi)*varphi*(P_b_b/P_z_b)^(-varpi)*(P_z_b/P_b)^(-mu)*(C_b+I_b)+(1-gamma)*(1-alpha)*(P_b_a/P_z_a)^(-varpi)*(P_z_a/P_a)^(-mu)*(C_a+I_a)+G_b+s_b*EX_b+(1-omega)*TW_b;

%---;
% Exogenuous processus (11);
%---;

log(EX_a)=rho_ex_a*log(EX_a(-1))+eps_ex_a;
log(EX_b)=rho_ex_b*log(EX_b(-1))+eps_ex_b;
log(A_a)=rho_aa*log(A_a(-1))+eps_aa;
log(A_b)=rho_ab*log(A_b(-1))+eps_ab;
log(R_star)=rho_r_star*log(R_star(-1))+eps_r_star;
log(Z_a)=rho_za*log(Z_a(-1))+eps_za;
log(Z_b)=rho_zb*log(Z_b(-1))+eps_zb;
log(tau_b/tau_bar_b)=rho_tau_b*log(tau_b(-1)/tau_bar_b)+eps_tau_b;
log(TR_b/TR_bar_b)=rho_tr_b*log(TR_b(-1)/TR_bar_b)+eps_tr_b;
log(tau_a/tau_bar_a)=rho_tau_a*log(tau_a(-1)/tau_bar_a)+eps_tau_a;
log(TR_a/TR_bar_a)=rho_tr_a*log(TR_a(-1)/TR_bar_a)+eps_tr_a;
log(P_star)=rho_p_star*log(P_star(-1))+eps_p_star;
end;


%----------------------------------------------------------------------------------------------------------------------------------------------------;
%Steady state;
%----------------------------------------------------------------------------------------------------------------------------------------------------;

initval;
%U_a=0;
%U_b=0;
C_a=1;
C_b=1;
C_star_a=alpha*C_a;
C_b_a=(1-gamma)*(1-alpha)*C_a;
C_a_a=gamma*(1-alpha)*C_a;
C_z_a=(1-alpha)*C_a;
C_star_b=psi*C_b;
C_z_b=(1-psi)*C_b;
C_b_b=(1-psi)*varphi*C_b;
C_a_b=(1-psi)*(1-varphi)*C_b;

%----;

I_a=1;
I_b=1;
%I_a=0.089*Y_bar_a;
%I_b=0.09*Y_bar_b;
I_star_a=alpha*I_a;
I_b_a=(1-gamma)*(1-alpha)*I_a;
I_a_a=gamma*(1-alpha)*I_a;
I_z_a=(1-alpha)*I_a;
I_star_b=psi*I_b;
I_z_b=(1-psi)*I_b;
I_b_b=(1-psi)*varphi*I_b;
I_a_b=(1-psi)*(1-varphi)*I_b;

%----;

P_a=1;
P_b=1;
Pi_a=1;
Pi_b=1;
Pi_a_a=1;
Pi_b_b=1;
Cm_a=1;
Cm_b=1;
RMC_a=1;
RMC_b=1;
P_star_a=1;
P_star_b=1;
P_z_a=1;
P_z_b=1;
P_a_a=1;  
P_b_a=1;
P_b_b=1;
P_a_b=1;
TT_star_a=1;
TT_star_b=1;
TT_a_b=11;
TT_b_a=1;
P_star=1;

%---;

%Y_a=(1-alpha)*gamma*(C_a+I_a)+(1-psi)*(1-varphi)*(C_b+I_b)+tau_a-TR_a+(1-omega)*TW_a;
%Y_b=(1-psi)*varphi*(C_b+I_b)+(1-gamma)*(1-alpha)*(C_a+I_a)+ tau_b-TR_b+(1-omega)*TW_b;

Y_a=Y_bar_a; 
Y_b=Y_bar_b;
Lambda_a=Lambda_bar;
Lambda_b=Lambda_bar;
TR_a=TR_bar_a; 
TR_b=TR_bar_b;
tau_a=tau_bar_a;
tau_b=tau_bar_b;
R_star=1;
R_a=1/beta;
R_b=R_a;
Z_a=1;
Z_b=1;
Upsilon_a=1;
Upsilon_b=1;
R_k_a=beta^(-1)+(1-delta);
R_k_b=beta^(-1)+1-delta;
W_a=(1-nu)*(R_k_a/nu)^(-nu/(1-nu));
W_b=(1-nu)*(R_k_b/nu)^(-nu/(1-nu));
A_a=1; A_b=1;
EX_a=1; EX_b=1;
K_a=I_a/delta;
K_b=I_b/delta;
Nw_a=K_a/2.2;
F_a=(K_a/Nw_a)^kappa;
Nw_b=K_b/2.2;
F_b=(K_b/Nw_b)^kappa;
L_a=R_k_a*K_a*(1-nu)/(nu*W_a);
L_b=R_k_b*K_b*(1-nu)/(nu*W_b);
G_a=0.141*Y_a;
G_b=0.131*Y_b;
G_a=0.141*Y_bar_a;
G_b=0.131*Y_bar_b;
TW_a=R_k_a*K_a-R_a*B_a-R_star*s_a*D_a*F_a;
TW_b=R_k_b*K_b-R_b*B_b-R_star*s_b*D_b*F_b;
%s_a=P_star/P_a;
%s_b=P_star/P_b;
%s_ab=P_a_b/P_a_a;
end;

%----------------------------------------------------------------------------------------------------------------------------------------------------;
%Shocks;
%----------------------------------------------------------------------------------------------------------------------------------------------------;

shocks;
var  eps_aa; stderr sigma_aa; 
var eps_ab; stderr sigma_ab; 
var eps_za; stderr sigma_za;
var eps_zb; stderr sigma_zb;  
var eps_r_star; stderr sigma_r_star;  
var eps_tr_a; stderr sigma_tr_a; 
var eps_tr_b; stderr sigma_tr_b; 
var eps_tau_a; stderr sigma_tau_a;  
var eps_tau_b; stderr sigma_tau_b; 
var eps_ex_a; stderr sigma_ex_a; 
var eps_ex_b; stderr sigma_ex_b;
var  eps_p_star; stderr sigma_p_star;
end;

steady;
check;
write_latex_dynamic_model;
model_diagnostics;
stoch_simul(order=2, irf=40); 