% Two countries ('1' and '2'), two sector sectors ('A' and 'B')

var c, lambda, lambdaL, tobqA, tobqB, y, yB, yA, i, iA, iB, kA, kB, wA, wB, rA, rB, p, pB, aA, tby LA LB;                
var c2, lambda2, lambdaL2, tobqA2, tobqB2, y2, yB2, yA2, i2, iB2, iA2, kB2, kA2, wB2, wA2, rB2, rA2, aA2, tby2 LA2 LB2;
    
varexo eA2, eA;

parameters beta, delta, alphaA, alphaB, rho, gammaAB, psik, phi, thetaAB, L, L2;

beta = 0.97;                                                          % Discount factor
delta = 0.05;                                                         % depreciation rate 
phi=2;                                                                % intertemporal elasticity
gammaAB = 0.5;                                                        % consumption and investment weights
thetaAB=2;                                                            % elasticity of substitution between good A and good B
rho = 0.999;                                                              % shock persistence
alphaA = 0.3;                                                         % Capital share sector A
alphaB = 0.1;                                                         % Capital share sector B
psik = 3;                                                           % cost of adjustment for capital

L=2;
L2=2;

rB_ss  = delta + 1/beta -1;
rA_ss  = delta + 1/beta -1;
rB2_ss = delta + 1/beta -1;
rA2_ss = delta + 1/beta -1;

r_ss   = (delta + 1/beta -1);                                          

pA_ss  = 1;                                                            
pB_ss  = ((1-alphaA)*((r_ss/alphaA)^(alphaA/(alphaA-1))))/((1-alphaB)*((r_ss/alphaB)^(alphaB/(alphaB-1))));
p_ss   = (gammaAB+(1-gammaAB)*pB_ss^(1-thetaAB))^(1/(1-thetaAB));

LG_ss  = L+L2;
yG_ss  = LG_ss/((gammaAB/(pA_ss^thetaAB*p_ss^(1-thetaAB))) * (rA_ss/alphaA)^(alphaA/(1-alphaA)) + ((1-gammaAB)/(pB_ss^thetaAB*p_ss^(1-thetaAB))) * (rB_ss/alphaB)^(alphaB/(1-alphaB)));

y_ss   = yG_ss/2;
y2_ss  = yG_ss/2;

LA_ss  = (gammaAB*pA_ss^(-thetaAB)*p_ss^(thetaAB-1)*yG_ss)/((r_ss/alphaA)^(alphaA/(alphaA-1)))/2;             
LB_ss  = (LG_ss-2*LA_ss)/2;
LB2_ss = LB_ss;
LA2_ss = LA_ss;             

wA_ss  = (1-alphaA)*((rA_ss/alphaA)^(alphaA/(alphaA-1)));
wB_ss  = (1-alphaB)*((rB_ss/alphaB)^(alphaB/(alphaB-1)));
wA2_ss = (1-alphaA)*((rA2_ss/alphaA)^(alphaA/(alphaA-1)));
wB2_ss = (1-alphaB)*((rB2_ss/alphaB)^(alphaB/(alphaB-1)));

yA_ss  = (rA_ss/alphaA)^(alphaA/(alphaA-1))*LA_ss;
yB_ss  = (rB_ss/alphaB)^(alphaB/(alphaB-1))*LB_ss;
yA2_ss = (rA2_ss/alphaA)^(alphaA/(alphaA-1))*LA2_ss;
yB2_ss = (rB2_ss/alphaB)^(alphaB/(alphaB-1))*LB2_ss;

y_ss   = yA_ss+yB_ss;
y2_ss  = yA2_ss+yB2_ss;

i_ss   = delta*(rB_ss/alphaB)^(1/(alphaB-1))*LB_ss   + delta*(rA_ss/alphaA)^(1/(alphaA-1))*LA_ss;
i2_ss  = delta*(rB2_ss/alphaB)^(1/(alphaB-1))*LB2_ss + delta*(rA2_ss/alphaA)^(1/(alphaA-1))*LA2_ss;
iB_ss  = delta*(rB_ss/alphaB)^(1/(alphaB-1))*LB_ss;
iA_ss  = delta*(rA_ss/alphaA)^(1/(alphaA-1))*LA_ss;
iB2_ss = delta*(rB_ss/alphaB)^(1/(alphaB-1))*LB2_ss;
iA2_ss = delta*(rA_ss/alphaA)^(1/(alphaA-1))*LA2_ss;

kA2_ss = iA_ss/delta; 
kB2_ss = iB_ss/delta;
kA_ss  = iA_ss/delta; 
kB_ss  = iB_ss/delta;

c_ss    = y_ss-i_ss;
c2_ss   = y2_ss-i2_ss; 
cB_ss   = (1-gammaAB)*(pB_ss/p_ss)^(-thetaAB)*c_ss;
cA_ss   = gammaAB*(pA_ss/p_ss)^(-thetaAB)*c_ss;
cB2_ss  = (1-gammaAB)*(pB_ss/p_ss)^(-thetaAB)*c2_ss;
cA2_ss  = gammaAB*(pA_ss/p_ss)^(-thetaAB)*c2_ss;

lambda_ss  = c_ss^(-phi)/p_ss;      
lambda2_ss = c_ss^(-phi)/p_ss; 
lambdaL_ss = lambda_ss*wA_ss;
lambdaL2_ss= lambda2_ss*wA2_ss;

tobqB_ss  = lambda_ss*pB_ss;
tobqA_ss  = lambda_ss*pA_ss;
tobqB2_ss = lambda_ss*pB_ss;
tobqA2_ss = lambda_ss*pA_ss;

aA2_ss=1;
aA_ss=1;



model;

L-LA-LB=0;                                                               % FOC wrt lambdaL
L2-LA2-LB2=0;                                                            % FOC wrt lambdaL2

lambda2*wB2*pB - lambdaL2 = 0;                                           % FOC wrt to sector B labor country 2
lambda*wB*pB   - lambdaL = 0;                                            % FOC wrt to sector B labor country 1

lambda2*wA2 - lambdaL2 = 0;                                              % FOC wrt to sector A labor country 2
lambda*wA   - lambdaL = 0;                                               % FOC wrt to sector A labor country 1

lambda  = c^(-phi)/p;                                                    % FOC with respect to consumption country 1
lambda2 = c2^(-phi)/p;                                                   % FOC with respect to consumption country 2

tobqB  - lambda*pB  - tobqB*psik*2*(iB/kB(-1)-delta)/kB(-1)        = 0;  % FOC with respect to sector B investment country 1
tobqB2 - lambda2*pB - tobqB2*psik*2*(iB2/kB2(-1)-delta)/kB2(-1)    = 0;  % FOC with respect to sector B investment country 2
tobqA  - lambda     - tobqA*psik*2*(iA/kA(-1)-delta)/kA(-1)        = 0;  % FOC with respect to sector A investment country 1
tobqA2 - lambda2    - tobqA2*psik*2*(iA2/kA2(-1)-delta)/kA2(-1)    = 0;  % FOC with respect to sector A investment country 2

(1-delta)*beta * tobqB(1)  - tobqB  + pB(1)*beta*lambda(1)*rB(1)   + beta*tobqB(1)*psik*2*(iB(1)/kB -delta)*(iB(1)/kB^2)    = 0;         % FOC with respect to sector B capital country1
(1-delta)*beta * tobqB2(1) - tobqB2 + pB(1)*beta*lambda2(1)*rB2(1) + beta*tobqB2(1)*psik*2*(iB2(1)/kB2-delta)*(iB2(1)/kB2^2) = 0;        % FOC with respect to sector B capital country2
(1-delta)*beta * tobqA(1)  - tobqA  + beta*lambda(1)*rA(1)         + beta*tobqA(1)*psik*2*(iA(1)/kA-delta)*(iA(1)/kA^2)= 0;              % FOC with respect to sector A capital country1
(1-delta)*beta * tobqA2(1) - tobqA2 + beta*lambda2(1)*rA2(1)       + beta*tobqA2(1)*psik*2*(iA2(1)/kA2-delta)*(iA2(1)/kA2^2) = 0;        % FOC with respect to sector A capital country2

y  = yA+pB*yB;                                                           % production of sector A country 1
y2 = yA2+pB*yB2;                                                         % production of sector A country 2

i  = iA  + iB;
i2 = iA2 + iB2;

yB  = kB(-1)^alphaB*(LB*aA)^(1-alphaB);                                  % production of sector B country 1
yB2 = kB2(-1)^alphaB*(LB2*aA2)^(1-alphaB);                               % production of sector B country 2
yA  = kA(-1)^alphaA*(LA*aA)^(1-alphaA);                                  % production of sector A country 1
yA2 = kA2(-1)^alphaA*(LA2*aA2)^(1-alphaA);                               % production of sector A country 2

y+y2 = c +c2+i+i2;                                                       % world resource constraint                               

kA = (1-delta)*kA(-1)   + iA ;                                           % sector A capital accumulation country 1
kA2 = (1-delta)*kA2(-1) + iA2;                                           % sector A capital accumulation country 2
kB = (1-delta)*kB(-1)   + iB ;                                           % sector B capital accumulation country 1
kB2 = (1-delta)*kB2(-1) + iB2;                                           % sector B capital accumulation country 2

wB  = (1-alphaB)*(yB/LB);                                                % marginal product of sector B labor country 1
wB2 = (1-alphaB)*(yB2/LB2);                                              % marginal product of sector B labor country 2
wA  = (1-alphaA)*(yA/LA);                                                % marginal product of sector A labor country 1
wA2 = (1-alphaA)*(yA2/LA2);                                              % marginal product of sector A labor country 2

rB  = alphaB*(yB/kB(-1));                                                % marginal product of sector B capital country 1
rB2 = alphaB*(yB2/kB2(-1));                                              % marginal product of sector B capital country 2
rA  = alphaA*(yA/kA(-1));                                                % marginal product of sector A capital country 1
rA2 = alphaA*(yA2/kA2(-1));                                              % marginal product of sector A capital country 2

log(aA) = rho*log(aA(-1))   + eA;                                        % Labor-augmenting sector A technology shock country 1
log(aA2) = rho*log(aA2(-1)) + eA2;                                       % Labor-augmenting sector A technology shock country 2

pB = (((1-gammaAB)*(yA+yA2))/(gammaAB*(yB+yB2)))^(1/thetaAB);
p  = (gammaAB*1^(1-thetaAB)+(1-gammaAB)*pB^(1-thetaAB))^(1/(1-thetaAB));

lambda=lambda2;                                                          % complete markets condition

tby=y-c-i;
tby2=y2-c2-i2;

end;





initval;

LB  = LB_ss;                                                             
LA  = LA_ss;                                                              
LB2 = LB2_ss;                                                            
LA2 = LA2_ss;                                                        

rB = rB_ss;
rA = rA_ss;
rB2 = rB2_ss;
rA2 = rA2_ss;

wA=wA_ss;
wB=wB_ss;
wA2=wA2_ss;
wB2=wB2_ss;

yA  = yA_ss;
yB  = yB_ss;
yA2 = yA2_ss;
yB2 = yB2_ss;

pB   = pB_ss;
p    = p_ss;

i   = i_ss;
i2  = i2_ss;
iB  = iB_ss;
iA  = iA_ss;

kA2 = kA2_ss;
kB2 = kB2_ss;
kA  = kA_ss;
kB  = kB_ss;

c    = c_ss;
c2   = c2_ss;

lambda  = lambda_ss;      
lambda2 = lambda2_ss;
lambdaL = lambdaL_ss;
lambdaL2= lambdaL2_ss;

tobqB  = tobqB_ss;
tobqA  = tobqA_ss;
tobqB2 = tobqB2_ss;
tobqA2 = tobqA2_ss;

  
aA2=1;
aA=1;

end;




shocks;
var eA;     stderr 0;
var eA2;    stderr 0.1;
end;

check;


stoch_simul(periods=2000, irf=40, order=1, nograph);



diffrA(1,1)=(rA2_eA2(1,1)+rA_ss)/rA_ss;
  
diffrA2(1,1)= alphaA*(aA2_ss+aA2_eA2(1,1))^(1-alphaA)*(kA2_ss)^(alphaA-1)*(LA2_ss+LA2_eA2(1,1))^(1-alphaA)/rA2_ss;

diffrA3(1,1)= alphaA*((yA2_ss+yA2_eA2(1,1))/kA2_ss)/rA2_ss;

diffyA=(yA2_eA2(1,1)+yA2_ss);
diffyA2=((aA2_ss+aA2_eA2(1,1))*(LA2_ss+LA2_eA2(1,1)))^(1-alphaA)*(kA2_ss)^(alphaA)





