NAMD
Classes | Macros | Functions | Variables
Parameters.C File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <strings.h>
#include "InfoStream.h"
#include <charm++.h>
#include "Parameters.h"
#include "Communicate.h"
#include "ConfigList.h"
#include "SimParameters.h"
#include "Debug.h"

Go to the source code of this file.

Classes

struct  bond_params
 
struct  angle_params
 
struct  dihedral_params
 
struct  improper_params
 
struct  crossterm_params
 
struct  vdw_params
 
struct  vdw_pair_params
 
struct  table_pair_params
 
struct  nbthole_pair_params
 

Macros

#define MIN_DEBUG_LEVEL   3
 
#define INDEX(ncols, i, j)   ((i)*ncols + (j))
 
#define ENABLETABLES
 

Functions

void crossterm_setup (CrosstermData *)
 

Variables

static char ** table_types
 

Macro Definition Documentation

#define ENABLETABLES

Definition at line 37 of file Parameters.C.

#define INDEX (   ncols,
  i,
 
)    ((i)*ncols + (j))
#define MIN_DEBUG_LEVEL   3

Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000 by The Board of Trustees of the University of Illinois. All rights reserved.

Definition at line 31 of file Parameters.C.

Function Documentation

void crossterm_setup ( CrosstermData )

Definition at line 589 of file ComputeCrossterms.C.

References CMAP_SETUP_DIM, CMAP_SPACING, CMAP_TABLE_DIM, CrosstermData::d00, CrosstermData::d01, CrosstermData::d10, CrosstermData::d11, forward_back_sub(), INDEX, lu_decomp_nopivot(), and PI.

Referenced by Parameters::read_parm().

590 {
591  enum { D = CMAP_TABLE_DIM };
592  enum { N = CMAP_SETUP_DIM };
593  const double h_1 = 1.0 / ( CMAP_SPACING * PI / 180.0) ;
594  const double h_2 = h_1 * h_1;
595  const double tr_h = 3.0 * h_1;
596  int i, j;
597  int ij;
598  int ijp1p1, ijm1m1, ijp1m1, ijm1p1;
599  int ijp2p2, ijm2m2, ijp2m2, ijm2p2;
600 
601  /* allocate spline coefficient matrix */
602  double* const m = new double[N*N];
603  memset(m,0,N*N*sizeof(double));
604 
605  /* initialize spline coefficient matrix */
606  m[0] = 4;
607  for (i = 1; i < N; i++) {
608  m[INDEX(N,i-1,i)] = 1;
609  m[INDEX(N,i,i-1)] = 1;
610  m[INDEX(N,i,i)] = 4;
611  }
612  /* periodic boundary conditions for spline */
613  m[INDEX(N,0,N-1)] = 1;
614  m[INDEX(N,N-1,0)] = 1;
615 
616  /* compute LU-decomposition for this matrix */
617  lu_decomp_nopivot(m, N);
618 
619  /* allocate vector for solving spline derivatives */
620  double* const v = new double[N];
621  memset(v,0,N*sizeof(double));
622 
623  /* march through rows of table */
624  for (i = 0; i < N; i++) {
625 
626  /* setup RHS vector for solving spline derivatives */
627  v[0] = tr_h * (table[INDEX(D,i,1)].d00 - table[INDEX(D,i,N-1)].d00);
628  for (j = 1; j < N; j++) {
629  v[j] = tr_h * (table[INDEX(D,i,j+1)].d00 - table[INDEX(D,i,j-1)].d00);
630  }
631 
632  /* solve system, returned into vector */
633  forward_back_sub(v, m, N);
634 
635  /* store values as derivatives wrt differenced table values */
636  for (j = 0; j < N; j++) {
637  table[INDEX(D,i,j)].d01 = v[j];
638  }
639  table[INDEX(D,i,N)].d01 = v[0];
640  }
641  for (j = 0; j <= N; j++) {
642  table[INDEX(D,N,j)].d01 = table[INDEX(D,0,j)].d01;
643  }
644 
645  /* march through columns of table */
646  for (j = 0; j < N; j++) {
647 
648  /* setup RHS vector for solving spline derivatives */
649  v[0] = tr_h * (table[INDEX(D,1,j)].d00 - table[INDEX(D,N-1,j)].d00);
650  for (i = 1; i < N; i++) {
651  v[i] = tr_h * (table[INDEX(D,i+1,j)].d00 - table[INDEX(D,i-1,j)].d00);
652  }
653 
654  /* solve system, returned into vector */
655  forward_back_sub(v, m, N);
656 
657  /* store values as derivatives wrt differenced table values */
658  for (i = 0; i < N; i++) {
659  table[INDEX(D,i,j)].d10 = v[i];
660  }
661  table[INDEX(D,N,j)].d10 = v[0];
662  }
663  for (i = 0; i <= N; i++) {
664  table[INDEX(D,i,N)].d10 = table[INDEX(D,i,0)].d10;
665  }
666 
667  /* march back through rows of table
668  *
669  * This is CHARMM's approach for calculating mixed partial derivatives,
670  * by splining the first derivative values.
671  *
672  * Here we spline the dx values along y to calculate dxdy derivatives.
673  *
674  * Test cases show error with CHARMM is within 1e-5 roundoff error.
675  */
676  for (i = 0; i < N; i++) {
677 
678  /* setup RHS vector for solving dxy derivatives from dx */
679  v[0] = tr_h * (table[INDEX(D,i,1)].d10 - table[INDEX(D,i,N-1)].d10);
680  for (j = 1; j < N; j++) {
681  v[j] = tr_h * (table[INDEX(D,i,j+1)].d10 - table[INDEX(D,i,j-1)].d10);
682  }
683 
684  /* solve system, returned into vector */
685  forward_back_sub(v, m, N);
686 
687  /* store values as dxy derivatives wrt differenced table values */
688  for (j = 0; j < N; j++) {
689  table[INDEX(D,i,j)].d11 = v[j];
690  }
691  table[INDEX(D,i,N)].d11 = v[0];
692  }
693  for (j = 0; j <= N; j++) {
694  table[INDEX(D,N,j)].d11 = table[INDEX(D,0,j)].d11;
695  }
696 
697  /* done with temp storage */
698  delete [] m;
699  delete [] v;
700 
701 }
static void forward_back_sub(double *b, double *m, int n)
#define INDEX(ncols, i, j)
static void lu_decomp_nopivot(double *m, int n)
#define PI
Definition: common.h:83

Variable Documentation

char** table_types
static

Definition at line 39 of file Parameters.C.

Referenced by Parameters::get_int_table_type(), and Parameters::read_ener_table().