OPENMP-PARLLEL-Попытка выделить уже выделенную переменную 'z_nei' - PullRequest
0 голосов
/ 16 декабря 2018

Я собираюсь написать код на Фортране, который начинался с вектора длины 10 (Z = [1,2,3, ..., 8,9,10]) и с каждого элемента вектора Z, aвектор (с именем Z_ne) случайной длины m (между 0 и 5000) генерируется, и Z_ne добавляется к первоначально выделенному вектору (с именем Z_ne) длины ноль.

program mc1
  implicit none
  real(8),allocatable:: Z_ne(:),Z_net(:)
  real(8)::Z_n(10)  ,z0                ! mean and standard deviation
  integer :: j
  integer::ti_1, ti_2,clock_rate, clock_max
  call system_clock ( ti_1, clock_rate, clock_max )

Z_n=[1,2,3,4,5,6,7,8,9,10];
allocate(Z_net(0))
!$OMP PARALLEL default( shared ) private( j )  
!$OMP DO
  do j = 1, 10
print*,'j=',j
  z0=Z_n(j)
 call monte_carlo(z0,Z_ne)
!print*,'--------Z_ne=',Z_ne
 call ArraysizeVEC(Z_net,Z_ne)
 deallocate(Z_ne)
  end do
!$OMP END DO
!$OMP END PARALLEL
Print*,'size(Z_net)=',size(Z_net)
!-------------------------------------------
  call system_clock ( ti_2, clock_rate, clock_max )  
  print*,'Elapsed real time = ', real ( ti_2 - ti_1 ) / real ( clock_rate ),'Sec' 
contains 
  SUBROUTINE monte_carlo(z0i,Z_nei)
    integer::ni,mi
    real(8)::ksi,z0i
    real(8),allocatable:: ks1i(:),Z_nei(:)
    ni=5000
    call random_number(ksi)
    mi=nint(ksi*ni) 
   allocate(ks1i(mi),Z_nei(mi))
       call random_number(ks1i)
       Z_nei=z0i*ks1i;                     
    deallocate(ks1i )  
  ENDSUBROUTINE monte_carlo 
               SUBROUTINE ArraysizeVEC(x_VEC,y_VEC)  an extra elements into array x
                 real(8),allocatable:: y_VEC(:),x_VEC(:),x1_VEC(:)
                 call move_alloc(x_VEC,x1_VEC)
                 allocate(x_VEC(size(x1_VEC)+size(y_VEC)))
                 x_VEC=[x1_VEC,y_VEC]
              ENDSUBROUTINE ArraysizeVEC

    end program mc1

В последовательной форме он работает правильно,Но в параллельной форме это выдает ошибку:

j=           1
j=           6
At line 39 of file main.f95
Fortran runtime error: Attempting to allocate already allocated variable 'z_nei'

Я новичок в Фортране, кто-нибудь может мне помочь, пожалуйста?спасибо

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