Advertisement
Guest User

Untitled

a guest
May 27th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. //Выполняем рассчеты согласно ЛР1 (К остальным ЛР комментарии аналогичные)
  2. void IsingModel::findNewConfigLR1(int steps) //кол-во шагов задается при вызове функции
  3.                                              //По заданию это 100*N, где N = m_size*m_size
  4. {
  5.     emit clearChart();
  6.     for (int i = 0; i < steps; i++)
  7.     {
  8.         if (!m_started) //нужно для прерывания потока
  9.             break;
  10.         //Генерируем случайные координаты
  11.         int n = rand()%m_size;
  12.         int m = rand()%m_size;
  13.  
  14.         //Запоминаем текущую конфигурацию и энергию
  15.         QVector<QVector<int>> tmpSpins(m_spins);
  16.         int tmpEnergy = m_energy;
  17.  
  18.         //Переворачиваем Спин
  19.         spinAt(n, m) *= -1;
  20.         //Считаем энергию
  21.         updateEnergy();
  22.         //Если новая энергия меньше старой, оставляем текущую конфигурацию
  23.         //и переходим к следующей иттерации
  24.         if (m_energy < tmpEnergy)
  25.         {
  26.             //Передаем сигнал о выводе конфигурации на экран каждые N шагов
  27.             if (i%(m_size*m_size) == 0)
  28.             {
  29.                 emit drawMatrix(m_spins);
  30.             }
  31.             //Отсылаем сигнал с текущей энергией и Средней энергией на один спин
  32.             emit sendEnergy(m_energy, avgEnergy());
  33.             //qDebug() << m_energy;
  34.             continue;
  35.         }
  36.         //Иначе возвращаем старую конфигурацию и энергию
  37.         else
  38.         {
  39.             m_spins = tmpSpins;
  40.             m_energy = tmpEnergy;
  41.         }
  42.         //Передаем сигнал о выводе конфигурации на экран каждые N шагов
  43.         if (i%(m_size*m_size) == 0)
  44.         {
  45.             emit drawMatrix(m_spins);
  46.         }
  47.     }
  48.     //Говорим потоку, что мы закончили выполнение функции
  49.     m_started = false;
  50.     emit finished();
  51.  
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement