Está en la página 1de 6

#include <iostream>

#include <string>
#include <sstream>
#include <stdlib.h>
#include <math.h>
#include <iomanip>
#include <fstream>
#include <windows.h>
using namespace std;
class display{
public:
void logo(){
cout << "-------------UNICAMP--------------" <<
cout << "-Faculdade de Engenharia Quimica--" <<
cout << "----Programa de Pos-Graduacao-----" <<
cout << "------Transferencia de Calor------" <<
cout << "-------Trabalho de Avaliacao------" <<
cout << "----Difusao de Calor na Parede----" <<
cout << "----aluno: Mauro Oliveira---------" <<
cout << "----RA: 162541 -------------------" <<
cout << endl;
}
public:
void cor(unsigned short a){
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon,a);
}
public:
void pausa(){
cout << endl << endl;
system("pause");
}
public:
void limpar(){
system("cls");
}
};

endl;
endl;
endl;
endl;
endl;
endl;
endl;
endl;

class malha{
public:
double deltax, deltay, largura, espessura;
public:
void geometria(){
cout << "insira o valor das dimensoes: " << endl;
cout << "largura (m): ";
cin >> largura;
cout << "espessura (m): ";
cin >> espessura;
cout << endl;
}
public:
void incrementos(){
cout << "insira o valor dos incrementos da malha: " << endl;
cout << "delta x (m): ";
cin >> deltax;
cout << "delta y (m): ";
cin >> deltay;
cout << endl;

}
public:
int NumeroDeLinhas(){
int nh;
nh = (int)(espessura / deltay);
return(nh);
}
public:
int NumeroDeColunas(){
int nv;
nv = (int)(largura / deltax);
return(nv);
}
};
class setup{
public:
double TemperaturaExternaEsquerda, TemperaturaExternaDireita, Tempe
raturaExternaSuperior, h, Tar;
double cond;
public:
void contornos(){
cout << "Insira as condicoes de contorno: " << endl;
cout << "temperatura externa do lado esquerdo (C): ";
cin >> TemperaturaExternaEsquerda;
cout << "temperatura externa do lado direito (C): ";
cin >> TemperaturaExternaDireita;
cout << "temperatura externa do lado superior (C): ";
cin >> TemperaturaExternaSuperior;
cout << "condutividade termica da parede (W/m K): ";
cin >> cond;
cout << "coeficiente de conveccao (W/m2 K): ";
cin >> h;
cout << "temperatura do ar (C): ";
cin >> Tar;
cout << endl;
}
};
int main(){
display monitor;
malha mesh;
setup settings;
int n, m, nl, nc;
double **Tk;
double **T;
ofstream arquivo;
char* nome;
// malha
monitor.cor(4);
monitor.logo();
monitor.cor(2);
mesh.geometria();
monitor.limpar();
monitor.cor(4);
monitor.logo();
monitor.cor(2);
mesh.incrementos();
n = mesh.NumeroDeLinhas();

m = mesh.NumeroDeColunas();
nl = n + 2;
nc = m + 2;
double deltaxd[m];
double deltaxe[m];
double deltayn[n+1];
double deltays[n];
double Ad[n+1];
double Ae[n+1];
double Sp[n+1];
double Su[n+1];
double An, As, dx, dy;
dx = mesh.deltax;
dy = mesh.deltay;
An = dx;
As = dx;
for(int j = 0; j<m-1 ; j++){
deltaxd[j] = dx;
}
deltaxd[m-1] = 0.5*dx;
deltaxe[0] = 0.5*dx;
for(int j = 1; j<m ;j++){
deltaxe[j] = dx;
}
deltayn[0] = 0.5*dy;
deltayn[n] = 0.5*dy;
for(int i = 1; i<n ; i++){
deltayn[i] = dy;
}
deltays[0] = 0.5*dy;
deltays[n] = 0.5*dy;
for(int i = 1; i<n ; i++){
deltays[i] = dy;
}
for(int i = 1; i<n+1 ; i++){
Ad[i] = dy;
}
Ad[0] = 0.5*dy;
for(int i = 1; i<n+1 ; i++){
Ae[i] = dy;
}
Ae[0] = 0.5*dy;
monitor.limpar();
monitor.cor(4);
monitor.logo();
monitor.cor(9);
cout << endl << "malha pronta" << endl;
monitor.cor(2);
monitor.pausa();
// setup
monitor.limpar();
monitor.cor(4);

monitor.logo();
monitor.cor(2);
settings.contornos();
Tk = new double*[nl];
for(int i = 0; i<nl; i++){
Tk[i] = new double [nc];
}
T = new double*[nl];
for(int i = 0; i<nl; i++){
T[i] = new double [nc];
}
Sp[0] = (settings.h)*dx;
Su[0] = (settings.h)*dx*(settings.Tar);
for(int i = 1; i<n ; i++){
Sp[i] = 0;
Su[i] = 0;
}
for(int i = 0; i<nl-1 ; i++){
Tk[i][0] = settings.TemperaturaExternaEsquerda;
T[i][0] = settings.TemperaturaExternaEsquerda;
Tk[i][nc-1] = settings.TemperaturaExternaDireita;
T[i][nc-1] = settings.TemperaturaExternaDireita;
}
for(int j = 0; j<nc ; j++){
Tk[nl-1][j] = settings.TemperaturaExternaSuperior;
T[nl-1][j] = settings.TemperaturaExternaSuperior;
}
for(int i = 0; i<nl-2 ; i++){
for(int j = 1; j<m+1 ; j++){
Tk[i][j] = 0;
T[i][j] = 0;
}
}
monitor.limpar();
monitor.cor(4);
monitor.logo();
monitor.cor(9);
cout << endl << "sistema inicializado" << endl;
monitor.cor(2);
monitor.pausa();
//solver
double a[n+1];
double b[n+1];
double c[n+1];
double d[n+1];
double P[n+1];
double Q[n+1];
int x;
double k = settings.cond;
monitor.limpar();
monitor.cor(4);
monitor.logo();
monitor.cor(2);
x = 1;
loop:
for(int j = 1; j<nc-1 ; j++){
a[0] = 0;
b[0] = Sp[0] - k*(Ad[0]/deltaxd[j - 1]) - k*(Ae[0]/deltaxe

[j - 1]) - k*(An/deltayn[0]) - k*(As/deltays[0]);


c[0] = k*An/(deltayn[0]);
d[0] = -1*k*(Ae[0]/deltaxe[j - 1])*T[0][j-1] - k*(Ad[0]/de
ltaxd[j - 1])*T[0][j+1] - Su[0];
P[0] = -1*c[0]/b[0];
Q[0] = d[0]/b[0];
for(int i = 1; i<nl-1 ; i++){
a[i] = k*As/(deltays[i]);
b[i] = Sp[i] - k*(Ad[i]/deltaxd[j - 1]) - k*(Ae[i]
/deltaxe[j - 1]) - k*(An/deltayn[i]) - k*(As/deltays[i]);
c[i] = k*An/(deltayn[i]);
d[i] = -1*k*(Ae[i]/deltaxe[j - 1])*T[i][j-1] - k*(
Ad[i]/deltaxd[j - 1])*T[i][j+1] - Su[i];
P[i] = -1*c[i]/(b[i] + a[i]*P[i-1]);
Q[i] = (d[i] - a[i]*Q[i-1])/(b[i] + a[i]*P[i-1]);
}
c[nl-2] = 0;
T[n][j] = Q[n];
for(int i = n; i>=0 ; i--){
T[i][j] = P[i]*T[i+1][j] + Q[i];
}
}
for(int i = nl-1; i>=0 ; i--){
for(int j = 0; j<nc ; j++){
cout << T[i][j] << "\t";
}
cout << endl;
}
double soma;
double R[n+1][m];
for(int i = 0; i<nl-1 ; i++){
for(int j = 1; j<nc-2 ; j++){
R[i][j] = T[i][j] - Tk[i][j];
if(R[i][j] > 0.0001){
for(int i = 0; i<nl-1 ; i++){
for(int j = 1; j<nc-2 ; j++){
Tk[i][j] = T[i][j];
}
}
x = x + 1;
goto loop;
}
}
}
monitor.limpar();
monitor.cor(4);
monitor.logo();
monitor.cor(9);
cout << "sistema de equacoes convergiu" << endl << endl;
monitor.cor(2);
monitor.pausa();
//pos-processo
double x1[n+1];
double y1[m+1];
double L, W;

L = mesh.largura;
W = mesh.espessura;
nome = "resultadosCFD.m";
arquivo.open(nome, ios::out);
arquivo << "M = [ ";
for(int i = 0; i<nl ; i++){
for(int j = 0; j<nc ; j++){
arquivo << T[i][j] << "\t";
}
if(i==nl-1){
arquivo << "];" << endl;
}
else{
arquivo << ";";
}
}
for(int i = 0; i<=n+1 ; i++){
x1[i] = i*dy;
}
for(int i = 0; i<=m+1 ; i++){
y1[i] = i*dx;
}
arquivo << "Y = [";
for(int i = 0; i<=n+1 ; i++){
arquivo << x1[i] << "\t";
}
arquivo << "];";
arquivo << endl;
arquivo << "X = [";
for(int i = 0; i<=m+1 ; i++){
arquivo << y1[i] << "\t";
}
arquivo << "];";
arquivo << endl;
arquivo << "contourf(X,Y,M)" << endl;
arquivo << "colorbar" << endl;
arquivo << "xlabel('largura(m)')" << endl;
arquivo << "ylabel('espessura(m)')" << endl;
arquivo << "title('DISTRIBUIO DE TEMPERATURA NA PAREDE (C)')" << endl;
arquivo.close();
monitor.limpar();
monitor.cor(4);
monitor.logo();
monitor.cor(9);
cout << "arquivo de resultados gerado na mesma pasta que este executav
el" << endl << endl;
monitor.cor(2);
monitor.pausa();
return 0;
}

También podría gustarte