cycleCalculation = mat.parse(`
c = [{},{},{},{},{},{}]; # cycle with IHX
# Short function to get fluid properties
prop(DesiredProperty, FluidState) = props(DesiredProperty, fluid, FluidState);
# Define low and high pressure
sat_gas = {'T|gas': evap.T, Q: 100%}
pLow = prop('P', sat_gas );
sat_liq = {'T|liquid': cond.T, Q: 0%}
pHigh = prop('P', sat_liq);
# 6 to 1 Evaporation
c[1].P = pLow;
c[1].T = evap.T + evap.superHeating;
c[1].D = prop('D', {'T|gas':c[1].T, P:c[1].P});
c[1].H = prop('H', {'T|gas':c[1].T, P:c[1].P});
c[1].S = prop('S', {'T|gas':c[1].T, P:c[1].P});
# 1 to 2 IHX Low
c[2].P = c[1].P;
H_eta = prop('H', {T: cond.T, P:c[2].P});
c[2].H = IHX.epsilon * (H_eta - c[1].H) + c[1].H;
c[2].T = prop('T', c[2]);
c[2].D = prop('D', c[2]);
c[2].S = prop('S', c[2]);
# 2 to 3 Compression of vapor
c[3].P = pHigh + cond.P_drop;
H_i = prop('H', { 'P': c[3].P, 'S': c[2].S });
c[3].H = (H_i - c[2].H) / etaS + c[2].H;
c[3].T = prop('T', c[3]);
c[3].D = prop('D', c[3]);
c[3].S = prop('S', c[3]);
# 3 to 4 Condensation
c[4].T = cond.T-cond.subCooling;
c[4].P = pHigh;
c[4].D = prop('D', {"T|liquid":c[4].T, P: c[4].P});
c[4].H = prop('H', {"T|liquid":c[4].T, P: c[4].P});
c[4].S = prop('S', {"T|liquid":c[4].T, P: c[4].P});
# 4 to 5 IHX high
c[5].H = c[1].H - c[2].H + c[4].H;
c[5].P = c[4].P;
c[5].T = prop('T', c[5]);
c[5].D = prop('D', c[5]);
c[5].S = prop('S', c[5]);
# 5 to 6 Expansion
c[6].H = c[5].H;
c[6].P = c[1].P + evap.P_drop;
c[6].T = prop('T', c[6]);
c[6].D = prop('D', c[6]);
c[6].S = prop('S', c[6]);
# Work, Energy and Performance
W_comp = mDot*(c[3].H - c[2].H);
# Q_h = mDot*(c[4].H - c[5].H);
Q_c = mDot*(c[1].H - c[6].H);
Q_IHX = mDot*(c[2].H-c[1].H);
evap_COP = Q_c/W_comp;
# cond_COP = Q_h/W_comp;
`)