MacOS(10.13.6)にCalculiXをインストールする

FreeCADでCalculiXの解析結果を表示する

CalculiXはオープンソースの有限要素法解析ソフトです。応力解析や固有値解析、過渡応答解析、そして接触問題も解くことができる強力なソルバーです。
入力ファイルの形式がAbaqusと良く似ていて、Abaqusの使用経験がある方ならデータを理解しやすいのではないでしょうか。

以下が本家サイトです。
http://www.calculix.de

WindowsやLinuxは実行形式のファイルをインストールできるインストーラが用意されていますが、MacOSはソースファイルからビルドする必要があります。
(以前はHomebrewからインストールできた様ですが現在はできません)

本家サイトにあるMacOS用のインストール資料は、Linux上でビルドする方法をMacOS用に書き換えたもので、Makefileの記述を変更したり、ソースファイルの一部を修正するように手順が示されています。

かなり面倒で、gccやfortranのバージョン、その他の環境が少し違うだけでビルドがつまづきます。

しかし、GithubにMacOS用に各種のファイルを修正してアップしてくださっている方がいます。
https://github.com/bobmel/CalculiX

このサイトからCloneをダウンロードし、本家のインストール資料に従ってビルドすればビルドが成功します。

上記のサイトでは、gcc-8とgfortran-8でコンパイルされていますが、gcc-9とgfortran-9でも問題ありませんでした。

しかし、ARPACKをビルドする際に本家の資料ではARmake.incを修正する様に記載されていますが、githubからダウンロードしたARmake.incは修正されていませんでしたので、僕は念のために以下の修正を反映しました。

LAPACKLIB = → # LAPACKLIB =
BLASLIB = → # BLASLIB =
ALIBS = $(ARPACKLIB) $(LAPACKLIB) $(BLASLIB) → ALIBS = $(ARPACKLIB)

なお、この修正をしなくてもビルドが成功するかは試していません。

C#でコマンドを実行する

以下、サンプルプログラムです。

using System;
using System.Diagnostics;

namespace test
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            Process p = new Process();

            p.StartInfo.FileName = "ls"
            p.StartInfo.Arguments = "-al";
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;

            p.Start();
            string output = p.StandardOutput.ReadToEnd();
            string erroutput = p.StandardError.ReadToEnd();

            p.WaitForExit();
            p.Close();
            p.Dispose();

            Console.Write(output);
            Console.Write(erroutput);
        }
    }
}
MacOSでTerminal.appを起動して下記のように実行すればMacOSでも動作します。
/Library/Frameworks/Mono.framework/Versions/5.18.1/bin/mono32 test.exe 

MacOSXでWindowsで作成した.exeを実行する

monoフレームワークというものを良く分かっていませんでした。
WindowsのC#環境でコンパイルした.exeはMacOSXにインストールしたmonoフレームワークで実行できました。

そういうものだったのか…。

ファイルシステム関連やコマンド実行関連の命令でうまくいかないものもあるようですが、基本的な部分では AEiexclcsv もWidnows環境でコンパイルした .exe が正しく動作しました。

monoフレームワークはLinux環境にも実装されているので、WindowsでコンパイルしたものをLinuxで実行することが可能であるということなのですね。