octave c++函数中调用fortran77子程序


声明:本文转载自https://my.oschina.net/u/2245781/blog/1815474,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

代码都放在工作目录~/octave_workplace/f77下

一、fortran子程序tnine.f

      SUBROUTINE TNINE (IOPT, PARMOD, PS, X, Y, Z, BX, BY, BZ)        INTEGER IOPT        DOUBLE PRECISION PARMOD(10), PS, X, Y, Z, BX, BY, BZ   C     This is just a test subroutine body, to check connexions.  C     Put the sum of PARMOD in PS, and X, Y, Z into BX, BY, BZ         INTEGER I               PS = 0D0        DO 1 I=1, 10           PS = PS + PARMOD (I)   1    CONTINUE         BX = X        BY = Y        BZ = Z         END 

这里参考了octave自带例子程序examples/fortransub.f

二、c++程序t96.cc

#include <octave/oct.h>  #include <octave/f77-fcn.h>  extern "C"  {    int F77_FUNC (tnine, TNINE) (const int& IOPT, const double* PARMOD,                                   double& PS,                                   const double& X, const double& Y,                                   const double &Z,                                   double& BX, double& BY, double& BZ );  }   DEFUN_DLD (t96, args, ,             "- Loadable Function: [PS, BX, BY, BZ] = t96 (PM, X, Y, Z) Returns the sum of PM in PS and X, Y, and Z in BX, BY, and BZ.")  {    octave_value_list retval;     const int dummy_integer = 0;    Matrix pm;    const double x = args(1).double_value(), y = args(2).double_value(),      z = args(3).double_value();    double ps, bx, by, bz;     pm = args(0).matrix_value ();     F77_XFCN (tnine, TNINE,              (dummy_integer, pm.fortran_vec(), ps, x, y, z, bx, by, bz) );     if (f77_exception_encountered)      {        error ("unrecoverable error in t96");        return retval;      }     retval(0) = octave_value (ps);    retval(1) = octave_value (bx);    retval(2) = octave_value (by);    retval(3) = octave_value (bz);    return retval;  } 

三、Compile this  in the Bourne Again Shell(can also in Octave) and run it in Octave like: 

>> mkoctfile t96.cc tnine.f >>  [p, x, y, z] = t96 (1:10, sqrt (2), pi, e) p =  55 x =  1.4142 y =  3.1416 z =  2.7183 >>

 

本文发表于2018年05月20日 10:00
(c)注:本文转载自https://my.oschina.net/u/2245781/blog/1815474,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2272 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1