Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Файл Fortran binary -> в ASCII? Чем конвертировать файл Fortran binary в 
:(
    Опции темы
FCM
Дата 2.9.2010, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Я тут прикинул одну програмку (в gfortran) -  первый массив считывается корректно, а потом некорректно.
По-видимому неверно считывается число элементов в массиве. Надо еще подумать. Может "местные жители" что подскажут.

Код

PROGRAM MAIN
  IMPLICIT NONE
  CHARACTER(8) :: CHNAME
  INTEGER(4) :: NUM, IFLAG
  CHARACTER(4) :: CHTYPE
  INTEGER(4), ALLOCATABLE  :: I_DATA(:)
  REAL(4),    ALLOCATABLE  :: R4_DATA(:)
  REAL(8),    ALLOCATABLE  :: R8_DATA(:)
  WRITE(*,*) 'ENTER IFLAG (0 - prikidka, 1 - final)'
  READ(*,*) IFLAG
  OPEN( 11, FILE="ECL_SAMPLE01.SLN0006", FORM="UNFORMATTED" ,  &
   CONVERT = "BIG_ENDIAN", ACTION = "READ")
  OPEN( 12, FILE="ECL_SAMPLE01.TXT", FORM="FORMATTED" )
  DO
     READ (11,ERR = 901)   CHNAME, NUM, CHTYPE
     WRITE(*,*)  CHNAME, NUM, CHTYPE
     WRITE(12,*) CHNAME, NUM, CHTYPE

     IF(IFLAG == 0)     CYCLE

     SELECT CASE (CHTYPE(1:1))
        CASE('I')
            ALLOCATE (I_DATA(NUM))
           READ(11, ERR = 901)   I_DATA
           WRITE(*,*) I_DATA
           WRITE(12,*) I_DATA
           DEALLOCATE(I_DATA)
        CASE('R')
            ALLOCATE (R4_DATA(NUM))
           READ(11,ERR = 901)   R4_DATA
           WRITE(*,*) R4_DATA
           WRITE(12,*) R4_DATA
           DEALLOCATE(R4_DATA)
        CASE('D')
           ALLOCATE (R8_DATA(NUM))
           READ(11,ERR = 901)   R8_DATA
           WRITE(*,*) R8_DATA
           WRITE(12,*) R8_DATA
           DEALLOCATE(R8_DATA)
     END SELECT

  ENDDO

901 CLOSE(11); CLOSE(12); WRITE(*,*) 'FILES HAVE BEEN CLOSED!'

END PROGRAM MAIN

 
В 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 не соответствует реальности (хотя размер файла достаточен для такого массива) или, скорее всего, программа пока не соответствует  smile /

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
PM MAIL   Вверх
FCM
Дата 2.9.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Кажется нашел - в доках написано, что массивы разбиваются на блоки (записи?) по 1000 элементов (Numerical arrays are divided into blocks of up to 1000 items each.).
Подправил - проверьте (no warranty - до конца не уверен, надо ли неполную тысячу рассматривать как неполную (что реализовано ниже) или, все-таки, надо как полную)
Код

PROGRAM MAIN           ! mingw-gfortran
  IMPLICIT NONE

  CHARACTER(8) :: CHNAME
  INTEGER(4) :: NUM, IFLAG, I
  CHARACTER(4) :: CHTYPE
  INTEGER(4), ALLOCATABLE  :: I_DATA(:)
  REAL(4),    ALLOCATABLE  :: R4_DATA(:)
  REAL(8),    ALLOCATABLE  :: R8_DATA(:)

  WRITE(*,*) 'ENTER IFLAG (0 - FIRST, 1 - FINAL)'
  READ(*,*) IFLAG
  OPEN( 11, FILE="ECL_SAMPLE01.SLN0006", FORM="UNFORMATTED" ,  &
                   CONVERT = "BIG_ENDIAN", ACTION = "READ")
  OPEN( 12, FILE="ECL_SAMPLE01.TXT", FORM="FORMATTED" )

  DO

     READ (11,ERR = 901)   CHNAME, NUM, CHTYPE
     WRITE(*,*)  CHNAME, NUM, CHTYPE
     WRITE(12,*) CHNAME, NUM, CHTYPE

     IF( IFLAG == 0 )     CYCLE

     IF( CHTYPE == 'INTE' )  THEN  !----------------------------------------
           ALLOCATE(  I_DATA(NUM)  )
           DO I = 1, NUM/1000 + 1
                IF ( I < NUM/1000 + 1 ) THEN
                    READ(11,ERR = 901)   I_DATA(1000*(I-1)+1 : 1000*I)
                    WRITE(*,*)  I_DATA(1000*(I-1)+1:1000*I)
                    WRITE(12,*) I_DATA(1000*(I-1)+1:1000*I)
                ELSE
                    READ(11,ERR = 901)   I_DATA(1000*(I-1)+1 : NUM)
                    WRITE(*,*)  I_DATA(1000*(I-1)+1 : NUM)
                    WRITE(12,*) I_DATA(1000*(I-1)+1 : NUM)
                ENDIF
           ENDDO
           DEALLOCATE( I_DATA )
     ELSE IF ( CHTYPE == 'REAL' )   THEN  !----------------------------------------
           ALLOCATE ( R4_DATA(NUM) )
           DO I = 1, NUM/1000 + 1
                IF ( I < NUM/1000 + 1) THEN
                    READ(11,ERR = 901)   R4_DATA(1000*(I-1)+1 : 1000*I)
                    WRITE(*,*)  R4_DATA(1000*(I-1)+1 : 1000*I)
                    WRITE(12,*) R4_DATA(1000*(I-1)+1 : 1000*I)
                ELSE
                    READ(11,ERR = 901)   R4_DATA(1000*(I-1)+1 : NUM)
                    WRITE(*,*)  R4_DATA(1000*(I-1)+1 : NUM)
                    WRITE(12,*) R4_DATA(1000*(I-1)+1 : NUM)
                ENDIF
           ENDDO
           DEALLOCATE( R4_DATA )
      ELSE IF ( CHTYPE == 'DOUB' )  THEN  !----------------------------------------
           ALLOCATE ( R8_DATA(NUM) )
           DO I = 1, NUM/1000 + 1
                IF ( I < NUM/1000 + 1 )  THEN
                    READ(11,ERR = 901)   R8_DATA(1000*(I-1)+1 : 1000*I)
                    WRITE(*,*)  R8_DATA(1000*(I-1)+1:1000*I)
                    WRITE(12,*) R8_DATA(1000*(I-1)+1:1000*I)
                ELSE
                    READ(11,ERR = 901)   R8_DATA(1000*(I-1)+1 : NUM)
                    WRITE(*,*)  R8_DATA(1000*(I-1)+1 : NUM)
                    WRITE(12,*) R8_DATA(1000*(I-1)+1 : NUM)
                ENDIF
           ENDDO
           DEALLOCATE (R8_DATA)
    ENDIF !----------------------------------------

  ENDDO

  901 CLOSE(11); CLOSE(12); WRITE(*,*) 'FILES HAVE BEEN CLOSED!'

END PROGRAM MAIN



Это сообщение отредактировал(а) FCM - 2.9.2010, 11:26
PM MAIL   Вверх
ertttttt
Дата 2.9.2010, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



FCM
Огромная благодарность! С кодом буду разбираться.
Работает. Только в конце оборвался. Пишет 
severe (24): end-of-file during read, unit 11,
PM MAIL   Вверх
FCM
Дата 2.9.2010, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Так и должно быть - это недостаток приведенной программы.
Если пользуешься Visual Fortran, попробуй в самом внешнем цикле вместо 
DO
записать 
DO WHILE (.NOT.EOF(11))


Это сообщение отредактировал(а) FCM - 4.9.2010, 15:07
PM MAIL   Вверх
ertttttt
Дата 2.9.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Какой тип данных использовать для имени файла? Как сделать, чтоб можно вводить имя файла?

WRITE(*,*) 'ENTER FILENAME'
 READ(*,*) FNAME

Это сообщение отредактировал(а) ertttttt - 2.9.2010, 12:38
PM MAIL   Вверх
FCM
Дата 2.9.2010, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Код

    CHARACTER(100) :: FNAME
    WRITE(*,*) 'ENTER FILENAME'
    READ(*,*) FNAME
    OPEN(11, FILE = TRIM(FNAME), ...)


Удобно вводить только изменяющуюся часть имени - см
http://forum.vingrad.ru/forum/topic-278045...0%BB%D0%B0.html

Это сообщение отредактировал(а) FCM - 2.9.2010, 13:01
PM MAIL   Вверх
Mormishka
Дата 4.9.2010, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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

Код

PROGRAM MAIN
  IMPLICIT NONE
  CHARACTER(8) :: CHNAME
  INTEGER(4) :: NUM, I,J,K,NX,NY,NZ,N,TEMP
  CHARACTER(4) :: CHTYPE
  REAL(8),    ALLOCATABLE  :: GEOMETRY(:)
  CHARACTER(50) :: FNAME
  
  REAL(8) :: DX,DY,DZ,X,Y,Z
  INTEGER(4) :: cube(1:10,1:10,1)
  NX=10
  NY=10
  NZ=1
  DX=100
  DY=100
  DZ=50
  
  DO I=1,NX
    DO J=1,NY
        DO K=1,NZ
            CUBE(I,J,K)=0
        ENDDO
    ENDDO
  ENDDO

  WRITE(*,*) 'ENTER FILENAME'
  READ(*,*) FNAME

  OPEN( 11, FILE=FNAME, FORM="UNFORMATTED" ,  &
                   CONVERT = "BIG_ENDIAN", ACTION = "READ")
  FNAME='CONVERTTED_'//FNAME
  OPEN( 12, FILE=FNAME, FORM="FORMATTED" )

DO WHILE (not (EOF(11)))
    READ (11,ERR = 901)   CHNAME, NUM, CHTYPE
    WRITE(*,*)  CHNAME, NUM, CHTYPE
    IF (CHNAME=='GEOMETRY') THEN 
        ALLOCATE ( GEOMETRY(NUM) )
        DO I = 1, NUM/1000 + 1
            IF ( I < NUM/1000 + 1 )  THEN
                READ(11,ERR = 901)   GEOMETRY(1000*(I-1)+1 : 1000*I)
                WRITE(*,*)  GEOMETRY(1000*(I-1)+1:1000*I)
                WRITE(12,*) GEOMETRY(1000*(I-1)+1:1000*I)
            ELSE
                READ(11,ERR = 901)   GEOMETRY(1000*(I-1)+1 : NUM)
                WRITE(*,*)  GEOMETRY(1000*(I-1)+1 : NUM)
                WRITE(12,*) GEOMETRY(1000*(I-1)+1 : NUM)
            ENDIF
        ENDDO
        PRINT *,'NUM=',NUM
        N=1
        DO 
            PRINT *,'X=',X
            PRINT *,'Y=',Y
            PRINT *,'Z=',Z
            X=GEOMETRY(N)
            Y=GEOMETRY(N+1)
            Z=GEOMETRY(N+2)
            I=X/DX+1
            J=Y/DY+1
            K=Z/DZ+1
            CUBE(I,J,K)=1
            N=N+3
            IF (N>=NUM) EXIT
        ENDDO
        DO I=1,NX
            DO J=1,NY
                DO K=1,NZ
                    PRINT *,CUBE(I,J,K)
                ENDDO
            ENDDO
            PRINT *,'\'
       ENDDO
       DEALLOCATE (GEOMETRY)
    ENDIF   
     

ENDDO

  901 CLOSE(11); CLOSE(12); WRITE(*,*) 'FILES HAVE BEEN CLOSED!'

END PROGRAM MAIN



Это сообщение отредактировал(а) Mormishka - 4.9.2010, 14:30
PM MAIL   Вверх
FCM
Дата 4.9.2010, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



В приведенной диагностике указано на line 62 твоего листинга 
CUBE(I,J,K)=1
По видимому в программе заложена ошибка с определеним I,J, K 

В чем вообще идея с этим CUBE. Зачем он вводится?
В связи с CUBE там еще вводятя NX, DX и т.п. - они должны быть одинаковыми для любого считываемого файла или привязаны к конкретному файлу?

Можно чуть улучшить начало программы:
В данном конкретном случае вместо 
Код

INTEGER(4) :: NUM, I,J,K,NX,NY,NZ,N,TEMP
 
  REAL(8) :: DX,DY,DZ,X,Y,Z
  INTEGER(4) :: cube(1:10,1:10,1)
  NX=10
  NY=10
  NZ=1
  DX=100
  DY=100
  DZ=50

  DO I=1,NX
    DO J=1,NY
        DO K=1,NZ
            CUBE(I,J,K)=0
        ENDDO
    ENDDO
  ENDDO


можно написать

Код

  INTEGER(4), PARAMETER :: NX = 10, NY = 10, NZ =1
  REAL(8) :: DX = 100.d0, DY = 100.d0, DZ = 50.d0, X, Y, Z
  INTEGER(4) :: CUBE(NX,NY,NZ) = 0



Это сообщение отредактировал(а) FCM - 4.9.2010, 17:49
PM MAIL   Вверх
Mormishka
Дата 4.9.2010, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
FCM
Дата 4.9.2010, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Цитата(Mormishka @  4.9.2010,  16:17 Найти цитируемый пост)
на ячейки размером dx,dy,dz кол-вом Nx,Ny,Nz.

что то я пока  не понимаю  насчет размеров 100 100 50 и как они соотносятся с количеством элеиентов в CUBE.

Как ты проверяешь принадлежность ячейке?

Это сообщение отредактировал(а) FCM - 4.9.2010, 16:44
PM MAIL   Вверх
Mormishka
Дата 4.9.2010, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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 это массив который содержит координаты линий тока, который считали с файла 
Код

DO 
    X=GEOMETRY(N)
    Y=GEOMETRY(N+1)
    Z=GEOMETRY(N+2)
    I=X/DX+1
    J=Y/DY+1
    K=Z/DZ+1
    CUBE(I,J,K)=1
    N=N+3
    IF (N>=NUM) EXIT
ENDDO



Это сообщение отредактировал(а) Mormishka - 4.9.2010, 16:59
PM MAIL   Вверх
FCM
Дата 4.9.2010, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Добавь отладочную печать - посмотри согласуются ли значения I,J,и заявленные размеры CUBE

Код

        N=1
        DO  WHILE( N <= NUM-2 )
            X=GEOMETRY(N);    Y=GEOMETRY(N+1);  Z=GEOMETRY(N+2)
            I=X/DX+1;         J=Y/DY+1;         K=Z/DZ+1
            CUBE(I,J,K) = 1
         ! --------------------------------------------------------------------------
            WRITE(*,*) 'IJK = ',I,J,K, '  cube = ', CUBE(I,J,K)   ! отладочная печать
         ! --------------------------------------------------------------------------
            N=N+3
        ENDDO


Цитата

Так написано в мануале: Grid blocks are ordered with the X axis index cycling fastest, followed by the Y and Z axis indices.
Я не понимаю только как переходить на новую строку.


Из английской цитаты следует ли делать вывод, что в записи (строке) по NX чисел?
Есть какие-нибудь дополнительные сведения? В Grid blocks - под blocks что понимается?
Если предположить, что надо записывать по NX  чисел в строке (записи), то попробуй (после того, как разберешься с третьим измерением в CUBE) так
Код

        DO K=1,NZ
            DO J=1,NY
                    WRITE(UNIT,*)   ( CUBE(I,J,K), I=1,NX )
            ENDDO
        ENDDO

где UNIT номер "устройства"  вывода
 

Это сообщение отредактировал(а) FCM - 5.9.2010, 20:37
PM MAIL   Вверх
ertttttt
Дата 6.9.2010, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



Код

        DO K=1,NZ
            DO J=1,NY
                    WRITE(UNIT,*)   ( CUBE(I,J,K), I=1,NX )
            ENDDO
        ENDDO

Выдало такой результат:
           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
Почему он оставляет пробелы? Как сделать, чтоб был только один пробел между цифрами?
 
PM MAIL   Вверх
FCM
Дата 6.9.2010, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Пробелы оставляет потому, что используются правила форматировани по умолчанию. Можно задать явно для каждого элемента I2, где 2 - кол-во позиций (одна под однозначное число, другая под пробел)
или
I0,1X - где I0 автоматически подстроится под кол-во знаков в целом числе, а 1X - не что иное как 1 пробел.
Код

       DO K=1,NZ
            DO J=1,NY
                    WRITE( UNIT, '(100I2)' )   ( CUBE(I,J,K), I=1,NX )
                  ! или  WRITE( UNIT, '(100(I0,1X))' )   ( CUBE(I,J,K), I=1,NX )
            ENDDO
        ENDDO


(100 - задано с запасом (главное, чтобы было  >=  NX).
В принципе можно и точно указать по кол-ву элементов:
(в Visual Fortran вместо него можно попробовать вставить <NX>, т.е.
Код

    WRITE( UNIT, '(<NX>I2)' )   ( CUBE(I,J,K), I=1,NX )

в других Фортранах сформировав соответствующую строку с впечатыванием в нее NX),
но результативно это ничего не изменит.)

Это сообщение отредактировал(а) FCM - 6.9.2010, 09:11
PM MAIL   Вверх
ertttttt
Дата 6.9.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 31.8.2010

Репутация: нет
Всего: нет



FCM
Помогло.
Теперь немного улучшаю алгоритм создания массива cube. 
Код

IF ((MOD (X,DX)<>0) .AND. (MOD (Y,DY)<>0)) CUBE(I+1,J+1,K)=9
IF ((MOD (X,DX)==0).AND.(MOD (Y,DY)<>0)) THEN
CUBE(I+1,J,K)=9
CUBE(I,J,K)=9
ENDIF
IF ((MOD (X,DX)<>0).AND.(MOD (Y,DY)==0)) THEN
    CUBE(I,J+1,K)=9
    CUBE(I,J,K)=9
ENDIF
IF ((MOD (X,DX)==0).AND.(MOD (Y,DY)==0)) THEN
    CUBE(I,J+1,K)=9
    CUBE(I+1,J,K)=9
    CUBE(I,J,K)=9
    CUBE(I+1,J+1,K)=9
ENDIF


Жалуется на "<>". Как будет "не равно"?

Код

--------------------Configuration: Convert_plus_spec - Win32 Debug--------------------
Compiling Fortran...
C:\Program Files\Microsoft Visual Studio\MyProjects\Convert_plus_spec\Convert_plus_spec.f90
C:\Program Files\Microsoft Visual Studio\MyProjects\Convert_plus_spec\Convert_plus_spec.f90(63) : Error: Syntax error, found '>' when expecting one of: ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT
> ...
   IF ((MOD (X,DX)<>0) .AND. (MOD (Y,DY)<>0)) CUBE(I+1,J+1,K)=9
----------------------------------------^
C:\Program Files\Microsoft Visual Studio\MyProjects\Convert_plus_spec\Convert_plus_spec.f90(63) : Error: Syntax error, found '>' when expecting one of: ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT
> ...
   IF ((MOD (X,DX)<>0) .AND. (MOD (Y,DY)<>0)) CUBE(I+1,J+1,K)=9
--------------------------------------------------------------^
C:\Program Files\Microsoft Visual Studio\MyProjects\Convert_plus_spec\Convert_plus_spec.f90(64) : Error: Syntax error, found '>' when expecting one of: ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT
> ...
   IF ((MOD (X,DX)==0).AND.(MOD (Y,DY)<>0)) THEN
------------------------------------------------------------^
C:\Program Files\Microsoft Visual Studio\MyProjects\Convert_plus_spec\Convert_plus_spec.f90(68) : Error: Syntax error, found '>' when expecting one of: ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT
> ...
   IF ((MOD (X,DX)<>0).AND.(MOD (Y,DY)==0)) THEN
----------------------------------------^
Error executing df.exe.

Convert_plus_spec.exe - 4 error(s), 0 warning(s)


PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0859 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.