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传递数据的目的。
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传递数据的目的。
相关文章推荐
- C++通过Callback向C#传递数据的方法
- android Fragment传递数据方法
- vue父组件向子组件(props)传递数据的方法
- JQuery Ajax传递整个表单数据方法
- Cocos Creator各个场景之间传递数据的方法
- Android五种数据传递方法汇总
- C#调用C++dll方法,char*类型之间的传递
- ASP.NET页面间数据传递的方法
- ASP.NET中实现页面间数据传递的方法
- hibernate传递给前台json数据的时候有些数据不匹配的解决方法
- ASP.NET页面间数据传递的各种方法和分析
- C++和Lua相互传递数据
- ASP.NET多种不同页面间数据传递的方法
- asp.net不同页面间数据传递的多种方法
- Activity Intent序列化传递数据对象的方法
- HTTP传递数据的几种方法
- 转:在ASP.NET中在不同页面间进行数据传递有哪些方法
- C/C++中输入多组数据方法
- 在ASP.NET页面间传递任意数据的方法与实例
- c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论