#include <string.h>#include <stdlib.h>#include "InfoStream.h"#include "IMDOutput.h"#include "Output.h"#include "dcdlib.h"#include "strlib.h"#include "Molecule.h"#include "Node.h"#include "Parameters.h"#include "PDB.h"#include "SimParameters.h"#include "Vector.h"#include "structures.h"#include "MStream.h"#include "Communicate.h"#include "PatchMap.h"#include "PatchMap.inl"#include "ScriptTcl.h"#include "Lattice.h"Go to the source code of this file.
Defines | |
| #define | namdMyNode Node::Object() |
| #define | simParams simParameters |
| #define | pdbData pdb |
| #define | RAD2DEG 180.0/3.14159265359 |
Functions | |
| template<class xVector, class xDone> | |
| void | wrap_coor_int (xVector *coor, Lattice &lattice, xDone *done) |
| void | wrap_coor (Vector *coor, Lattice &lattice, double *done) |
| void | wrap_coor (FloatVector *coor, Lattice &lattice, float *done) |
|
|
Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000 by The Board of Trustees of the University of Illinois. All rights reserved. |
|
|
|
|
|
|
|
|
||||||||||||||||
|
Definition at line 214 of file Output.C. References wrap_coor_int(). Referenced by Output::coordinate(). 00214 {
00215 wrap_coor_int(coor,lattice,done);
00216 };
|
|
||||||||||||||||
|
Definition at line 210 of file Output.C. References wrap_coor_int(). 00210 {
00211 wrap_coor_int(coor,lattice,done);
00212 };
|
|
||||||||||||||||||||
|
Definition at line 126 of file Output.C. References Molecule::get_cluster(), Molecule::get_clusterSize(), Molecule::is_water(), Node::molecule, NAMD_bug(), Molecule::numAtoms, Node::Object(), Position, Node::simParameters, simParams, Lattice::wrap_delta(), Lattice::wrap_nearest_delta(), SimParameters::wrapAll, SimParameters::wrapNearest, and SimParameters::wrapWater. Referenced by wrap_coor(). 00126 {
00127 SimParameters *simParams = Node::Object()->simParameters;
00128 if ( *done ) return;
00129 *done = 1;
00130 if ( ! ( simParams->wrapAll || simParams->wrapWater ) ) return;
00131 const int wrapNearest = simParams->wrapNearest;
00132 const int wrapAll = simParams->wrapAll;
00133 Molecule *molecule = Node::Object()->molecule;
00134 int n = molecule->numAtoms;
00135 #ifdef MEM_OPT_VERSION
00136 if(molecule->get_cluster_contiguity()) {
00137 //the general case where the atom ids of a cluster are contiguous
00138 //iterate over every cluster
00139 for(int aid=0; aid<n;){
00140 int curClusterSize = molecule->get_cluster_size_con(aid);
00141 if(curClusterSize<0) NAMD_bug("Cluster size is less than 0 at wrap_coor_int");
00142 //we encountered the beginning of a cluster, and aid is the current cluster id
00143 Position curClusterCon = 0;
00144 //This cluster begins from atom "aid" to atom "aid+curClusterSize-1"
00145 for(int i=aid; i<aid+curClusterSize; i++){
00146 curClusterCon += coor[i];
00147 }
00148
00149 //The order of evaluating the following if-condition is very important since it
00150 //is related with reducting memory usage. Two points worth noting:
00151 //1. molecule->is_water is more expensive to evaluate, so evaluatte wrapAll first
00152 //2. if molecule->is_water is actually called, we have to reserve a memory space (O(numAtoms))
00153 // for its correctness
00154 if(wrapAll || molecule->is_water(aid)){
00155 Vector coni = curClusterCon/curClusterSize;
00156 Vector trans = ( wrapNearest ? lattice.wrap_nearest_delta(coni) : lattice.wrap_delta(coni));
00157 curClusterCon = trans;
00158 }
00159 for(int i=aid; i<aid+curClusterSize; i++){
00160 if(!wrapAll && !molecule->is_water(i)) continue;
00161 coor[i] = coor[i] + curClusterCon;
00162 }
00163 aid += curClusterSize;
00164 }
00165 }else{
00166 int numClusters = molecule->get_num_clusters();
00167 Position *con = new Position[numClusters];
00168 for(int i=0; i<numClusters; i++) con[i] = 0;
00169 for(int i=0; i<n; i++) {
00170 int ci = molecule->get_cluster_idx(i);
00171 con[ci] += coor[i];
00172 }
00173
00174 for(int i=0; i<numClusters; i++) {
00175 Vector coni = con[i] / molecule->get_cluster_size_uncon(i);
00176 Vector trans = ( wrapNearest ? lattice.wrap_nearest_delta(coni) : lattice.wrap_delta(coni));
00177 con[i] = trans;
00178 }
00179
00180 for (int i = 0; i < n; ++i ) {
00181 if ( ! wrapAll && ! molecule->is_water(i) ) continue;
00182 int ci = molecule->get_cluster_idx(i);
00183 coor[i] = coor[i] + con[ci];
00184 }
00185 delete [] con;
00186 }
00187 #else
00188 int i;
00189 Position *con = new Position[n];
00190 for ( i = 0; i < n; ++i ) {
00191 con[i] = 0;
00192 int ci = molecule->get_cluster(i);
00193 con[ci] += coor[i];
00194 }
00195 for ( i = 0; i < n; ++i ) {
00196 if ( ! wrapAll && ! molecule->is_water(i) ) continue;
00197 int ci = molecule->get_cluster(i);
00198 if ( ci == i ) {
00199 Vector coni = con[i] / molecule->get_clusterSize(i);
00200 Vector trans = ( wrapNearest ?
00201 lattice.wrap_nearest_delta(coni) : lattice.wrap_delta(coni) );
00202 con[i] = trans;
00203 }
00204 coor[i] = coor[i] + con[ci];
00205 }
00206 delete [] con;
00207 #endif
00208 }
|
1.3.9.1