Fortran - цикл do while

Рейтинг: 1Ответов: 2Опубликовано: 23.10.2014

Здравствуйте. В основной программе в этом примерном блоке не происходит перезаписывания ini, из-за этого вычисляется значение om_, например равное 0.4, и всё. Дальше программа оставляет исходный массив ini. Подскажите, пожалуйста, в чём может быть ошибка?

 ini = reshape(ini_st, forma)
 fin = reshape(fin_st, forma)
  do 652 while (om_ > 0.01)
   do i = 1, 3
   do k = 1, m
    vector (i,k) = fin(i,k)-ini(i,k)
   end do
   end do
...................................................
  om_ = sqrt(om(1)**2 + om(2)**2 + om(3)**2) !om зависят от ini
   do i = 1, 3
   do j= 1, m
  ini(i,j) = cos(om_)*ini(i,j) 
   end do
   end do
  652 continue

Ответы

▲ 1Принят

@Danaida, по крайней мере в приведенном коде массив om не меняется (хотя в комментарии указано, что зависит от ini), поэтому переменная om_ на всех итерациях остается постоянной.

Обновление

@Danaida, видимо, код (его много, и Вы его тут не написали), который должен менять om в соответствии с текущим состоянием ini, не работает должным образом.

Больше тут предположить нечего.

▲ 2

Когда я изучал фортран, а это было во времена Сулеймана ибн Давида (мир с ними обоими!), то согласно стандарту, первые буквы имен переменных определяли их тип.
Так, переменные, начинающиеся на i, j, k, l, m, n, o - считались целоисчесленными.
Попробуйте переменную om заменить на am, или bm, иначе говоря, первая буква не должна быть из перечня выше - тогда интерпретатор Фортран будет обрабатывать вашу переменную как вещественное число, а не целое.
Хвала Аллаху и его верному почитателю Аль-Хорезми!