![]() |
|
![]() ![]() ![]() |
|
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Я тут прикинул одну програмку (в gfortran) - первый массив считывается корректно, а потом некорректно.
По-видимому неверно считывается число элементов в массиве. Надо еще подумать. Может "местные жители" что подскажут.
В Visual Fortran цикл можно записать как DO WHILE( EOF(11) ) при iflag не равном нулю, получаем INTEHEAD 10 INTE 2 1 3 6 30 12 2005 0 0 0 GEOMETRY 26460 DOUB - далее некорректно (fortran run time error - end of record ) Видимо число 26460 не соответствует реальности (хотя размер файла достаточен для такого массива) или, скорее всего, программа пока не соответствует ![]() PS/ при iflag = 0 INTEHEAD 10 INTE ... GEOMETRY 26460 DOUB ... GEOMINDX 238 INTE ... ID_BEG 237 INTE ... ID_END 237 INTE ... ID_CELL 8583 INTE ... TIME_BEG 8820 DOUB ... SWAT 8583 DOUB ... далее fortran run time error - end of file Это сообщение отредактировал(а) FCM - 2.9.2010, 08:56 |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Кажется нашел - в доках написано, что массивы разбиваются на блоки (записи?) по 1000 элементов (Numerical arrays are divided into blocks of up to 1000 items each.).
Подправил - проверьте (no warranty - до конца не уверен, надо ли неполную тысячу рассматривать как неполную (что реализовано ниже) или, все-таки, надо как полную)
Это сообщение отредактировал(а) FCM - 2.9.2010, 11:26 |
|||
|
||||
ertttttt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 31.8.2010 Репутация: нет Всего: нет |
FCM,
Огромная благодарность! С кодом буду разбираться. Работает. Только в конце оборвался. Пишет severe (24): end-of-file during read, unit 11, |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Так и должно быть - это недостаток приведенной программы.
Если пользуешься Visual Fortran, попробуй в самом внешнем цикле вместо DO записать DO WHILE (.NOT.EOF(11)) Это сообщение отредактировал(а) FCM - 4.9.2010, 15:07 |
|||
|
||||
ertttttt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 31.8.2010 Репутация: нет Всего: нет |
Какой тип данных использовать для имени файла? Как сделать, чтоб можно вводить имя файла?
WRITE(*,*) 'ENTER FILENAME' READ(*,*) FNAME Это сообщение отредактировал(а) ertttttt - 2.9.2010, 12:38 |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Удобно вводить только изменяющуюся часть имени - см http://forum.vingrad.ru/forum/topic-278045...0%BB%D0%B0.html Это сообщение отредактировал(а) FCM - 2.9.2010, 13:01 |
|||
|
||||
Mormishka |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Разобрался с этим.
Не получается работать с динамическим массивом GEOMETRY. Пишет: X= 0.000000000000000E+000 Y= 0.000000000000000E+000 Z= 0.000000000000000E+000 forrtl: severe (161): Program Exception - array bounds exceeded Image PC Routine Line Source Convert_plus_spec 00402590 MAIN 62 Convert_plus_spec.f9 0
Это сообщение отредактировал(а) Mormishka - 4.9.2010, 14:30 |
|||
|
||||
FCM |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
В приведенной диагностике указано на line 62 твоего листинга
CUBE(I,J,K)=1 По видимому в программе заложена ошибка с определеним I,J, K В чем вообще идея с этим CUBE. Зачем он вводится? В связи с CUBE там еще вводятя NX, DX и т.п. - они должны быть одинаковыми для любого считываемого файла или привязаны к конкретному файлу? Можно чуть улучшить начало программы: В данном конкретном случае вместо
можно написать
Это сообщение отредактировал(а) FCM - 4.9.2010, 17:49 |
||||
|
|||||
Mormishka |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
FCM,
NX, DX и т.п должны считываться с другого файла. Но это думаю сделать можно потом. Есть прямоугольная область с ортогональными координатами. Последовательность чисел после ключевого слова GEOMETRY это координаты линий тока записанные в последовательности x1,y1,z1,x2,y2,z2...xn,yn,zn. Есть сетка, т.е. вся облать разбита на ячейки размером dx,dy,dz кол-вом Nx,Ny,Nz. Мне надо сделать куб, т.е. трехмерный массив в котором содержится информация о том есть ли в заданной ячейки с координатами i,j,k cube(i,j,k) (0 - нет, 1 -есть) линия тока или нет.(пока я хочу сделать так, потом мне нужно будет разделять линии тока идущие от одной скважины к другой). В файл куб(массив) нужно записать построчно в обычный текстовый файл, т.е. a(1,1,1) a(2,1,1) ... a(nx,1,1) a(1,2,1) a(2,2,1) ... a(nx,2,1) ... a(1,ny,1) a(2,ny,1) ... a(nx,ny,1) ... a(1,ny,1) a(2,ny,1) ... a(nx,ny,1) ... al(nx,ny,1) a(nx,ny,2) ... a(nx,ny,nz) Так написано в мануале: Grid blocks are ordered with the X axis index cycling fastest, followed by the Y and Z axis indices. Я не понимаю только как переходить на новую строку. Это сообщение отредактировал(а) Mormishka - 4.9.2010, 16:30 |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
||||
|
||||
Mormishka |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
FCM,
всего ячеек Nx*Ny*Nx. Т.е. cube(Nx,Ny,Nz). dx,dy,dz это размер каждой ячейки. Т.е. есть как бы две системы координат: 1) ортогональная (x,y,z), где x,y,z вещественные 2) сетка, ячейки размером dx,dy,dz, координы (i,j,k), i,j,k-натуральные числа Проверить можно так, GEOMETRY это массив который содержит координаты линий тока, который считали с файла
Это сообщение отредактировал(а) Mormishka - 4.9.2010, 16:59 |
|||
|
||||
FCM |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Добавь отладочную печать - посмотри согласуются ли значения I,J,K и заявленные размеры CUBE
Из английской цитаты следует ли делать вывод, что в записи (строке) по NX чисел? Есть какие-нибудь дополнительные сведения? В Grid blocks - под blocks что понимается? Если предположить, что надо записывать по NX чисел в строке (записи), то попробуй (после того, как разберешься с третьим измерением в CUBE) так
где UNIT номер "устройства" вывода Это сообщение отредактировал(а) FCM - 5.9.2010, 20:37 |
||||||
|
|||||||
ertttttt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 31.8.2010 Репутация: нет Всего: нет |
Выдало такой результат: 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 0 1 1 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1 0 0 1 1 0 1 0 1 1 1 0 1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 1 1 1 1 0 0 0 1 Почему он оставляет пробелы? Как сделать, чтоб был только один пробел между цифрами? |
|||
|
||||
FCM |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Пробелы оставляет потому, что используются правила форматировани по умолчанию. Можно задать явно для каждого элемента I2, где 2 - кол-во позиций (одна под однозначное число, другая под пробел)
или I0,1X - где I0 автоматически подстроится под кол-во знаков в целом числе, а 1X - не что иное как 1 пробел.
(100 - задано с запасом (главное, чтобы было >= NX). В принципе можно и точно указать по кол-ву элементов: (в Visual Fortran вместо него можно попробовать вставить <NX>, т.е.
в других Фортранах сформировав соответствующую строку с впечатыванием в нее NX), но результативно это ничего не изменит.) Это сообщение отредактировал(а) FCM - 6.9.2010, 09:11 |
||||
|
|||||
ertttttt |
|
||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 31.8.2010 Репутация: нет Всего: нет |
FCM,
Помогло. Теперь немного улучшаю алгоритм создания массива cube.
Жалуется на "<>". Как будет "не равно"?
|
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Fortran | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |