読者です 読者をやめる 読者になる 読者になる

ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

続・f2cl とは

先日のエントリでf2cl とは でも眺めてみたけどもう一度。

#:g1: f2clの紹介 の情報からイロイロ引用しながら整理する。

gitlab.common-lisp.net

概要

Fortran のプログラムを、Lispのプログラムへ変換するライブラリの様です。

FortranからCommon Lispへのトランスレータです。
#:g1: f2clの紹介 参照

変換?

以下のような hello.f を変換すると hello.lisp が出力される様です。

! hello.f
subroutine hello
print *,"おはよう日本"
end
;;; hello.lisp

;;; Compiled by f2cl version:
;;; ("f2cl1.l,v 95098eb54f13 2013/04/01 00:45:16 toy $" "f2cl2.l,v 95098eb54f13 2013/04/01 00:45:16 toy $" "f2cl3.l,v 96616d88fb7e 2008/02/22 22:19:34 rtoy $"
;;;  "f2cl4.l,v 96616d88fb7e 2008/02/22 22:19:34 rtoy $" "f2cl5.l,v 95098eb54f13 2013/04/01 00:45:16 toy $" "f2cl6.l,v 1d5cbacbb977 2008/08/24 00:56:27 rtoy $"
;;;  "macros.l,v 1409c1352feb 2013/03/24 20:44:50 toy $")

;;; Using Lisp SBCL 1.1.18
;;; 
;;; Options: ((:prune-labels nil) (:auto-save t) (:relaxed-array-decls t) (:coerce-assigns :as-needed) (:array-type ':array) (:array-slicing t)
;;;           (:declare-common nil) (:float-format single-float))

(in-package :f2cl-test)

(defun hello () (prog () (declare) (f2cl-lib:fformat t :list-directed "おはよう日本") end_label (return (values))))

(in-package #-gcl #:cl-user #+gcl "CL-USER")
#+#.(cl:if (cl:find-package '#:f2cl) '(and) '(or))
(eval-when (:load-toplevel :compile-toplevel :execute)
  (setf (gethash 'f2cl::hello f2cl::*f2cl-function-info*) (f2cl::make-f2cl-finfo :arg-types 'nil :return-values 'nil :calls 'nil)))

変換の方法

以下の様なコードで変換できるようです。

(defpackage :f2cl-test 
  (:use :cl)
  (:export :hello))

(f2cl:f2cl "/tmp/hello.f"
           :output-file "/tmp/hello.lisp"
           :package :f2cl-test)

ASDFシステム

quickdocs を参考に表にしてみる。

こう見てみると Fortran to Common Lisp のコンバータとそれプラス、フォートランのいくつかのライブラリを既に変換している雰囲気。

system description
f2cl F2CL: Fortran to Lisp converter
colnew F2CL conversion of COLNEW: Solution of boundary-value problems for ODEs
fishpack F2CL conversion of FISHPACK: Solution of separable elliptic PDEs
hompack F2CL conversion of HOMPACK: Solution of non-linear systems of equations by homotopy methods.
minpack F2CL conversion of MINPACK: Solutions to non-linear equations and least-squares problems
quadpack F2CL conversion of QUADPACK: Adaptive numerical integration
toms419 F2CL conversion of TOMS 419: Zeroes of a complex polynomial
toms717 F2CL conversion of TOMS 717: Max- and quasi-likelihood estimation in non-linear regressio
blas-complex BLAS routines for complex double-float matrices
blas-hompack
blas-package Package definition for BLAS
blas-real BLAS routines for real double-float matrices
lapack

変換しているフォートランのいくつかのライブラリ

それぞれのライブラリの概要を適当に調査。

以下の様子であるため日本語は変だとおもう。。。。

  • リンクになっているものの description はそのサイトをGoogle先生で直接翻訳したものをコピペ。
  • リンクになっていないものは、上のASDFシステムの description をGoogle先生で直接翻訳をコピペ。
name description
BLAS 難しく言うと基本的な線形演算のライブラリ、
簡単にいえば行列やベクトルの基本的な計算をやってくれる関数群です。
LAPACK 高性能線形代数パッケージです。
連立一次方程式、最少二乗問題、固有値問題、特異値問題を解くためのサブルーチンが含まれています。
COLNEW 常微分方程式のための境界値問題の解法ライブラリ
FISHPACK 円型偏微分方程式の解のための効率的なFORTRANサブプログラム
HOMPACK ホモトピーの方法により、非線形方程式系を解くためのサブルーチン
MINPACK 非線形方程式のシステムを解くライブラリであり、
または線形または非線形方程式のセットの残余の最小二乗最小化を行います。
QUADPACK 数値積分を使用して積分を推定するライブラリ
TOMS 419 複雑な多項式の零点ライブラリ
TOMS 717 非線形回帰におけるMAX-と準尤推定ライブラリ

恐らく、上記のFortranのライブラリが変換されたファイル/関数がそれぞれのASDFシステムに入っているのだろう。と認識。

おわり

なんとなく概要が理解できた気になったので終り。

今関係するのは BLAS, LAPACK の二つなので次回はそれぞれのパッケージを眺めてみるか。

まずは BLAS かな。