python fortran混合编程输入矩阵_如何将动态数组从Python传递到Fortran动态链接库
我在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动态链接库相关推荐
- Qt 调用Python引擎混合编程
0.前言 使用Qt和Python做混合编程,充分发挥Qt GUI的图形化框架优势和Python数据处理的计算能力.复杂的计算可用到Python众多三方库,将Python需要执行的功能写成py文件,做成 ...
- matlab元胞自动机学风演化,利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程...
利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程 第! !卷!第期 ! 成都理工大学学报! 自然科学版 !# $ % - 2: 5 34- 1 -6;!9 ? : A ? $ % $ ...
- python 数组 动态赋值_动态数组在Python中的实现
动态数组 在python中,列表,集合和字典是可变对象.数字,字符串和元组是不可变的对象.可变对象意味着我们从列表,集合或字典中添加/删除项目,但是对于不可变对象(例如元组或字符串)而言,情况并非如此 ...
- python fortran混合编程_python fortran c 混合编程
背景 因为编程需要使用python和fortran(或者c,c++)混合编程,所以进行了一些资料查询和实验.首先尝试了f2py,但是这个项目已经很久没有更新,为了以后兼容性考虑(后期可能会使用到c++ ...
- 怎么在python中输入矩阵_如何使用NumPy在Python中实现矩阵?
矩阵被用作数学工具,在现实世界中有多种用途.在本文中,我们将按照以下顺序讨论Python中关于使用著名的NumPy库的矩阵的所有内容:什么是NumPy以及何时使用它?在NumPy 矩阵被用作数学工具, ...
- python java混合编程_详解java调用python的几种用法(看这篇就够了)
java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...
- C++调用Python(混合编程)函数整理总结
文章目录 C++调用python概述 相关官方文档 相关函数 1.初始化python解释器环境 2.调用python脚本的静态简单方式 3.动态加载python模块并执行函数 3.1不带参数和返回值的 ...
- python编写猜数游戏代码、如果不是整数、显示输入错误_数字炸弹游戏程序 用python来实现...
相信许多小伙伴都玩过数字炸弹游戏,就是指在一定数字范围(一般是整数,不包含边界)里,一个玩家选中一个数字当作炸弹,其余玩家在这个范围含数字,每次只要没猜中炸弹数字,则根据玩家猜的数字缩小范围,直至其中 ...
- python编写猜数游戏代码、如果不是整数、显示输入错误_python编写猜数游戏代码、如果不是整数、显示输入错误_数字炸弹游戏程序 用python来实现......
相信许多小伙伴都玩过数字炸弹游戏,就是指在一定数字范围(一般是整数,不包含边界)里,一个玩家选中一个数字当作炸弹,其余玩家在这个范围含数字,每次只要没猜中炸弹数字,则根据玩家猜的数字缩小范围,直至其中 ...
最新文章
- g-gdb工具使用图谱(持续更新)
- 【心情】为什么发英文版免责声明?
- Redis进阶-Redis安全相关操作
- 15拆分成3个不同的自然数_15个小时搜救破拆,他磨破3双手套营救出4个生还者...
- screen命令简介
- 理解什么是前后端分离
- leetcode - 91. 解码方法
- mysql查询2个isbn数据,数据库实验二 数据查询
- Linux下实现流水灯等功能的LED驱动代码及测试实例
- python读取yaml文件
- 协程 eventlet
- odoo pivot中去掉求和_评比算分,去掉最高分和最低分算平均,PLC怎样编程实现?...
- linux驱动基础开发0——linux 设备驱动概述-转
- 【C#设计模式——创建型模式】抽象工厂模式
- 微型计算机主机作用,微型计算机的主机包括()。
- 实现HTML调用打开本地软件文件
- 关于微软Bing搜索语言无法更改的问题
- 跑步戴哪种耳机好,最适合运动跑步的蓝牙耳机
- JS根据日期计算年龄
- 【100%通过率】华为OD机试真题 JS 实现【最接近最大输出功率的设备 /查找充电设备组合】【2023 Q1 | 200分】