NAMD
Macros | Functions | Variables
Output.C File Reference
#include "largefiles.h"
#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"
#include "DataExchanger.h"
#include <fcntl.h>
#include <sys/stat.h>
#include "PatchData.h"

Go to the source code of this file.

Macros

#define PATHSEPSTR   "/"
 
#define MKDIR(X)   mkdir(X,0777)
 
#define NAMD_open   NAMD_open64
 
#define NAMD_write   NAMD_write64
 
#define NAMD_close   NAMD_close64
 
#define O_LARGEFILE   0x0
 
#define seek_dcdfile   NAMD_seek
 
#define namdMyNode   Node::Object()
 
#define simParams   simParameters
 
#define pdbData   pdb
 
#define RAD2DEG   180.0/3.14159265359
 

Functions

int NAMD_open (const char *fname)
 
void NAMD_write (int fd, const char *buf, size_t count, const char *errmsg="NAMD_write64")
 
void NAMD_close (int fd, const char *fname)
 
static void lattice_to_unitcell (const Lattice *lattice, double *unitcell)
 
template<class xVector , class xDone >
void wrap_coor_int (xVector *coor, Lattice &lattice, xDone *done)
 
template<class xVector , class xDone >
void wrap_coor_int_dcd_selection (xVector *coor, Lattice &lattice, xDone *done, int index)
 
void wrap_coor_dcd_selection (Vector *coor, Lattice &lattice, double *done, int index)
 
void wrap_coor_dcd_selection (FloatVector *coor, Lattice &lattice, float *done, int index)
 
void wrap_coor (Vector *coor, Lattice &lattice, double *done)
 
void wrap_coor (FloatVector *coor, Lattice &lattice, float *done)
 

Variables

static const short maxDCD =257
 

Macro Definition Documentation

◆ MKDIR

#define MKDIR (   X)    mkdir(X,0777)

Definition at line 48 of file Output.C.

◆ NAMD_close

#define NAMD_close   NAMD_close64

Definition at line 53 of file Output.C.

Referenced by ofstream_namd::close().

◆ NAMD_open

#define NAMD_open   NAMD_open64

Definition at line 51 of file Output.C.

◆ NAMD_write

#define NAMD_write   NAMD_write64

Definition at line 52 of file Output.C.

◆ namdMyNode

#define namdMyNode   Node::Object()

Definition at line 128 of file Output.C.

Referenced by Output::recvReplicaDcdData(), and Output::replicaDcdSelectInit().

◆ O_LARGEFILE

#define O_LARGEFILE   0x0

Definition at line 56 of file Output.C.

Referenced by NAMD_open().

◆ PATHSEPSTR

#define PATHSEPSTR   "/"

Definition at line 47 of file Output.C.

◆ pdbData

#define pdbData   pdb

Definition at line 130 of file Output.C.

◆ RAD2DEG

#define RAD2DEG   180.0/3.14159265359

Definition at line 949 of file Output.C.

◆ seek_dcdfile

#define seek_dcdfile   NAMD_seek

Definition at line 125 of file Output.C.

◆ simParams

#define simParams   simParameters

Definition at line 129 of file Output.C.

Referenced by HomePatch::addForceToMomentum(), HomePatch::addForceToMomentum3(), HomePatch::addVelocityToPosition(), HomePatch::boxClosed(), Molecule::build_gridforce_params(), HomePatch::buildRattleList(), HomePatch::buildRattleList_SOA(), ComputePmeMgr::chargeGridSubmitted(), CudaPmeOneDevice::checkPatchLevelLatticeCompatibilityAndComputeOffsets(), ComputeCylindricalBC::ComputeCylindricalBC(), AngleElem::computeForce(), ImproperElem::computeForce(), DihedralElem::computeForce(), CrosstermElem::computeForce(), TholeElem::computeForce(), AnisoElem::computeForce(), BondElem::computeForce(), ExclElem::computeForce(), GromacsPairElem::computeForce(), ComputeFullDirect::ComputeFullDirect(), ComputeLCPO::ComputeLCPO(), ComputeMsm::ComputeMsm(), ComputePme::ComputePme(), ComputeRestraints::ComputeRestraints(), ComputeSphericalBC::ComputeSphericalBC(), ComputeStir::ComputeStir(), ComputeTclBC::ComputeTclBC(), Output::coordinate(), Output::coordinateNeeded(), ComputeMgr::createComputes(), ComputeCUDAMgr::createCudaGlobalMaster(), ComputeCUDAMgr::createCudaPmeOneDevice(), LdbCoordinator::createLoadBalancer(), CudaComputeNonbonded::CudaComputeNonbonded(), HomePatch::depositMigration(), ComputeEField::doForce(), ComputeConsTorque::doForce(), ComputeStir::doForce(), ComputeNonbondedPair::doForce(), ComputeNonbondedSelf::doForce(), ComputeGridForce::doForce(), ComputeRestraints::doForce(), HomePatch::doGroupSizeCheck(), HomePatch::doGroupSizeCheck_SOA(), HomePatch::doMarginCheck(), HomePatch::doMarginCheck_SOA(), HomePatch::doPairlistCheck(), ComputeTclBC::doWork(), ComputeGBISser::doWork(), CudaComputeNonbonded::doWork(), dumpbench(), HomePatch::exchangeAtoms(), HomePatch::exchangeCheckpoint(), PmeZPencil::fft_init(), PmeYPencil::fft_init(), PmeXPencil::fft_init(), Output::force(), Output::forceNeeded(), ComputePmeCUDADevice::gatherForce(), HomePatch::gbisComputeAfterP1(), HomePatch::gbisComputeAfterP2(), Molecule::get_fep_bonded_type(), CudaComputeNonbonded::getDoTable(), ComputeLjPmeSerialMgr::getLJparameters(), CudaComputeNonbonded::getNonbondedCoef(), ComputePmeMgr::gridCalc2(), HomePatch::hardWallDrude(), ComputePmeCUDA::initialize(), LjPmeMgr::initialize(), LdbCoordinator::initialize(), GridforceFullMainGrid::initialize(), GridforceFullSubGrid::initialize(), GridforceLiteGrid::initialize(), ComputeMsmMgr::initialize(), ComputePmeMgr::initialize(), ComputePmeCUDADevice::initialize(), ComputePmeMgr::initialize_computes(), ComputePmeMgr::initialize_pencils(), isPmeProcessor(), CudaComputeNonbonded::launchWork(), HomePatch::loweAndersenVelocities(), WorkDistrib::mapComputes(), ComputePmeCUDADevice::mergeForcesOnPatch(), HomePatch::minimize_rattle2(), Molecule::Molecule(), HomePatch::mollyAverage(), HomePatch::mollyMollify(), NamdHybridLB::NamdHybridLB(), GridforceGrid::new_grid(), Molecule::num_deg_freedom(), Molecule::num_fixed_atoms(), Molecule::num_group_deg_freedom(), Parameters::Parameters(), PatchDataSOA_set_buffer(), PatchDataSOA_set_size(), Compute::patchReady(), Patch::positionsReady(), HomePatch::positionsReady(), HomePatch::positionsReady_SOA(), Molecule::print_atoms(), HomePatch::qmSwapAtoms(), HomePatch::rattle1(), HomePatch::rattle1_SOA(), HomePatch::rattle1old(), HomePatch::rattle2(), Parameters::read_ener_table(), Molecule::receive_Molecule(), recursive_bisect_with_curve(), ComputePmeCUDADevice::recvAtoms(), ComputePmeCUDADevice::recvAtomsFromNeighbor(), HomePatch::recvCheckpointLoad(), ComputeMsmSerialMgr::recvCoord(), ComputeExtMgr::recvCoord(), ComputeLjPmeSerialMgr::recvCoord(), ComputeFmmSerialMgr::recvCoord(), ComputeMgr::recvCudaGlobalMasterCreateMsg(), ComputeMgr::recvCudaGlobalMasterRemoveMsg(), ComputeMgr::recvCudaGlobalMasterUpdateMsg(), HomePatch::recvExchangeMsg(), GridforceFullMainGrid::reinitialize(), GridforceLiteGrid::reinitialize(), CudaComputeNonbonded::reSortTileLists(), HomePatch::revert(), ScriptTcl::run(), ComputePmeUtil::select(), ComputeNonbondedUtil::select(), Molecule::send_Molecule(), ComputePmeCUDADevice::sendAtomsToNeighbor(), ComputePmeCUDADevice::sendForcesToNeighbors(), HomePatch::setGBISIntrinsicRadii(), ComputeLjPmeSerialMgr::setLJparameters(), PmeAtomStorage::setupAlch(), ComputePmeCUDAMgr::setupPencils(), NamdHybridLB::splitComputes(), ComputePmeCUDADevice::spreadCharge(), NamdCentLB::Strategy(), PmePencilXYZ::submitReductions(), PmePencilZ::submitReductions(), ComputePmeMgr::submitReductions(), ComputePme::ungridForces(), ComputeMgr::updateLocalComputes4(), Output::velocity(), Output::velocityNeeded(), wrap_coor_int(), wrap_coor_int_dcd_selection(), and Controller::write_accelMDG_rest_file().

Function Documentation

◆ lattice_to_unitcell()

static void lattice_to_unitcell ( const Lattice lattice,
double *  unitcell 
)
static

Definition at line 132 of file Output.C.

References Lattice::a(), Lattice::a_p(), Lattice::b(), Lattice::b_p(), Lattice::c(), Lattice::c_p(), and Vector::length().

132  {
133 
134  unitcell[0] = unitcell[2] = unitcell[5] = 0.0;
135  unitcell[1] = unitcell[3] = unitcell[4] = 0.0;
136 
137  if (lattice) {
138  const Vector &a=lattice->a();
139  const Vector &b=lattice->b();
140  const Vector &c=lattice->c();
141  unitcell[0] = (lattice->a_p()) ? a.length() : 0.0;
142  unitcell[2] = (lattice->b_p()) ? b.length() : 0.0;
143  unitcell[5] = (lattice->c_p()) ? c.length() : 0.0;
144  double cosAB = (lattice->a_p() && lattice->b_p() ) ?
145  (a*b)/(unitcell[0]*unitcell[2]) : 0.0;
146  double cosAC = (lattice->a_p() && lattice->c_p() ) ?
147  (a*c)/(unitcell[0]*unitcell[5]) : 0.0;
148  double cosBC = (lattice->b_p() && lattice->c_p() ) ?
149  (b*c)/(unitcell[2]*unitcell[5]) : 0.0;
150  if (cosAB > 1.0) cosAB = 1.0; else if (cosAB < -1.0) cosAB = -1.0;
151  if (cosAC > 1.0) cosAC = 1.0; else if (cosAC < -1.0) cosAC = -1.0;
152  if (cosBC > 1.0) cosBC = 1.0; else if (cosBC < -1.0) cosBC = -1.0;
153  unitcell[1] = cosAB;
154  unitcell[3] = cosAC;
155  unitcell[4] = cosBC;
156  }
157 }
NAMD_HOST_DEVICE Vector c() const
Definition: Lattice.h:270
NAMD_HOST_DEVICE int c_p() const
Definition: Lattice.h:291
Definition: Vector.h:72
NAMD_HOST_DEVICE int b_p() const
Definition: Lattice.h:290
NAMD_HOST_DEVICE BigReal length(void) const
Definition: Vector.h:202
NAMD_HOST_DEVICE int a_p() const
Definition: Lattice.h:289
NAMD_HOST_DEVICE Vector b() const
Definition: Lattice.h:269
NAMD_HOST_DEVICE Vector a() const
Definition: Lattice.h:268

◆ NAMD_close()

void NAMD_close ( int  fd,
const char *  fname 
)

Definition at line 110 of file Output.C.

References NAMD_err().

110  {
111 #ifdef WIN32
112  while ( _close(fd) ) {
113 #else
114  while ( close(fd) ) {
115 #endif
116  if ( errno != EINTR ) {
117  char errmsg[1024];
118  sprintf(errmsg, "Error on closing file %s", fname);
119  NAMD_err(errmsg);
120  }
121  }
122 }
void NAMD_err(const char *err_msg)
Definition: common.C:170

◆ NAMD_open()

int NAMD_open ( const char *  fname)

Definition at line 61 of file Output.C.

References NAMD_err(), and O_LARGEFILE.

61  {
62  int fd;
63 
64  // open the file and die if the open fails
65 #ifdef WIN32
66  while ( (fd = _open(fname, O_WRONLY|O_CREAT|O_EXCL|O_BINARY|O_LARGEFILE,_S_IREAD|_S_IWRITE)) < 0) {
67 #else
68 #ifdef NAMD_NO_O_EXCL
69  while ( (fd = open(fname, O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE,
70 #else
71  while ( (fd = open(fname, O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE,
72 #endif
73  S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0) {
74 #endif
75  if ( errno != EINTR ) {
76  char errmsg[1024];
77  sprintf(errmsg, "Unable to open binary file %s", fname);
78  NAMD_err(errmsg);
79  }
80  }
81 
82  return fd;
83 }
void NAMD_err(const char *err_msg)
Definition: common.C:170
#define O_LARGEFILE
Definition: Output.C:56

◆ NAMD_write()

void NAMD_write ( int  fd,
const char *  buf,
size_t  count,
const char *  errmsg = "NAMD_write64" 
)

Definition at line 86 of file Output.C.

References endi(), iout, iWARN(), NAMD_bug(), and NAMD_err().

86  {
87  double firsttime = 0.;
88  while ( count ) {
89 #if defined(WIN32) && !defined(__CYGWIN__)
90  long retval = _write(fd,buf,count);
91 #else
92  ssize_t retval = write(fd,buf,count);
93 #endif
94  if ( retval < 0 && errno == EINTR ) retval = 0;
95  if ( retval < 0 && errno == ENOMEM ) {
96  if ( firsttime == 0. ) firsttime = CmiWallTimer();
97  if ( (CmiWallTimer() - firsttime) < 300. ) retval = 0;
98  }
99  if ( retval < 0 ) NAMD_err(errmsg);
100  if ( retval > count ) NAMD_bug("extra bytes written in NAMD_write64()");
101  buf += retval;
102  count -= retval;
103  }
104  if ( firsttime != 0. ) {
105  iout << iWARN << errmsg << ": NAMD_write64() retried for " << (CmiWallTimer() - firsttime) << " seconds.\n" << endi;
106  }
107 }
void NAMD_err(const char *err_msg)
Definition: common.C:170
std::ostream & endi(std::ostream &s)
Definition: InfoStream.C:54
std::ostream & iWARN(std::ostream &s)
Definition: InfoStream.C:82
#define iout
Definition: InfoStream.h:51
void NAMD_bug(const char *err_msg)
Definition: common.C:195

◆ wrap_coor() [1/2]

void wrap_coor ( Vector coor,
Lattice lattice,
double *  done 
)

Definition at line 337 of file Output.C.

References wrap_coor_int().

Referenced by Output::coordinate().

337  {
338  wrap_coor_int(coor,lattice,done);
339 };
void wrap_coor_int(xVector *coor, Lattice &lattice, xDone *done)
Definition: Output.C:254

◆ wrap_coor() [2/2]

void wrap_coor ( FloatVector coor,
Lattice lattice,
float *  done 
)

Definition at line 341 of file Output.C.

References wrap_coor_int().

341  {
342  wrap_coor_int(coor,lattice,done);
343 };
void wrap_coor_int(xVector *coor, Lattice &lattice, xDone *done)
Definition: Output.C:254

◆ wrap_coor_dcd_selection() [1/2]

void wrap_coor_dcd_selection ( Vector coor,
Lattice lattice,
double *  done,
int  index 
)

Definition at line 329 of file Output.C.

References wrap_coor_int_dcd_selection().

Referenced by Output::coordinate().

329  {
330  wrap_coor_int_dcd_selection(coor,lattice,done, index);
331 };
void wrap_coor_int_dcd_selection(xVector *coor, Lattice &lattice, xDone *done, int index)
Definition: Output.C:288

◆ wrap_coor_dcd_selection() [2/2]

void wrap_coor_dcd_selection ( FloatVector coor,
Lattice lattice,
float *  done,
int  index 
)

Definition at line 333 of file Output.C.

References wrap_coor_int_dcd_selection().

333  {
334  wrap_coor_int_dcd_selection(coor,lattice,done, index);
335 };
void wrap_coor_int_dcd_selection(xVector *coor, Lattice &lattice, xDone *done, int index)
Definition: Output.C:288

◆ wrap_coor_int()

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

Definition at line 254 of file Output.C.

References Molecule::get_cluster(), Molecule::get_clusterSize(), Molecule::is_water(), Node::molecule, Molecule::numAtoms, Node::Object(), Node::simParameters, simParams, Lattice::wrap_delta(), and Lattice::wrap_nearest_delta().

Referenced by wrap_coor().

254  {
256  if ( *done ) return;
257  *done = 1;
258  if ( ! ( simParams->wrapAll || simParams->wrapWater ) ) return;
259  const int wrapNearest = simParams->wrapNearest;
260  const int wrapAll = simParams->wrapAll;
261  Molecule *molecule = Node::Object()->molecule;
262  int n = molecule->numAtoms;
263  int i;
264 #ifndef MEM_OPT_VERSION
265  Position *con = new Position[n];
266  for ( i = 0; i < n; ++i ) {
267  con[i] = 0;
268  int ci = molecule->get_cluster(i);
269  con[ci] += coor[i];
270  }
271  for ( i = 0; i < n; ++i ) {
272  if ( ! wrapAll && ! molecule->is_water(i) ) continue;
273  int ci = molecule->get_cluster(i);
274  if ( ci == i ) {
275  Vector coni = con[i] / molecule->get_clusterSize(i);
276  Vector trans = ( wrapNearest ?
277  lattice.wrap_nearest_delta(coni) : lattice.wrap_delta(coni) );
278  con[i] = trans;
279  }
280  coor[i] = coor[i] + con[ci];
281  }
282  delete [] con;
283 #endif
284 }
static Node * Object()
Definition: Node.h:86
Definition: Vector.h:72
SimParameters * simParameters
Definition: Node.h:181
int get_clusterSize(int anum) const
Definition: Molecule.h:1093
Molecule stores the structural information for the system.
Definition: Molecule.h:175
int numAtoms
Definition: Molecule.h:585
#define simParams
Definition: Output.C:129
NAMD_HOST_DEVICE Vector wrap_nearest_delta(Position pos1) const
Definition: Lattice.h:233
int get_cluster(int anum) const
Definition: Molecule.h:1092
Bool is_water(int)
NAMD_HOST_DEVICE Vector wrap_delta(const Position &pos1) const
Definition: Lattice.h:222
Molecule * molecule
Definition: Node.h:179

◆ wrap_coor_int_dcd_selection()

template<class xVector , class xDone >
void wrap_coor_int_dcd_selection ( xVector *  coor,
Lattice lattice,
xDone *  done,
int  index 
)

Definition at line 288 of file Output.C.

References Molecule::get_atom_index_from_dcd_selection(), Molecule::get_cluster(), Molecule::get_clusterSize(), Molecule::get_dcd_selection_index_from_atom_id(), Molecule::get_dcd_selection_size(), Molecule::is_water(), Node::molecule, Node::Object(), Node::simParameters, simParams, Lattice::wrap_delta(), and Lattice::wrap_nearest_delta().

Referenced by wrap_coor_dcd_selection().

288  {
290  if ( *done ) return;
291  *done = 1;
292  if ( ! ( simParams->wrapAll || simParams->wrapWater ) ) return;
293  const int wrapNearest = simParams->wrapNearest;
294  const int wrapAll = simParams->wrapAll;
295  Molecule *molecule = Node::Object()->molecule;
296  const int n = molecule->get_dcd_selection_size(index);
297  int i;
298 #ifndef MEM_OPT_VERSION
299  Position *con = new Position[n];
300  for ( i = 0; i < n; ++i ) {
301  int molIndex = molecule->get_atom_index_from_dcd_selection(index, i);
302  con[i] = 0;
303  int ci = molecule->get_cluster(molIndex);
304  int dcdci = molecule->get_dcd_selection_index_from_atom_id(index, ci);
305  // the cluster index might not be in the selection
306  if(dcdci>=0)
307  con[dcdci] += coor[i];
308  }
309  for ( i = 0; i < n; ++i ) {
310  int molIndex = molecule->get_atom_index_from_dcd_selection(index, i);
311  if ( ! wrapAll && ! molecule->is_water(molIndex) ) continue;
312  int ci = molecule->get_cluster(molIndex);
313  int dcdci = molecule->get_dcd_selection_index_from_atom_id(index, ci);
314  if ( ci == molIndex ) {
315  Vector coni = con[i] / molecule->get_clusterSize(molIndex);
316  Vector trans = ( wrapNearest ?
317  lattice.wrap_nearest_delta(coni) : lattice.wrap_delta(coni) );
318  con[i] = trans;
319  }
320  if(dcdci>0)
321  coor[i] = coor[i] + con[dcdci];
322  else
323  coor[i] = coor[i];
324  }
325  delete [] con;
326 #endif
327 }
static Node * Object()
Definition: Node.h:86
int get_atom_index_from_dcd_selection(const int index, const int atomIndex)
Definition: Molecule.h:877
Definition: Vector.h:72
SimParameters * simParameters
Definition: Node.h:181
int get_clusterSize(int anum) const
Definition: Molecule.h:1093
Molecule stores the structural information for the system.
Definition: Molecule.h:175
const int get_dcd_selection_size(const int index)
Definition: Molecule.h:886
int get_dcd_selection_index_from_atom_id(const int index, const int atomIndex)
Definition: Molecule.h:881
#define simParams
Definition: Output.C:129
NAMD_HOST_DEVICE Vector wrap_nearest_delta(Position pos1) const
Definition: Lattice.h:233
int get_cluster(int anum) const
Definition: Molecule.h:1092
Bool is_water(int)
NAMD_HOST_DEVICE Vector wrap_delta(const Position &pos1) const
Definition: Lattice.h:222
Molecule * molecule
Definition: Node.h:179

Variable Documentation

◆ maxDCD

const short maxDCD =257
static

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

Definition at line 42 of file Output.C.