Commit 89ecd5d9 authored by alxvov's avatar alxvov
Browse files

get rid off double loops in cg

parent cc698f0b
Loading
Loading
Loading
Loading
+11 −19
Changes for src/SPIN/min_spin_oso_cg.cpp: 11 added lines, 19 removed lines.
Original line number Diff line number Diff line
@@ -329,19 +329,15 @@ void MinSpinOSO_CG::calc_search_direction(int iter)
  // for some reason on a second iteration g_old = 0
  // so we make two iterations as steepest descent
  
  if (iter <= 2 || iter % 5 == 0){ 	// steepest descent direction
    for (int i = 0; i < nlocal; i++) {
      for (int j = 0; j < 3; j++){
          p_s[3 * i + j] = -g_cur[3 * i + j];
          g_old[3 * i + j] = g_cur[3 * i + j];
      }
  if (iter == 0 || iter % 5 == 0){ 	// steepest descent direction
    for (int i = 0; i < 3 * nlocal; i++) {
      p_s[i] = -g_cur[i];
      g_old[i] = g_cur[i];
    }
  } else { 				// conjugate direction
    for (int i = 0; i < nlocal; i++) {
      for (int j = 0; j < 3; j++){
	g2old += g_old[3 * i + j] * g_old[3 * i + j];
	g2 += g_cur[3 * i + j] * g_cur[3 * i + j];
      }
    for (int i = 0; i < 3 * nlocal; i++) {
  	  g2old += g_old[i] * g_old[i];
	  g2 += g_cur[i] * g_cur[i];
    }

    // now we need to collect/broadcast beta on this replica
@@ -355,11 +351,9 @@ void MinSpinOSO_CG::calc_search_direction(int iter)

    // calculate conjugate direction
    
    for (int i = 0; i < nlocal; i++) {
      for (int j = 0; j < 3; j++){
	p_s[3 * i + j] = beta * p_s[3 * i + j] - g_cur[3 * i + j];
	g_old[3 * i + j] = g_cur[3 * i + j];
      }
    for (int i = 0; i < 3 * nlocal; i++) {
  	  p_s[i] = beta * p_s[i] - g_cur[i];
	  g_old[i] = g_cur[i];
    }
  }
}
@@ -385,9 +379,7 @@ void MinSpinOSO_CG::advance_spins()
    // rotate spins
    
    vm3(rot_mat, sp[i], s_new);
    sp[i][0] = s_new[0];
    sp[i][1] = s_new[1];
    sp[i][2] = s_new[2];
    for (int j = 0; j < 3; j++) sp[i][j] = s_new[j];
  }
}