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

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传递数据的目的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值