NAMD
Classes | Typedefs | Enumerations | Functions
imd.h File Reference
#include <limits.h>
#include <vector>
#include "common.h"

Go to the source code of this file.

Classes

struct  IMDEnergies
 
struct  IMDTime
 
struct  IMDBox
 
struct  IMDSessionInfo
 

Typedefs

typedef short int32
 

Enumerations

enum  IMDType {
  IMD_DISCONNECT, IMD_ENERGIES, IMD_FCOORDS, IMD_GO,
  IMD_HANDSHAKE, IMD_KILL, IMD_MDCOMM, IMD_PAUSE,
  IMD_TRATE, IMD_IOERROR, IMD_SESSIONINFO, IMD_RESUME,
  IMD_TIME, IMD_BOX, IMD_VELOCITIES, IMD_FORCES,
  IMD_WAIT
}
 

Functions

int imd_disconnect (void *)
 
int imd_pause (void *)
 
int imd_kill (void *)
 
int imd_handshake (void *, const int)
 
int imd_trate (void *, int32)
 
int imd_sessioninfo (void *, const IMDSessionInfo *)
 
int imd_send_mdcomm (void *, int32, const int32 *, const float *)
 
int imd_send_energies (void *, const IMDEnergies *)
 
int imd_send_fcoords (void *, int32, const float *)
 
int imd_send_velocities (void *, int32, const float *)
 
int imd_send_forces (void *, int32, const float *)
 
int imd_send_box (void *, const IMDBox *)
 
int imd_send_time (void *, const IMDTime *)
 
int imd_recv_handshake (void *)
 Receive header and data. More...
 
IMDType imd_recv_header (void *, int32 *)
 
int imd_recv_mdcomm (void *, int32, int32 *, float *)
 
int imd_recv_energies (void *, IMDEnergies *)
 
int imd_recv_fcoords (void *, int32, float *)
 
int imd_recv_velocities (void *, int32, float *)
 
int imd_recv_forces (void *, int32, float *)
 
int imd_recv_box (void *, IMDBox *)
 
int imd_recv_time (void *, IMDTime *)
 

Typedef Documentation

◆ int32

typedef short int32

Definition at line 12 of file imd.h.

Enumeration Type Documentation

◆ IMDType

enum IMDType
Enumerator
IMD_DISCONNECT 
IMD_ENERGIES 
IMD_FCOORDS 
IMD_GO 
IMD_HANDSHAKE 
IMD_KILL 
IMD_MDCOMM 
IMD_PAUSE 
IMD_TRATE 
IMD_IOERROR 
IMD_SESSIONINFO 
IMD_RESUME 
IMD_TIME 
IMD_BOX 
IMD_VELOCITIES 
IMD_FORCES 
IMD_WAIT 

Definition at line 15 of file imd.h.

15  {
16  IMD_DISCONNECT, // = 0
17  IMD_ENERGIES, // = 1
18  IMD_FCOORDS, // = 2
19  IMD_GO, // = 3
20  IMD_HANDSHAKE, // = 4
21  IMD_KILL, // = 5
22  IMD_MDCOMM, // = 6
23  IMD_PAUSE, // = 7
24  IMD_TRATE, // = 8
25  IMD_IOERROR, // = 9
26  // New in IMD v3
27  IMD_SESSIONINFO, // = 10
28  IMD_RESUME, // = 11
29  IMD_TIME, // = 12
30  IMD_BOX, // = 13
31  IMD_VELOCITIES, // = 14
32  IMD_FORCES, // = 15
33  IMD_WAIT, // = 16
34 };
Definition: imd.h:33
Definition: imd.h:19
Definition: imd.h:22
Definition: imd.h:32
Definition: imd.h:24
Definition: imd.h:30
Definition: imd.h:23
Definition: imd.h:29
Definition: imd.h:28
Definition: imd.h:21

Function Documentation

◆ imd_disconnect()

int imd_disconnect ( void *  )

Definition at line 107 of file imd.C.

References fill_header(), HEADERSIZE, IMD_DISCONNECT, and imd_writen().

107  {
108  IMDheader header;
109  fill_header(&header, IMD_DISCONNECT, 0);
110  return (imd_writen(s, (char *)&header, HEADERSIZE) != HEADERSIZE);
111 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
#define HEADERSIZE
Definition: imd.C:14

◆ imd_handshake()

int imd_handshake ( void *  ,
const int   
)

Definition at line 132 of file imd.C.

References fill_header(), HEADERSIZE, IMD_HANDSHAKE, imd_writen(), and IMDheader::length.

Referenced by my_imd_connect().

132  {
133  IMDheader header;
134  fill_header(&header, IMD_HANDSHAKE, 1);
135  header.length = IMDVersion; // Not byteswapped!
136  return (imd_writen(s, (char *)&header, HEADERSIZE) != HEADERSIZE);
137 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
#define HEADERSIZE
Definition: imd.C:14
int32 length
Definition: imd.C:11

◆ imd_kill()

int imd_kill ( void *  )

Definition at line 119 of file imd.C.

References fill_header(), HEADERSIZE, IMD_KILL, and imd_writen().

119  {
120  IMDheader header;
121  fill_header(&header, IMD_KILL, 0);
122  return (imd_writen(s, (char *)&header, HEADERSIZE) != HEADERSIZE);
123 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
#define HEADERSIZE
Definition: imd.C:14
Definition: imd.h:21

◆ imd_pause()

int imd_pause ( void *  )

Definition at line 113 of file imd.C.

References fill_header(), HEADERSIZE, IMD_PAUSE, and imd_writen().

113  {
114  IMDheader header;
115  fill_header(&header, IMD_PAUSE, 0);
116  return (imd_writen(s, (char *)&header, HEADERSIZE) != HEADERSIZE);
117 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
#define HEADERSIZE
Definition: imd.C:14
Definition: imd.h:23

◆ imd_recv_box()

int imd_recv_box ( void *  ,
IMDBox  
)

Definition at line 310 of file imd.C.

References imd_readn().

310  {
311  return (imd_readn(s, (char *)box, sizeof(IMDBox)) != sizeof(IMDBox));
312 }
Definition: imd.h:55
static int32 imd_readn(void *s, char *ptr, int32 n)
Definition: imd.C:69

◆ imd_recv_energies()

int imd_recv_energies ( void *  ,
IMDEnergies  
)

Definition at line 293 of file imd.C.

References imd_readn().

Referenced by GlobalMasterIMD::get_vmd_forces().

293  {
294  return (imd_readn(s, (char *)energies, sizeof(IMDEnergies))
295  != sizeof(IMDEnergies));
296 }
static int32 imd_readn(void *s, char *ptr, int32 n)
Definition: imd.C:69

◆ imd_recv_fcoords()

int imd_recv_fcoords ( void *  ,
int32  ,
float *   
)

Definition at line 298 of file imd.C.

References coords, and imd_readn().

Referenced by GlobalMasterIMD::get_vmd_forces().

298  {
299  return (imd_readn(s, (char *)coords, 12*n) != 12*n);
300 }
static int32 imd_readn(void *s, char *ptr, int32 n)
Definition: imd.C:69
static float * coords
Definition: ScriptTcl.C:67

◆ imd_recv_forces()

int imd_recv_forces ( void *  ,
int32  ,
float *   
)

Definition at line 306 of file imd.C.

References imd_readn().

306  {
307  return (imd_readn(s, (char *)forces, 12*n) != 12*n);
308 }
static int32 imd_readn(void *s, char *ptr, int32 n)
Definition: imd.C:69

◆ imd_recv_handshake()

int imd_recv_handshake ( void *  )

Receive header and data.

Definition at line 253 of file imd.C.

References imd_go(), IMD_HANDSHAKE, imd_recv_header_nolengthswap(), IMDv2, swap4(), and vmdsock_selread().

253  {
254  // Wait 5 seconds for the handshake to come
255  if (vmdsock_selread(s, 5) != 1) return -1;
256 
257  // Check to see that a valid handshake was received
258  int32 buf;
259  IMDType type = imd_recv_header_nolengthswap(s, &buf);
260  if (type != IMD_HANDSHAKE) return -1;
261 
262  // Check its endianness, as well as the IMD version.
263  if (buf == static_cast<int>(IMDversion_t::IMDv2)) {
264  if (!imd_go(s)) return 0;
265  return -1;
266  }
267  swap4((char *)&buf, 4);
268  if (buf == static_cast<int>(IMDversion_t::IMDv2)) {
269  if (!imd_go(s)) return 1;
270  }
271 
272  // We failed to determine endianness.
273  return -1;
274 }
int vmdsock_selread(void *v, int sec)
Definition: vmdsock.C:177
IMDType imd_recv_header_nolengthswap(void *s, int32 *length)
Definition: imd.C:244
int32_t int32
Definition: common.h:38
IMDType
Definition: imd.h:15
static void swap4(char *data, int ndata)
Definition: imd.C:16
int imd_go(void *s)
Definition: imd.C:125
Definition: common.h:275

◆ imd_recv_header()

IMDType imd_recv_header ( void *  ,
int32  
)

Definition at line 276 of file imd.C.

References HEADERSIZE, IMD_IOERROR, imd_readn(), and swap_header().

Referenced by GlobalMasterIMD::get_vmd_forces(), and my_imd_connect().

276  {
277  IMDheader header;
278  if (imd_readn(s, (char *)&header, HEADERSIZE) != HEADERSIZE)
279  return IMD_IOERROR;
280  int i;
281  char *ch = (char*)(&header);
282  swap_header(&header);
283  *length = header.length;
284  return IMDType(header.type);
285 }
Definition: imd.C:9
#define HEADERSIZE
Definition: imd.C:14
IMDType
Definition: imd.h:15
static void swap_header(IMDheader *header)
Definition: imd.C:64
static int32 imd_readn(void *s, char *ptr, int32 n)
Definition: imd.C:69

◆ imd_recv_mdcomm()

int imd_recv_mdcomm ( void *  ,
int32  ,
int32 ,
float *   
)

Definition at line 287 of file imd.C.

References imd_readn().

Referenced by GlobalMasterIMD::get_vmd_forces().

287  {
288  if (imd_readn(s, (char *)indices, 4*n) != 4*n) return 1;
289  if (imd_readn(s, (char *)forces, 12*n) != 12*n) return 1;
290  return 0;
291 }
static int32 imd_readn(void *s, char *ptr, int32 n)
Definition: imd.C:69

◆ imd_recv_time()

int imd_recv_time ( void *  ,
IMDTime  
)

Definition at line 314 of file imd.C.

References imd_readn().

314  {
315  return (imd_readn(s, (char *)time, sizeof(IMDTime)) != sizeof(IMDTime));
316 }
static int32 imd_readn(void *s, char *ptr, int32 n)
Definition: imd.C:69
Definition: imd.h:49

◆ imd_recv_velocities()

int imd_recv_velocities ( void *  ,
int32  ,
float *   
)

Definition at line 302 of file imd.C.

References imd_readn().

302  {
303  return (imd_readn(s, (char *)vels, 12*n) != 12*n);
304 }
static int32 imd_readn(void *s, char *ptr, int32 n)
Definition: imd.C:69

◆ imd_send_box()

int imd_send_box ( void *  ,
const IMDBox  
)

Definition at line 222 of file imd.C.

References fill_header(), HEADERSIZE, IMD_BOX, and imd_writen().

Referenced by GlobalMasterIMD::send_box().

222  {
223  int32 size = HEADERSIZE+sizeof(IMDBox);
224  char *buf = new char[size];
225  fill_header((IMDheader *)buf, IMD_BOX, 1);
226  memcpy((void *)(buf+HEADERSIZE), (const void *)box, sizeof(IMDBox));
227  int rc = (imd_writen(s, buf, size) != size);
228  delete [] buf;
229  return rc;
230 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
int32_t int32
Definition: common.h:38
#define HEADERSIZE
Definition: imd.C:14
Definition: imd.h:55
Definition: imd.h:30

◆ imd_send_energies()

int imd_send_energies ( void *  ,
const IMDEnergies  
)

Definition at line 182 of file imd.C.

References fill_header(), HEADERSIZE, IMD_ENERGIES, and imd_writen().

Referenced by GlobalMasterIMD::send_energies().

182  {
183  int32 size = HEADERSIZE+sizeof(IMDEnergies);
184  char *buf = new char[size];
185  fill_header((IMDheader *)buf, IMD_ENERGIES, 1);
186  memcpy((void *)(buf+HEADERSIZE), (const void *)energies, sizeof(IMDEnergies));
187  int rc = (imd_writen(s, buf, size) != size);
188  delete [] buf;
189  return rc;
190 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
int32_t int32
Definition: common.h:38
#define HEADERSIZE
Definition: imd.C:14

◆ imd_send_fcoords()

int imd_send_fcoords ( void *  ,
int32  ,
const float *   
)

Definition at line 192 of file imd.C.

References coords, fill_header(), HEADERSIZE, IMD_FCOORDS, and imd_writen().

Referenced by GlobalMasterIMD::send_fcoords().

192  {
193  int32 size = HEADERSIZE+12*n;
194  char *buf = new char[size];
195  fill_header((IMDheader *)buf, IMD_FCOORDS, n);
196  memcpy((void *)(buf+HEADERSIZE), (const void *)coords, 12*n);
197  int rc = (imd_writen(s, buf, size) != size);
198  delete [] buf;
199  return rc;
200 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
int32_t int32
Definition: common.h:38
#define HEADERSIZE
Definition: imd.C:14
static float * coords
Definition: ScriptTcl.C:67

◆ imd_send_forces()

int imd_send_forces ( void *  ,
int32  ,
const float *   
)

Definition at line 212 of file imd.C.

References fill_header(), HEADERSIZE, IMD_FORCES, and imd_writen().

Referenced by GlobalMasterIMD::send_forces().

212  {
213  int32 size = HEADERSIZE+3*n*sizeof(float);
214  char *buf = new char[size];
215  fill_header((IMDheader *)buf, IMD_FORCES, n);
216  memcpy((void *)(buf+HEADERSIZE), (const void *)forces, 3*n*sizeof(float));
217  int rc = (imd_writen(s, buf, size) != size);
218  delete [] buf;
219  return rc;
220 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
int32_t int32
Definition: common.h:38
#define HEADERSIZE
Definition: imd.C:14
Definition: imd.h:32

◆ imd_send_mdcomm()

int imd_send_mdcomm ( void *  ,
int32  ,
const int32 ,
const float *   
)

Definition at line 171 of file imd.C.

References fill_header(), HEADERSIZE, IMD_MDCOMM, and imd_writen().

171  {
172  int32 size = HEADERSIZE+16*n;
173  char *buf = new char[size];
174  fill_header((IMDheader *)buf, IMD_MDCOMM, n);
175  memcpy((void *)(buf+HEADERSIZE), (const void *)indices, 4*n);
176  memcpy((void *)(buf+HEADERSIZE+4*n), (const void *)forces, 12*n);
177  int rc = (imd_writen(s, buf, size) != size);
178  delete [] buf;
179  return rc;
180 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
int32_t int32
Definition: common.h:38
#define HEADERSIZE
Definition: imd.C:14
Definition: imd.h:22

◆ imd_send_time()

int imd_send_time ( void *  ,
const IMDTime  
)

Definition at line 232 of file imd.C.

References fill_header(), HEADERSIZE, IMD_TIME, and imd_writen().

Referenced by GlobalMasterIMD::send_time().

232  {
233  int32 size = HEADERSIZE+sizeof(IMDTime);
234  char *buf = new char[size];
235  fill_header((IMDheader *)buf, IMD_TIME, 1);
236  memcpy((void *)(buf+HEADERSIZE), (const void *)time, sizeof(IMDTime));
237  int rc = (imd_writen(s, buf, size) != size);
238  delete [] buf;
239  return rc;
240 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
int32_t int32
Definition: common.h:38
#define HEADERSIZE
Definition: imd.C:14
Definition: imd.h:49
Definition: imd.h:29

◆ imd_send_velocities()

int imd_send_velocities ( void *  ,
int32  ,
const float *   
)

Definition at line 202 of file imd.C.

References fill_header(), HEADERSIZE, IMD_VELOCITIES, and imd_writen().

Referenced by GlobalMasterIMD::send_velocities().

202  {
203  int32 size = HEADERSIZE+3*n*sizeof(float);
204  char *buf = new char[size];
206  memcpy((void *)(buf+HEADERSIZE), (const void *)vels, 3*n*sizeof(float));
207  int rc = (imd_writen(s, buf, size) != size);
208  delete [] buf;
209  return rc;
210 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
int32_t int32
Definition: common.h:38
#define HEADERSIZE
Definition: imd.C:14

◆ imd_sessioninfo()

int imd_sessioninfo ( void *  ,
const IMDSessionInfo  
)

Definition at line 160 of file imd.C.

References fill_header(), HEADERSIZE, IMD_SESSIONINFO, imd_writen(), and toTypeVector().

Referenced by my_imd_connect().

160  {
161  std::vector<char> infoData = toTypeVector(info);
162  int32 size = HEADERSIZE+infoData.size()*sizeof(char);
163  char *buf = new char[size];
164  fill_header((IMDheader *)buf, IMD_SESSIONINFO, static_cast<int32>(infoData.size()));
165  memcpy((void *)(buf+HEADERSIZE), (const void *)(infoData.data()), infoData.size()*sizeof(char));
166  int rc = (imd_writen(s, buf, size) != size);
167  delete [] buf;
168  return rc;
169 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
int32_t int32
Definition: common.h:38
#define HEADERSIZE
Definition: imd.C:14
std::vector< char > toTypeVector(const IMDSessionInfo *info)
Definition: imd.C:148

◆ imd_trate()

int imd_trate ( void *  ,
int32   
)

Definition at line 139 of file imd.C.

References fill_header(), HEADERSIZE, IMD_TRATE, and imd_writen().

139  {
140  IMDheader header;
141  fill_header(&header, IMD_TRATE, rate);
142  return (imd_writen(s, (char *)&header, HEADERSIZE) != HEADERSIZE);
143 }
static int32 imd_writen(void *s, const char *ptr, int32 n)
Definition: imd.C:88
static void fill_header(IMDheader *header, IMDType type, int32 length)
Definition: imd.C:59
Definition: imd.C:9
#define HEADERSIZE
Definition: imd.C:14
Definition: imd.h:24