您的位置:首页 > 编程语言 > C语言/C++

C++向fortran的assumed array传递数据的方法

2009-04-16 10:52 288 查看
C++和fortran混合编程中,对于fortran程序中的assumed array,当数组为多维数组时,

c++向fortran传递的数组在fortran中无法确定维数,运行时导致错误。

 

解决方法:

假设c程序p41c.cpp调用fortran子程序formnf.f95:

 

SUBROUTINE formnf(nf)

 IMPLICIT NONE

 INTEGER,INTENT(IN OUT)::nf(:,:)

 INTEGER::i,j,m

 m=0

 DO j=1,UBOUND(nf,2)

   DO i=1,UBOUND(nf,1)

     IF(nf(i,j)/=0)THEN

       m=m+1

       nf(i,j)=m

       write(*,*) nf(i,j)

     END IF

   END DO

 END DO

RETURN

END SUBROUTINE formnf 

 

为了能向formnf正确传递数组,设计一接口ciformnf.f95:

 

SUBROUTINE ciformnf(nf,m,k)

 IMPLICIT NONE

 integer m,k

 INTEGER,INTENT(IN OUT)::nf(m,k)

! INTEGER,ALLOCATABLE::nf(:,:) 

! ALLOCATE(nf(m,k))

 call formnf(nf)

RETURN

contains

SUBROUTINE formnf(nf)

 IMPLICIT NONE

 !INTEGER,INTENT(IN OUT)::nf(m1,k1)

 !integer m1,k1 !czz

 INTEGER,INTENT(IN OUT)::nf(:,:)

 INTEGER::i,j,m

 m=0

 DO j=1,UBOUND(nf,2)

   DO i=1,UBOUND(nf,1)

     IF(nf(i,j)/=0)THEN

       m=m+1

       nf(i,j)=m

       write(*,*) nf(i,j)

     END IF

   END DO

 END DO

RETURN

END SUBROUTINE formnf 

END SUBROUTINE ciformnf

 

这样就可以通过ciformnf调用formnf.实现c向fortran的assumed array传递数据的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息