Как объявить массив сложного типа в фортране 90

Мне нужна помощь для инициализации одномерного массива сложного типа в Fortran в Linux.

complex(kind=dp),dimension(8),public:: zc = (/(0.0_dp,0.0_dp) ,(-3.496991526333D001,0.0_dp) ,
( -3.944481647220D+000 , 0.0_dp ) , (-4.294180799072D+000 , 0.0_dp ) , 
(-4.294180799072D+000, -1.0_dp) , ( -3.944481647220D+000,-1.0_dp ) , 
(-3.496991526333D-           001,-1.0_dp ) , (0.0_dp,-1.0_dp)/) ! z computational 

Приведенное выше утверждение работает в Fortran Power Station (для Windows), но не в Linux. Выдает следующую ошибку

Missing ')' in statement at or before (1) 

ПРИМЕЧАНИЕ: «1» — это запятая, ч/б, 3-й и 4-й комплексные номера. Расширение программы .f90


person user3763284    schedule 21.06.2014    source источник
comment
В каком компиляторе на линуксе? Что это за исходная форма? На каком столбце он начинается?   -  person Vladimir F    schedule 21.06.2014
comment
@VladimirF, большое спасибо. Код работал с использованием амперсандов. Из расширения я мог сделать вывод, что использовал свободную форму (.f90) . Но если я оставлял пробел между открывающей скобкой и косой чертой, это давало ошибку компиляции. Так что места тоже важны. Я поставил амперсанд после каждого комплексного числа, а затем продолжил на новой строке. Еще раз спасибо   -  person user3763284    schedule 22.06.2014


Ответы (1)


Вы должны использовать правильный способ продолжения линий. Если вы используете фиксированную форму (обычно .f,.form), поместите любой символ в шестой столбец новой строки, а затем ваше утверждение. Вы, вероятно, используете это, иначе -3.496991526333D- 001 не сработает, потому что пробелы важны в свободной форме. Но ! обозначает комментарии в свободной форме. Если вы используете свободную форму, исправьте номер. Обязательно не переходите столбец 72 в фиксированной форме.

Например:

      complex(kind=dp),dimension(8),public:: zc = (/(0.0_dp,0.0_dp) ,(-3.496991526333D001,0.0_dp) ,
     *  ( -3.944481647220D+000 , 0.0_dp ) , (-4.294180799072D+000 , 0.0_dp ) , 
     *  (-4.294180799072D+000, -1.0_dp) , ( -3.944481647220D+000,-1.0_dp ) , 
     *  (-3.496991526333D-001,-1.0_dp ) , (0.0_dp,-1.0_dp)/) 
C z computational 

В свободной форме (обычно .f90) используйте & в конце строки, чтобы продолжить на следующей.

complex(kind=dp),dimension(8),public:: zc = (/(0.0_dp,0.0_dp) ,(-3.496991526333D001,0.0_dp) , &
( -3.944481647220D+000 , 0.0_dp ) , (-4.294180799072D+000 , 0.0_dp ) , &
(-4.294180799072D+000, -1.0_dp) , ( -3.944481647220D+000,-1.0_dp ) , &
(-3.496991526333D-001,-1.0_dp ) , (0.0_dp,-1.0_dp)/) !z computational

Вы должны прочитать больше о правильной исходной форме в любом учебнике по Fortran.

person Vladimir F    schedule 21.06.2014