forked from rikigigi/analisi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
istogrammavelocita.cpp
76 lines (50 loc) · 2.01 KB
/
istogrammavelocita.cpp
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
/**
*
* (c) Riccardo Bertossa, 2019
*
* Use at your own risk.
*
* If you modified the code, I could be happy if you contribute on github!
*
**/
#include "istogrammavelocita.h"
#include "mediablocchi.h"
void istg(double a,/// estremo inferiore dell'intervallo da istogrammare
double b,///estremo superiore dell'intervallo da istogrammare
unsigned int z,/// numero di intervalli dell'istogramma
double *ist,/// array che conterrà dopo l'istogramma calcolato. E' responsabilità dell'utente la sua inizializzazione (a zero o a quello che si vuole)
double val ///elemento da inserire nell'istogramma
){
double k;
k=(val-a)/(b-a)*z;
if (k<0) {k=0;} else if (k>z-1) {k=z-1;}
ist[(unsigned int) k]++;
}
IstogrammaVelocita::IstogrammaVelocita(Traiettoria *t, unsigned int nbins,double vminmax_) : OperazioniSuLista<IstogrammaVelocita> ()
{
traiettoria=t;
lunghezza_lista=traiettoria->get_ntypes()*3*nbins;
lista = new double [lunghezza_lista];
bins=nbins;
vminmax=vminmax_;
}
unsigned int IstogrammaVelocita::numeroTimestepsOltreFineBlocco(unsigned int n_b) {
return 0;
}
IstogrammaVelocita & IstogrammaVelocita::operator = (const IstogrammaVelocita & destra) {
OperazioniSuLista<IstogrammaVelocita>::operator =(destra);
return *this;
}
void IstogrammaVelocita::reset(const unsigned int numeroTimestepsPerBlocco) {
for (unsigned int i=0;i<lunghezza_lista;i++)
lista[i]=0.0;
ntimestep=numeroTimestepsPerBlocco;
}
void IstogrammaVelocita::calcola(unsigned int primo) {
for (unsigned int itimestep=primo;itimestep<primo+ntimestep;itimestep++)
for (unsigned int iatom=0;iatom<traiettoria->get_natoms();iatom++) {
for (unsigned int icoord=0;icoord<3;icoord++)
istg(-vminmax,+vminmax,bins,&lista[(traiettoria->get_type(iatom)*3+icoord)*bins],traiettoria->velocita(itimestep,iatom)[icoord]);
}
}
//template class MediaBlocchi<IstogrammaVelocita,unsigned int,double>;