2012-03-17 50 views
0

這是我的代碼錯誤PGI加速器Fortran代碼

program load_flow 


!!!!!!!region starts 
!$acc region 
p1=0;p=0 
do i=2,n 
    do j=1,n 
     p1=(V(i)*V(j)*Yabs(i,j)*cos(angle(i,j)-d(i)+d(j))) 
     p=p1+p 
    end do 
    P0(i-1)=p 
    p=0 
end do 

! % % % %------Reactive Power Calculation-----% 
p=0;p1=0 

do i=2,(n-m) 
     do j=1,n 
p1=-(V(i)*V(j)*Yabs(i,j)*sin(angle(i,j)-d(i)+d(j))) 
p=p1+p 
     end do 
     Q0(i-1)=p 
     p=0 
end do 

!!!!!!!!!!!mismatch factor 
do i=1,(n-1) 
    B1(i)=Ps(b,i)-P0(i) 
    end do 
do i=1,(n-m-1) 
    B2(i)=Qs(b,i)-Q0(i) 
end do 

MF(1,1:38)=B1(1:38) 
MF(1,39:67)=B2(1:29) 
!!!!!!!!jacobian calculation for preddictor step 
!!!!!!!!!!!!!!!!!!!!!!dia of j1 
p=0;p1=0 
do i=2,n 
    do j=1,n 
     if(j .ne. i)then 
p1=V(i)*V(j)*Yabs(i,j)*sin(angle(i,j)-d(i)+d(j)) 

p=p1+p 
     end if 

    end do 
    i=i-1 
    dia1(i,i)=p 

    p=0 
    i=i+1 
end do 

!!!!!!!!!!!!!!off dia. of j1 
q=0;q1=0 

do k=2,n 
i=k 
    do j=2,n 
     if(j .ne. i)then 
     q1=V(i)*V(j)*Yabs(i,j)*sin(angle(i,j)-d(i)+d(j)) 
     end if 
     i=i-1;j=j-1 
offdia1(i,j)=-q1 
q1=0 
i=i+1;j=j+1 
    end do 
end do 

do i=1,38 
do j=1,38 
J1(i,j)=offdia1(i,j)+dia1(i,j) 
end do 
end do 
!!!!!!!!!!!!!!!!!!!dia. of j2 
p=0;p1=0 
do i=2,(n-m) 
    do j=1,n 
     if(j .ne. i)then 
     p1=V(j)*Yabs(i,j)*cos(angle(i,j)-d(i)+d(j)) 
p=p1+p 
     end if 

    end do 

    dia2(i-1,i-1)=p+(2*V(i)*Yabs(i,i)*cos(angle(i,i))) 
    p=0; 

end do 
!!!!!!!!!!!!!!!!!!off dia. of j2 
p1=0; 

do k=2,n 
i=k 
    do j=2,(n-m) 
     if(j .ne. i)then 
     p1=V(i)*Yabs(i,j)*cos(angle(i,j)-d(i)+d(j)); 
     end if 
     i=i-1;j=j-1 
offdia2(i,j)=p1 
    p1=0; 
    i=i+1;j=j+1 
    end do 
end do 

do i=1,(n-m-1) 

    offdia2(i,i)=dia2(i,i) 

end do 
J2=offdia2 
!!!!!!!!!!!!!!!!!!!!dia. of j3 
p=0;p1=0 
do i=2,(n-m) 
    do j=1,n 
     if(j .ne. i)then 
      p1=V(i)*V(j)*Yabs(i,j)*cos(angle(i,j)-d(i)+d(j)) 
p=p1+p; 
     end if 
    end do 
    i=i-1; 
    dia3(i,i)=p 
    p=0; 
    i=i+1; 
end do 
!!!!!!!!!!!!!!off dia of j3 
p=0;p1=0 

do k=2,(n-m) 
i=k; 
    do j=2,n 
     if(j .ne. i)then 
    p1=V(i)*V(j)*Yabs(i,j)*cos(angle(i,j)-d(i)+d(j)) 
     end if 
    i=i-1;j=j-1 
    offdia3(i,j)=-p1; 
    p1=0; 
    i=i+1;j=j+1 
    end do 
end do 

do i=1,(n-m-1) 
     offdia3(i,i)=dia3(i,i) 

end do 
J3=offdia3 
!!!!!!!!!!dia of j4 
p=0;p1=0 
do i=2,(n-m) 
    do j=1,n 
     if(j .ne. i)then 
      p1=V(j)*Yabs(i,j)*sin(angle(i,j)-d(i)+d(j)) 
p=p1+p 
     end if 

    end do 

    dia4(i-1,i-1)=-(2*V(i)*Yabs(i,i)*sin(angle(i,i)))-p 
    p=0;p1=0 
end do 
!!!!!!!!!!!!!!!off dia of j4 
p1=0;p=0 

do k=2,(n-m) 
i=k; 
    do j=2,(n-m) 
     if(j .ne. i)then 
     p1=V(i)*Yabs(i,j)*sin(angle(i,j)-d(i)+d(j)) 
     end if 
    i=i-1;j=j-1 
    offdia4(i,j)=-p1 
    p1=0; 
    i=i+1;j=j+1 
    end do 
end do 

do i=1,(n-m-1) 
offdia4(i,i)=dia4(i,i); 
end do 

J4=offdia4 
!!!!!!! 
!!!!!!!!!!!!!!!!!!!formation of final jacobian!!!!!!!!!! 
Jac(1:38, 1:38) = J1 (1:38,1:38) 
Jac(1:38,39:67) = J2 (1:38,1:29) 
Jac(39:67, 1:38) = J3 (1:29,1:38) 
Jac(39:67,39:67) = J4 (1:29,1:29) 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
!!!!!!!!!!region ends 
!$acc end region 

end program load_flow 

我使用並行PGI加速器指令卻是露出

「編譯器未能轉化加速器區域(見-Minfo消息):具有零步值的感應變量「

+4

太長時間閱讀,只顯示相關部分 – Anycorn 2012-03-17 06:02:07

+1

爲什麼不通過減少$ ACC的範圍開始這樣你就可以看到錯誤來自哪裏?還有,MInfo展示了什麼? – 2012-03-17 06:27:13

+0

你的問題到底是什麼? – talonmies 2012-03-17 07:59:37

回答

1

沒有信心,這將起作用,但它應該是朝着正確方向邁出的一步:

!!!!!!!region starts 
p1=0;p=0 
!$acc region do 
do i=2,n 
    do j=1,n 
     p1=(V(i)*V(j)*Yabs(i,j)*cos(angle(i,j)-d(i)+d(j))) 
     p=p1+p 
    end do 
    P0(i-1)=p 
    p=0 
end do 
+0

我試過了,但它顯示「ACC區域DO預期後的DO循環」 – user991852 2012-03-19 08:55:25

+0

抱歉,這是一個錯誤。 – user991852 2012-03-20 13:27:05

+1

我建議你現在轉換成OpenACC,使它更成熟(適用於PGI編譯器)。 – harrism 2012-09-17 00:54:24

1

嘗試改變這在外環的頂部初始化P = 0:

!!!!!!!region 
!$acc region do 
do i=2,n 
    p=0 
    do j=1,n 
     p1=(V(i)*V(j)*Yabs(i,j)*cos(angle(i,j)-d(i)+d(j))) 
     p=p1+p 
    end do 
    P0(i-1)=p 
end do