ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/madProps/GofR.c
(Generate patch)

Comparing trunk/madProps/GofR.c (file contents):
Revision 45 by mmeineke, Tue Jul 23 16:08:35 2002 UTC vs.
Revision 46 by mmeineke, Tue Jul 23 20:10:49 2002 UTC

# Line 14 | Line 14 | void GofR( char* out_prefix, char* atom1, char* atom2,
14   void GofR( char* out_prefix, char* atom1, char* atom2,
15             struct xyz_frame* frames, int nFrames ){
16  
17 <  int i,j,k,l;
17 >  int i,j,k;
18  
19    enum g_types { all_all, atom_all, atom_atom };
20    enum g_types the_type;
# Line 36 | Line 36 | void GofR( char* out_prefix, char* atom1, char* atom2,
36    double boxVol;
37    double shortBox;
38  
39 +  double rxj, ryj, rzj;
40    double dx, dy, dz;
41    double distSqr;
42    double dist;
# Line 102 | Line 103 | void GofR( char* out_prefix, char* atom1, char* atom2,
103      for( i=0; i<frames[0].nAtoms; i++ ){
104    
105        if( !strcmp( frames[0].names[i], atom1 ) ) nAtom1++;
106 <      else if( !strcmp( frames[0].names[i], atom2 ) ) nAtom2++;
106 >      if( !strcmp( frames[0].names[i], atom2 ) ) nAtom2++;
107      }
108      
109      if( !nAtom1 ){
# Line 135 | Line 136 | void GofR( char* out_prefix, char* atom1, char* atom2,
136  
137      for( i=0; i<nFrames; i++){
138        for( j=0; j<(frames[i].nAtoms-1); j++ ){
139 <        for( k=j+1; k< frames[i].nAtoms; k++ ){
139 >        
140 >        if( !strcmp( frames[0].names[j], atom1 ) ){
141 >
142 >          rxj = frames[i].r[j].x;
143 >          ryj = frames[i].r[j].y;
144 >          rzj = frames[i].r[j].z;
145            
146 <          if( !strcmp( frames[0].names[j], atom1 ) ){
146 >          for( k=j+1; k< frames[i].nAtoms; k++ ){
147 >            
148              if( !strcmp( frames[0].names[k], atom2 ) ){
149            
150 <              dx = frames[i].r[j].x - frames[i].r[k].x;
151 <              dy = frames[i].r[j].y - frames[i].r[k].y;
152 <              dz = frames[i].r[j].z - frames[i].r[k].z;
150 >              dx = rxj - frames[i].r[k].x;
151 >              dy = ryj - frames[i].r[k].y;
152 >              dz = rzj - frames[i].r[k].z;
153                
154                map( &dx, &dy, &dz,
155                     frames[i].boxX, frames[i].boxY, frames[i].boxZ );
# Line 155 | Line 162 | void GofR( char* out_prefix, char* atom1, char* atom2,
162                if( bin < GofRBins ) histogram[bin] += 2;
163              }
164            }
165 <
166 <          else if( !strcmp( frames[0].names[j], atom2 ) ){
165 >        }
166 >        
167 >        else if( !strcmp( frames[0].names[j], atom2 ) ){
168 >          
169 >          rxj = frames[i].r[j].x;
170 >          ryj = frames[i].r[j].y;
171 >          rzj = frames[i].r[j].z;
172 >          
173 >          for( k=j+1; k< frames[i].nAtoms; k++ ){
174 >            
175              if( !strcmp( frames[0].names[k], atom1 ) ){
176                
177 <              dx = frames[i].r[j].x - frames[i].r[k].x;
178 <              dy = frames[i].r[j].y - frames[i].r[k].y;
179 <              dz = frames[i].r[j].z - frames[i].r[k].z;
177 >              dx = rxj - frames[i].r[k].x;
178 >              dy = ryj - frames[i].r[k].y;
179 >              dz = rzj - frames[i].r[k].z;
180                
181                map( &dx, &dy, &dz,
182                     frames[i].boxX, frames[i].boxY, frames[i].boxZ );
# Line 239 | Line 254 | void GofR( char* out_prefix, char* atom1, char* atom2,
254  
255      for( i=0; i<nFrames; i++){
256        for( j=0; j<(frames[i].nAtoms-1); j++ ){
257 <        for( k=j+1; k< frames[i].nAtoms; k++ ){
257 >        
258 >        if( !strcmp( frames[0].names[j], allAtom ) ){
259            
260 <          if( !strcmp( frames[0].names[j], allAtom ) ){
261 <                  
262 <            dx = frames[i].r[j].x - frames[i].r[k].x;
263 <            dy = frames[i].r[j].y - frames[i].r[k].y;
264 <            dz = frames[i].r[j].z - frames[i].r[k].z;
260 >          rxj = frames[i].r[j].x;
261 >          ryj = frames[i].r[j].y;
262 >          rzj = frames[i].r[j].z;
263 >          
264 >          for( k=j+1; k< frames[i].nAtoms; k++ ){
265 >                          
266 >            dx = rxj - frames[i].r[k].x;
267 >            dy = ryj - frames[i].r[k].y;
268 >            dz = rzj - frames[i].r[k].z;
269              
270              map( &dx, &dy, &dz,
271                   frames[i].boxX, frames[i].boxY, frames[i].boxZ );
# Line 257 | Line 277 | void GofR( char* out_prefix, char* atom1, char* atom2,
277              bin = (int)( dist / delR );
278              if( bin < GofRBins ) histogram[bin] += 2;
279            }
280 +        }
281            
282 <          else if( !strcmp( frames[0].names[k], allAtom ) ){
282 >        else{
283 >          
284 >          rxj = frames[i].r[j].x;
285 >          ryj = frames[i].r[j].y;
286 >          rzj = frames[i].r[j].z;
287 >          
288 >          for( k=j+1; k< frames[i].nAtoms; k++ ){
289              
290 <            dx = frames[i].r[j].x - frames[i].r[k].x;
291 <            dy = frames[i].r[j].y - frames[i].r[k].y;
292 <            dz = frames[i].r[j].z - frames[i].r[k].z;
293 <            
294 <            map( &dx, &dy, &dz,
295 <                 frames[i].boxX, frames[i].boxY, frames[i].boxZ );
296 <            
297 <            distSqr = (dx * dx) + (dy * dy) + (dz * dz);
298 <            dist = sqrt( distSqr );
299 <            
300 <            // add to the appropriate bin
301 <            bin = (int)( dist / delR );
302 <            if( bin < GofRBins ) histogram[bin] += 2;
290 >            if( !strcmp( frames[0].names[k], allAtom ) ){
291 >              
292 >              dx = rxj - frames[i].r[k].x;
293 >              dy = ryj - frames[i].r[k].y;
294 >              dz = rzj - frames[i].r[k].z;
295 >              
296 >              map( &dx, &dy, &dz,
297 >                   frames[i].boxX, frames[i].boxY, frames[i].boxZ );
298 >              
299 >              distSqr = (dx * dx) + (dy * dy) + (dz * dz);
300 >              dist = sqrt( distSqr );
301 >              
302 >              // add to the appropriate bin
303 >              bin = (int)( dist / delR );
304 >              if( bin < GofRBins ) histogram[bin] += 2;
305 >            }
306            }
307          }        
308        }
# Line 320 | Line 350 | void GofR( char* out_prefix, char* atom1, char* atom2,
350  
351      for( i=0; i<nFrames; i++){
352        for( j=0; j<(frames[i].nAtoms-1); j++ ){
353 +        
354 +        rxj = frames[i].r[j].x;
355 +        ryj = frames[i].r[j].y;
356 +        rzj = frames[i].r[j].z;
357 +        
358          for( k=j+1; k< frames[i].nAtoms; k++ ){
359 <          
360 <          dx = frames[i].r[j].x - frames[i].r[k].x;
361 <          dy = frames[i].r[j].y - frames[i].r[k].y;
362 <          dz = frames[i].r[j].z - frames[i].r[k].z;
363 <          
359 >
360 >          dx = rxj - frames[i].r[k].x;
361 >          dy = ryj - frames[i].r[k].y;
362 >          dz = rzj - frames[i].r[k].z;
363 >                  
364            map( &dx, &dy, &dz,
365                 frames[i].boxX, frames[i].boxY, frames[i].boxZ );
366            
# Line 379 | Line 414 | void GofR( char* out_prefix, char* atom1, char* atom2,
414    fclose( out_file );
415   }
416  
382
383 void map( double *x, double *y, double *z,
384          double boxX, double boxY, double boxZ ){
385  
386  *x -= boxX * copysign(1.0,*x) * floor( fabs( *x/boxX ) + 0.5  );
387  *y -= boxY * copysign(1.0,*y) * floor( fabs( *y/boxY ) + 0.5  );
388  *z -= boxZ * copysign(1.0,*z) * floor( fabs( *z/boxZ ) + 0.5  );
389
390 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines