Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

ComputeGridForce Class Reference

#include <ComputeGridForce.h>

Inheritance diagram for ComputeGridForce:

ComputeHomePatch Compute List of all members.

Public Member Functions

 ComputeGridForce (ComputeID c, PatchID pid)
virtual ~ComputeGridForce ()
virtual void doForce (FullAtom *p, Results *r)

Public Attributes

SubmitReductionreduction

Detailed Description

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

Definition at line 13 of file ComputeGridForce.h.


Constructor & Destructor Documentation

ComputeGridForce::ComputeGridForce ComputeID  c,
PatchID  pid
 

Definition at line 19 of file ComputeGridForce.C.

References ReductionMgr::Object(), reduction, REDUCTIONS_BASIC, and ReductionMgr::willSubmit().

00020     : ComputeHomePatch(c,pid)
00021 {
00022 
00023     reduction = ReductionMgr::Object()->willSubmit(REDUCTIONS_BASIC);
00024 
00025 }

ComputeGridForce::~ComputeGridForce  )  [virtual]
 

Definition at line 29 of file ComputeGridForce.C.

00030 {
00031     delete reduction;
00032 }


Member Function Documentation

void ComputeGridForce::doForce FullAtom p,
Results r
[virtual]
 

Implements ComputeHomePatch.

Definition at line 36 of file ComputeGridForce.C.

References ADD_TENSOR_OBJECT, ADD_VECTOR_OBJECT, GridforceGrid::__box::b, BigReal, GridforceGrid::Box, charge, Charge, DebugM, Lattice::delta(), Tensor::diagonal(), endi(), Results::f, Force, GridforceGrid::get_box(), GridforceGrid::get_center(), Molecule::get_gridfrc_grid(), Molecule::get_gridfrc_params(), GridforceGrid::get_inv(), SimParameters::gridforceScale, Molecule::is_atom_gridforced(), SubmitReduction::item(), Transform::j, Transform::k, Patch::lattice, GridforceGrid::__box::loc, Node::molecule, Node::Object(), outer(), CompAtom::position, Position, Real, reduction, REDUCTION_EXT_FORCE_NORMAL, REDUCTION_MISC_ENERGY, REDUCTION_VIRIAL_NORMAL, Lattice::reverse_transform(), GridforceGrid::__box::scale, Node::simParameters, simParams, SubmitReduction::submit(), FullAtom::transform, Lattice::wrap_delta(), Vector::x, Vector::y, and Vector::z.

00037 {
00038     SimParameters *simParams = Node::Object()->simParameters;
00039     Molecule *mol = Node::Object()->molecule;
00040     //Lattice lattice = homePatch->lattice;
00041     
00042     Force *forces = r->f[Results::normal];
00043     BigReal energy = 0;
00044     Force extForce = 0.;
00045     Tensor extVirial;
00046     
00047     Real scale;                 // Scaling factor
00048     Charge charge;              // Charge
00049     const GridforceGrid *grid = mol->get_gridfrc_grid();
00050     GridforceGrid::Box box;     // Structure with potential info
00051     Force f;
00052     float v;
00053     
00054     //  Loop through and check each atom
00055     for (int i = 0; i < numAtoms; i++) {
00056         if (mol->is_atom_gridforced(p[i].id)) {
00057             mol->get_gridfrc_params(scale, charge, p[i].id);
00058             
00059             // Wrap coordinates using grid center
00060             Position pos = p[i].position;
00061             pos += homePatch->lattice.wrap_delta(p[i].position);
00062             pos += homePatch->lattice.delta(pos, grid->get_center()) - (pos - grid->get_center());
00063             
00064             int err = grid->get_box(&box, pos);
00065             if (err) {
00066                 DebugM(4, "force4 = 0 0 0\n" << endi);
00067                 DebugM(4, "v4 = 0\n" << endi);
00068                 continue;  // This means the current atom is outside the potential
00069             }
00070             
00071             float a[64];
00072 //          for (int j = 0; j < 64; j++) {
00073 //              a[j] = 0;
00074 //              for (int k = 0; k < 64; k++) {
00075 //                  a[j] += A[j][k] * box.b[k];
00076 //              }
00077 //          }
00078             
00079             // Multiply 'box.b' vector by matrix ... ugly but efficient (?)
00080             a[0] = box.b[0];
00081             a[1] = box.b[8];
00082             a[2] = -3*box.b[0] + 3*box.b[1] - 2*box.b[8] - box.b[9];
00083             a[3] = 2*box.b[0] - 2*box.b[1] + box.b[8] + box.b[9];
00084             a[4] = box.b[16];
00085             a[5] = box.b[32];
00086             a[6] = -3*box.b[16] + 3*box.b[17] - 2*box.b[32] - box.b[33];
00087             a[7] = 2*box.b[16] - 2*box.b[17] + box.b[32] + box.b[33];
00088             a[8] = -3*box.b[0] + 3*box.b[2] - 2*box.b[16] - box.b[18];
00089             a[9] = -3*box.b[8] + 3*box.b[10] - 2*box.b[32] - box.b[34];
00090             a[10] = 9*box.b[0] - 9*box.b[1] - 9*box.b[2] + 9*box.b[3] + 6*box.b[8] + 3*box.b[9] - 6*box.b[10] - 3*box.b[11]
00091                 + 6*box.b[16] - 6*box.b[17] + 3*box.b[18] - 3*box.b[19] + 4*box.b[32] + 2*box.b[33] + 2*box.b[34] + box.b[35];
00092             a[11] = -6*box.b[0] + 6*box.b[1] + 6*box.b[2] - 6*box.b[3] - 3*box.b[8] - 3*box.b[9] + 3*box.b[10] + 3*box.b[11]
00093                 - 4*box.b[16] + 4*box.b[17] - 2*box.b[18] + 2*box.b[19] - 2*box.b[32] - 2*box.b[33] - box.b[34] - box.b[35];
00094             a[12] = 2*box.b[0] - 2*box.b[2] + box.b[16] + box.b[18];
00095             a[13] = 2*box.b[8] - 2*box.b[10] + box.b[32] + box.b[34];
00096             a[14] = -6*box.b[0] + 6*box.b[1] + 6*box.b[2] - 6*box.b[3] - 4*box.b[8] - 2*box.b[9] + 4*box.b[10] + 2*box.b[11]
00097                 - 3*box.b[16] + 3*box.b[17] - 3*box.b[18] + 3*box.b[19] - 2*box.b[32] - box.b[33] - 2*box.b[34] - box.b[35];
00098             a[15] = 4*box.b[0] - 4*box.b[1] - 4*box.b[2] + 4*box.b[3] + 2*box.b[8] + 2*box.b[9] - 2*box.b[10] - 2*box.b[11]
00099                 + 2*box.b[16] - 2*box.b[17] + 2*box.b[18] - 2*box.b[19] + box.b[32] + box.b[33] + box.b[34] + box.b[35];
00100             a[16] = box.b[24];
00101             a[17] = box.b[40];
00102             a[18] = -3*box.b[24] + 3*box.b[25] - 2*box.b[40] - box.b[41];
00103             a[19] = 2*box.b[24] - 2*box.b[25] + box.b[40] + box.b[41];
00104             a[20] = box.b[48];
00105             a[21] = box.b[56];
00106             a[22] = -3*box.b[48] + 3*box.b[49] - 2*box.b[56] - box.b[57];
00107             a[23] = 2*box.b[48] - 2*box.b[49] + box.b[56] + box.b[57];
00108             a[24] = -3*box.b[24] + 3*box.b[26] - 2*box.b[48] - box.b[50];
00109             a[25] = -3*box.b[40] + 3*box.b[42] - 2*box.b[56] - box.b[58];
00110             a[26] = 9*box.b[24] - 9*box.b[25] - 9*box.b[26] + 9*box.b[27] + 6*box.b[40] + 3*box.b[41] - 6*box.b[42] - 3*box.b[43]
00111                 + 6*box.b[48] - 6*box.b[49] + 3*box.b[50] - 3*box.b[51] + 4*box.b[56] + 2*box.b[57] + 2*box.b[58] + box.b[59];
00112             a[27] = -6*box.b[24] + 6*box.b[25] + 6*box.b[26] - 6*box.b[27] - 3*box.b[40] - 3*box.b[41] + 3*box.b[42] + 3*box.b[43]
00113                 - 4*box.b[48] + 4*box.b[49] - 2*box.b[50] + 2*box.b[51] - 2*box.b[56] - 2*box.b[57] - box.b[58] - box.b[59];
00114             a[28] = 2*box.b[24] - 2*box.b[26] + box.b[48] + box.b[50];
00115             a[29] = 2*box.b[40] - 2*box.b[42] + box.b[56] + box.b[58];
00116             a[30] = -6*box.b[24] + 6*box.b[25] + 6*box.b[26] - 6*box.b[27] - 4*box.b[40] - 2*box.b[41] + 4*box.b[42] + 2*box.b[43]
00117                 - 3*box.b[48] + 3*box.b[49] - 3*box.b[50] + 3*box.b[51] - 2*box.b[56] - box.b[57] - 2*box.b[58] - box.b[59];
00118             a[31] = 4*box.b[24] - 4*box.b[25] - 4*box.b[26] + 4*box.b[27] + 2*box.b[40] + 2*box.b[41] - 2*box.b[42] - 2*box.b[43]
00119                 + 2*box.b[48] - 2*box.b[49] + 2*box.b[50] - 2*box.b[51] + box.b[56] + box.b[57] + box.b[58] + box.b[59];
00120             a[32] = -3*box.b[0] + 3*box.b[4] - 2*box.b[24] - box.b[28];
00121             a[33] = -3*box.b[8] + 3*box.b[12] - 2*box.b[40] - box.b[44];
00122             a[34] = 9*box.b[0] - 9*box.b[1] - 9*box.b[4] + 9*box.b[5] + 6*box.b[8] + 3*box.b[9] - 6*box.b[12] - 3*box.b[13]
00123                 + 6*box.b[24] - 6*box.b[25] + 3*box.b[28] - 3*box.b[29] + 4*box.b[40] + 2*box.b[41] + 2*box.b[44] + box.b[45];
00124             a[35] = -6*box.b[0] + 6*box.b[1] + 6*box.b[4] - 6*box.b[5] - 3*box.b[8] - 3*box.b[9] + 3*box.b[12] + 3*box.b[13]
00125                 - 4*box.b[24] + 4*box.b[25] - 2*box.b[28] + 2*box.b[29] - 2*box.b[40] - 2*box.b[41] - box.b[44] - box.b[45];
00126             a[36] = -3*box.b[16] + 3*box.b[20] - 2*box.b[48] - box.b[52];
00127             a[37] = -3*box.b[32] + 3*box.b[36] - 2*box.b[56] - box.b[60];
00128             a[38] = 9*box.b[16] - 9*box.b[17] - 9*box.b[20] + 9*box.b[21] + 6*box.b[32] + 3*box.b[33] - 6*box.b[36] - 3*box.b[37]
00129                 + 6*box.b[48] - 6*box.b[49] + 3*box.b[52] - 3*box.b[53] + 4*box.b[56] + 2*box.b[57] + 2*box.b[60] + box.b[61];
00130             a[39] = -6*box.b[16] + 6*box.b[17] + 6*box.b[20] - 6*box.b[21] - 3*box.b[32] - 3*box.b[33] + 3*box.b[36] + 3*box.b[37]
00131                 - 4*box.b[48] + 4*box.b[49] - 2*box.b[52] + 2*box.b[53] - 2*box.b[56] - 2*box.b[57] - box.b[60] - box.b[61];
00132             a[40] = 9*box.b[0] - 9*box.b[2] - 9*box.b[4] + 9*box.b[6] + 6*box.b[16] + 3*box.b[18] - 6*box.b[20] - 3*box.b[22]
00133                 + 6*box.b[24] - 6*box.b[26] + 3*box.b[28] - 3*box.b[30] + 4*box.b[48] + 2*box.b[50] + 2*box.b[52] + box.b[54];
00134             a[41] = 9*box.b[8] - 9*box.b[10] - 9*box.b[12] + 9*box.b[14] + 6*box.b[32] + 3*box.b[34] - 6*box.b[36] - 3*box.b[38]
00135                 + 6*box.b[40] - 6*box.b[42] + 3*box.b[44] - 3*box.b[46] + 4*box.b[56] + 2*box.b[58] + 2*box.b[60] + box.b[62];
00136             a[42] = -27*box.b[0] + 27*box.b[1] + 27*box.b[2] - 27*box.b[3] + 27*box.b[4] - 27*box.b[5] - 27*box.b[6] + 27*box.b[7]
00137                 - 18*box.b[8] - 9*box.b[9] + 18*box.b[10] + 9*box.b[11] + 18*box.b[12] + 9*box.b[13] - 18*box.b[14] - 9*box.b[15]
00138                 - 18*box.b[16] + 18*box.b[17] - 9*box.b[18] + 9*box.b[19] + 18*box.b[20] - 18*box.b[21] + 9*box.b[22] - 9*box.b[23]
00139                 - 18*box.b[24] + 18*box.b[25] + 18*box.b[26] - 18*box.b[27] - 9*box.b[28] + 9*box.b[29] + 9*box.b[30] - 9*box.b[31]
00140                 - 12*box.b[32] - 6*box.b[33] - 6*box.b[34] - 3*box.b[35] + 12*box.b[36] + 6*box.b[37] + 6*box.b[38] + 3*box.b[39]
00141                 - 12*box.b[40] - 6*box.b[41] + 12*box.b[42] + 6*box.b[43] - 6*box.b[44] - 3*box.b[45] + 6*box.b[46] + 3*box.b[47]
00142                 - 12*box.b[48] + 12*box.b[49] - 6*box.b[50] + 6*box.b[51] - 6*box.b[52] + 6*box.b[53] - 3*box.b[54] + 3*box.b[55]
00143                 - 8*box.b[56] - 4*box.b[57] - 4*box.b[58] - 2*box.b[59] - 4*box.b[60] - 2*box.b[61] - 2*box.b[62] - box.b[63];
00144             a[43] = 18*box.b[0] - 18*box.b[1] - 18*box.b[2] + 18*box.b[3] - 18*box.b[4] + 18*box.b[5] + 18*box.b[6] - 18*box.b[7]
00145                 + 9*box.b[8] + 9*box.b[9] - 9*box.b[10] - 9*box.b[11] - 9*box.b[12] - 9*box.b[13] + 9*box.b[14] + 9*box.b[15]
00146                 + 12*box.b[16] - 12*box.b[17] + 6*box.b[18] - 6*box.b[19] - 12*box.b[20] + 12*box.b[21] - 6*box.b[22] + 6*box.b[23]
00147                 + 12*box.b[24] - 12*box.b[25] - 12*box.b[26] + 12*box.b[27] + 6*box.b[28] - 6*box.b[29] - 6*box.b[30] + 6*box.b[31]
00148                 + 6*box.b[32] + 6*box.b[33] + 3*box.b[34] + 3*box.b[35] - 6*box.b[36] - 6*box.b[37] - 3*box.b[38] - 3*box.b[39]
00149                 + 6*box.b[40] + 6*box.b[41] - 6*box.b[42] - 6*box.b[43] + 3*box.b[44] + 3*box.b[45] - 3*box.b[46] - 3*box.b[47]
00150                 + 8*box.b[48] - 8*box.b[49] + 4*box.b[50] - 4*box.b[51] + 4*box.b[52] - 4*box.b[53] + 2*box.b[54] - 2*box.b[55]
00151                 + 4*box.b[56] + 4*box.b[57] + 2*box.b[58] + 2*box.b[59] + 2*box.b[60] + 2*box.b[61] + box.b[62] + box.b[63];
00152             a[44] = -6*box.b[0] + 6*box.b[2] + 6*box.b[4] - 6*box.b[6] - 3*box.b[16] - 3*box.b[18] + 3*box.b[20] + 3*box.b[22]
00153                 - 4*box.b[24] + 4*box.b[26] - 2*box.b[28] + 2*box.b[30] - 2*box.b[48] - 2*box.b[50] - box.b[52] - box.b[54];
00154             a[45] = -6*box.b[8] + 6*box.b[10] + 6*box.b[12] - 6*box.b[14] - 3*box.b[32] - 3*box.b[34] + 3*box.b[36] + 3*box.b[38]
00155                 - 4*box.b[40] + 4*box.b[42] - 2*box.b[44] + 2*box.b[46] - 2*box.b[56] - 2*box.b[58] - box.b[60] - box.b[62];
00156             a[46] = 18*box.b[0] - 18*box.b[1] - 18*box.b[2] + 18*box.b[3] - 18*box.b[4] + 18*box.b[5] + 18*box.b[6] - 18*box.b[7]
00157                 + 12*box.b[8] + 6*box.b[9] - 12*box.b[10] - 6*box.b[11] - 12*box.b[12] - 6*box.b[13] + 12*box.b[14] + 6*box.b[15]
00158                 + 9*box.b[16] - 9*box.b[17] + 9*box.b[18] - 9*box.b[19] - 9*box.b[20] + 9*box.b[21] - 9*box.b[22] + 9*box.b[23]
00159                 + 12*box.b[24] - 12*box.b[25] - 12*box.b[26] + 12*box.b[27] + 6*box.b[28] - 6*box.b[29] - 6*box.b[30] + 6*box.b[31]
00160                 + 6*box.b[32] + 3*box.b[33] + 6*box.b[34] + 3*box.b[35] - 6*box.b[36] - 3*box.b[37] - 6*box.b[38] - 3*box.b[39]
00161                 + 8*box.b[40] + 4*box.b[41] - 8*box.b[42] - 4*box.b[43] + 4*box.b[44] + 2*box.b[45] - 4*box.b[46] - 2*box.b[47]
00162                 + 6*box.b[48] - 6*box.b[49] + 6*box.b[50] - 6*box.b[51] + 3*box.b[52] - 3*box.b[53] + 3*box.b[54] - 3*box.b[55]
00163                 + 4*box.b[56] + 2*box.b[57] + 4*box.b[58] + 2*box.b[59] + 2*box.b[60] + box.b[61] + 2*box.b[62] + box.b[63];
00164             a[47] = -12*box.b[0] + 12*box.b[1] + 12*box.b[2] - 12*box.b[3] + 12*box.b[4] - 12*box.b[5] - 12*box.b[6] + 12*box.b[7]
00165                 - 6*box.b[8] - 6*box.b[9] + 6*box.b[10] + 6*box.b[11] + 6*box.b[12] + 6*box.b[13] - 6*box.b[14] - 6*box.b[15]
00166                 - 6*box.b[16] + 6*box.b[17] - 6*box.b[18] + 6*box.b[19] + 6*box.b[20] - 6*box.b[21] + 6*box.b[22] - 6*box.b[23]
00167                 - 8*box.b[24] + 8*box.b[25] + 8*box.b[26] - 8*box.b[27] - 4*box.b[28] + 4*box.b[29] + 4*box.b[30] - 4*box.b[31]
00168                 - 3*box.b[32] - 3*box.b[33] - 3*box.b[34] - 3*box.b[35] + 3*box.b[36] + 3*box.b[37] + 3*box.b[38] + 3*box.b[39]
00169                 - 4*box.b[40] - 4*box.b[41] + 4*box.b[42] + 4*box.b[43] - 2*box.b[44] - 2*box.b[45] + 2*box.b[46] + 2*box.b[47]
00170                 - 4*box.b[48] + 4*box.b[49] - 4*box.b[50] + 4*box.b[51] - 2*box.b[52] + 2*box.b[53] - 2*box.b[54] + 2*box.b[55]
00171                 - 2*box.b[56] - 2*box.b[57] - 2*box.b[58] - 2*box.b[59] - box.b[60] - box.b[61] - box.b[62] - box.b[63];
00172             a[48] = 2*box.b[0] - 2*box.b[4] + box.b[24] + box.b[28];
00173             a[49] = 2*box.b[8] - 2*box.b[12] + box.b[40] + box.b[44];
00174             a[50] = -6*box.b[0] + 6*box.b[1] + 6*box.b[4] - 6*box.b[5] - 4*box.b[8] - 2*box.b[9] + 4*box.b[12] + 2*box.b[13]
00175                 - 3*box.b[24] + 3*box.b[25] - 3*box.b[28] + 3*box.b[29] - 2*box.b[40] - box.b[41] - 2*box.b[44] - box.b[45];
00176             a[51] = 4*box.b[0] - 4*box.b[1] - 4*box.b[4] + 4*box.b[5] + 2*box.b[8] + 2*box.b[9] - 2*box.b[12] - 2*box.b[13]
00177                 + 2*box.b[24] - 2*box.b[25] + 2*box.b[28] - 2*box.b[29] + box.b[40] + box.b[41] + box.b[44] + box.b[45];
00178             a[52] = 2*box.b[16] - 2*box.b[20] + box.b[48] + box.b[52];
00179             a[53] = 2*box.b[32] - 2*box.b[36] + box.b[56] + box.b[60];
00180             a[54] = -6*box.b[16] + 6*box.b[17] + 6*box.b[20] - 6*box.b[21] - 4*box.b[32] - 2*box.b[33] + 4*box.b[36] + 2*box.b[37]
00181                 - 3*box.b[48] + 3*box.b[49] - 3*box.b[52] + 3*box.b[53] - 2*box.b[56] - box.b[57] - 2*box.b[60] - box.b[61];
00182             a[55] = 4*box.b[16] - 4*box.b[17] - 4*box.b[20] + 4*box.b[21] + 2*box.b[32] + 2*box.b[33] - 2*box.b[36] - 2*box.b[37]
00183                 + 2*box.b[48] - 2*box.b[49] + 2*box.b[52] - 2*box.b[53] + box.b[56] + box.b[57] + box.b[60] + box.b[61];
00184             a[56] = -6*box.b[0] + 6*box.b[2] + 6*box.b[4] - 6*box.b[6] - 4*box.b[16] - 2*box.b[18] + 4*box.b[20] + 2*box.b[22]
00185                 - 3*box.b[24] + 3*box.b[26] - 3*box.b[28] + 3*box.b[30] - 2*box.b[48] - box.b[50] - 2*box.b[52] - box.b[54];
00186             a[57] = -6*box.b[8] + 6*box.b[10] + 6*box.b[12] - 6*box.b[14] - 4*box.b[32] - 2*box.b[34] + 4*box.b[36] + 2*box.b[38]
00187                 - 3*box.b[40] + 3*box.b[42] - 3*box.b[44] + 3*box.b[46] - 2*box.b[56] - box.b[58] - 2*box.b[60] - box.b[62];
00188             a[58] = 18*box.b[0] - 18*box.b[1] - 18*box.b[2] + 18*box.b[3] - 18*box.b[4] + 18*box.b[5] + 18*box.b[6] - 18*box.b[7]
00189                 + 12*box.b[8] + 6*box.b[9] - 12*box.b[10] - 6*box.b[11] - 12*box.b[12] - 6*box.b[13] + 12*box.b[14] + 6*box.b[15]
00190                 + 12*box.b[16] - 12*box.b[17] + 6*box.b[18] - 6*box.b[19] - 12*box.b[20] + 12*box.b[21] - 6*box.b[22] + 6*box.b[23]
00191                 + 9*box.b[24] - 9*box.b[25] - 9*box.b[26] + 9*box.b[27] + 9*box.b[28] - 9*box.b[29] - 9*box.b[30] + 9*box.b[31]
00192                 + 8*box.b[32] + 4*box.b[33] + 4*box.b[34] + 2*box.b[35] - 8*box.b[36] - 4*box.b[37] - 4*box.b[38] - 2*box.b[39]
00193                 + 6*box.b[40] + 3*box.b[41] - 6*box.b[42] - 3*box.b[43] + 6*box.b[44] + 3*box.b[45] - 6*box.b[46] - 3*box.b[47]
00194                 + 6*box.b[48] - 6*box.b[49] + 3*box.b[50] - 3*box.b[51] + 6*box.b[52] - 6*box.b[53] + 3*box.b[54] - 3*box.b[55]
00195                 + 4*box.b[56] + 2*box.b[57] + 2*box.b[58] + box.b[59] + 4*box.b[60] + 2*box.b[61] + 2*box.b[62] + box.b[63];
00196             a[59] = -12*box.b[0] + 12*box.b[1] + 12*box.b[2] - 12*box.b[3] + 12*box.b[4] - 12*box.b[5] - 12*box.b[6] + 12*box.b[7]
00197                 - 6*box.b[8] - 6*box.b[9] + 6*box.b[10] + 6*box.b[11] + 6*box.b[12] + 6*box.b[13] - 6*box.b[14] - 6*box.b[15]
00198                 - 8*box.b[16] + 8*box.b[17] - 4*box.b[18] + 4*box.b[19] + 8*box.b[20] - 8*box.b[21] + 4*box.b[22] - 4*box.b[23]
00199                 - 6*box.b[24] + 6*box.b[25] + 6*box.b[26] - 6*box.b[27] - 6*box.b[28] + 6*box.b[29] + 6*box.b[30] - 6*box.b[31]
00200                 - 4*box.b[32] - 4*box.b[33] - 2*box.b[34] - 2*box.b[35] + 4*box.b[36] + 4*box.b[37] + 2*box.b[38] + 2*box.b[39]
00201                 - 3*box.b[40] - 3*box.b[41] + 3*box.b[42] + 3*box.b[43] - 3*box.b[44] - 3*box.b[45] + 3*box.b[46] + 3*box.b[47]
00202                 - 4*box.b[48] + 4*box.b[49] - 2*box.b[50] + 2*box.b[51] - 4*box.b[52] + 4*box.b[53] - 2*box.b[54] + 2*box.b[55]
00203                 - 2*box.b[56] - 2*box.b[57] - box.b[58] - box.b[59] - 2*box.b[60] - 2*box.b[61] - box.b[62] - box.b[63];
00204             a[60] = 4*box.b[0] - 4*box.b[2] - 4*box.b[4] + 4*box.b[6] + 2*box.b[16] + 2*box.b[18] - 2*box.b[20] - 2*box.b[22]
00205                 + 2*box.b[24] - 2*box.b[26] + 2*box.b[28] - 2*box.b[30] + box.b[48] + box.b[50] + box.b[52] + box.b[54];
00206             a[61] = 4*box.b[8] - 4*box.b[10] - 4*box.b[12] + 4*box.b[14] + 2*box.b[32] + 2*box.b[34] - 2*box.b[36] - 2*box.b[38]
00207                 + 2*box.b[40] - 2*box.b[42] + 2*box.b[44] - 2*box.b[46] + box.b[56] + box.b[58] + box.b[60] + box.b[62];
00208             a[62] = -12*box.b[0] + 12*box.b[1] + 12*box.b[2] - 12*box.b[3] + 12*box.b[4] - 12*box.b[5] - 12*box.b[6] + 12*box.b[7]
00209                 - 8*box.b[8] - 4*box.b[9] + 8*box.b[10] + 4*box.b[11] + 8*box.b[12] + 4*box.b[13] - 8*box.b[14] - 4*box.b[15]
00210                 - 6*box.b[16] + 6*box.b[17] - 6*box.b[18] + 6*box.b[19] + 6*box.b[20] - 6*box.b[21] + 6*box.b[22] - 6*box.b[23]
00211                 - 6*box.b[24] + 6*box.b[25] + 6*box.b[26] - 6*box.b[27] - 6*box.b[28] + 6*box.b[29] + 6*box.b[30] - 6*box.b[31]
00212                 - 4*box.b[32] - 2*box.b[33] - 4*box.b[34] - 2*box.b[35] + 4*box.b[36] + 2*box.b[37] + 4*box.b[38] + 2*box.b[39]
00213                 - 4*box.b[40] - 2*box.b[41] + 4*box.b[42] + 2*box.b[43] - 4*box.b[44] - 2*box.b[45] + 4*box.b[46] + 2*box.b[47]
00214                 - 3*box.b[48] + 3*box.b[49] - 3*box.b[50] + 3*box.b[51] - 3*box.b[52] + 3*box.b[53] - 3*box.b[54] + 3*box.b[55]
00215                 - 2*box.b[56] - box.b[57] - 2*box.b[58] - box.b[59] - 2*box.b[60] - box.b[61] - 2*box.b[62] - box.b[63];
00216             a[63] = 8*box.b[0] - 8*box.b[1] - 8*box.b[2] + 8*box.b[3] - 8*box.b[4] + 8*box.b[5] + 8*box.b[6] - 8*box.b[7]
00217                 + 4*box.b[8] + 4*box.b[9] - 4*box.b[10] - 4*box.b[11] - 4*box.b[12] - 4*box.b[13] + 4*box.b[14] + 4*box.b[15]
00218                 + 4*box.b[16] - 4*box.b[17] + 4*box.b[18] - 4*box.b[19] - 4*box.b[20] + 4*box.b[21] - 4*box.b[22] + 4*box.b[23]
00219                 + 4*box.b[24] - 4*box.b[25] - 4*box.b[26] + 4*box.b[27] + 4*box.b[28] - 4*box.b[29] - 4*box.b[30] + 4*box.b[31]
00220                 + 2*box.b[32] + 2*box.b[33] + 2*box.b[34] + 2*box.b[35] - 2*box.b[36] - 2*box.b[37] - 2*box.b[38] - 2*box.b[39]
00221                 + 2*box.b[40] + 2*box.b[41] - 2*box.b[42] - 2*box.b[43] + 2*box.b[44] + 2*box.b[45] - 2*box.b[46] - 2*box.b[47]
00222                 + 2*box.b[48] - 2*box.b[49] + 2*box.b[50] - 2*box.b[51] + 2*box.b[52] - 2*box.b[53] + 2*box.b[54] - 2*box.b[55]
00223                 + box.b[56] + box.b[57] + box.b[58] + box.b[59] + box.b[60] + box.b[61] + box.b[62] + box.b[63];
00224             
00225             for (int j = 0; j < 64; j++) DebugM(2, "a[" << j << "] = " << a[j] << "\n" << endi);
00226             for (int j = 0; j < 64; j++) DebugM(2, "b[" << j << "] = " << box.b[j] << "\n" << endi);
00227             
00228             // Calculate powers of x, y, z for later use
00229             // e.g. x[2] = x^2
00230             float x[4], y[4], z[4];
00231             x[0] = 1; y[0] = 1; z[0] = 1;
00232             for (int j = 1; j < 4; j++) {
00233                 x[j] = x[j-1] * box.loc.x;
00234                 y[j] = y[j-1] * box.loc.y;
00235                 z[j] = z[j-1] * box.loc.z;
00236             }
00237             
00238             int ind = 0;
00239             f = 0;
00240             v = 0;
00241             for (int l = 0; l < 4; l++) {
00242                 for (int k = 0; k < 4; k++) {
00243                     for (int j = 0; j < 4; j++) {
00244                         v += a[ind] * x[j] * y[k] * z[l];
00245                         if (j > 0) f.x -= a[ind] * j * x[j-1] * y[k]   * z[l];
00246                         if (k > 0) f.y -= a[ind] * k * x[j]   * y[k-1] * z[l];
00247                         if (l > 0) f.z -= a[ind] * l * x[j]   * y[k]   * z[l-1];
00248                         ind++;
00249                     }
00250                 }
00251             }
00252             
00253 //          Force force = scale * Tensor::diagonal(simParams->gridforceScale) * charge * (inv * f);
00254 //          Force force = scale * Tensor::diagonal(simParams->gridforceScale) * charge * (f * grid->get_inv()); // Must multiply ON THE RIGHT by inv tensor
00255             Force force = scale * Tensor::diagonal(simParams->gridforceScale) * charge * ((box.scale * f) * grid->get_inv()); // Must multiply ON THE RIGHT by inv tensor
00256             
00257             DebugM(4, "f4 = " << f << "\n" << endi);
00258             DebugM(4, "force4 = " << force << "\n" << endi);
00259             DebugM(4, "v4 = " << v << "\n" << endi);
00260             
00261             forces[i] += force;
00262             extForce += force;
00263             Position vpos = homePatch->lattice.reverse_transform(p[i].position, p[i].transform);
00264             
00265             DebugM(4, "transform = " << (int)p[i].transform.i << " "
00266                    << (int)p[i].transform.j << " " << (int)p[i].transform.k << "\n" << endi);
00267             
00268             //energy -= force * (vpos - homePatch->lattice.origin());
00269             if (simParams->gridforceScale.x == simParams->gridforceScale.y 
00270                 && simParams->gridforceScale.x == simParams->gridforceScale.z)
00271             {
00272                 // only makes sense when scaling is isotropic
00273                 energy += v * charge * scale * simParams->gridforceScale.x;
00274             }
00275             extVirial += outer(force,vpos);
00276         }
00277     }
00278     
00279     reduction->item(REDUCTION_MISC_ENERGY) += energy;
00280     ADD_VECTOR_OBJECT(reduction,REDUCTION_EXT_FORCE_NORMAL,extForce);
00281     ADD_TENSOR_OBJECT(reduction,REDUCTION_VIRIAL_NORMAL,extVirial);
00282     reduction->submit();
00283     
00284 }


Member Data Documentation

SubmitReduction* ComputeGridForce::reduction
 

Definition at line 22 of file ComputeGridForce.h.

Referenced by ComputeGridForce(), and doForce().


The documentation for this class was generated from the following files:
Generated on Fri Sep 5 04:07:17 2008 for NAMD by  doxygen 1.3.9.1