static void update_fragment(struct frag *frag) { /* update atoms */ for (size_t i = 0; i < frag->n_atoms; i++) efp_move_pt(CVEC(frag->x), &frag->rotmat, CVEC(frag->lib->atoms[i].x), VEC(frag->atoms[i].x)); efp_update_elec(frag); efp_update_pol(frag); efp_update_disp(frag); efp_update_xr(frag); }
void efp_update_pol(struct frag *frag) { for (size_t i = 0; i < frag->n_polarizable_pts; i++) { efp_move_pt(CVEC(frag->x), &frag->rotmat, CVEC(frag->lib->polarizable_pts[i].x), VEC(frag->polarizable_pts[i].x)); const mat_t *in = &frag->lib->polarizable_pts[i].tensor; mat_t *out = &frag->polarizable_pts[i].tensor; efp_rotate_t2(&frag->rotmat, (const double *)in, (double *)out); } }
void efp_update_disp(struct frag *frag) { for (size_t i = 0; i < frag->n_dynamic_polarizable_pts; i++) { const struct dynamic_polarizable_pt *pt_in = frag->lib->dynamic_polarizable_pts + i; struct dynamic_polarizable_pt *pt_out = frag->dynamic_polarizable_pts + i; efp_move_pt(CVEC(frag->x), &frag->rotmat, CVEC(pt_in->x), VEC(pt_out->x)); for (size_t j = 0; j < 12; j++) { const mat_t *in = pt_in->tensor + j; mat_t *out = pt_out->tensor + j; efp_rotate_t2(&frag->rotmat, (const double *)in, (double *)out); } } }