ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/tags/export/OOPSE-1.0/staticProps/GofRtheta.cpp
Revision: 1334
Committed: Fri Jul 16 18:58:03 2004 UTC (20 years, 1 month ago) by gezelter
Original Path: trunk/OOPSE-1.0/staticProps/GofRtheta.cpp
File size: 3096 byte(s)
Log Message:
Initial import of OOPSE-1.0 source tree

File Contents

# User Rev Content
1 gezelter 1334 #include <iostream>
2     #include <fstream>
3    
4     #include <cstring>
5     #include <cmath>
6    
7     #include "simError.h"
8     #include "PairCorrType.hpp"
9    
10     using namespace std;
11    
12     GofRtheta::GofRtheta( char* key1, char* key2, int theNatoms, int theNbins ):
13     PairCorrType( key1, key2, theNatoms, theNbins )
14     {
15     int i, j;
16    
17     strcpy( corrType, "GofRtheta" );
18    
19     currCosHist = new int*[nBins];
20     currGofRtheta = new double*[nBins];
21     avgGofRtheta = new double*[nBins];
22    
23     for(i=0;i<nBins;i++){
24     currCosHist[i] = new int[nBins];
25     currGofRtheta[i] = new double[nBins];
26     avgGofRtheta[i] = new double[nBins];
27    
28     for(j=0;j<nBins;j++){
29     currCosHist[i][j] = 0;
30     currGofRtheta[i][j] = 0.0;
31     avgGofRtheta[i][j] = 0.0;
32     }
33     }
34    
35     nFrames = 0;
36     }
37    
38     GofRtheta::~GofRtheta(){
39    
40     int i;
41    
42     for(i=0;i<nBins;i++){
43     delete[] currCosHist[i];
44     delete[] currGofRtheta[i];
45     delete[] avgGofRtheta[i];
46     }
47    
48     delete[] currCosHist;
49     delete[] currGofRtheta;
50     delete[] avgGofRtheta;
51     }
52    
53     void GofRtheta::correlate( double Rij[3], double dist,
54     double uHatI[3], double uHatJ[3] ){
55     int binR, binTheta, i;
56     double dot, cosTheta;
57     double halfNbins;
58    
59     if( correlateMe ){
60    
61     if( uHatI != NULL ){
62    
63     dot= 0.0;
64     for(i=0;i<3;i++)
65     dot += Rij[i] * uHatI[i];
66    
67     cosTheta = dot / dist;
68    
69     binR = (int)( dist / delR );
70     if( binR < nBins ){
71    
72     halfNbins = (nBins-1) * 0.5;
73     binTheta = (int)( (cosTheta * halfNbins) + halfNbins );
74    
75     currCosHist[binR][binTheta] += 1;
76     }
77     }
78     else{
79    
80     sprintf( painCave.errMsg,
81     "GofRtheta error: atom \"%s\" does not have a "
82     "directional component\n",
83     atom1
84     );
85     painCave.isFatal = 1;
86     simError();
87     }
88     }
89     }
90    
91     void GofRtheta::accumulateFrame( void ){
92     int i,j;
93     double rLower, rUpper, volSlice;
94     double nIdeal;
95    
96     nFrames++;
97    
98     for(i=0;i<nBins;i++){
99    
100     rLower = i * delR;
101     rUpper = rLower + delR;
102    
103     volSlice = ( rUpper * rUpper * rUpper ) - ( rLower * rLower * rLower );
104     nIdeal = volSlice * pairConstant;
105    
106     for(j=0;j<nBins;j++){
107    
108     currGofRtheta[i][j] = (currCosHist[i][j] / nIdeal);
109     currCosHist[i][j] = 0;
110    
111     avgGofRtheta[i][j] += currGofRtheta[i][j];
112     }
113     }
114     }
115    
116    
117     void GofRtheta::writeCorr( char* outPrefix ){
118    
119     double rValue, cosValue, deltaCos, corrValue;
120     double rLower, rUpper, volSlice;
121     double nIdeal;
122     int i, j;
123     char outName[200];
124    
125     sprintf( outName,
126     "%s-%s-%s.GofRtheta",
127     outPrefix,
128     atom1,
129     atom2 );
130     ofstream outStream( outName );
131    
132     if( !outStream ){
133    
134     sprintf( painCave.errMsg,
135     "Error opening \"%s\" for output.\n",
136     outName );
137     painCave.isFatal = 1;
138     simError();
139     }
140    
141     outStream << "#rValue; cosValue; corrValue\n";
142    
143    
144     deltaCos = 2.0 / nBins;
145     for(i=0;i<nBins;i++){
146    
147     rValue = ( i + 0.5 ) * delR;
148    
149     for(j=0;j<nBins;j++){
150    
151     cosValue = -1 + (j * deltaCos);
152    
153     corrValue = avgGofRtheta[i][j] / nFrames;
154    
155     outStream << rValue << "; " << cosValue << "; " << corrValue << "\n";
156     }
157     }
158    
159     outStream.close();
160     }