#include <GridForceGrid.h>
Public Types | |
| typedef __box | Box |
Public Member Functions | |
| GridforceGrid (void) | |
| ~GridforceGrid () | |
| void | initialize (char *potfilename, SimParameters *simParams) |
| int | get_box (Box *box, Vector pos) const |
| void | pack (MOStream *msg) const |
| void | unpack (MIStream *msg) |
| Position | get_center (void) const |
| Tensor | get_inv (void) const |
Definition at line 17 of file GridForceGrid.h.
|
|
Definition at line 36 of file GridForceGrid.h. Referenced by ComputeGridForce::doForce(), and get_box(). |
|
|
Definition at line 21 of file GridForceGrid.C. 00022 {
00023 grid = NULL;
00024 }
|
|
|
Definition at line 43 of file GridForceGrid.C. 00043 {
00044 delete [] grid;
00045 }
|
|
||||||||||||
|
Definition at line 364 of file GridForceGrid.C. References GridforceGrid::__box::b, Bool, Box, DebugM, Tensor::diagonal(), endi(), GridforceGrid::__box::loc, Node::Object(), GridforceGrid::__box::scale, Node::simParameters, and simParams. Referenced by ComputeGridForce::doForce(). 00365 {
00366 SimParameters *simParams = Node::Object()->simParameters;
00367 Vector p = pos - origin;
00368 int inds[3];
00369 int ind;
00370 Vector g, dg;
00371 Vector gapscale = Vector(1, 1, 1);
00372
00373 DebugM(3, "pos = " << pos << "\n" << "origin = " << origin << "\n" << "p = " << p << "\n" << endi);
00374
00375 g = inv * p;
00376 for (int i = 0; i < 3; i++) {
00377 inds[i] = (int)floor(g[i]);
00378 dg[i] = g[i] - inds[i];
00379 }
00380
00381 for (int i = 0; i < 3; i++) {
00382 if (inds[i] < 0 || inds[i] >= k[i]-1) {
00383 if (cont[i]) inds[i] = k[i]-1;
00384 else return -1; // Outside potential and grid is not continuous
00385 }
00386 if (cont[i] && inds[i] == k[i]-1) {
00387 // Correct for non-unit spacing between continuous grid images
00388 gapscale[i] *= gapinv[i];
00389 if (g[i] < 0.0) dg[i] = 1.0 + g[i]*gapinv[i]; // = (gap[i] + g[i]) * gapinv[i]
00390 else dg[i] = (g[i] - inds[i]) * gapinv[i];
00391 }
00392 }
00393
00394 DebugM(3, "gapscale = " << gapscale << "\n" << endi);
00395 box->scale = Tensor::diagonal(gapscale);
00396
00397 DebugM(3, "dg = " << dg << "\n" << endi);
00398 DebugM(3, "ind + dg = " << inds[0]+dg[0] << " " << inds[1]+dg[1] << " " << inds[2]+dg[2] << "\n" << endi);
00399
00400 ind = inds[0]*dk[0] + inds[1]*dk[1] + inds[2]*dk[2];
00401
00402 for (int i0 = 0; i0 < 8; i0++) {
00403 int inds2[3];
00404 int ind2 = 0;
00405
00406 float voff = 0.0;
00407 int bit = 1; // bit = 2^i1 in the below loop
00408 for (int i1 = 0; i1 < 3; i1++) {
00409 inds2[i1] = (inds[i1] + ((i0 & bit) ? 1 : 0)) % k[i1];
00410 ind2 += inds2[i1] * dk[i1];
00411
00412 // Deal with voltage offsets
00413 if (cont[i1] && inds[i1] == (k[i1]-1) && inds2[i1] == 0) {
00414 voff += offset[i1];
00415 DebugM(3, "offset[" << i1 << "] = " << offset[i1] << "\n" << endi);
00416 }
00417
00418 bit <<= 1; // i.e. multiply by 2
00419 }
00420
00421 DebugM(3, "inds2 = " << inds2[0] << " " << inds2[1] << " " << inds2[2] << "\n" << endi);
00422
00423 // NOTE: leaving everything in terms of unit cell coordinates for now,
00424 // eventually will multiply by inv tensor when applying the force
00425
00426 // First set variables 'dk_{hi,lo}' (glob notation). The 'hi'
00427 // ('lo') variable in a given dimension is the number added (subtracted)
00428 // to go up (down) one grid point in that dimension; both are normally
00429 // just the corresponding 'dk[i]'. However, if we are sitting on a
00430 // boundary and we are using a continuous grid, then we want to map the
00431 // next point off the grid back around to the other side. e.g. point
00432 // (k[0], i1, k) maps to point (0, i1, k), which would be
00433 // accomplished by changing 'dk1_hi' to -(k[0]-1)*dk1.
00434
00435 Bool zero_derivs = FALSE;
00436 int dk_hi[3];
00437 int dk_lo[3];
00438 float voffs[3];
00439 float dscales[3] = {0.5, 0.5, 0.5};
00440 for (int i1 = 0; i1 < 3; i1++) {
00441 if (inds2[i1] == 0) {
00442 if (cont[i1]) {
00443 dk_hi[i1] = dk[i1];
00444 dk_lo[i1] = -(k[i1]-1) * dk[i1];
00445 voffs[i1] = offset[i1];
00446 dscales[i1] = 1.0/(1.0 + gap[i1]) * 1.0/gapscale[i1];
00447 }
00448 else zero_derivs = TRUE;
00449 }
00450 else if (inds2[i1] == k[i1]-1) {
00451 if (cont[i1]) {
00452 dk_hi[i1] = -(k[i1]-1) * dk[i1];
00453 dk_lo[i1] = dk[i1];
00454 voffs[i1] = offset[i1];
00455 dscales[i1] = 1.0/(1.0 + gap[i1]) * 1.0/gapscale[i1];
00456 }
00457 else zero_derivs = TRUE;
00458 }
00459 else {
00460 dk_hi[i1] = dk[i1];
00461 dk_lo[i1] = dk[i1];
00462 voffs[i1] = 0.0;
00463 }
00464 }
00465
00466 DebugM(2, "zero_derivs = " << zero_derivs << "\n" << endi);
00467 DebugM(2, "dk_hi = " << dk_hi[0] << " " << dk_hi[1] << " " << dk_hi[2] << "\n" << endi);
00468 DebugM(2, "dk_lo = " << dk_lo[0] << " " << dk_lo[1] << " " << dk_lo[2] << "\n" << endi);
00469
00470
00471 // ### Now fill in box ###
00472
00473 box->loc = dg;
00474
00475 // V
00476 box->b[i0] = grid[ind2] + voff;
00477
00478 if (zero_derivs) {
00479 box->b[8+i0] = 0.0;
00480 box->b[16+i0] = 0.0;
00481 box->b[24+i0] = 0.0;
00482 box->b[32+i0] = 0.0;
00483 box->b[40+i0] = 0.0;
00484 box->b[48+i0] = 0.0;
00485 box->b[56+i0] = 0.0;
00486 } else {
00487 box->b[8+i0] = dscales[0] * (grid[ind2 + dk_hi[0]] - grid[ind2 - dk_lo[0]] + voffs[0]); // dV/dx
00488 box->b[16+i0] = dscales[1] * (grid[ind2 + dk_hi[1]] - grid[ind2 - dk_lo[1]] + voffs[1]); // dV/dy
00489 box->b[24+i0] = dscales[2] * (grid[ind2 + dk_hi[2]] - grid[ind2 - dk_lo[2]] + voffs[2]); // dV/dz
00490 box->b[32+i0] = dscales[0] * dscales[1]
00491 * (grid[ind2 + dk_hi[0] + dk_hi[1]] - grid[ind2 - dk_lo[0] + dk_hi[1]]
00492 - grid[ind2 + dk_hi[0] - dk_lo[1]] + grid[ind2 - dk_lo[0] - dk_lo[1]]); // d2V/dxdy
00493 box->b[40+i0] = dscales[0] * dscales[2]
00494 * (grid[ind2 + dk_hi[0] + dk_hi[2]] - grid[ind2 - dk_lo[0] + dk_hi[2]]
00495 - grid[ind2 + dk_hi[0] - dk_lo[2]] + grid[ind2 - dk_lo[0] - dk_lo[2]]); // d2V/dxdz
00496 box->b[48+i0] = dscales[1] * dscales[2]
00497 * (grid[ind2 + dk_hi[1] + dk_hi[2]] - grid[ind2 - dk_lo[1] + dk_hi[2]]
00498 - grid[ind2 + dk_hi[1] - dk_lo[2]] + grid[ind2 - dk_lo[1] - dk_lo[2]]); // d2V/dydz
00499
00500 box->b[56+i0] = dscales[0] * dscales[1] * dscales[2] // d3V/dxdydz
00501 * (grid[ind2 + dk_hi[0] + dk_hi[1] + dk_hi[2]] - grid[ind2 + dk_hi[0]+ dk_hi[1] - dk_lo[2]]
00502 - grid[ind2 + dk_hi[0] - dk_lo[1] + dk_hi[2]] - grid[ind2 - dk_lo[0] + dk_hi[1] + dk_hi[2]]
00503 + grid[ind2 + dk_hi[0] - dk_lo[1] - dk_lo[2]] + grid[ind2 - dk_lo[0] + dk_hi[1] - dk_lo[2]]
00504 + grid[ind2 - dk_lo[0] - dk_lo[1] + dk_hi[2]] - grid[ind2 - dk_lo[0] - dk_lo[1] - dk_lo[2]]);
00505 }
00506
00507 DebugM(2, "V = " << box->b[i0] << "\n");
00508
00509 DebugM(2, "dV/dx = " << box->b[8+i0] << "\n");
00510 DebugM(2, "dV/dy = " << box->b[16+i0] << "\n");
00511 DebugM(2, "dV/dz = " << box->b[24+i0] << "\n");
00512
00513 DebugM(2, "d2V/dxdy = " << box->b[32+i0] << "\n");
00514 DebugM(2, "d2V/dxdz = " << box->b[40+i0] << "\n");
00515 DebugM(2, "d2V/dydz = " << box->b[48+i0] << "\n");
00516
00517 DebugM(2, "d3V/dxdydz = " << box->b[56+i0] << "\n" << endi);
00518 }
00519
00520 return 0;
00521 }
|
|
|
Definition at line 43 of file GridForceGrid.h. References Position. Referenced by ComputeGridForce::doForce(). 00043 { return center; }
|
|
|
Definition at line 44 of file GridForceGrid.h. Referenced by ComputeGridForce::doForce(). 00044 { return inv; }
|
|
||||||||||||
|
Definition at line 111 of file GridForceGrid.C. References Lattice::a(), Lattice::b(), BigReal, Bool, Lattice::c(), DebugM, endi(), Fopen(), SimParameters::gridforceContA1, SimParameters::gridforceContA2, SimParameters::gridforceContA3, SimParameters::gridforceVOffset, SimParameters::gridforceVolts, iout, iWARN(), SimParameters::lattice, Vector::length(), NAMD_die(), Position, simParams, Vector::x, Tensor::xx, Tensor::xy, Tensor::xz, Vector::y, Tensor::yx, Tensor::yy, Tensor::yz, Vector::z, Tensor::zx, Tensor::zy, and Tensor::zz. Referenced by Molecule::build_gridforce_params(). 00112 {
00113 FILE *poten = Fopen(potfilename, "r");
00114 if (!poten) {
00115 NAMD_die("Problem reading grid force potential file");
00116 }
00117
00118 char line[256];
00119 do {
00120 fgets(line, 256, poten); // Read comment lines
00121 } while (line[0] == '#');
00122
00123 int k_nopad[3];
00124 sscanf(line, "object 1 class gridpositions counts %d %d %d\n", &k_nopad[0], &k_nopad[1], &k_nopad[2]);
00125
00126 // Read origin
00127 fscanf(poten, "origin %lf %lf %lf\n", &origin.x, &origin.y, &origin.z);
00128
00129 // Read delta (unit vectors)
00130 // These are column vectors, so must fill gridfrcE tensor to reflect this
00131 fscanf(poten, "delta %lf %lf %lf\n", &e.xx, &e.yx, &e.zx);
00132 fscanf(poten, "delta %lf %lf %lf\n", &e.xy, &e.yy, &e.zy);
00133 fscanf(poten, "delta %lf %lf %lf\n", &e.xz, &e.yz, &e.zz);
00134
00135 center = origin + e * 0.5 * Position(k_nopad[0], k_nopad[1], k_nopad[2]);
00136
00137 BigReal tmp[3]; // Temporary storage
00138 fscanf(poten, "object 2 class gridconnections counts %lf %lf %lf\n", tmp, tmp+1, tmp+2);
00139 fscanf(poten, "object 3 class array type double rank 0 items %lf data follows\n", tmp);
00140
00141 // Calculate inverse tensor
00142 BigReal det;
00143 det = e.xx*(e.yy*e.zz - e.yz*e.zy) - e.xy*(e.yx*e.zz - e.yz*e.zx) + e.xz*(e.yx*e.zy - e.yy*e.zx);
00144 inv.xx = (e.yy*e.zz - e.yz*e.zy)/det;
00145 inv.xy = -(e.xy*e.zz - e.xz*e.zy)/det;
00146 inv.xz = (e.xy*e.yz - e.xz*e.yy)/det;
00147 inv.yx = -(e.yx*e.zz - e.yz*e.zx)/det;
00148 inv.yy = (e.xx*e.zz - e.xz*e.zx)/det;
00149 inv.yz = -(e.xx*e.yz - e.xz*e.yx)/det;
00150 inv.zx = (e.yx*e.zy - e.yy*e.zx)/det;
00151 inv.zy = -(e.xx*e.zy - e.xy*e.zx)/det;
00152 inv.zz = (e.xx*e.yy - e.xy*e.yx)/det;
00153
00154 // Allocate storage for potential
00155 int size_nopad = k_nopad[0] * k_nopad[1] * k_nopad[2];
00156 float *grid_nopad = new float[size_nopad];
00157
00158 float factor;
00159 if (simParams->gridforceVolts) {
00160 factor = 1.0/0.0434; // convert V -> kcal/mol*e
00161 } else {
00162 factor = 1.0;
00163 }
00164
00165 float tmp2;
00166 for (int count = 0; count < size_nopad; count++) {
00167 int err = fscanf(poten, "%f", &tmp2);
00168 if (err == EOF || err == 0) {
00169 NAMD_die("Grid force potential file incorrectly formatted");
00170 }
00171 grid_nopad[count] = tmp2 * factor;
00172 }
00173
00174 DebugM(4, "e = " << e << "\n" << endi);
00175 DebugM(4, "inv = " << inv << "\n" << endi);
00176
00177 int dk_nopad[3];
00178
00179 // Shortcuts for accessing 1-D array with four indices
00180 dk_nopad[0] = k_nopad[1] * k_nopad[2];
00181 dk_nopad[1] = k_nopad[2];
00182 dk_nopad[2] = 1;
00183
00184 // PARAMETERS which probably ought to be somewhere else
00185 BigReal modThresh = 1.0;
00186
00187 Vector Kvec[3];
00188 Kvec[0] = e * Position(k_nopad[0]-1, 0, 0);
00189 Kvec[1] = e * Position(0, k_nopad[1]-1, 0);
00190 Kvec[2] = e * Position(0, 0, k_nopad[2]-1);
00191 Vector Avec[3];
00192 Avec[0] = simParams->lattice.a();
00193 Avec[1] = simParams->lattice.b();
00194 Avec[2] = simParams->lattice.c();
00195
00196 // Decide whether we're wrapping
00197 Bool gridforceCont[3];
00198 gridforceCont[0] = simParams->gridforceContA1;
00199 gridforceCont[1] = simParams->gridforceContA2;
00200 gridforceCont[2] = simParams->gridforceContA3;
00201
00202 for (int i0 = 0; i0 < 3; i0++) {
00203 if (gridforceCont[i0]) {
00204 Bool found = FALSE;
00205 for (int i1 = 0; i1 < 3; i1++) {
00206 if (cross(Avec[i0].unit(), Kvec[i1].unit()).length() < 1e-4) {
00207 found = TRUE;
00208 cont[i1] = TRUE;
00209 offset[i1] = simParams->gridforceVOffset[i0] * factor;
00210 gap[i1] = (inv * (Avec[i0] - Kvec[i1])).length(); // want in grid-point units (normal = 1)
00211 gapinv[i1] = 1.0/gap[i1];
00212
00213 if (gap[i1] < 0) {
00214 NAMD_die("Gridforce Grid overlap!");
00215 }
00216
00217 DebugM(4, "cont[" << i1 << "] = " << cont[i1] << "\n" << endi);
00218 DebugM(4, "gap[" << i1 << "] = " << gap[i1] << "\n" << endi);
00219 }
00220 }
00221
00222 if (!found) {
00223 NAMD_die("No Gridforce unit vector found parallel to requested continuous grid direction!");
00224 }
00225 }
00226 else {
00227 // TO DO: must check for grid overlap in non-wrapping
00228 // dimensions taking non-orthogonal unit vectors into
00229 // consideration
00230 }
00231 }
00232
00233 // Figure out size of true grid (padded on non-periodic sides)
00234 Vector delta = 0;
00235 for (int i = 0; i < 3; i++) {
00236 if (cont[i]) {
00237 k[i] = k_nopad[i];
00238 } else {
00239 k[i] = k_nopad[i] + 2*border;
00240 delta[i] -= border;
00241 }
00242 }
00243 DebugM(4, "delta = " << e * delta << " (" << delta << ")\n");
00244 origin += e * delta;
00245
00246 size = k[0] * k[1] * k[2];
00247 dk[0] = k[1] * k[2];
00248 dk[1] = k[2];
00249 dk[2] = 1;
00250
00251 grid = new float[size];
00252
00253 // Fill in most of new grid (all except pad areas)
00254 BigReal n_sum[3] = {0, 0, 0};
00255 BigReal p_sum[3] = {0, 0, 0};
00256 for (int i0 = 0; i0 < k_nopad[0]; i0++) {
00257 for (int i1 = 0; i1 < k_nopad[1]; i1++) {
00258 for (int i2 = 0; i2 < k_nopad[2]; i2++) {
00259 // Edges are special cases -- take force there to be
00260 // zero for smooth transition across potential
00261 // boundary
00262
00263 int ind_nopad = i0*dk_nopad[0] + i1*dk_nopad[1] + i2*dk_nopad[2];
00264 int j0 = (cont[0]) ? i0 : i0 + border;
00265 int j1 = (cont[1]) ? i1 : i1 + border;
00266 int j2 = (cont[2]) ? i2 : i2 + border;
00267 int ind = j0*dk[0] + j1*dk[1] + j2*dk[2];
00268
00269 if (i0 == 0) n_sum[0] += grid_nopad[ind_nopad];
00270 else if (i0 == k_nopad[0]-1) p_sum[0] += grid_nopad[ind_nopad];
00271 if (i1 == 0) n_sum[1] += grid_nopad[ind_nopad];
00272 else if (i1 == k_nopad[1]-1) p_sum[1] += grid_nopad[ind_nopad];
00273 if (i2 == 0) n_sum[2] += grid_nopad[ind_nopad];
00274 else if (i2 == k_nopad[2]-1) p_sum[2] += grid_nopad[ind_nopad];
00275
00276 grid[ind] = grid_nopad[ind_nopad];
00277 }
00278 }
00279 }
00280
00281
00282 BigReal n_avg[3], p_avg[3];
00283 for (int i0 = 0; i0 < 3; i0++) {
00284 int i1 = (i0 + 1) % 3;
00285 int i2 = (i0 + 2) % 3;
00286 n_avg[i0] = n_sum[i0] / (k_nopad[i1] * k_nopad[i2]);
00287 p_avg[i0] = p_sum[i0] / (k_nopad[i1] * k_nopad[i2]);
00288
00289 if (cont[i0] && fabs(offset[i0] - (p_avg[i0]-n_avg[i0])) > modThresh) {
00290 iout << iWARN << "GRID FORCE POTENTIAL DIFFERENCE IN K" << i0
00291 << " DIRECTION IS " << offset[i0] - (p_avg[i0]-n_avg[i0]) << " KCAL/MOL*E\n" << endi;
00292 }
00293 DebugM(4, "n_avg[" << i0 << "] = " << n_avg[i0] << "\n" << endi);
00294 DebugM(4, "p_avg[" << i0 << "] = " << p_avg[i0] << "\n" << endi);
00295 }
00296
00297
00298 Bool twoPadVals = (cont[0] + cont[1] + cont[2] == 2);
00299 float padVal = 0.0;
00300 int weight = 0;
00301 if (!twoPadVals) {
00302 // Determine pad value (must average)
00303 if (!cont[0]) {
00304 padVal += p_sum[0] + n_sum[0];
00305 weight += 2 * k_nopad[1] * k_nopad[2];
00306 }
00307 if (!cont[1]) {
00308 padVal += p_sum[1] + n_sum[1];
00309 weight += 2 * k_nopad[0] * k_nopad[2];
00310 }
00311 if (!cont[2]) {
00312 padVal += p_sum[2] + n_sum[2];
00313 weight += 2 * k_nopad[0] * k_nopad[1];
00314 }
00315 padVal /= weight;
00316 }
00317
00318 for (int i = 0; i < 3; i++) {
00319 pad_n[i] = (cont[i]) ? 0.0 : (twoPadVals) ? n_avg[i] : padVal;
00320 pad_p[i] = (cont[i]) ? 0.0 : (twoPadVals) ? p_avg[i] : padVal;
00321 DebugM(4, "pad_n[" << i << "] = " << pad_n[i] << "\n" << endi);
00322 DebugM(4, "pad_p[" << i << "] = " << pad_p[i] << "\n" << endi);
00323 }
00324
00325 if (cont[0] && cont[1] && cont[2]) {
00326 // Nothing to do
00327 return;
00328 }
00329
00330 // Now fill in rest of new grid
00331 for (int i0 = 0; i0 < k[0]; i0++) {
00332 for (int i1 = 0; i1 < k[1]; i1++) {
00333 for (int i2 = 0; i2 < k[2]; i2++) {
00334 if ( (cont[0] || (i0 >= border && i0 < k[0]-border)) &&
00335 (cont[1] || (i1 >= border && i1 < k[1]-border)) &&
00336 (cont[2] || i2 == border) )
00337 {
00338 i2 += k_nopad[2]-1;
00339 continue;
00340 }
00341
00342 int ind = i0*dk[0] + i1*dk[1] + i2*dk[2];
00343 Position pos = e * Position(i0, i1, i2);
00344 int var[3] = {i0, i1, i2};
00345
00346 for (int dir = 0; dir < 3; dir++) {
00347 if (cont[dir]) continue;
00348
00349 if (var[dir] < border)
00350 grid[ind] = pad_n[dir];
00351 else if (var[dir] >= k[dir]-border)
00352 grid[ind] = pad_p[dir];
00353 }
00354
00355 DebugM(2, "grid[" << ind << "; " << i0 << ", " << i1 << ", " << i2 << "] = " << grid[ind] << "\n" << endi);
00356 }
00357 }
00358 }
00359
00360 // Finally, clean up our garbage
00361 delete [] grid_nopad;
00362 }
|
|
|
Definition at line 47 of file GridForceGrid.C. References Bool, DebugM, endi(), and MOStream::put(). Referenced by Molecule::send_Molecule(). 00048 {
00049 DebugM(2, "Packing message\n" << endi);
00050
00051 msg->put(3*sizeof(int), (char*)k);
00052 msg->put(size);
00053 msg->put(3*sizeof(int), (char*)dk);
00054
00055 msg->put(sizeof(Vector), (char*)&origin);
00056 msg->put(sizeof(Vector), (char*)¢er);
00057 msg->put(sizeof(Tensor), (char*)&e);
00058 msg->put(sizeof(Tensor), (char*)&inv);
00059
00060 msg->put(3*sizeof(float), (char*)pad_p);
00061 msg->put(3*sizeof(float), (char*)pad_n);
00062 msg->put(3*sizeof(Bool), (char*)cont);
00063 msg->put(3*sizeof(float), (char*)offset);
00064 msg->put(3*sizeof(float), (char*)gap);
00065 msg->put(3*sizeof(float), (char*)gapinv);
00066
00067 msg->put(size*sizeof(float), (char*)grid);
00068 }
|
|
|
Definition at line 70 of file GridForceGrid.C. References Bool, DebugM, endi(), and MIStream::get(). Referenced by Molecule::receive_Molecule(). 00071 {
00072 DebugM(2, "Unpacking message\n" << endi);
00073
00074 msg->get(3*sizeof(int), (char*)k);
00075 msg->get(size);
00076 msg->get(3*sizeof(int), (char*)dk);
00077
00078 msg->get(sizeof(Vector), (char*)&origin);
00079 msg->get(sizeof(Vector), (char*)¢er);
00080 msg->get(sizeof(Tensor), (char*)&e);
00081 msg->get(sizeof(Tensor), (char*)&inv);
00082
00083 msg->get(3*sizeof(float), (char*)pad_p);
00084 msg->get(3*sizeof(float), (char*)pad_n);
00085 msg->get(3*sizeof(Bool), (char*)cont);
00086 msg->get(3*sizeof(float), (char*)offset);
00087 msg->get(3*sizeof(float), (char*)gap);
00088 msg->get(3*sizeof(float), (char*)gapinv);
00089
00090 if (size) {
00091 delete [] grid;
00092 grid = new float[size];
00093 msg->get(size*sizeof(float), (char*)grid);
00094 }
00095
00096 // DebugM(2, "grid[0] = " << grid[0] << "\n");
00097 // DebugM(2, "k = " << k[0] << " " << k[1] << " " << k[2] << "\n");
00098 // DebugM(2, "size = " << size << "\n");
00099 // DebugM(2, "dk = " << dk[0] << " " << dk[1] << " " << dk[2] << "\n");
00100 // DebugM(2, "origin = " << origin << "\n");
00101 // DebugM(2, "center = " << center << "\n");
00102 // DebugM(2, "e = " << e << "\n");
00103 // DebugM(2, "inv = " << inv << "\n");
00104 // DebugM(2, "pad_p = " << pad_p[0] << " " << pad_p[1] << " " << pad_p[2] << "\n");
00105 // DebugM(2, "pad_n = " << pad_n[0] << " " << pad_n[1] << " " << pad_n[2] << "\n");
00106 // DebugM(2, "cont = " << cont[0] << " " << cont[1] << " " << cont[2] << "\n");
00107 // DebugM(2, "offset = " << offset[0] << " " << offset[1] << " " << offset[2] << "\n");
00108 // DebugM(2, "gap = " << gap[0] << " " << gap[1] << " " << gap[2] << endi << "\n");
00109 }
|
1.3.9.1