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

◆ ENABLETABLES

#define ENABLETABLES

Definition at line 37 of file Parameters.C.

◆ INDEX

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

◆ MIN_DEBUG_LEVEL

#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

◆ crossterm_setup()

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:92

Variable Documentation

◆ table_types

char** table_types
static

Definition at line 39 of file Parameters.C.

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