24 gpr::InputParameters p;
55 p.check_derivative.value =
71 p.debug_output_file_R.value =
73 p.debug_output_file_E.value =
75 p.debug_output_file_G.value =
77 p.debug_output_file_extension.value =
79 p.debug_offset_from_mid_point.value =
101 gpr::AtomsConfiguration atoms_config;
102 aux::ProblemSetUp problem_setup;
103 gpr::Index_t number_of_mov_atoms;
104 gpr::Index_t number_of_fro_atoms;
105 std::set<int> unique_atomtypes;
107 std::vector<int> atomnrs;
108 std::unordered_map<int, int>
114 atoms_config.clear();
117 copyAtomMatrixToCoord(matter->
getPositions(), atoms_config.positions);
119 atoms_config.is_frozen.resize(1, nAtoms);
120 atoms_config.id.resize(1, nAtoms);
121 atoms_config.atomicNrs.resize(1, nAtoms);
122 for (
auto i = 0; i < nAtoms; i++) {
125 atoms_config.atomicNrs(0, i) = matter->
getAtomicNr(i);
126 atoms_config.is_frozen(0, i) =
127 matter->
getFixed(i) ? FROZEN_ATOM : MOVING_ATOM;
128 atoms_config.id(0, i) =
static_cast<gpr::Index_t
>(i + 1);
131 unique_atomtypes = std::set<int>(atomnrs.begin(), atomnrs.end());
132 n_at = unique_atomtypes.size();
134 for (
auto uatom : unique_atomtypes) {
135 atype_to_gprd_atype.insert(
136 std::pair<int, int>(
static_cast<int>(uatom), fake_atype));
140 number_of_mov_atoms = atoms_config.countMovingAtoms();
141 number_of_fro_atoms =
142 static_cast<gpr::Index_t
>(atoms_config.is_frozen.size()) -
145 if (number_of_fro_atoms > 0 && number_of_mov_atoms > 0) {
147 atoms_config.atoms_mov.resize(number_of_mov_atoms);
148 atoms_config.atoms_froz_inactive.resize(number_of_fro_atoms);
154 if (atype_to_gprd_atype.size() > 1) {
156 int froz_inactive_counter = 0;
157 for (
auto i = 0; i < nAtoms; i++) {
161 atoms_config.atoms_froz_inactive.type(0, froz_inactive_counter) =
162 atype_to_gprd_atype.at(atomnrs[i]);
163 froz_inactive_counter++;
166 atoms_config.atoms_mov.type(0, mov_counter) =
167 atype_to_gprd_atype.at(atomnrs[i]);
174 else if (atype_to_gprd_atype.size() == 1) {
175 atoms_config.atoms_mov.type.setConstant(
176 atype_to_gprd_atype.at(atomnrs[0]));
177 atoms_config.atoms_froz_inactive.type.setConstant(
178 atype_to_gprd_atype.at(atomnrs[0]));
181 gpr::Index_t counter_f = 0, counter_m = 0;
182 for (gpr::Index_t n = 0;
183 n < static_cast<gpr::Index_t>(atoms_config.is_frozen.size()); ++n) {
184 if (atoms_config.is_frozen(0, n) == MOVING_ATOM)
185 gpr::coord::set(atoms_config.atoms_mov.positions, 0, counter_m++,
186 gpr::coord::at(atoms_config.positions, n));
188 gpr::coord::set(atoms_config.atoms_froz_inactive.positions, 0,
189 counter_f++, gpr::coord::at(atoms_config.positions, n));
193 if (number_of_mov_atoms == 0) {
197 " You need to have atoms move!!!\nIn stillness there is only "
203 atoms_config.atoms_mov.resize(number_of_mov_atoms);
206 if (atype_to_gprd_atype.size() > 1) {
208 for (
auto i = 0; i < nAtoms; i++) {
209 atoms_config.atoms_mov.type(0, mov_counter) =
210 atype_to_gprd_atype.at(atomnrs[i]);
216 else if (atype_to_gprd_atype.size() == 1) {
217 atoms_config.atoms_mov.type.setConstant(
218 atype_to_gprd_atype.at(atomnrs[0]));
224 atoms_config.pairtype.resize(n_at, n_at);
225 atoms_config.pairtype.setConstant(EMPTY);
229 problem_setup.setPairtypeForMovingAtoms(
230 atoms_config.atoms_mov.type, atoms_config.n_pt, atoms_config.pairtype);