草庐IT

fortran77

全部标签

c++ - 使用 C++ 代码从 FORTRAN DLL 调用函数

我想在C++代码中加载一个fortrandll,并在fortrandll中调用一个函数。代码如下SUBROUTINESUB1()PRINT*,'Iamafunction'END创建foo.dll[fotrandll]后,这是我在visualstudio2012中编写的用于加载fortrandll的以下C++代码。并在fortran代码中调用函数SUB1#include#include#includeusingnamespacestd;extern"C"voidSUB1();typedefvoid(WINAPI*PGNSI)(LPSYSTEM_INFO);intmain(void){Lo

c++ - 在 Rcpp 中包装一个 Fortran 函数

这最初在我看来是一项简单的任务,但我无法完成以下工作。我试图将一个fortran子例程包装到一个Rcpp调用中,以便在R中使用该函数。目标是将该函数合并到一个包中,因此仅在特定*.so文件上使用dyn.load()的想法是不可行的(除非有人可以告诉我怎么做?)。通过阅读类似的帖子,我怀疑在makevars文件中指定标志可能会解决问题,但提供的信息非常简洁here并真诚地感谢一些澄清。我已尽可能接近文档完成以下操作。使用Rcpp.package.skeleton创建包结构将我的fortran文件(hello.f)放在src目录中为Rcpp包装器(hello.cpp)创建了一个基本的cpp

c++ - Instruments Call Tree 破坏了 R、C++ 和 Fortran 的混合

我正在尝试针对CPU时间分析OpenMx的一个函数,一个包含C++和Fortran代码的R包。我的操作系统是OSX10.10。我读过section关于R手册中的这个主题。本款和thispost带我试试Instruments。这是我做的打开的工具选择时间分析器模板按下记录使用RStudio启动我的R脚本我得到以下输出:.命令行工具sample返回相同的输出。问题是它看起来像omxunsafedgemm_会直接从主线程调用。但是,这是一个低级Fortran函数。它总是由名为omxDGEMM的C++函数调用。在此示例中,omxDGEMM首先由omxCallRamExpection调用(因此几

leetcode77组合 剪枝条件详细解释

题目:77.组合-力扣(LeetCode)题解:力扣(LeetCode)官网-全球极客挚爱的技术成长平台思路来自代码随想录:带你学透回溯算法-组合问题(对应力扣题目:77.组合)|回溯法精讲!_哔哩哔哩_bilibili带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)|回溯法精讲!_哔哩哔哩_bilibili对其中的剪枝条件做详细解释剪枝部分代码为for(inti=index;i剪枝条件为i1.i是起到一个遍历的作用,未剪枝之前,它的作用是从【i,n】这个区间里遍历,找到继续加入到path里的数值2.给出n,k求【1,n】中,大小为k(元素个数为k)的集合3.这个集合一定不是正

c++ - Fortran Do 循环的上限

在下面的代码中,DO循环的上限在循环内被修改为integer::i1,i2,n1,n2n1=4;n2=1doi1=1,n1doi2=1,n2print*,"i1=",i1,"i2=",i2n1=2n2=2enddoenddo其中gfortran4.8和ifort14.0给出以下结果:i1=1i2=1i1=2i2=1i1=2i2=2i1=3i2=1i1=3i2=2i1=4i2=1i1=4i2=2这表明在每个DO循环进入时边界是固定的(即,尽管n1在循环内被修改为2,但i1的上限固定为4)。这种行为与C/C++的行为形成对比,其中相应的代码intn1=4,n2=1;for(inti1=1;

c++ - 将字符串从 Fortran 传递到 C/C++ 的正确方法

我想将字符串从Fortran传递到C/C++。这是我的Fortran代码:subroutinezdplaskinGetSpeciesName(cstring,index)bind(C,name='zdplaskinGetSpeciesName')useiso_c_bindinguseZDPlasKinimplicitnoneinteger,intent(in)::indexCHARACTER(10),TARGET::fstring=''TYPE(C_PTR)::cstringfstring=species_name(index+1)cstring=c_loc(fstring)endsu

c++ - 混合编程 - 包括 C++ 头文件到 Fortran

我正在尝试在用Fortran编写的程序中使用用C++编写的库中的函数。C++库总结在一个头文件中,因此如果您想在另一个C++程序中使用它,您只需执行#includefunctions.h我想了解如何在Fortran中执行类似的操作。根据我的研究,我创建了这个最小的可行示例:clib/functions.h:#ifndefADD_H#defineADD_Hextern"C"{int__stdcalladd(intx,inty);}#endifclib/函数.cpp:extern"C"{int__stdcalladd(intx,inty){returnx+y;}}cinclude.c#in

c++ - 从 C++ 调用 Fortran 子例程,链接时 undefined reference

我有一个Fortran子例程,我想从C++程序中调用它。它需要一长串浮点参数并使用iso_c_binding内部模块:subroutineparasolve(......)bind(c,name='c_parasolve')use,intrinsic::iso_c_bindingimplicitnone....根据我所读的内容,我明白我需要使用C++的“extern”命令来定义外部函数,然后再调用它。我尝试了两种方法。第一个:extern"C"voidc_parasolve(....);在编译时返回“expectedunqualified-idbeforestringconstant”

在fortran90中填充一个尺寸未知大小的阵列

我想在fortran90中填充一个尺寸未知的数组。这是MATLAB中的等效代码:fori=1:10A[i]=iend我知道我可以通过大小,但是如何在fortran90中执行此操作,而不会传递数组的大小。我读到我们可以使用指针,但我真的不知道如何处理指针看答案我了解您想在知道数组的最终大小之前开始将元素添加到数组中。例如,您想从文件读取值,直到到达文件末尾,不知道有多少值。我可以想到三种方法:创建足够大小的数组,并记住最终值。integer::a(200),nn=1doa(n)=if()exitn=n+1enddo创建两个可分配的阵列,当您到达一个末端时,使另一个阵列更大,然后交换它们:inte

c++ - 将 Fortran 77 函数传递给 C/C++

是否可以将Fortran77函数作为回调函数指针传递给C/C++?如果是,怎么办?我在网上找到的信息与fortran90及更高版本有关,但我的遗留代码库是77。非常感谢 最佳答案 如果可以在FORTRAN77中完成,它将是特定于编译器和平台的。Fortran2003的新ISOCBinding提供了一种混合Fortran和C以及任何遵循或可以遵循C调用约定的语言(例如C++)的标准方式。虽然正式成为Fortran2003的一部分,并且完全支持整个Fortran2003的Fortran编译器极少,但许多Fortran95编译器都支持IS