Re: [Fortran] Как вытащить результаты?

nikkadim

Как записать в файл огромную матрицу, скажем 500 на 500? И чтобы она была именно матрицей со строками и столбцами. Как не пытаюсь, он всю её пишет в один столбец

ava3443

500 столбцов довольно неудобно на фортране выводить...
Покажи, как сейчас делаешь.

nikkadim

open(12,file='Data.dat', access='sequential')
do i=1, N
do s=1, M
write(12,10) U(i,s)
end do
end do
10 format (F10.7 )
close(12)

durka82

Попробуй поменять так:
open(12,file='Data.dat', access='sequential')
write(12,10) U
10 format (500F10.7 )
close(12)

ava3443

Прошу прощения, я всё-таки не знаю вариантов, как в фортране записать 500 столбцов, не передавая оператору write 500 аргументов.
Скорее всего на C написал бы процедуру для этого, и вызывал бы её из фортрана.

nikkadim

так вобще не компилирует

durka82

А ты колоры удалил?
Еще я F потерял - изменил пример - попробуй.
п.с.: и почему в режиме код нельзя цветовую раскраску делать - неудобно это

durka82

Вот эта строчка передает принту весь массив сразу (250000 эл-тов в данном примере):
write(12,10) U  
, который соответственно оператору формат:
10 format (500F10.7 ) 
выводится по 500 в каждой строке.
Если порядок вывода не устраивает, принту можно передать соотв перечисление или сечение

nikkadim

все в один столбец пишет

durka82

Поменяй в
10 format (500F10.7 )  
500 на 5.
Изменения есть?

nikkadim

Сорри, я попутал, все работает. Спасибо!

durka82

На здоровье
А вообще в хелпах по оператору format и по массивам много интересного есть
Кстати, уверен, что у тебя все числа впишутся в f10.7?

nikkadim

нет, не уверен. А как изменить расстояние между столбцами, а то числа большие получаются, друг другу мешают.

durka82

А как изменить расстояние между столбцами, а то числа большие получаются, друг другу мешают.
В смысле? Пример приведи.
Можно попробовать заменить на f20.10

nikkadim

Пример? Ну типа число занимает сколько-то позиций, а расстояние между столбцами меньше, вот они и перекрываться начинают
F20.10 то, что надо! Спасибо! Только вот что-то я не понимаю. Вроде это означает, что число состоит из 20 символов и из них 10 после запятой, так?

durka82

Они не должны перекрываться! Если число превышает формат - выдаются звездочки.
из 20 символов и из них 10 после запятой
Да.
F20.10 то, что надо
Только вот если числа маленькие - просветы между столбцами будут большие

nikkadim

Когда я написал, что они перекрываются, я и имел в виду эти звездочки. Все, вроде разобрался, нашел для себя оптимальный вариант : F4.2 Спасибо!

durka82

Можно сначала анализировать массив на максимальный по модулю элемент, а потом на основании этого делать шаблон.
Но если F4.2 всегда подходит - можно и не заморачиваться...

ava3443

> write(12,10) U
а что думает фортран 77 по поводу такой семантики? g77 например?

durka82

а что думает фортран 77 по поводу такой семантики
И кому это интересно?
Мб рассмотрим что-нибудь еще более древнее?
Я работаю с CVF 6.6 и IF 8.1 и использую все нужные мне возможности из них.
Не вижу смысла ограничивать себя старыми стандартами
Мне тут приходилось разбираться в прогах, "оптимизированных" под БЭСМ-6 - нафиг такое счастье

ava3443

> И кому это интересно?
> Мб рассмотрим что-нибудь еще более древнее?
Свободная реализация чего-то отличного от F77 только-только появилась (в GCC4). Надо смотреть. А пока её не было, писать что-либо серьёзное на F90/95 для меня было не практично.
Оставить комментарий
Имя или ник:
Комментарий: