#include <ComputeGridForce.h>
Inheritance diagram for ComputeGridForce:

Public Member Functions | |
| ComputeGridForce (ComputeID c, PatchID pid) | |
| virtual | ~ComputeGridForce () |
| virtual void | doForce (FullAtom *p, Results *r) |
Public Attributes | |
| SubmitReduction * | reduction |
Definition at line 13 of file ComputeGridForce.h.
|
||||||||||||
|
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 }
|
|
|
Definition at line 29 of file ComputeGridForce.C. 00030 {
00031 delete reduction;
00032 }
|
|
||||||||||||
|
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 }
|
|
|
Definition at line 22 of file ComputeGridForce.h. Referenced by ComputeGridForce(), and doForce(). |
1.3.9.1