170 lines
4.6 KiB
C
170 lines
4.6 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 <cstdio>
|
||
|
|
||
|
#include "cnst.h"
|
||
|
#include "fileio.h"
|
||
|
#include "frcnst.h"
|
||
|
#include "global.h"
|
||
|
#include "mddata.h"
|
||
|
#include "parameters.h"
|
||
|
#include "water.h"
|
||
|
#include "wwpot.h"
|
||
|
|
||
|
/* set up some constants; this routine is executed by
|
||
|
* a single processor before others are created
|
||
|
*
|
||
|
* N : NORDER + 1 = 7 for a sixth-order method
|
||
|
* C : DIMENSION C(N,N)
|
||
|
*/
|
||
|
void CNSTNT(long N, double *C)
|
||
|
{
|
||
|
long NN,N1,K1;
|
||
|
double TN,TK,CM;
|
||
|
|
||
|
/* molecular constants for water in angstrom, radian, and a.m.u. */
|
||
|
|
||
|
NATOMS = 3;
|
||
|
ROH = 0.9572;
|
||
|
ROHI = ONE/ROH;
|
||
|
ROHI2 = ROHI*ROHI;
|
||
|
ANGLE = 1.824218;
|
||
|
OMAS = 15.99945;
|
||
|
HMAS = 1.007825;
|
||
|
WTMOL = OMAS+TWO*HMAS;
|
||
|
|
||
|
/* units used to scale variables (in c.g.s.) */
|
||
|
|
||
|
UNITT = 1.0e-15;
|
||
|
UNITL = 1.0e-8;
|
||
|
UNITM = 1.6605655e-24;
|
||
|
BOLTZ = 1.380662e-16;
|
||
|
AVGNO = 6.022045e23;
|
||
|
|
||
|
/* force constants scaled (divided) by (UNITM/UNITT**2) */
|
||
|
|
||
|
FC11 = 0.512596;
|
||
|
FC33 = 0.048098;
|
||
|
FC12 = -0.005823;
|
||
|
FC13 = 0.016452;
|
||
|
FC111 = -0.57191;
|
||
|
FC333 = -0.007636;
|
||
|
FC112 = -0.001867;
|
||
|
FC113 = -0.002047;
|
||
|
FC123 = -0.03083;
|
||
|
FC133 = -0.0094245;
|
||
|
FC1111 = 0.8431;
|
||
|
FC3333 = -0.00193;
|
||
|
FC1112 = -0.0030;
|
||
|
FC1122 = 0.0036;
|
||
|
FC1113 = -0.012;
|
||
|
FC1123 = 0.0060;
|
||
|
FC1133 = -0.0048;
|
||
|
FC1233 = 0.0211;
|
||
|
FC1333 = 0.006263;
|
||
|
|
||
|
/* water-water interaction parameters */
|
||
|
|
||
|
QQ = 0.07152158;
|
||
|
A1 = 455.313100;
|
||
|
B1 = 5.15271070;
|
||
|
A2 = 0.27879839;
|
||
|
B2 = 2.76084370;
|
||
|
A3 = 0.60895706;
|
||
|
B3 = 2.96189550;
|
||
|
A4 = 0.11447336;
|
||
|
B4 = 2.23326410;
|
||
|
CM = 0.45682590;
|
||
|
AB1 = A1*B1;
|
||
|
AB2 = A2*B2;
|
||
|
AB3 = A3*B3;
|
||
|
AB4 = A4*B4;
|
||
|
C1 = ONE-CM;
|
||
|
C2 = 0.50*CM;
|
||
|
QQ2 = 2.00*QQ;
|
||
|
QQ4 = 2.00*QQ2;
|
||
|
|
||
|
/* calculate the coefficients of taylor series expansion */
|
||
|
/* for F(X), F"(X), F""(X), ...... (with DELTAT**N/N] included) */
|
||
|
/* in C(1,1),..... C(1,2),..... C(1,3),....... */
|
||
|
|
||
|
C[1] = ONE;
|
||
|
for (N1=2;N1<=N;N1++) {
|
||
|
NN = N1-1;
|
||
|
TN = NN;
|
||
|
C[N1] = ONE;
|
||
|
TK = ONE;
|
||
|
for (K1=2;K1<=N1;K1++) {
|
||
|
C[(K1-1)*N+NN] = C[(K1-2)*N+NN+1]*TN/TK;
|
||
|
NN = NN-1;
|
||
|
TN = TN-ONE;
|
||
|
TK = TK+ONE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/* predictor-corrector constants for 2nd order differential equation */
|
||
|
|
||
|
PCC[2] = ONE;
|
||
|
N1 = N-1;
|
||
|
switch(N1) {
|
||
|
case 1:
|
||
|
case 2:
|
||
|
fprintf(six,"***** ERROR: THE ORDER HAS TO BE GREATER THAN 2 ****");
|
||
|
break;
|
||
|
case 3:
|
||
|
PCC[0] = ONE/6.00;
|
||
|
PCC[1] = FIVE/6.00;
|
||
|
PCC[3] = ONE/3.00;
|
||
|
break;
|
||
|
case 4:
|
||
|
PCC[0] = (double) 19.00/120.00;
|
||
|
PCC[1] = (double) 3.00/4.00;
|
||
|
PCC[3] = ONE/2.00;
|
||
|
PCC[4] = ONE/12.00;
|
||
|
break;
|
||
|
case 5:
|
||
|
PCC[0] = (double) 3.00/20.00;
|
||
|
PCC[1] = (double) 251.00/360.00;
|
||
|
PCC[3] = (double) 11.00/18.00;
|
||
|
PCC[4] = ONE/6.00;
|
||
|
PCC[5] = ONE/60.00;
|
||
|
break;
|
||
|
case 6:
|
||
|
PCC[0] = (double) 863.00/6048.00;
|
||
|
PCC[1] = (double) 665.00/1008.00;
|
||
|
PCC[3] = (double) 25.00/36.00;
|
||
|
PCC[4] = (double) 35.00/144.00;
|
||
|
PCC[5] = ONE/24.00;
|
||
|
PCC[6] = ONE/360.00;
|
||
|
break;
|
||
|
case 7:
|
||
|
PCC[0] = (double) 275.00/2016.00;
|
||
|
PCC[1] = (double) 19087.00/30240.00;
|
||
|
PCC[3] = (double) 137.00/180.00;
|
||
|
PCC[4] = FIVE/16.00;
|
||
|
PCC[5] = (double) 17.00/240.00;
|
||
|
PCC[6] = ONE/120.00;
|
||
|
PCC[7] = ONE/2520.00;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
} /* end of subroutine CNSTNT */
|