2012-03-17 70 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