我在Python调用fortran dll时遇到了一些问题,我真的需要一些帮助和建议。

我的问题是将动态数组传递给函数(由Fortran DLL提供)。在

例如,我有一个带有动态数组的类型:Module Class_Rotor

Implicit None

Type,Public ::Type_Rotor

Real(kind=8),Public::Mass

Real(kind=8),Allocatable,Public::Lamda(:,:)

End Type Type_Rotor

End Module Class_Rotor

Module Class_Trim

Implicit None

Type,Public::Type_Trim

Real(kind=8),Public::COLL

Real(kind=8),Public::LNGCYC

End Type Type_Trim

End Module Class_Trim

我想在fortran子程序中使用动态数组

^{pr2}$

另外,我定义了一个sunroutine Alc来分配Rotor%Lamda的空间,并将值传递给它。在Subroutine Alc(Rotor,n,LamArray)

!DEC$ ATTRIBUTES DLLEXPORT, STDCALL, REFERENCE, MIXED_STR_LEN_ARG, ALIAS:"Alc" :: Alc

Use Class_Rotor

TYPE(Type_Rotor),intent(inout):: Rotor

Integer(kind=4)::I,J

Integer(kind=4),intent(in)::n

Real(kind = 8),DIMENSION(n,n),intent(in)::LamArray

IF(Allocated(Rotor%Lamda))Then

DeAllocate(Rotor%Lamda)

ENDIF

Allocate(Rotor%Lamda(n,n))

Do I=1,n

Do J=1,n

Rotor%Lamda(I,J)=LamArray(I,J)

EndDo

EndDo

End Subroutine Alc

我试着这样做:

新建一个Fortran DLL项目(vs2010+IVF),然后在python中使用此DLL:from ctypes import *

import numpy as np

from numpy.ctypeslib import load_library,ndpointer

class Type_Rotor(Structure):

_fields_ = [

('Mass', c_double),

('Lamda', POINTER(c_double)),

]

def __init__(self,cols):

self.cols_count = cols

pc = (POINTER(c_double)*cols*cols)()

self.Lamda = cast(pc,POINTER(c_double))

class Type_Trim(Structure):

_fields_ = [

('COLL', c_double),

('LNGCYC', c_double),

]

def run():

mydll = windll.LoadLibrary('Dll3.dll')

CalculateRotor = mydll.CalculateRotor

CalculateTrim = mydll.CalculateTrim

Rotor = Type_Rotor(3)

Trim = Type_Trim()

Rotor.Mass = 1.0

temp = (c_double *3*3) ((1,2,3),(4,5,6),(7,8,9))

Trim.COLL = 11.0

Trim.LNGCYC = -3.0

mydll.Alc(byref(Rotor),byref(c_int(Rotor.cols_count)),byref(temp))

for i in range(15):

CalculateRotor(byref(Trim), byref(Rotor))

print Trim.COLL,Trim.LNGCYC,Rotor.Mass

CalculateTrim(byref(Rotor), byref(Trim))

print Trim.COLL,Trim.LNGCYC,Rotor.Mass

if __name__=="__main__":

run()

回答python,在命令行Win7下返回时间那个:一个指针传递给解除分配指向无法解除分配的对象,

但第二次它给出了正确的答案

在Winxp命令行下,返回python脚本的第一个运行时间那个:一个指针传递给解除分配指向无法解除分配的对象,

但是第二次它给出了正确的答案,但是,它粉碎了!!!有时,它还返回:allocateable array is already allocated

我真的不知道为什么?如何使用动态数组?在

python fortran混合编程输入矩阵_如何将动态数组从Python传递到Fortran动态链接库相关推荐

  1. Qt 调用Python引擎混合编程

    0.前言 使用Qt和Python做混合编程,充分发挥Qt GUI的图形化框架优势和Python数据处理的计算能力.复杂的计算可用到Python众多三方库,将Python需要执行的功能写成py文件,做成 ...

  2. matlab元胞自动机学风演化,利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程...

    利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程 第! !卷!第期 ! 成都理工大学学报! 自然科学版 !# $ % - 2: 5 34- 1 -6;!9 ? : A ? $ % $ ...

  3. python 数组 动态赋值_动态数组在Python中的实现

    动态数组 在python中,列表,集合和字典是可变对象.数字,字符串和元组是不可变的对象.可变对象意味着我们从列表,集合或字典中添加/删除项目,但是对于不可变对象(例如元组或字符串)而言,情况并非如此 ...

  4. python fortran混合编程_python fortran c 混合编程

    背景 因为编程需要使用python和fortran(或者c,c++)混合编程,所以进行了一些资料查询和实验.首先尝试了f2py,但是这个项目已经很久没有更新,为了以后兼容性考虑(后期可能会使用到c++ ...

  5. 怎么在python中输入矩阵_如何使用NumPy在Python中实现矩阵?

    矩阵被用作数学工具,在现实世界中有多种用途.在本文中,我们将按照以下顺序讨论Python中关于使用著名的NumPy库的矩阵的所有内容:什么是NumPy以及何时使用它?在NumPy 矩阵被用作数学工具, ...

  6. python java混合编程_详解java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  7. C++调用Python(混合编程)函数整理总结

    文章目录 C++调用python概述 相关官方文档 相关函数 1.初始化python解释器环境 2.调用python脚本的静态简单方式 3.动态加载python模块并执行函数 3.1不带参数和返回值的 ...

  8. python编写猜数游戏代码、如果不是整数、显示输入错误_数字炸弹游戏程序 用python来实现...

    相信许多小伙伴都玩过数字炸弹游戏,就是指在一定数字范围(一般是整数,不包含边界)里,一个玩家选中一个数字当作炸弹,其余玩家在这个范围含数字,每次只要没猜中炸弹数字,则根据玩家猜的数字缩小范围,直至其中 ...

  9. python编写猜数游戏代码、如果不是整数、显示输入错误_python编写猜数游戏代码、如果不是整数、显示输入错误_数字炸弹游戏程序 用python来实现......

    相信许多小伙伴都玩过数字炸弹游戏,就是指在一定数字范围(一般是整数,不包含边界)里,一个玩家选中一个数字当作炸弹,其余玩家在这个范围含数字,每次只要没猜中炸弹数字,则根据玩家猜的数字缩小范围,直至其中 ...

最新文章

  1. g-gdb工具使用图谱(持续更新)
  2. 【心情】为什么发英文版免责声明?
  3. Redis进阶-Redis安全相关操作
  4. 15拆分成3个不同的自然数_15个小时搜救破拆,他磨破3双手套营救出4个生还者...
  5. screen命令简介
  6. 理解什么是前后端分离
  7. leetcode - 91. 解码方法
  8. mysql查询2个isbn数据,数据库实验二 数据查询
  9. Linux下实现流水灯等功能的LED驱动代码及测试实例
  10. python读取yaml文件
  11. 协程 eventlet
  12. odoo pivot中去掉求和_评比算分,去掉最高分和最低分算平均,PLC怎样编程实现?...
  13. linux驱动基础开发0——linux 设备驱动概述-转
  14. 【C#设计模式——创建型模式】抽象工厂模式
  15. 微型计算机主机作用,微型计算机的主机包括()。
  16. 实现HTML调用打开本地软件文件
  17. 关于微软Bing搜索语言无法更改的问题
  18. 跑步戴哪种耳机好,最适合运动跑步的蓝牙耳机
  19. JS根据日期计算年龄
  20. 【100%通过率】华为OD机试真题 JS 实现【最接近最大输出功率的设备 /查找充电设备组合】【2023 Q1 | 200分】

热门文章

  1. 【IDEA工具】java通过IDEA打包项目
  2. 字符串匹配之KMP算法详解
  3. html盒子中盒子排列,css3中弹性盒排布使用方法
  4. 3_python基础—运算符 1
  5. Windows 7+Ubuntu 16.04 双系统安装
  6. Js Date对象 简单操作
  7. win10系统,virtualBox导入centos7.3报错
  8. 1.Java 面试题整理(基础篇一)
  9. SSM框架笔记09:初探Spring——采用Java配置方式
  10. 【BZOJ4008】亚瑟王,概率DP