Sanchayan Maity
0f4b39775c
During the last commit of splash2 benchmark it seems before committing when we ran "make clean", it effectively undid what the patch at below link did http://www.capsl.udel.edu/splash/Download.html Fix this since without this it is not possible to build the arcane splash2 benchmark.
127 lines
4.4 KiB
C
127 lines
4.4 KiB
C
/*************************************************************************/
|
|
/* */
|
|
/* 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 "mdvar.h"
|
|
#include "parameters.h"
|
|
#include "mddata.h"
|
|
#include "split.h"
|
|
#include "global.h"
|
|
|
|
/* predicts new values for displacement and its five derivatives
|
|
* using Gear's sixth-order predictor-corrector method
|
|
*
|
|
* NOR1 : NOR1 = NORDER + 1 = 7 (for a sixth-order method)
|
|
*/
|
|
void PREDIC(double *C, long NOR1, long ProcID)
|
|
{
|
|
/* this routine calculates predicted F(X), F'(X), F''(X), ... */
|
|
|
|
long JIZ;
|
|
long JI;
|
|
long L;
|
|
long func, i, j, k, dir, atom;
|
|
double S;
|
|
struct link *curr_ptr;
|
|
struct list_of_boxes *curr_box;
|
|
|
|
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 through the current box's molecules */
|
|
|
|
curr_ptr = BOX[i][j][k].list;
|
|
|
|
while (curr_ptr) {
|
|
|
|
JIZ = 2;
|
|
|
|
/* loop over F(X), F'(X), F''(X), etc. */
|
|
|
|
for (func = 0; func < NORDER; func++) {
|
|
for ( dir = 0; dir < NDIR; dir++)
|
|
for ( atom = 0; atom < NATOM; atom++ ) {
|
|
JI = JIZ;
|
|
/* sum over Taylor Series */
|
|
S = 0.0;
|
|
for ( L = func; L < NORDER; L++) {
|
|
S += C[JI] * curr_ptr->mol.F[L+1][dir][atom];
|
|
JI++;
|
|
} /* for L */
|
|
curr_ptr->mol.F[func][dir][atom] += S;
|
|
} /* for atom */
|
|
JIZ += NOR1;
|
|
} /* for func */
|
|
curr_ptr = curr_ptr->next_mol;
|
|
} /* while curr_ptr */
|
|
curr_box = curr_box->next_box;
|
|
} /* while curr_box */
|
|
|
|
} /* end of subroutine PREDIC */
|
|
|
|
/* corrects the predicted values
|
|
*
|
|
* PCC : the predictor-corrector constants
|
|
* NOR1 : NORDER + 1 = 7 for a sixth-order method)
|
|
*/
|
|
void CORREC(double *PCC, long NOR1, long ProcID)
|
|
{
|
|
|
|
/* This routine calculates corrected F(X), F'(X), F"(X),
|
|
* from corrected F(X) = predicted F(X) + PCC(1)*(FR-SD)
|
|
* where SD is predicted accl. F"(X) and FR is computed
|
|
* accl. (force/mass) at predicted position
|
|
*/
|
|
|
|
double Y;
|
|
long i, j, k, dir, atom, func;
|
|
struct link *curr_ptr;
|
|
box_list *curr_box;
|
|
|
|
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 through the current box's molecules */
|
|
|
|
curr_ptr = BOX[i][j][k].list;
|
|
while (curr_ptr) {
|
|
|
|
for (dir = 0; dir < NDIR; dir++) {
|
|
for (atom = 0; atom < NATOM; atom++) {
|
|
Y = curr_ptr->mol.F[FORCES][dir][atom] -
|
|
curr_ptr->mol.F[ACC][dir][atom];
|
|
for ( func = 0; func < NOR1; func++)
|
|
curr_ptr->mol.F[func][dir][atom] += PCC[func] * Y;
|
|
} /* for atom */
|
|
} /* for dir */
|
|
curr_ptr= curr_ptr->next_mol;
|
|
} /* while curr_ptr */
|
|
curr_box = curr_box->next_box;
|
|
} /* while curr_box */
|
|
|
|
} /* end of subroutine CORREC */
|