Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

Output.C File Reference

#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)


Define Documentation

#define namdMyNode   Node::Object()
 

Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000 by The Board of Trustees of the University of Illinois. All rights reserved.

Definition at line 34 of file Output.C.

#define pdbData   pdb
 

Definition at line 36 of file Output.C.

#define RAD2DEG   180.0/3.14159265359
 

Definition at line 498 of file Output.C.

#define simParams   simParameters
 

Definition at line 35 of file Output.C.

Referenced by HomePatch::addForceToMomentum(), HomePatch::addVelocityToPosition(), ComputeCylindricalBC::ComputeCylindricalBC(), ComputePme::ComputePme(), ComputeRestraints::ComputeRestraints(), ComputeSphericalBC::ComputeSphericalBC(), ComputeStir::ComputeStir(), ComputeTclBC::ComputeTclBC(), Controller::Controller(), Output::coordinate(), Output::coordinateNeeded(), ComputeMgr::createComputes(), LdbCoordinator::createLoadBalancer(), ComputeStir::doForce(), ComputeGridForce::doForce(), ComputeEField::doForce(), ComputeConsTorque::doForce(), HomePatch::doGroupSizeCheck(), HomePatch::doMarginCheck(), HomePatch::doPairlistCheck(), ComputeTclBC::doWork(), ComputeNonbondedCUDA::doWork(), dumpbench(), OptPmeXPencil::fft_init(), OptPmeYPencil::fft_init(), OptPmeZPencil::fft_init(), PmeXPencil::fft_init(), PmeYPencil::fft_init(), PmeZPencil::fft_init(), ComputeGridForce::finishForce(), ComputeNonbondedCUDA::finishWork(), GridforceGrid::get_box(), GridforceGrid::init1(), OptPmeMgr::initialize(), LdbCoordinator::initialize(), ComputePmeMgr::initialize(), OptPmeMgr::initialize_pencils(), ComputePmeMgr::initialize_pencils(), initializePmeGrid(), Molecule::Molecule(), HomePatch::mollyAverage(), HomePatch::mollyMollify(), Molecule::num_deg_freedom(), Molecule::num_fixed_atoms(), Molecule::num_group_deg_freedom(), Parameters::Parameters(), HomePatch::rattle1(), HomePatch::rattle2(), Parameters::read_ener_table(), ComputeExtMgr::recvCoord(), OptPmeMgr::recvEvir(), ScriptTcl::run(), ComputeNonbondedUtil::select(), SELF(), Sequencer::Sequencer(), OptPmeCompute::ungridForces(), ComputePme::ungridForces(), Output::velocity(), Output::velocityNeeded(), and wrap_coor_int().


Function Documentation

void wrap_coor FloatVector coor,
Lattice lattice,
float *  done
 

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 };

void wrap_coor Vector coor,
Lattice lattice,
double *  done
 

Definition at line 210 of file Output.C.

References wrap_coor_int().

00210                                                              {
00211   wrap_coor_int(coor,lattice,done);
00212 };

template<class xVector, class xDone>
void wrap_coor_int xVector *  coor,
Lattice lattice,
xDone *  done
 

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 }


Generated on Tue Nov 24 04:07:47 2009 for NAMD by  doxygen 1.3.9.1