«Параметр типа kind должен быть константой времени компиляции». в Фортране 90 - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь ввести комплексный массив и переменные в Фортране. Для следующего кода

program 

   integer ::  i , j !two dimensional real array
   real(dp)  :: m1(3,2) 
   complex(dp) ::  a1(3,2),a2(3,2), c0, c1


   !assigning some values to the array numbers


   c0 = (1.0_dp, 0.0_dp)
   c1 = (0.000000001_dp, 0.0_dp)

   do i=1,3
      do j = 1, 2
         a1(i,j) = c0*i*j
      end do
   end do   

   do i=1,3
      do j = 1, 2
         a2(i,j) = c0*i*j + c1
      end do
   end do   

   do i=1,3
      do j = 1, 2
        if (dabs( dreal(a1(i,j)) - dreal(a2(i,j))) > 1.e-6 then
          write (*,*), 'warning',i,j, a1(i,j), a2(i,j)
        end if
      end do
   end do      

   write (*,*), a1(1,1), a2(1,1)




end program 

ifort дает мне

   complex(dp) ::  a1(3,2), a2(3,2)
-----------^

, почему для complex (dp) требуется постоянная времени компиляции и как ее исправить? Спасибо.

1 Ответ

2 голосов
/ 21 апреля 2020

Параметр kind dp должен быть константой, см. Fortran - установка типа / точности переменной во время выполнения

Однако у вас нет такой же проблемы, как в ссылку, вы даже не пытались определить dp! Во-первых, вы должны использовать IMPLICIT NONE, это абсолютно необходимо для безопасного программирования и самой большой проблемы с вашим кодом. Тогда он скажет вам, что тип dp не объявлен.

Вы просто определяете константу вида одним из обычных способов, как константу. Самое простое:

program main

  !NECESSARY!
  implicit none

  integer, parameter :: dp = kind(1.d0)

Обратите внимание, что я назвал программу main, вы должны назвать свою программу. Или просто пропустите program.

Подробнее об определении реальных видов можно найти в параметре Fortran 90 kind


Еще одно примечание: забудьте dabs() и dreal(). dabs() является старым остатком Фортрана 66, а dreal() вообще не является стандартным Фортраном. Просто используйте abs и либо dble() или лучше real( ,dp).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...