| 129 | 
  | 
 | 
| 130 | 
  | 
  const double kb = 1.9872179E-3; // boltzman's constant in kcal/(mol K) | 
| 131 | 
  | 
  double temperature; | 
| 132 | 
– | 
  int ndf_local, ndf; | 
| 132 | 
  | 
   | 
| 133 | 
< | 
  ndf_local = 3 * entry_plug->n_atoms + 3 * entry_plug->n_oriented | 
| 135 | 
< | 
    - entry_plug->n_constraints; | 
| 136 | 
< | 
 | 
| 137 | 
< | 
#ifdef IS_MPI | 
| 138 | 
< | 
  MPI_Allreduce(&ndf_local,&ndf,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); | 
| 139 | 
< | 
#else | 
| 140 | 
< | 
  ndf = ndf_local; | 
| 141 | 
< | 
#endif | 
| 142 | 
< | 
 | 
| 143 | 
< | 
  ndf = ndf - 3; | 
| 144 | 
< | 
   | 
| 145 | 
< | 
  temperature = ( 2.0 * this->getKinetic() ) / ( ndf * kb ); | 
| 133 | 
> | 
  temperature = ( 2.0 * this->getKinetic() ) / ((double)entry_plug->ndf * kb ); | 
| 134 | 
  | 
  return temperature; | 
| 135 | 
  | 
} | 
| 136 | 
  | 
 | 
| 139 | 
  | 
  // routine derived via viral theorem description in: | 
| 140 | 
  | 
  // Paci, E. and Marchi, M. J.Phys.Chem. 1996, 100, 4314-4322 | 
| 141 | 
  | 
 | 
| 142 | 
< | 
  return 0.0; | 
| 142 | 
> | 
  const double e_convert = 4.184e-4; | 
| 143 | 
> | 
  const double p_convert = 1.63882576e8; | 
| 144 | 
> | 
  double molmass; | 
| 145 | 
> | 
  double vcom[3]; | 
| 146 | 
> | 
  double p_local, p_sum, p_mol, virial; | 
| 147 | 
> | 
  double theBox[3]; | 
| 148 | 
> | 
  double* tau; | 
| 149 | 
> | 
  int i, nMols; | 
| 150 | 
> | 
  Molecule* molecules; | 
| 151 | 
> | 
 | 
| 152 | 
> | 
  nMols = entry_plug->n_mol; | 
| 153 | 
> | 
  molecules = entry_plug->molecules; | 
| 154 | 
> | 
  tau = entry_plug->tau; | 
| 155 | 
> | 
 | 
| 156 | 
> | 
  // use velocities of molecular centers of mass and molecular masses: | 
| 157 | 
> | 
  p_local = 0.0; | 
| 158 | 
> | 
 | 
| 159 | 
> | 
  for (i=0; i < nMols; i++) { | 
| 160 | 
> | 
    molmass = molecules[i].getCOMvel(vcom); | 
| 161 | 
> | 
    p_local += (vcom[0]*vcom[0] + vcom[1]*vcom[1] + vcom[2]*vcom[2]) * molmass; | 
| 162 | 
> | 
  } | 
| 163 | 
> | 
 | 
| 164 | 
> | 
  // Get total for entire system from MPI. | 
| 165 | 
> | 
#ifdef IS_MPI | 
| 166 | 
> | 
  MPI_Allreduce(&p_local,&p_sum,1,MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); | 
| 167 | 
> | 
#else | 
| 168 | 
> | 
  p_sum = p_local;  | 
| 169 | 
> | 
#endif // is_mpi | 
| 170 | 
> | 
 | 
| 171 | 
> | 
  virial = tau[0] + tau[4] + tau[8]; | 
| 172 | 
> | 
  entry_plug->getBox(theBox); | 
| 173 | 
> | 
 | 
| 174 | 
> | 
  p_mol = p_convert * (p_sum - virial*e_convert) /  | 
| 175 | 
> | 
    (3.0 * theBox[0] * theBox[1]* theBox[2]);  | 
| 176 | 
> | 
 | 
| 177 | 
> | 
  return p_mol; | 
| 178 | 
  | 
} | 
| 179 | 
  | 
 | 
| 180 | 
  | 
void Thermo::velocitize() { | 
| 188 | 
  | 
  const double kb = 8.31451e-7; // kb in amu, angstroms, fs, etc. | 
| 189 | 
  | 
  double av2; | 
| 190 | 
  | 
  double kebar; | 
| 168 | 
– | 
  int ndf, ndf_local; // number of degrees of freedom | 
| 169 | 
– | 
  int ndfRaw, ndfRaw_local; // the raw number of degrees of freedom | 
| 191 | 
  | 
  int n_atoms; | 
| 192 | 
  | 
  Atom** atoms; | 
| 193 | 
  | 
  DirectionalAtom* dAtom; | 
| 201 | 
  | 
  n_oriented    = entry_plug->n_oriented; | 
| 202 | 
  | 
  n_constraints = entry_plug->n_constraints; | 
| 203 | 
  | 
   | 
| 204 | 
< | 
  // Raw degrees of freedom that we have to set | 
| 205 | 
< | 
  ndfRaw_local = 3 * entry_plug->n_atoms + 3 * entry_plug->n_oriented; | 
| 185 | 
< | 
 | 
| 186 | 
< | 
  // Degrees of freedom that can contain kinetic energy | 
| 187 | 
< | 
  ndf_local = 3 * entry_plug->n_atoms + 3 * entry_plug->n_oriented | 
| 188 | 
< | 
    - entry_plug->n_constraints; | 
| 204 | 
> | 
  kebar = kb * temperature * (double)entry_plug->ndf /  | 
| 205 | 
> | 
    ( 2.0 * (double)entry_plug->ndfRaw ); | 
| 206 | 
  | 
   | 
| 190 | 
– | 
#ifdef IS_MPI | 
| 191 | 
– | 
  MPI_Allreduce(&ndf_local,&ndf,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); | 
| 192 | 
– | 
  MPI_Allreduce(&ndfRaw_local,&ndfRaw,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); | 
| 193 | 
– | 
#else | 
| 194 | 
– | 
  ndfRaw = ndfRaw_local; | 
| 195 | 
– | 
  ndf = ndf_local; | 
| 196 | 
– | 
#endif | 
| 197 | 
– | 
  ndf = ndf - 3; | 
| 198 | 
– | 
 | 
| 199 | 
– | 
  kebar = kb * temperature * (double)ndf / ( 2.0 * (double)ndfRaw ); | 
| 200 | 
– | 
   | 
| 207 | 
  | 
  for(vr = 0; vr < n_atoms; vr++){ | 
| 208 | 
  | 
     | 
| 209 | 
  | 
    // uses equipartition theory to solve for vbar in angstrom/fs | 
| 259 | 
  | 
 | 
| 260 | 
  | 
        vbar = sqrt( 2.0 * kebar * dAtom->getIyy() ); | 
| 261 | 
  | 
        jy = vbar * gaussStream->getGaussian(); | 
| 262 | 
< | 
 | 
| 262 | 
> | 
         | 
| 263 | 
  | 
        vbar = sqrt( 2.0 * kebar * dAtom->getIzz() ); | 
| 264 | 
  | 
        jz = vbar * gaussStream->getGaussian(); | 
| 265 | 
  | 
         |