git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@12612 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
@ -1,3 +1,5 @@
|
||||
/// -*- c++ -*-
|
||||
|
||||
#include "colvarmodule.h"
|
||||
#include "colvarvalue.h"
|
||||
#include "colvar.h"
|
||||
@ -78,18 +80,14 @@ void colvar::cvc::debug_gradients (cvm::atom_group &group)
|
||||
// this function should work for any scalar variable:
|
||||
// the only difference will be the name of the atom group (here, "group")
|
||||
|
||||
// collect into a vector for convenience
|
||||
std::vector<cvm::rvector> gradients (group.size());
|
||||
for (size_t i = 0; i < group.size(); i++) {
|
||||
gradients[i] = group[i].grad;
|
||||
}
|
||||
if (group.b_dummy) return;
|
||||
|
||||
cvm::rotation const rot_0 = group.rot;
|
||||
cvm::rotation const rot_inv = group.rot.inverse();
|
||||
|
||||
cvm::real const x_0 = x.real_value;
|
||||
|
||||
cvm::log ("gradients = "+cvm::to_str (gradients)+"\n");
|
||||
// cvm::log ("gradients = "+cvm::to_str (gradients)+"\n");
|
||||
|
||||
// it only makes sense to debug the fit gradients
|
||||
// when the fitting group is the same as this group
|
||||
@ -131,7 +129,8 @@ void colvar::cvc::debug_gradients (cvm::atom_group &group)
|
||||
cvm::log ("Atom "+cvm::to_str (ia)+", component "+cvm::to_str (id)+":\n");
|
||||
cvm::log ("dx(actual) = "+cvm::to_str (x_1 - x_0,
|
||||
21, 14)+"\n");
|
||||
cvm::real const dx_pred = (group.fit_gradients.size() && (group.ref_pos_group == NULL)) ?
|
||||
//cvm::real const dx_pred = (group.fit_gradients.size() && (group.ref_pos_group == NULL)) ?
|
||||
cvm::real const dx_pred = (group.fit_gradients.size()) ?
|
||||
(cvm::debug_gradients_step_size * (atom_grad[id] + group.fit_gradients[ia][id])) :
|
||||
(cvm::debug_gradients_step_size * atom_grad[id]);
|
||||
cvm::log ("dx(interp) = "+cvm::to_str (dx_pred,
|
||||
@ -141,7 +140,45 @@ void colvar::cvc::debug_gradients (cvm::atom_group &group)
|
||||
std::fabs (x_1 - x_0),
|
||||
12, 5)+
|
||||
".\n");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The code below is WIP
|
||||
*/
|
||||
// if (group.ref_pos_group != NULL) {
|
||||
// cvm::atom_group &ref = *group.ref_pos_group;
|
||||
// group.calc_fit_gradients();
|
||||
//
|
||||
// for (size_t ia = 0; ia < ref.size(); ia++) {
|
||||
//
|
||||
// for (size_t id = 0; id < 3; id++) {
|
||||
// // (re)read original positions
|
||||
// group.read_positions();
|
||||
// ref.read_positions();
|
||||
// // change one coordinate
|
||||
// ref[ia].pos[id] += cvm::debug_gradients_step_size;
|
||||
// group.calc_apply_roto_translation();
|
||||
// calc_value();
|
||||
// cvm::real const x_1 = x.real_value;
|
||||
// cvm::log ("refPosGroup atom "+cvm::to_str (ia)+", component "+cvm::to_str (id)+":\n");
|
||||
// cvm::log ("dx(actual) = "+cvm::to_str (x_1 - x_0,
|
||||
// 21, 14)+"\n");
|
||||
// //cvm::real const dx_pred = (group.fit_gradients.size() && (group.ref_pos_group == NULL)) ?
|
||||
// // cvm::real const dx_pred = (group.fit_gradients.size()) ?
|
||||
// // (cvm::debug_gradients_step_size * (atom_grad[id] + group.fit_gradients[ia][id])) :
|
||||
// // (cvm::debug_gradients_step_size * atom_grad[id]);
|
||||
// cvm::real const dx_pred = cvm::debug_gradients_step_size * ref.fit_gradients[ia][id];
|
||||
// cvm::log ("dx(interp) = "+cvm::to_str (dx_pred,
|
||||
// 21, 14)+"\n");
|
||||
// cvm::log ("|dx(actual) - dx(interp)|/|dx(actual)| = "+
|
||||
// cvm::to_str (std::fabs (x_1 - x_0 - dx_pred) /
|
||||
// std::fabs (x_1 - x_0),
|
||||
// 12, 5)+
|
||||
// ".\n");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user