var K my_invt inv upsilon C Mh my_zstar h lambda W mytilde Q my_lambda Rk u F1 Wtilde hd infl F2 Y X1 mc ptilde X2 s stilde omega M tautilde  Wtilde_o_W;
varexo emy_z emy_upsilon eG R;
predetermined_variables K;

parameters delta kappa phi4 b phi3 betta gamma1 gamma2 etatilde alphatilde chitilde phi1 phi2 eta alpha chi theta psi nu my_z my_upsilon G sdmy_z sdmy_upsilon sdG rhomy_z rhomy_upsilon rhoG my_inv;

% --------------------------------------------------
%%
% Calibration - Deep parameters

delta = 0.025;
kappa = 2.79;
phi4 = 0.5301;
b = 0.69;
phi3 = 1;
betta = 1.03^(1/4);
gamma1 = 0.0412;
gamma2 = 0.0601;
etatilde = 21;
alphatilde = 0.69;
chitilde = 1;
phi1 = 0.0459;
phi2 = 0.1257;
eta = 6;
alpha = 0.6;
chi = 0;
theta = 0.36;
psi = 0.25;
nu = 0.6011;
my_z = 1.00213;
my_upsilon = 1.0042;
G = 0.2141; %This needs to be changed
sdmy_z = 0.0007;
sdmy_upsilon = 0.0031;
sdG = 0.020;
rhomy_z = 0.89;
rhomy_upsilon = 0.20;
rhoG = 0.96;
my_inv = 0;


model;
    K(+1) = (1-delta)*(K/my_invt) + inv*(1-(kappa/2)*((inv/inv(-1))*my_invt-my_inv)^(2));
    upsilon = C/Mh;
    (1-phi4)*(C-(my_zstar^(-1))*b*C(-1))^((1-phi3)*(1-phi4)-1)*(1-h)^(phi4*(1-phi3)) - b*betta*(1-phi4)*(my_zstar(+1)*C(+1)-b*C)^((1-phi3)*(1-phi4)-1)*(1-h(+1))^(phi4*(1-phi3)) = lambda*(1 + (phi1*upsilon + phi2/upsilon - 2*((phi1*phi2)^(0.5))) + upsilon*(phi1-(phi2/(upsilon^(2)))));
    phi4*(C - b*((my_zstar)^(-1))*C(-1))^((1-phi3)*(1-phi4)) * (1-h)^(phi4*(1-phi3)-1) = ((lambda*W) / mytilde);
    lambda*Q = ((betta*my_lambda(+1))/(my_upsilon(+1)))*lambda(+1) * (Rk(+1)*u(+1) - (gamma1*(u(+1)-1) + (gamma2/2)*(u(+1)-1)^(2)) + Q(+1)*(1-delta));
    lambda = lambda*Q * (1-(kappa/2)*((((my_invt*inv)/inv(-1))-my_inv)^(2)) - ((my_invt*inv)/inv(-1))*kappa*(((my_invt*inv)/inv(-1))-my_inv)) + betta*(my_lambda(+1)/my_upsilon(+1))*lambda(+1)*Q(+1) * ((my_invt(+1)*(inv(+1)/inv))^(2)) * kappa*(my_invt(+1)*(inv(+1)/inv)-my_inv);
    phi2/phi1 + (1/phi1)*((R-1)/R) * phi1 - (phi2/(upsilon^(2))) = 1 - betta*my_lambda(+1)*(lambda(+1)/lambda)*(1/infl(+1));
    Rk = gamma1 + gamma2*(u-1);
    F1 = ((etatilde-1)/etatilde) * Wtilde*lambda * ((W/Wtilde)^(etatilde))*hd + alphatilde*betta*(infl(+1)/((my_zstar*infl)^(chitilde)))^(etatilde-1) * (((my_zstar(+1)*Wtilde(+1))/Wtilde)^(etatilde-1)) * my_lambda(+1)*my_zstar(+1)*F1(+1);
    F2 = (phi4*(C-b*(my_zstar^(-1))*C(-1))^((1-phi3)*(1-phi4))*((1-h)^((phi4*(1-phi3)-1)))) * ((W/Wtilde)^(etatilde))*hd + alphatilde*betta*((infl(+1)/((my_zstar*infl)^(chitilde)))^(etatilde)) * (((my_zstar(+1)*Wtilde(+1))/Wtilde)^(etatilde)) * my_lambda(+1)*my_zstar(+1)*F2(+1);
    %
    % F1 = F2;
    %
    lambda = betta*R*my_lambda(+1)*(lambda(+1)/infl(+1)); % DETTE ER DET ANDET UDTRYK FOR LAMBDA !?
    Y = C*(1+(phi1*upsilon + phi2/upsilon - 2*((phi1*phi2)^(0.5)))) + (M*(1-R^(-1)) + tautilde) +(inv + (gamma1*(u-1) + (gamma2/2)*(u-1)^(2)) * ((my_invt)^(-1))*K);
    X1 = Y*mc*(ptilde^(-eta-1)) + alpha*betta*(my_lambda(+1)*lambda(+1)/lambda)*(ptilde/ptilde(+1)^(-eta-1)) + (((infl^(chi))/infl(+1))^(-eta)) * my_zstar(+1)*X1(+1);
    X2 = Y*ptilde^(-eta) + alpha*betta*(my_lambda(+1)*lambda(+1)/lambda)*((infl^(chi)/infl(+1))^(1-eta))*((ptilde/ptilde(+1))^(-eta)) * my_zstar(+1)*X2(+1);
    %
    %eta*X1 = (eta-1)*X2;
    %
    1 = alpha*(infl^(eta-1))*infl(-1)^((chi*(1-eta))) + (1-alpha)*ptilde^(1-eta);
    ((u*my_invt^(-1)*K)^(theta))*(hd^(1-theta)) - psi = ((1+(phi1*upsilon + phi2/upsilon - 2*((phi1*phi2)^(0.5)))*C + (M*(1-R^(-1)) + tautilde) + ((inv+(gamma1*(u-1) + (gamma2/2)*(u-1)^(2))*(K/my_invt)))))*s;
    s = (1-alpha)*(ptilde^(-eta)) + alpha*(((infl/(infl(-1)^(chi))))^(eta))*s(-1);
    mc*(1-theta)*(u*K/my_invt)^(theta)*hd^(-theta) = W*(1+nu*((R-1)/R));
    mc*theta*(u*K/my_invt)^(theta-1)*hd^(1-theta) = Rk;
    h = stilde*hd;
    stilde = (1-alphatilde)*((Wtilde/W)^(-etatilde)) + alphatilde*((W(-1)/my_zstar*W)^(-etatilde))*(infl/(my_zstar*infl(-1)^(chitilde))^(etatilde))*stilde(-1);
    W^(1-etatilde) = (1-alphatilde)*Wtilde^(1-etatilde) + alphatilde*((W(-1)/my_zstar)^(1-etatilde)) * (((my_zstar*infl(-1))^(chitilde))/infl)^(1-etatilde);
    omega = Y - Rk*u*K/my_invt - W*hd*(1+nu*(1-(R^(-1))));
    M = Mh + nu*W*hd;
    %
    % M*(1-(R^(-1))) + tautilde = Gt;
    %
    my_invt = my_upsilon*my_zstar;
    my_lambda = my_zstar^((1-phi3)*(1-phi4)-1);
    my_zstar = (my_upsilon^((theta/(1-theta))))*my_z;
    my_z = rhomy_z*my_z(-1) + emy_z;
    my_upsilon = rhomy_upsilon*my_upsilon(-1) + emy_upsilon;
    ln((M*(1-R^(-1)) + tautilde)/G) = rhoG * ln(((M(-1)*(1-R^(-2)) + tautilde(-1))/G)) + eG;
    Wtilde_o_W = Wtilde/W;

end;
%%
%%
steady_state_model;
    h               = 0.5;
    u               = 1;
    my_zstar        = my_inv/my_upsilon;
    my_lambda       = 1/my_zstar;
    Q               = 1;
    infl            = R*betta*my_lambda;
        
% Temporary variables
    upsilon         =sqrt(phi2/phi1 + 1/phi1 * (R-1)/R);
    lv              = phi1*upsilon + phi2/2 - 2*sqrt(phi1*phi2);
    epsilon_mhR = -1/8*(1/(R*(phi2*R+R-1)));
%    
    ptilde          = ((1-alpha*infl^((eta-1)*(1-chi)))/(1-alpha))^(1/(1-eta));
    s               = ((1-alpha)*ptilde^(-1))/(1-alpha*infl^((1-chi)*eta));
    Wtilde_o_W      = ((1-alphatilde*(my_zstar*infl)^((chitilde-1)*(1-etatilde)))/(1-alphatilde))^((1/(1-etatilde)));
    stilde          = ((1-alphatilde)*Wtilde_o_W^(-etatilde))/(1-alphatilde*(my_zstar*infl)^((1-chitilde)*etatilde));
    hd              = h/stilde;
    upsilontilde    = sqrt(phi2+(1-R^(-1)));
    mc              = (ptilde*(eta-1)*(1-alpha*betta*my_lambda*my_zstar*infl^(eta*(1-chi))))/(eta*(1-alpha*betta*my_lambda*my_zstar*infl^((chi-1)*(1-eta))));
    Rk              = my_upsilon/betta*my_lambda - (1-delta);
    gamma2          = gamma2/gamma1*gamma1;
    gamma1          = Rk-gamma2*(u-1);
    K               = my_inv/u*(Rk/mc*theta)^(1/(theta-1))*hd;
    phi2            = ((-8*R*(epsilon_mhR))^(-1)+1-R)/R;
    W               = mc*(1-theta)*(u*K/my_inv)^(theta)*hd^(-theta)*(1+nu*((R-1)/R));
    inv             = K*(1-(1-delta)/my_inv);
    Y               = Rk*u*K/my_inv + W*hd*(1+nu*(1-R^(-1))); 
    omega           = (u*my_inv^(-1)*K)^(theta)*hd^(1-theta)-Y*s;
    C               = (G+(inv+(gamma1*(u-1)+gamma2/2*(u-1)^(2))*my_inv^(-1)*K)-Y)/((1+lv));
    
% Temporary variables
    Mh              = C/upsilon;
    S_mh            = Mh/(Mh+nu*W*hd);
    S_m             = (Mh+nu*W*hd)/Y;
%
    nu              = S_m*(1-S_mh)/(1-theta-S_m*(1-S_mh)*(1-1/R));
    phi1            = (upsilontilde/(-upsilontilde^(2)-phi2+2*upsilontilde*sqrt(phi2)+((1-G/Y-inv/Y)/(S_mh*S_m))))^2;
  
end;
%%
resid(1);

steady;


shocks;
    var emy_z; stderr sdmy_z;
    var emy_upsilon; stderr sdmy_upsilon;
    var eG; stderr sdG;
end;

stoch_simul(order=1, irf=20);