NAMD
Macros | Functions
PmeKSpace.C File Reference
#include "PmeKSpace.h"
#include <math.h>
#include <stdlib.h>
#include <alloca.h>
#include "PmeBase.inl"
#include "SimParameters.h"
#include "Node.h"
#include "ComputeMoaMgr.decl.h"

Go to the source code of this file.

Macros

#define ALLOCA(TYPE, NAME, SIZE)   TYPE *NAME = (TYPE *) alloca((SIZE)*sizeof(TYPE))
 

Functions

static void dftmod (double *bsp_mod, double *bsp_arr, int nfft)
 
void compute_b_moduli (double *bm, int K, int order)
 
static void compute_energy_orthogonal_ckloop (int first, int last, void *result, int paraNum, void *param)
 

Macro Definition Documentation

#define ALLOCA (   TYPE,
  NAME,
  SIZE 
)    TYPE *NAME = (TYPE *) alloca((SIZE)*sizeof(TYPE))

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

Definition at line 20 of file PmeKSpace.C.

Referenced by PmeKSpace::compute_energy_orthogonal_helper().

Function Documentation

void compute_b_moduli ( double *  bm,
int  K,
int  order 
)

Definition at line 42 of file PmeKSpace.C.

References compute_b_spline(), dftmod(), and order.

Referenced by PmeKSpace::PmeKSpace(), and PmeKSpaceCompute::PmeKSpaceCompute().

42  {
43  int i;
44  double fr[3];
45 
46  double *M = new double[3*order];
47  double *dM = new double[3*order];
48  double *scratch = new double[K];
49 
50  fr[0]=fr[1]=fr[2]=0.0;
51  compute_b_spline(fr,M,dM,order);
52  for (i=0; i<order; i++) bm[i] = M[i];
53  for (i=order; i<K; i++) bm[i] = 0.0;
54  dftmod(scratch, bm, K);
55  for (i=0; i<K; i++) bm[i] = 1.0/scratch[i];
56 
57 
58  delete [] scratch;
59  delete [] dM;
60  delete [] M;
61 }
static void dftmod(double *bsp_mod, double *bsp_arr, int nfft)
Definition: PmeKSpace.C:22
#define order
Definition: PmeRealSpace.C:235
static void compute_b_spline(REAL *__restrict frac, REAL *M, REAL *dM, int order)
Definition: PmeBase.inl:86
static void compute_energy_orthogonal_ckloop ( int  first,
int  last,
void result,
int  paraNum,
void param 
)
inlinestatic

Definition at line 214 of file PmeKSpace.C.

References PmeKSpace::compute_energy_orthogonal_subset().

Referenced by PmeKSpace::compute_energy_orthogonal_helper().

214  {
215  for ( int i = first; i <= last; ++i ) {
216  void **params = (void **)param;
217  PmeKSpace *kspace = (PmeKSpace *)params[0];
218  float *q_arr = (float *)params[1];
219  double *recips = (double *)params[2];
220  double *partialEnergy = (double *)params[3];
221  double *partialVirial = (double *)params[4];
222  int *unitDist = (int *)params[5];
223 
224  int unit = unitDist[0];
225  int remains = unitDist[1];
226  int k1from, k1to;
227  if(i<remains){
228  k1from = i*(unit+1);
229  k1to = k1from+unit;
230  }else{
231  k1from = remains*(unit+1)+(i-remains)*unit;
232  k1to = k1from+unit-1;
233  }
234  double *pEnergy = partialEnergy+i;
235  double *pVirial = partialVirial+i*6;
236  kspace->compute_energy_orthogonal_subset(q_arr, recips, pVirial, pEnergy, k1from, k1to);
237  }
238 }
void compute_energy_orthogonal_subset(float q_arr[], double *recips, double partialVirial[], double *partialEnergy, int k1from, int k1to)
Definition: PmeKSpace.C:135
static void dftmod ( double *  bsp_mod,
double *  bsp_arr,
int  nfft 
)
static

Definition at line 22 of file PmeKSpace.C.

References M_PI.

Referenced by compute_b_moduli().

22  {
23  int j, k;
24  double twopi, arg, sum1, sum2;
25  double infft = 1.0/nfft;
26 /* Computes the modulus of the discrete fourier transform of bsp_arr, */
27 /* storing it into bsp_mod */
28  twopi = 2.0 * M_PI;
29 
30  for (k = 0; k <nfft; ++k) {
31  sum1 = 0.;
32  sum2 = 0.;
33  for (j = 0; j < nfft; ++j) {
34  arg = twopi * k * j * infft;
35  sum1 += bsp_arr[j] * cos(arg);
36  sum2 += bsp_arr[j] * sin(arg);
37  }
38  bsp_mod[k] = sum1*sum1 + sum2*sum2;
39  }
40 }
#define M_PI
Definition: GoMolecule.C:39