Definition at line 168 of file ComputeExt.C.
References Lattice::a(), Lattice::a_p(), Lattice::b(), Lattice::b_p(), Lattice::c(), Lattice::c_p(), ComputeExtAtom::charge, ExtCoordMsg::coord, ExtForceMsg::energy, ExtForceMsg::force, ExtForce::force, ComputeExtAtom::id, ExtCoordMsg::lattice, Node::molecule, NAMD_die(), ExtCoordMsg::numAtoms, Molecule::numAtoms, PatchMap::Object(), Node::Object(), ComputeExtAtom::position, ExtForce::replace, Node::simParameters, simParams, ExtCoordMsg::sourceNode, ExtForceMsg::virial, Vector::x, Vector::y, and Vector::z.
169 if ( ! numSources ) {
172 for (
int i=0; i<numSources; ++i ) { coordMsgs[i] = 0; }
180 for ( i=0; i < msg->
numAtoms; ++i ) {
184 coordMsgs[numArrived] = msg;
187 if ( numArrived < numSources )
return;
198 file = fopen(
simParams->extCoordFilename,
"w");
199 if ( ! file ) {
NAMD_die(strerror(errno)); }
200 for ( i=0; i<numAtoms; ++i ) {
201 int id = coord[i].
id + 1;
202 double charge = coord[i].
charge;
206 iret = fprintf(file,
"%d %f %f %f %f\n",
id,charge,x,y,z);
207 if ( iret < 0 ) {
NAMD_die(strerror(errno)); }
213 iret = fprintf(file,
"%f %f %f\n%f %f %f\n%f %f %f\n",
214 a.
x, a.
y, a.
z, b.
x, b.
y, b.
z, c.
x, c.
y, c.
z);
215 if ( iret < 0 ) {
NAMD_die(strerror(errno)); }
220 iret = system(
simParams->extForcesCommand);
221 if ( iret == -1 ) {
NAMD_die(strerror(errno)); }
222 if ( iret ) {
NAMD_die(
"Error running command for external forces."); }
225 iret =
remove(
simParams->extCoordFilename);
226 if ( iret ) {
NAMD_die(strerror(errno)); }
230 file = fopen(
simParams->extForceFilename,
"r");
231 if ( ! file ) {
NAMD_die(strerror(errno)); }
232 for ( i=0; i<numAtoms; ++i ) {
235 iret = fscanf(file,
"%d %d %lf %lf %lf\n", &
id, &replace, &x, &y, &z);
236 if ( iret != 5 ) {
NAMD_die(
"Error reading external forces file."); }
237 if (
id != i + 1 ) {
NAMD_die(
"Atom ID error in external forces file."); }
246 iret = fscanf(file,
"%lf\n", &energy);
249 for (
int k=0; k<3; ++k )
for (
int l=0; l<3; ++l ) virial[k][l] = 0;
251 iret = fscanf(file,
"%lf %lf %lf\n%lf %lf %lf\n%lf %lf %lf\n",
252 &virial[0][0], &virial[0][1], &virial[0][2],
253 &virial[1][0], &virial[1][1], &virial[1][2],
254 &virial[2][0], &virial[2][1], &virial[2][2]);
256 for (
int k=0; k<3; ++k )
for (
int l=0; l<3; ++l ) virial[k][l] = 0;
259 for (
int k=0; k<3; ++k )
for (
int l=0; l<3; ++l ) virial[k][l] *= -1.0;
265 iret =
remove(
simParams->extForceFilename);
266 if ( iret ) {
NAMD_die(strerror(errno)); }
270 for (
int j=0; j < numSources; ++j ) {
274 for (
int i=0; i < cmsg->
numAtoms; ++i ) {
279 for (
int k=0; k<3; ++k )
for (
int l=0; l<3; ++l )
280 fmsg->
virial[k][l] = virial[k][l];
283 for (
int k=0; k<3; ++k )
for (
int l=0; l<3; ++l )
NAMD_HOST_DEVICE Vector c() const
NAMD_HOST_DEVICE int c_p() const
static PatchMap * Object()
SimParameters * simParameters
NAMD_HOST_DEVICE int b_p() const
NAMD_HOST_DEVICE int a_p() const
void NAMD_die(const char *err_msg)
NAMD_HOST_DEVICE Vector b() const
NAMD_HOST_DEVICE Vector a() const