/*************************************************************************/ /* */ /* Copyright (c) 1994 Stanford University */ /* */ /* All rights reserved. */ /* */ /* Permission is given to use, copy, and modify this software for any */ /* non-commercial purpose as long as this copyright notice is not */ /* removed. All other uses, including redistribution in whole or in */ /* part, are forbidden without prior written permission. */ /* */ /* This software is provided with absolutely no warranty and no */ /* support. */ /* */ /*************************************************************************/ EXTERN_ENV #include #include "mdvar.h" #include "parameters.h" #include "mddata.h" #include "split.h" #include "global.h" /* this routine computes kinetic energy in each of the three spatial dimensions, and puts the computed values in the SUM array */ void KINETI(double *SUM, double HMAS, double OMAS, long ProcID) { long dir, i, j, k; double S; struct link *curr_ptr; struct list_of_boxes *curr_box; double *tempptr; /* Loop over three directions */ for (dir = XDIR; dir <= ZDIR; dir++) { S=0.0; /* loop over processor's boxes */ curr_box = my_boxes[ProcID]; while (curr_box) { i = curr_box->coord[XDIR]; /* X coordinate of box */ j = curr_box->coord[YDIR]; /* Y coordinate of box */ k = curr_box->coord[ZDIR]; /* Z coordinate of box */ /* loop over the molecules */ curr_ptr = BOX[i][j][k].list; while (curr_ptr) { tempptr = curr_ptr->mol.F[VEL][dir]; S += (tempptr[H1] * tempptr[H1] + tempptr[H2] * tempptr[H2] ) * HMAS + (tempptr[O] * tempptr[O]) * OMAS; curr_ptr = curr_ptr->next_mol; } /* while curr_ptr */ curr_box = curr_box->next_box; } /* while curr_box */ LOCK(gl->KinetiSumLock); SUM[dir]+=S; UNLOCK(gl->KinetiSumLock); } /* for dir */ } /* end of subroutine KINETI */