ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/applications/staticProps/GofRAngle.cpp
Revision: 1785
Committed: Wed Aug 22 18:43:27 2012 UTC (12 years, 8 months ago) by jmichalk
File size: 6244 byte(s)
Log Message:
Trunk: The changes in this commit are confined to applications/staticProps and for the most part deal with a misspelling of initialize.

The one other change took place in StaticProps.cpp and deals with the default treatment of sele2. It had previously been set to 'select all' which seems to go against what would be desired by not specifying it with regard to proper operations of many of the analysis programs ( g of r's especially)

File Contents

# User Rev Content
1 tim 309 /*
2     * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3     *
4     * The University of Notre Dame grants you ("Licensee") a
5     * non-exclusive, royalty free, license to use, modify and
6     * redistribute this software in source and binary code form, provided
7     * that the following conditions are met:
8     *
9 gezelter 1390 * 1. Redistributions of source code must retain the above copyright
10 tim 309 * notice, this list of conditions and the following disclaimer.
11     *
12 gezelter 1390 * 2. Redistributions in binary form must reproduce the above copyright
13 tim 309 * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the
15     * distribution.
16     *
17     * This software is provided "AS IS," without a warranty of any
18     * kind. All express or implied conditions, representations and
19     * warranties, including any implied warranty of merchantability,
20     * fitness for a particular purpose or non-infringement, are hereby
21     * excluded. The University of Notre Dame and its licensors shall not
22     * be liable for any damages suffered by licensee as a result of
23     * using, modifying or distributing the software or its
24     * derivatives. In no event will the University of Notre Dame or its
25     * licensors be liable for any lost revenue, profit or data, or for
26     * direct, indirect, special, consequential, incidental or punitive
27     * damages, however caused and regardless of the theory of liability,
28     * arising out of the use of or inability to use software, even if the
29     * University of Notre Dame has been advised of the possibility of
30     * such damages.
31 gezelter 1390 *
32     * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
33     * research, please cite the appropriate papers when you publish your
34     * work. Good starting points are:
35     *
36     * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
37     * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
38     * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).
39 gezelter 1782 * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010).
40     * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41 tim 309 */
42    
43     #include <algorithm>
44     #include <fstream>
45     #include "applications/staticProps/GofRAngle.hpp"
46     #include "utils/simError.h"
47    
48 gezelter 1390 namespace OpenMD {
49 tim 309
50 gezelter 507 GofRAngle::GofRAngle(SimInfo* info, const std::string& filename, const std::string& sele1,
51 tim 963 const std::string& sele2, RealType len, int nrbins, int nangleBins)
52 tim 354 : RadialDistrFunc(info, filename, sele1, sele2), len_(len), nRBins_(nrbins), nAngleBins_(nangleBins){
53 tim 309
54 xsun 1213 deltaR_ = len_ /(double) nRBins_;
55     deltaCosAngle_ = 2.0 / (double)nAngleBins_;
56 gezelter 507 histogram_.resize(nRBins_);
57     avgGofr_.resize(nRBins_);
58     for (int i = 0 ; i < nRBins_; ++i) {
59 tim 354 histogram_[i].resize(nAngleBins_);
60     avgGofr_[i].resize(nAngleBins_);
61 gezelter 507 }
62 tim 354 }
63 tim 309
64    
65 gezelter 507 void GofRAngle::preProcess() {
66 gezelter 1782 for (unsigned int i = 0; i < avgGofr_.size(); ++i) {
67 gezelter 507 std::fill(avgGofr_[i].begin(), avgGofr_[i].end(), 0);
68 tim 310 }
69 gezelter 507 }
70 tim 309
71 jmichalk 1785 void GofRAngle::initializeHistogram() {
72 tim 309 npairs_ = 0;
73 gezelter 1782 for (unsigned int i = 0; i < histogram_.size(); ++i){
74 gezelter 507 std::fill(histogram_[i].begin(), histogram_[i].end(), 0);
75 xsun 1213 }
76 gezelter 507 }
77 tim 309
78 gezelter 507 void GofRAngle::processHistogram() {
79 tim 353 int nPairs = getNPairs();
80 tim 963 RealType volume = info_->getSnapshotManager()->getCurrentSnapshot()->getVolume();
81     RealType pairDensity = nPairs /volume;
82     RealType pairConstant = ( 4.0 * NumericConstant::PI * pairDensity ) / 3.0;
83 tim 309
84 gezelter 1782 for(unsigned int i = 0 ; i < histogram_.size(); ++i){
85 tim 309
86 tim 963 RealType rLower = i * deltaR_;
87     RealType rUpper = rLower + deltaR_;
88     RealType volSlice = ( rUpper * rUpper * rUpper ) - ( rLower * rLower * rLower );
89     RealType nIdeal = volSlice * pairConstant;
90 tim 309
91 gezelter 1782 for (unsigned int j = 0; j < histogram_[i].size(); ++j){
92 gezelter 507 avgGofr_[i][j] += histogram_[i][j] / nIdeal;
93     }
94 tim 309 }
95    
96 gezelter 507 }
97 tim 309
98 gezelter 507 void GofRAngle::collectHistogram(StuntDouble* sd1, StuntDouble* sd2) {
99 tim 309
100     if (sd1 == sd2) {
101 gezelter 507 return;
102 tim 309 }
103     Vector3d pos1 = sd1->getPos();
104     Vector3d pos2 = sd2->getPos();
105 tim 361 Vector3d r12 = pos2 - pos1;
106 gezelter 1078 if (usePeriodicBoundaryConditions_)
107     currentSnapshot_->wrapVector(r12);
108 tim 309
109 tim 963 RealType distance = r12.length();
110 tim 310 int whichRBin = distance / deltaR_;
111 tim 309
112 tim 328 if (distance <= len_) {
113 xsun 1213
114 tim 963 RealType cosAngle = evaluateAngle(sd1, sd2);
115     RealType halfBin = (nAngleBins_ - 1) * 0.5;
116 gezelter 507 int whichThetaBin = halfBin * (cosAngle + 1.0);
117     ++histogram_[whichRBin][whichThetaBin];
118 tim 328
119 gezelter 507 ++npairs_;
120 tim 328 }
121 gezelter 507 }
122 tim 309
123 gezelter 507 void GofRAngle::writeRdf() {
124 tim 309 std::ofstream rdfStream(outputFilename_.c_str());
125     if (rdfStream.is_open()) {
126 gezelter 507 rdfStream << "#radial distribution function\n";
127     rdfStream << "#selection1: (" << selectionScript1_ << ")\t";
128     rdfStream << "selection2: (" << selectionScript2_ << ")\n";
129     rdfStream << "#nRBins = " << nRBins_ << "\t maxLen = " << len_ << "deltaR = " << deltaR_ <<"\n";
130     rdfStream << "#nAngleBins =" << nAngleBins_ << "deltaCosAngle = " << deltaCosAngle_ << "\n";
131 gezelter 1782 for (unsigned int i = 0; i < avgGofr_.size(); ++i) {
132 tim 963 RealType r = deltaR_ * (i + 0.5);
133 tim 309
134 gezelter 1782 for(unsigned int j = 0; j < avgGofr_[i].size(); ++j) {
135 tim 963 RealType cosAngle = -1.0 + (j + 0.5)*deltaCosAngle_;
136 gezelter 507 rdfStream << avgGofr_[i][j]/nProcessed_ << "\t";
137     }
138 tim 360
139 gezelter 507 rdfStream << "\n";
140     }
141 tim 309
142     } else {
143 gezelter 507 sprintf(painCave.errMsg, "GofRAngle: unable to open %s\n", outputFilename_.c_str());
144     painCave.isFatal = 1;
145     simError();
146 tim 309 }
147    
148     rdfStream.close();
149 gezelter 507 }
150 tim 309
151 tim 963 RealType GofRTheta::evaluateAngle(StuntDouble* sd1, StuntDouble* sd2) {
152 tim 309 Vector3d pos1 = sd1->getPos();
153     Vector3d pos2 = sd2->getPos();
154 tim 361 Vector3d r12 = pos2 - pos1;
155 xsun 1213
156 gezelter 1078 if (usePeriodicBoundaryConditions_)
157     currentSnapshot_->wrapVector(r12);
158    
159 tim 309 r12.normalize();
160 tim 311 Vector3d dipole = sd1->getElectroFrame().getColumn(2);
161 tim 309 dipole.normalize();
162 tim 311 return dot(r12, dipole);
163 gezelter 507 }
164 tim 309
165 tim 963 RealType GofROmega::evaluateAngle(StuntDouble* sd1, StuntDouble* sd2) {
166 tim 309 Vector3d v1 = sd1->getElectroFrame().getColumn(2);
167 tim 373 Vector3d v2 = sd2->getElectroFrame().getColumn(2);
168 tim 311 v1.normalize();
169     v2.normalize();
170     return dot(v1, v2);
171 gezelter 507 }
172 tim 309
173    
174     }
175    
176    

Properties

Name Value
svn:keywords Author Id Revision Date