-
Notifications
You must be signed in to change notification settings - Fork 1
/
film.c
135 lines (125 loc) · 3.98 KB
/
film.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <numeric>
#include <vector>
#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define max 10000 /* number of iterations */
#define L 100 /* number of iterations */
#define simula 100
using namespace std;
vector<int> altura(L+1), somaalt(max+1);
vector<double> altmedia(max+1),rugo(max+1),delta(max+1),rugo2(max+1),delta2(max+1),rugomedia,rugomediaf(max+1);
vector<vector<double> > rugof (simula+1,vector<double> (max+1));
int coluna;
int i,j,k,m,a;
/* função para adcionar altura a uma coluna*/
int adcionaraltura (int coluna) {
/* calculo de altura que vc já conhece*/
if((altura[coluna] >= altura[coluna-1]) && (altura[coluna] >= altura[coluna+1]))
{
altura[coluna]++;
}
else if(altura[coluna-1] > altura[coluna+1])
{
altura[coluna] = altura[coluna-1];
}
else
{
altura[coluna] = altura[coluna+1];
}
/*cout << coluna << " "<< altura[coluna] << endl;*/
}
/* função para gravar os dados das alturas pro plot*/
int dados(string const &arquivo){
ofstream meuarquivo (arquivo.c_str(), ios::out | ios::app);
meuarquivo << coluna <<"\t"<< altura[coluna] << "\n";
return 0;
}
/* função para gravar os dados da rugosidade, ainda com só 1 simulação*/
int dadosr(string const &arquivo2,int tempo,int simu){
ofstream meuarquivo2 (arquivo2.c_str(), ios::out | ios::app);
meuarquivo2 << tempo <<"\t"<< rugof[simu][tempo] << "\n";
return 0;
}
int dadosrf(string const &arquivo3){
ofstream meuarquivo3 (arquivo3.c_str(), ios::out | ios::app);
for (int p=1;p<=max;p++){
meuarquivo3 << p <<"\t"<< rugomediaf[p] << "\n";
}
return 0;
}
/* função para somar as alturas*/
int soma(vector<int> altura,int tempo){
somaalt[tempo] = accumulate(altura.begin(), altura.end(), 0);
}
/* função para pegar altura media*/
double alturamedia(int tempo){
altmedia[tempo]=(double) somaalt[tempo]/(L-1);
/*cout << somaalt[tempo] << " " << altmedia[tempo] <<endl;*/
}
/* função para calcular a rugosidade */
double rugosidade(int tempo,int simu){
int i;
/* varre meu vetor(eliminando o extremo) fazendo o h-hmed depois faz essa diferença ao quadrado*/
for(i=1; i<=L-1; i++){
delta[i]=altura[i]-altmedia[tempo];
rugo[i]=(delta[i]*delta[i]);
/*cout <<"t: "<<i<<"altura: "<<altura[i]<<" altmedia: "<<altmedia[tempo]<<" delta: "<<delta[i]<<endl;*/
}
/*com a diferença calculada ele soma(acumula) e tira a raiz*/
delta2[tempo]= accumulate(rugo.begin(), rugo.end(), 0.0)/L;
rugof[simu][tempo]=sqrt(delta2[tempo]);
/*cout <<"deltas: "<<delta2[tempo]<<" rugf: "<<rugof[simu][tempo]<<endl;*/
}
double rugosidademedia(){
/*soma e tira a media das rugosidades*/
for( int a=1;a<=max;a++){
rugomedia.clear();
for(int m=1; m<=simula; m++){
rugomedia.resize(rugomedia.size()+1,rugof[m][a]);
}
rugomediaf[a]=accumulate(rugomedia.begin(), rugomedia.end(), 0.0)/simula;
/*cout <<rugomediaf[a]<<endl;*/
}
}
main()
{
string arquivo;
arquivo="dadosn.dat";
string arquivo2;
arquivo2="rugon.dat";
string arquivo3;
arquivo3="rugonf.dat";
remove( arquivo3.c_str() );
for(k=1; k<=simula; k++){
for(int o=1; o<=L; o++){
altura[o]=0;
}
/* alimenta o gerador aleatorio, ou sejá a cada segundo meus números aleatorios mudam, deixando quase certo uma aleatoriedade bem forte*/
srand48(time(NULL));
remove( arquivo.c_str() );
remove( arquivo2.c_str() );
/*faz cada deposito separado, nesse caso vai fazer 10000 depositos */
for(i=1; i<=max; i++){
cout << "deposito: " << i <<endl;
/* deposita as N particulas, nesse caso fiz N igual ao tamanho total da camada*/
for(j=1; j<=L; j++){
coluna = (int)((L-1)*drand48() +1 );
adcionaraltura(coluna);
dados(arquivo);
}
/*faz os calculos de somar, media rugosidade e salvar a rugosidade*/
soma(altura,i);
alturamedia(i);
rugosidade(i,k);
/*cout<<rugof[k][i]<<" "<<rugof[1][i]<<endl;*/
dadosr(arquivo2,i,k);
cout<<"simulação:"<<k<<endl;
}
}
rugosidademedia();
dadosrf(arquivo3);
}