

#include <iostream>
#include <cmath>
#include <iomanip>
#include <cstdlib>

using namespace std;

double computeSolidity(double B1, double B2, double sigma){
	double solidity;
	solidity = 33.5291+(0.469188+0.0020961*B2)*B2-B1+(0.187148*B2-15.2599)*log(1/sigma)-0.677212*pow((log(1/sigma)),2);
	return solidity;
}// end function

double computeBladeExitAngle(double alpha1, double B2, double sigma){
	double alpha2;
	alpha2 = (B2-alpha1*(0.23+(B2/500))*pow((1/sigma),0.5))/(1-(0.23+(B2/500))*pow((1/sigma),0.5));
	return alpha2;
}// end function

int main(void) {
	
	double B1, B2, sigma, alpha1, alpha2, i, z, solidity;
	double closest = 100;
	double closest2;
	double chosen;
	
	cout << "Enter flow entry angle, flow exit angle and incidence" << endl;
	cin >> B1 >> B2 >> i;
	
	while(B1 != -1 || B2 != -1 || i != -1){
		
		z = (36-0.45*B2)/(B1-B2);
		
		if(B2>-10 && B2<50 && i>-3 && i<3 && z > 0.75 && z < 1.25){
			
			cout << "   Solidity          LHS Value" << endl;
			cout << "-----------------------------------------" << endl;
			sigma = 0.6;
			cout << "    " << sigma << "             ";
			while(sigma<2.1){
				solidity = computeSolidity(B1, B2, sigma);
				cout << fixed << setprecision(4) << solidity << endl;
				closest2 = fabs(solidity);
				if(closest2<closest){
					closest = closest2;
					chosen = sigma;
				}// end if
				sigma = sigma + 0.1;
				cout << "    " << fixed << setprecision(1) << sigma << "             ";
			}// end while
			solidity = computeSolidity(B1, B2, sigma);
			cout << fixed << setprecision(4) << solidity << endl;
				closest2 = fabs(solidity);
				if(closest2<closest){
					closest = closest2;
					chosen = sigma;
				}// end if
				cout << "Leaving function. The chosen value is " << chosen << endl;
				alpha1 = B1-i;
				cout << "Blade entry angle: " << alpha1 << endl;
				cout << "Silidity: " << chosen << endl;
				alpha2 = computeBladeExitAngle(alpha1, B2, chosen);
				cout << "Blade exit angle: " << alpha2 << endl << endl;
			
		}else{
			cout << "Entered values are invalid" << endl;
		}// end if
		
		
	    cout << "Enter flow entry angle, flow exit angle and incidence" << endl;
	    cin >> B1 >> B2 >> i;
	}// end while
	
	system("PAUSE"); return 0;
}
