#include<iostream>
#include<cmath>
using namespace std;
bool between(double a, double b, double c)
{
if(c > b)
{
if((a>b) && (a<=c))
return true;
else
return false;
}
else
{
if((a>b) || (a<c))
return true;
else
return false;
}
return false;
}
int main()
{
double RPS, dT, dTH, THio, THic, dAi, Aimax, THeo, THec, dAe, Aemax;
double dMi, dMe, M, TH, T, Ai, Ae, Pi, Pe, MWi, MWb, TPi, P, MW, TP;
double V, Vmax, Vmin, G, TPh2o, dQb, dMW, s, dQh2o, k, RHOi, Aface;
double THbs, THbe, RHO, tmp, Mn, dMio, dMeo, dTP, TPold, Vold, exp, Aio;
double Conv = .0174533, sum, Vnt, Gin, Gex, CVin, CVex, CV, Str,Y,C, sum2;
bool burn;
int Rotors, Rotations, next, sweep, incr, start;
Rotors = 2;
Rotations = 20;
sweep = 9000;
start = 3000;
incr = 300;
RPS = 6000/180;
dTH = .02;
dT = dTH / (360 * RPS);
THio = 1;
THic = 72;
Aio = .01;
Aimax = .01310644;
dAi = Aimax / 40;
THeo = 253;
THec = 329;
Aemax = .00680644;
dAe = Aemax / 30;
Pi = 102000; //approx 2.7 bar , 1.7 boost
Pe = 101325; //atmospheric, no turbo
MWi = .02893; //kg per mole of air
MWb = .02832/1.0714; //final molecular weight after burn
TPi = 290; //temp in
Vmax = .654; //displacement
Vmin = Vmax / 10; //displacement over compression
Gin = 1.4; //gamma of air
Gex = 1.24;
TPh2o = 350; //engine water temp, boil = 373
dQb = 2125; //heating rate constant dTP = dQb * dT / M
dMW = (MWb - MWi)/1; // same except molecular weight change
dQh2o = 8.978 / 250; //dTP = dQ * dT * deltaTP / M
THbs = 190;
THbe = 240;
RHOi = (MWi * Pi) / (8309.28 * TPi);
CVin = .71771;
CVex = 1.22774;
Aface = .0145;
Str = .015;
C = .74;
Y = .863;
int n = 360/dTH;
double Pressure[n], Temp[n], mDoti[n], mDote[n], Press[Rotations], dU[n];
for(int k = start; k <= sweep; k+=incr)
{
RPS = k/180;
dT = dTH / (360 * RPS);
dMi = 0;
dMe = 0;
P = (Pe+Pi) / 2;
TP = 1000;
MW = MWb;
RHO = (MW * P) / (8309.28 * TP);
M = Vmin * RHO;
V = Vmin;
Ai = 0;
Ae = 0;
for(int i = 0; i < Rotations; i++)
{
for(int j = 0; j < n; j++)
{
TH = j * dTH;
T = dT * j;
burn = false;
if(between(TH, THio, THic))
{
Ai+=(dAi * dTH);
if(Ai > Aimax)
Ai = Aimax;
}
else
{
Ai-=(dAi * dTH);
if(Ai < 0)
Ai = 0;
}
if(between(TH, THeo, THec))
{
Ae+=(dAe * dTH);
if(Ae > Aemax)
Ae = Aemax;
}
else
{
Ae-=(dAe * dTH);
if(Ae < 0)
Ae = 0;
}
RHO = (MW * P) / (8309.28 * TP);
dMio = dMi;
dMeo = dMe;
//dMi = (Pi - P)*C * dT * Y * Ai *sqrt(2 * RHOi /abs(Pi - P));
dMi = (Pi - P) * dT * Ai * sqrt((2 * RHOi)/abs(Pi - P));
dMe = (Pe - P) * dT * Ae * sqrt((2 * RHO)/abs(Pe - P));
dMio = (dMio + dMi) / 2;
dMeo = (dMeo + dMe) / 2;
Mn = M + dMeo + dMio;
tmp = cos(TH * Conv) * cos(TH * Conv);
Vold = V;
V = Vmin * tmp + Vmax * (1-tmp);
//cout<<MW<<" "<<dMeo<<" "<<M<<" "<<dMio<<" "<<Mn<<endl;
MW = (MW * (M + dMeo) + MWi * dMio) / Mn;
if(between(TH, THbs, THbe) && (MW > MWb))
{
MW += (dMW * dT) / Mn;
burn = true;
}
TPold = TP;
//cout<<V<<" "<<tmp<<" "<<exp<<" "<<pow(exp, G-1)<<endl;
TP = (TP * (M + dMeo) + TPi * dMio) / Mn;
G = ((MWi-MW)*Gex + (MW - MWb)*Gin)/(MWi - MWb);
exp = V / Vold;
CV = ((MWi-MW)*CVex + (MW - MWb)*CVin)/(MWi - MWb);
dU[j] = CV * M * TP * (1 - (1/pow(exp, G-1)));
Vold *= (1 + dMio / M);
tmp = V * (1 - dMeo / M);
exp = tmp / Vold;
TP /= pow(exp, G-1);
//dU[j] = CV*(TPold-TP)*M;
dTP = 0;
if(burn)
dTP += (dQb * dT) / Mn;
TP += dTP;
tmp = dQh2o * dT;
TP += tmp * (((TPh2o - TPold) / M) + ((TPh2o - TP) / Mn)) / 2;
M = Mn;
P = (M * TP * 8309.28) / (MW * V);
Pressure[j] = P;
//cout<<P<<" "<<V<<" "<<TP<<" "<<M<<endl;
Temp[j] = TP;
mDoti[j] = dMi;
mDote[j] = dMe;
}
Press[i] = P;
}
/*sum = 0;
for(int i = 0; i < n; i++)
{
sum+=dU[i];
}
sum*=(RPS*3*Rotors)/.745;
cout<<k<<" "<<sum;
sum*=745;
sum/=(RPS * 6 * 3.14159);
cout<<" "<<sum;*/
sum = 0;
for(int i = 0; i < n; i++)
{
sum+=Pressure[i] * Aface * Str * sin(2 * dTH * i * Conv);
}
sum/=n;
sum*=3;
cout<<k<<" "<<sum;
sum*=(6 * 3.14159 * RPS);
sum/=745;
cout<<" "<<sum;
sum = 0;
sum2=0;
for(int i = 0; i < n; i++)
{
sum+=Temp[i] * (-mDote[i]);
sum2 += (-mDote[i]);
}
sum/=sum2;
cout<<" "<<sum<<"K"<<endl;
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBiZXR3ZWVuKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpCnsKCWlmKGMgPiBiKQoJewoJCWlmKChhPmIpICYmIChhPD1jKSkKCQkJcmV0dXJuIHRydWU7CgkJZWxzZQoJCQlyZXR1cm4gZmFsc2U7Cgl9CgllbHNlCgl7CgkJaWYoKGE+YikgfHwgKGE8YykpCgkJCXJldHVybiB0cnVlOwoJCWVsc2UKCQkJcmV0dXJuIGZhbHNlOwoJfQoJcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpCnsKCWRvdWJsZSBSUFMsIGRULCBkVEgsIFRIaW8sIFRIaWMsIGRBaSwgQWltYXgsIFRIZW8sIFRIZWMsIGRBZSwgQWVtYXg7Cglkb3VibGUgZE1pLCBkTWUsIE0sIFRILCBULCBBaSwgQWUsIFBpLCBQZSwgTVdpLCBNV2IsIFRQaSwgUCwgTVcsIFRQOwoJZG91YmxlIFYsIFZtYXgsIFZtaW4sIEcsIFRQaDJvLCBkUWIsIGRNVywgcywgZFFoMm8sIGssIFJIT2ksIEFmYWNlOwoJZG91YmxlIFRIYnMsIFRIYmUsIFJITywgdG1wLCBNbiwgZE1pbywgZE1lbywgZFRQLCBUUG9sZCwgVm9sZCwgZXhwLCBBaW87Cglkb3VibGUgQ29udiA9IC4wMTc0NTMzLCBzdW0sIFZudCwgR2luLCBHZXgsIENWaW4sIENWZXgsIENWLCBTdHIsWSxDLCBzdW0yOwoJYm9vbCBidXJuOwoJaW50IFJvdG9ycywgUm90YXRpb25zLCBuZXh0LCBzd2VlcCwgaW5jciwgc3RhcnQ7CgkKCVJvdG9ycyA9IDI7CglSb3RhdGlvbnMgPSAyMDsKCXN3ZWVwID0gOTAwMDsKCXN0YXJ0ID0gMzAwMDsKCWluY3IgPSAzMDA7CglSUFMgPSA2MDAwLzE4MDsKCWRUSCA9IC4wMjsKCWRUID0gZFRIIC8gKDM2MCAqIFJQUyk7CglUSGlvID0gMTsKCVRIaWMgPSA3MjsKCUFpbyA9IC4wMTsKCUFpbWF4ID0gLjAxMzEwNjQ0OwoJZEFpID0gQWltYXggLyA0MDsKCVRIZW8gPSAyNTM7CglUSGVjID0gMzI5OwoJQWVtYXggPSAuMDA2ODA2NDQ7CglkQWUgPSBBZW1heCAvIDMwOwoJUGkgPSAxMDIwMDA7ICAgICAgICAgICAvL2FwcHJveCAyLjcgYmFyICwgMS43IGJvb3N0CglQZSA9IDEwMTMyNTsgICAgICAgICAgIC8vYXRtb3NwaGVyaWMsIG5vIHR1cmJvCglNV2kgPSAuMDI4OTM7ICAgICAgICAgIC8va2cgcGVyIG1vbGUgb2YgYWlyCglNV2IgPSAuMDI4MzIvMS4wNzE0OyAgICAgICAgICAvL2ZpbmFsIG1vbGVjdWxhciB3ZWlnaHQgYWZ0ZXIgYnVybgoJVFBpID0gMjkwOyAgICAgICAgICAvL3RlbXAgaW4KCVZtYXggPSAuNjU0OyAgICAgICAgICAgIC8vZGlzcGxhY2VtZW50CglWbWluID0gVm1heCAvIDEwOyAgICAgICAvL2Rpc3BsYWNlbWVudCBvdmVyIGNvbXByZXNzaW9uCglHaW4gPSAxLjQ7ICAgICAgICAgICAgICAgLy9nYW1tYSBvZiBhaXIKCUdleCA9IDEuMjQ7CglUUGgybyA9IDM1MDsgICAgICAgICAgIC8vZW5naW5lIHdhdGVyIHRlbXAsIGJvaWwgPSAzNzMKCWRRYiA9IDIxMjU7ICAgICAgICAgIC8vaGVhdGluZyByYXRlIGNvbnN0YW50ICBkVFAgPSBkUWIgKiBkVCAvIE0KCWRNVyA9IChNV2IgLSBNV2kpLzE7ICAvLyBzYW1lIGV4Y2VwdCBtb2xlY3VsYXIgd2VpZ2h0IGNoYW5nZQoJZFFoMm8gPSA4Ljk3OCAvIDI1MDsgICAgICAgICAgICAvL2RUUCA9IGRRICogZFQgKiBkZWx0YVRQIC8gTQoJVEhicyA9IDE5MDsKCVRIYmUgPSAyNDA7CglSSE9pID0gKE1XaSAqIFBpKSAvICg4MzA5LjI4ICogVFBpKTsKCUNWaW4gPSAuNzE3NzE7CglDVmV4ID0gMS4yMjc3NDsKCUFmYWNlID0gLjAxNDU7CglTdHIgPSAuMDE1OwoJQyA9IC43NDsKCVkgPSAuODYzOwoKCWludCBuID0gMzYwL2RUSDsKCWRvdWJsZSBQcmVzc3VyZVtuXSwgVGVtcFtuXSwgbURvdGlbbl0sIG1Eb3RlW25dLCBQcmVzc1tSb3RhdGlvbnNdLCBkVVtuXTsKCgkKZm9yKGludCBrID0gc3RhcnQ7IGsgPD0gc3dlZXA7IGsrPWluY3IpCnsKCVJQUyA9IGsvMTgwOwoJZFQgPSBkVEggLyAoMzYwICogUlBTKTsKCWRNaSA9IDA7CglkTWUgPSAwOwoJUCA9IChQZStQaSkgLyAyOwoJVFAgPSAxMDAwOwoJTVcgPSBNV2I7CglSSE8gPSAoTVcgKiBQKSAvICg4MzA5LjI4ICogVFApOwoJTSA9IFZtaW4gKiBSSE87CglWID0gVm1pbjsKCUFpID0gMDsKCUFlID0gMDsKCWZvcihpbnQgaSA9IDA7IGkgPCBSb3RhdGlvbnM7IGkrKykKCXsKCQlmb3IoaW50IGogPSAwOyBqIDwgbjsgaisrKQoJCXsKCQkJVEggPSBqICogZFRIOwoJCQlUID0gZFQgKiBqOwoJCQlidXJuID0gZmFsc2U7CgkJCWlmKGJldHdlZW4oVEgsIFRIaW8sIFRIaWMpKQoJCQl7CgkJCQlBaSs9KGRBaSAqIGRUSCk7CgkJCQlpZihBaSA+IEFpbWF4KQoJCQkJCUFpID0gQWltYXg7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlBaS09KGRBaSAqIGRUSCk7CgkJCQlpZihBaSA8IDApCgkJCQkJQWkgPSAwOwoJCQl9CgkJCWlmKGJldHdlZW4oVEgsIFRIZW8sIFRIZWMpKQoJCQl7CgkJCQlBZSs9KGRBZSAqIGRUSCk7CgkJCQlpZihBZSA+IEFlbWF4KQoJCQkJCUFlID0gQWVtYXg7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlBZS09KGRBZSAqIGRUSCk7CgkJCQlpZihBZSA8IDApCgkJCQkJQWUgPSAwOwoJCQl9CgkJCVJITyA9IChNVyAqIFApIC8gKDgzMDkuMjggKiBUUCk7CgkJCWRNaW8gPSBkTWk7CgkJCWRNZW8gPSBkTWU7CgkJCS8vZE1pID0gKFBpIC0gUCkqQyAqIGRUICogWSAqIEFpICpzcXJ0KDIgKiBSSE9pIC9hYnMoUGkgLSBQKSk7CgkJCWRNaSA9IChQaSAtIFApICogZFQgKiBBaSAqIHNxcnQoKDIgKiBSSE9pKS9hYnMoUGkgLSBQKSk7CgkJCWRNZSA9IChQZSAtIFApICogZFQgKiBBZSAqIHNxcnQoKDIgKiBSSE8pL2FicyhQZSAtIFApKTsKCQkJZE1pbyA9IChkTWlvICsgZE1pKSAvIDI7CgkJCWRNZW8gPSAoZE1lbyArIGRNZSkgLyAyOwoJCQlNbiA9IE0gKyBkTWVvICsgZE1pbzsKCQkJdG1wID0gY29zKFRIICogQ29udikgKiBjb3MoVEggKiBDb252KTsKCQkJVm9sZCA9IFY7CgkJCVYgPSBWbWluICogdG1wICsgVm1heCAqICgxLXRtcCk7CgkJCS8vY291dDw8TVc8PCIgIjw8ZE1lbzw8IiAiPDxNPDwiICI8PGRNaW88PCIgIjw8TW48PGVuZGw7CgkJCU1XID0gKE1XICogKE0gKyBkTWVvKSArIE1XaSAqIGRNaW8pIC8gTW47CgkJCWlmKGJldHdlZW4oVEgsIFRIYnMsIFRIYmUpICYmIChNVyA+IE1XYikpCgkJCXsKCQkJCU1XICs9IChkTVcgKiBkVCkgLyBNbjsKCQkJCWJ1cm4gPSB0cnVlOwoJCQl9CgkJCVRQb2xkID0gVFA7CgkJCS8vY291dDw8Vjw8IiAiPDx0bXA8PCIgIjw8ZXhwPDwiICI8PHBvdyhleHAsIEctMSk8PGVuZGw7CgkJCVRQID0gKFRQICogKE0gKyBkTWVvKSArIFRQaSAqIGRNaW8pIC8gTW47CgkJCUcgPSAoKE1XaS1NVykqR2V4ICsgKE1XIC0gTVdiKSpHaW4pLyhNV2kgLSBNV2IpOwoJCQlleHAgPSBWIC8gVm9sZDsKCQkJQ1YgPSAoKE1XaS1NVykqQ1ZleCArIChNVyAtIE1XYikqQ1ZpbikvKE1XaSAtIE1XYik7CgkJCWRVW2pdID0gQ1YgKiBNICogVFAgKiAoMSAtICgxL3BvdyhleHAsIEctMSkpKTsKCQkJVm9sZCAqPSAoMSArIGRNaW8gLyBNKTsKCQkJdG1wID0gViAqICgxIC0gZE1lbyAvIE0pOwoJCQlleHAgPSB0bXAgLyBWb2xkOwoJCQlUUCAvPSBwb3coZXhwLCBHLTEpOwoKCQkJLy9kVVtqXSA9IENWKihUUG9sZC1UUCkqTTsKCQkJZFRQID0gMDsKCQkJaWYoYnVybikKCQkJCWRUUCArPSAoZFFiICogZFQpIC8gTW47CgkJCVRQICs9IGRUUDsKCQkJdG1wID0gZFFoMm8gKiBkVDsKCQkJVFAgKz0gdG1wICogKCgoVFBoMm8gLSBUUG9sZCkgLyBNKSArICgoVFBoMm8gLSBUUCkgLyBNbikpIC8gMjsKCQkJTSA9IE1uOwoJCQlQID0gKE0gKiBUUCAqIDgzMDkuMjgpIC8gKE1XICogVik7CgoJCQlQcmVzc3VyZVtqXSA9IFA7CgkJCS8vY291dDw8UDw8IiAiPDxWPDwiICI8PFRQPDwiICI8PE08PGVuZGw7CgkJCVRlbXBbal0gPSBUUDsKCQkJbURvdGlbal0gPSBkTWk7CgkJCW1Eb3RlW2pdID0gZE1lOwoJCX0KCQlQcmVzc1tpXSA9IFA7CgkJCgl9CgkKCS8qc3VtID0gMDsKCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgl7CgkJc3VtKz1kVVtpXTsKCX0KCXN1bSo9KFJQUyozKlJvdG9ycykvLjc0NTsKCWNvdXQ8PGs8PCIgIjw8c3VtOwoJc3VtKj03NDU7CglzdW0vPShSUFMgKiA2ICogMy4xNDE1OSk7CgoJY291dDw8IiAiPDxzdW07Ki8KCglzdW0gPSAwOwoJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKCXsKCQlzdW0rPVByZXNzdXJlW2ldICogQWZhY2UgKiBTdHIgKiBzaW4oMiAqIGRUSCAqIGkgKiBDb252KTsKCX0KCXN1bS89bjsKCXN1bSo9MzsKCgljb3V0PDxrPDwiICI8PHN1bTsKCXN1bSo9KDYgKiAzLjE0MTU5ICogUlBTKTsKCXN1bS89NzQ1OwoKCWNvdXQ8PCIgIjw8c3VtOwoKCXN1bSA9IDA7CglzdW0yPTA7Cglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJewoJCXN1bSs9VGVtcFtpXSAqICgtbURvdGVbaV0pOwoJCXN1bTIgKz0gKC1tRG90ZVtpXSk7Cgl9CglzdW0vPXN1bTI7Cgljb3V0PDwiICI8PHN1bTw8IksiPDxlbmRsOwp9CQoKCXJldHVybiAwOwoKfQ==