2013-04-28 2 views
0

Я пытаюсь распараллелить подпрограмму с помощью Openmp. Подпрограмма содержит последовательный цикл релаксации, который работает на общей ошибке , которая является общей переменной. Теперь, когда я parralelize часть, где я вызываю подпрограмму в основной программе, она делает ошибку частной переменной, а затем я не могу явно указать общую переменную в основной программе.OpenMP Fortran Подпрограмма

Я вставляю код для справки.

program test 
!$omp parallel 
call sub() 
!$omp end parallel 
end program test 

subroutine sub() 
do while(totalerror.ge.0.0001.and.sor.lt.10000) 
totalerror=0.0 
sor=sor+1 
error=0.0 
!$OMP DO REDUCTION(+:toterror) REDUCTION(MAX:error) 
! shared (vorticity,strmfn,toterror,error,guess) PRIVATE (i,j,t1,t2) 
do i=1,nx 
do j=1,ny 
guess(i,j)=0.25*((h**2.)*vorticity(i,j)+strmfn(i+1,j)+strmfn(i- 1,j)+strmfn(i,j+1)+strmfn(i,j-1)) 
totalerror = totalerror + error 
error  = max(abs(strmfn(`enter code here`i,j) - guess(i,j)),error) 
strmfn(i,j)= strmfn(i,j) + omega*(guess(i,j)-strmfn(i,j)) 
enddo 
enddo 
!$OMP END DO 
enddo 

Любая помощь будет оценена по достоинству.

+0

Это просто пример, поэтому переменные не определены. – user2329134

ответ

0

toterror и error не должно быть в условии shared, так как они находятся в reduction. Если вам нужны версии shared, скопируйте их в разные переменные.

Смежные вопросы