double SpinAdapted::det_energy (const Slater& s) { // energy of a single slater determinant, used in truncation double energy = 0; Slater bra; Slater ket; for (int i = 0; i < s.size (); ++i) { ket = s; bra = s; energy += ket.trace (bra.d(i).c(i)) * v_1 (i,i); } // diagonal for (int i = 0; i < s.size (); ++i) for (int j = 0; j < s.size (); ++j) { ket = s; bra = s; energy += .5 * ket.trace (bra.d(j).d(i).c(j).c(i)) * (v_2 (i,j,j,i) - v_2 (i,j,i,j)); } return energy; }
char *mychar(int *iactuel, int chainei, char **tab, t_var2 *var2) { int i; int v; v = 0; i = 0; while (var2->tetri < var2->nbt) { v = backtrack(iactuel, tab, var2); if (v == 1) { var2->tetri++; if (var2->tetri < var2->nbt) { var2->carac++; iactuel[var2->tetri] = 0; chainei = 0; } } else if (v == 0) v_0(var2, iactuel); else if (v == 2) v_2(var2, iactuel); } return (var2->chaine); }
float Shape::avgEdgeLength() { float total_length = 0.0; for (int i = 0; i < face_list.size() / 3; ++i) { int v[3] = { face_list[3 * i + 0], face_list[3 * i + 1], face_list[3 * i + 2] }; Vector3f v_0(vertex_list[3 * v[0] + 0], vertex_list[3 * v[0] + 1], vertex_list[3 * v[0] + 2]); Vector3f v_1(vertex_list[3 * v[1] + 0], vertex_list[3 * v[1] + 1], vertex_list[3 * v[1] + 2]); Vector3f v_2(vertex_list[3 * v[2] + 0], vertex_list[3 * v[2] + 1], vertex_list[3 * v[2] + 2]); total_length += (v_0 - v_1).norm() + (v_1 - v_2).norm() + (v_2 - v_0).norm(); } return total_length / face_list.size(); }