Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
122
Добавлен:
31.01.2021
Размер:
11.64 Кб
Скачать
#include <iostream>
#include <cmath>
using namespace std;

int main()
{

	float Bn20 = 0.000886; //коф. объемного расширения нефти при 20 градусах
	float pn20 = 824; //плотность нефти при 20 градусах
	float T0 = 293;
	float pv0 = 999.9; //плотность воды при 20 градусах
	float Bv0 = 0.00013; //коф объемного расширения воды при 0 градусов
	int T1 = 293;
	float T2 = 303;
	float V1 = 0.00000514; //это кинематическая вязкость нефти при Т1
	float e = 2.718281; //число е
	float D, d, Tn, Tgr, alphaT, alpha, delta, ltr, ltrl, ltrt, alphak, alphagr, G, Q, k, H, nyu, M, lambdagr, alphal, Ltr, F, speed2, P2, ksitr, dlina1, P1, ptCM2;
	float Re1 = 2300; // хз зачем, видимо очень надо
    float Re2 = 10000;// тоже хз зачем
	int Prct = 1;
	bool shit;
	setlocale(LC_ALL, "Russian");

	float A; //массовая доля воды
	cout << "Введите внутренний диаметр трубы d = ";
	cin >> d;
	cout << "Введите внешний диаметр трубы D = ";
	cin >> D;
	cout << "Введите температуру грунта Tgr = ";
	cin >> Tgr;
	cout << "Введите начальную температуру смеси T = ";
	cin >> Tn;
	cout << "Введите массовую долю воды A = ";
	cin >> A;
	cout << "Введите теплопроводность грунта lambdagr = ";
	cin >> lambdagr;
    cout << "Введите коэффициент шероховатости  = ";
	cin >> delta;

	//следующие строчки - характеристики НЕФТИ
	float U = 0.0791812 / (T2 - T1); //в следующих трех строчках задается зависимость кинематической вязкости нефти от температуры, это на основе метода с вискозиметром, так что это трогать не надо
	float z = U * T1 - U * Tn;
	float Vtn = V1 * pow(e, z); //кинематическая вязкость нефти
	float ptn = pn20 / (1 + Bn20 * (Tn - T0)); //зависимость плотности нефти от температуры, по сути просто пересчёт этой плотности, где за основу пересчета взята плотность при 20 градусах (формула та же что и у вас, просто по другому выглядит, из метрологии еще)
	float lambdatn = 156.6 * (1 - 0.00047 * T0) / pn20; //зависимость теплопроводности нефти от температуры, тоже пересчет от теплопроводности при 20 градусах, выраженный через плотность (т/к плотность уже известна)
	float Ctn = 31.56 * (762 + 3.39 * T0) / (sqrt(pn20)); //теплоемкость от температуры, тот же принцип
	float mtn = Vtn * ptn;//viazkost nefti //формула выражения вязкости нефти через кинематическую вязкость

	cout << "Вязкость нефти " << mtn << endl; //проверка для себя (меня), выявление отклонений (можно вцелом убрать)
	//следующие строки то же самое но для ВОДЫ, можете делитнуть и заменить константами (но с ними интереснее бы было :)
	float ptv = pv0 / (1 + Bv0 * (Tn - 273));
	float lambdatv = 0.553 * (1 + 0.003 * (Tn - 273));
	float Ctv = 4194 - 1.15 * (Tn - 273) + 0.015 * (Tn - 273) * (Tn - 273);
	float mtv = 0.000183 / (1 + Tn * (0.0337 + 0.000221 * Tn));
	float Vtv = mtv / ptv;
	//тут расчет параметров СМЕСИ на основе уравнений Шабарова (все считается одинаково по одной формуле)
	float ptCM = ptv * A + ptn * (1 - A); //плотность
	float lambdatCM = lambdatn * (1 - A) + lambdatv * A; //теплопроводность
	float CtCM = Ctn * (1 - A) + Ctv * A; //теплоемкость
	float mtCM = mtv * A + mtn * (1 - A); //вязкость динамическая
	float VtCM = Vtv * A + Vtn * (1 - A); //вязкость кинематическая

	cout << "ПАРАМЕТРЫ СМЕСИ " << endl;
	cout << "Плотность [кг/м^3] = " << ptCM << endl;
	cout << "Коэффицент теплопроводности [Вт/(м*K)] = " << lambdatCM << endl;
	cout << "Теплоемкость [Дж/(кг*K)] = " << CtCM << endl;
	cout << "Вязкость [кг/(с*м)] = " << mtCM << endl;
	cout << "Кинематическая вязкость [м^2/c] = " << VtCM << endl; //вывел параметры смеси на экран,дальше переходим к шуткам уже со смесью и только
	//тут задаем критерии Re, Pr Gr
	float deltaT; //это разность температур вроде бы грунта и смеси
	float betta = Bn20 + 1.6 * Bn20 * Bn20*(Tn - 293); ; //та самая зависимость коэффициента объемного расширения от температуры (тут неточность что он берётся для нефти, а не смеси, хотя обозначает коф смеси. я не придумал как расписать для смеси учитывая содержание воды)

	float speed; //скорость потока
	float g = 9.8; //ну это же жэ
	cout << "Введите скорость смеси ";
	cin >> speed;
	cout << "Введите разность температур "; // (Tн-Tгр)
	cin >> deltaT;
	float Re = speed * d / VtCM; //kriterii //эти три строчки уравнения расчета

	float Pr = mtCM * CtCM / lambdatCM; //
	float Gr = g * pow(d, 3) * betta * deltaT / (VtCM*VtCM); //
	cout << "КРИТЕРИИ: " << endl;
	cout << "Ренольдса = " << Re << endl;
	cout << "Прандтля = " << Pr << endl;
	cout << "Грасгофа = " << Gr << endl;

	/*if (Re < 2300) //тут условие для определения коэфа теплоотдачи от стенки к трубе. Если Re<2300, то коф определится по уравнению для ламинарного потока
	{
	float alfa1 = 0.17 * lambdatCM * pow(Re, 0.33) * pow(Pr, 0.68) * pow(Gr, 0.1) / d;
	cout << "Коф. теплоотдачи от среды к трубе (ламинарный поток) [Вт/м^2*K] " << alfa1 << endl;
	}
	else if (Re > 10000) //если Re больше 10000 то коэф он определится по уравнению для турбулентного режима течения
	{
	float alfa2 = 0.021 * lambdatCM * pow(Re, 0.8) * pow(Pr, 0.68) / d;
	cout << "Коф. теплоотдачи от среды к трубе (турбулентный поток) [Вт/м^2*K] " << alfa2 << endl;
	}


	/*Re = v * d / VtCM;
	Gr = (g*beta*pow(d, 3) / pow(VtCM, 2))*deltat;
	Pr = (VtCM*ptCM*c) / lyuamda; */
	float lambdaM;
	cout << "Введите теплопроводность металла lambdaM = ";
	cin >> lambdaM;


	if (Re < 2300) {
		alpha = 0.17*((lambdatCM*(pow(Re, 0.33)) / d)*pow(Pr, 0.43)*pow(Gr, 0.1)*pow((Pr / Prct), 0.25));
		cout << "Течение ламианрное alpha = " << alpha << endl;
		alphak = 2;
		ltr = 64 / Re;
	}
	if (Re > 10000) {
		alpha = 0.021*((lambdatCM*(pow(Re, 0.8)) / d)*pow(Pr, 0.43)*pow((Pr / Prct), 0.25));
		cout << "Течение турбулентное alpha = " << alpha << endl;
		alphak = 1.1;
		ltr = 0.067 * pow(158 / Re + 2 * delta, 0.2);
	}
	if ((Re <= 10000) && (Re >= 2300)) {
		alphal = 0.17*((lambdatCM*(pow(Re, 0.33)) / d)*pow(Pr, 0.43)*pow(Gr, 0.1)*pow((Pr / Prct), 0.25));
		alphaT = 0.021*((lambdatCM*(pow(Re, 0.8)) / d)*pow(Pr, 0.43)*pow((Pr / Prct), 0.25));
		alpha = alphal + (alphaT - alphal)*(Re - 2000) / (8000);
		cout << "Течение переходное alpha = " << alpha << endl;
		ltrl = 64 / Re;
		ltrt = 0.067 * pow(158 / Re + 2 * delta, 0.2);
		ltr = ltrl + (Re * Re1) * (ltrt - ltrl) / (Re2 - Re1);
		alphak = 1.7;
	} 
	H = 1.5; // глубина
	alphagr = (2 * lambdagr) / (D * (log((2 * H / D) + pow((pow((2 * H / D), 2) - 1), 0.5))));
	cout << "Грунт: " << alphagr << " " << endl;
	k = 1 / ((1 / alpha) + (log(D / d)) * (d / (2 * lambdaM)) + (d / (alphagr*D)));
	cout << "Грунт (k): " << k << " " << endl;
	cout << "Введите длину трубы dlina1 = ";
	cin >> dlina1;
	cout << "Введите эквивалентный коэффициент сопротивления: ";
	cin >> ksitr; // коэффициент местного сопротивления
	cout << "Введите начальное давление:  ";
	cin >> P1;
	float gn;
	cout << "Введите расход нефти: "; // расход нефти
	cin >> gn;
	float g1 = gn + ((gn * A) / (1 - A)); // расход смеси
	float Tlox; // конечная температура 
	float ptv2; 
	float ptn2;
	float gsht;
	int L1;
	cout << "Введите подводимый расход: " ;
	cin >> gsht;
    
	if (gsht == 0)
{
	for (int i = 0; i <= dlina1; i = i + 10)
	{
		F = 3.14 * d * 10;
		Tlox = (Tn * (1 - ((k * F) / (2 * CtCM * g1))) + ((k * F * Tgr) / (CtCM * g1))) / (1 + ((k * F) / (2 * CtCM * g1)));
		Tn = Tlox;
		ptv2 = pv0 / (1 + Bv0 * (Tlox - 273));
		ptn2 = pn20 / (1 + Bn20 * (Tlox - T0));
		ptCM2 = ptv2 * A + ptn2 * (1 - A);
		speed2 = g1 * 4 / (ptCM2 * 3.14 * pow(d,2));
		speed = speed2;
		Ltr = ((1.05 * ltr) / pow(0.95, 2)) * (10 / d) * (pow(speed2, 2) / 2) + ksitr * pow(speed2, 2)*ptCM2 / 2;
		P2 = P1 + alphak * ptCM2 * ((pow(speed, 2) - pow(speed2, 2)) / 2) - ptCM2 * Ltr;
		P1 = P2;
		cout << "Значения параметров на " << i / 10 << " - ом этапе цикла : " << Tlox << " , " << speed2 << " , " << P2 << endl;
	}
} 

	/*else 
	{ 
	    float g2 = g1 + gsht;
	    float Tsht;
	    cout << "Введите температуру подведенной смеси: ";
	    cin >> Tsht;
	    for (int i = 0; i <= dlina1; i = i + 10)
	    cout << "На какой длине будет подведенный расход : " ;
        cin >> L1;
        int c;
        c = L1 % 10;
        L1 = L1 - c; 
	{
		F = 3.14 * d * 10;
		Tlox = (Tn * (1 - ((k * F) / (2 * CtCM * g1))) + ((k * F * Tgr) / (CtCM * g1))) / (1 + ((k * F) / (2 * CtCM * g1)));
		Tn = Tlox;
		ptv2 = pv0 / (1 + Bv0 * (Tlox - 273));
		ptn2 = pn20 / (1 + Bn20 * (Tlox - T0));
		ptCM2 = ptv2 * A + ptn2 * (1 - A);
		speed2 = g2 * 4 / (ptCM2 * 3.14 * pow(d,2));
		speed = speed2;
		if ( i == L1 )
		{ 
		Tlox = (Tn * (g1/g2 - (k*F/ (2*CtCM * g2))) + (k * F * Tgr / (CtCM*g2)) + (gsht * Tsht / g2)) / (1 + k*F/(2*CtCM*g2));
		Tn = Tlox;
		}
		Ltr = ((1.05 * ltr) / pow(0.95, 2)) * (10 / d) * (pow(speed2, 2) / 2) + ksitr * pow(speed2, 2) / 2;
		P2 = P1 + alphak * ptCM2 * ((pow(speed, 2) - pow(speed2, 2)) / 2) - ptCM2 * Ltr;
		P1 = P2;
		cout << "Значения параметров на " << i / 10 << " - ом этапе цикла : " << Tlox << " , " << speed2 << " , " << P2 << endl;
	} 

	} */

	return 0;
}