Salome-Meca for Windows (V2019) を 日本語環境の Windows 10 で動かす

# v2021 が公開されました
[こちら](https://code-aster-windows.com/download/)でダウンロードできます。
この記事で紹介している工夫無しで問題なく動作しますので、そちらを使用するのが良さそうです。
v2019 ではワンセットだった気がしますが、これは Salome-Meca と Code_Aster を両方インストールする必要が有ります。

# はじめに（結論）
[Salome-Meca for Windows (V2019)](https://code-aster-windows.com/download/) を 日本語環境の Windows 10 で動かすために、

* Salome-Meca のインストール場所を `C:\Users\(ユーザ名)\` 以下の、全体に日本語やスペースを含まないフォルダにしました。<br>（`C:\Salome-Meca\` 等、**浅いディレクトリに入れない**）<br>
  <p></p>
* Salome-Meca のインストールフォルダ以下の<br>
  `MODULES/INSTALL/lib/python3.6/site-packages/asterstudy/common/utilities.py` <br>
  にある<br>
  `fmt = '%a-%d-%H%M%S' if as_path else '%a-%d-%H:%M:%S'`<br>
  を書き換えて<br>
  `fmt = '%d-%H%M%S' if as_path else '%d-%H:%M:%S'`<br>
  としました。<br>
  <p></p>
* Salome-Meca のインストールフォルダ以下の `PRODUCTS/code_aster/14.4/lib/aster`<br>
  に含まれる全ての .py ファイル中の非アスキー文字を、近いアスキー文字で全て置き換えました。 <br><p></p>

これらの操作の結果として、Linux 環境を例にして説明されている各 Web ページと同じな挙動が得られました。尚、3つ目の操作には比較的複雑なファイル検索や置き換えが必要なので、WSL 環境で grep, find 等のコマンドを使用しました。
# 背景と目的
構造解析を行うフリーソフトのうち、情報が比較的多いものの一つに Salome-Meca が有ります。
これはもともと Linux GUI 環境で動くオープンソースのプログラムです。

Windows 向けの実行ファイルが公式サイトで提供されており、色々な事情で Windows しか選択肢が無い場合も安心です。と思いきや、良く分からないトラブルが続出して参りました。
対処方法は最初の部分にごく簡単に書きましたが、「何故？」「どうやって？」等の細かい部分を追記します。

Widnows 版のインストールと解析用データの準備までは全く問題なく出来ました。
ただし解析をスタートするとすぐにエラーになるので、これを回避します。

<font color="gray"><details><summary>（おまけ）Windows 10 上の WSL2 で Linux 版を使おうとして失敗しました。</summary>
WSL はまだ GUI ベースのプログラムとは相性が悪いのか、自分の環境では SALOME_Session_Server が'Aborted' と出力して停止してしまい、対処方法が分かりませんでした。
</details></font>

# ポイント 1. インストール場所
[FAQ に記述が有る](https://code-aster-windows.com/faq/)　のを見つけました。
Install Instructions に書いておいて欲しいなーと思ったのですが<font color="gray">（書いてありましたっけ？）</font>、問題が発生した後に FAQ をしっかり読む文化も有るのかもしれません？

<font color="gray"><details><summary>（おまけ）理由について</summary>
Salome-Meca は解析用のファイルを一時ディレクトリ（Temp フォルダ）内に出力するのですが、Temp フォルダは `C:\Users\（ユーザ名）\AppData\Local\Temp` に普通は設定されています。つまりユーザ毎に設定されているので、アクセス許可的な都合で、`C:\Users\（ユーザ名）\` より浅いディレクトリからは読み書きに何か制限があるのだとか。知らなかった......
</details></font>
それから Salome-Meca の場合に限りませんが、「インストール場所やシミュレーション用のデータを保存するフォルダは、日本語やスペースが含まれない場所を指定すること」も大切です。Linux ベースの文化では普通フォルダやファイル名にスペースが入らず、また日本語の文字を正しく解釈できないプログラムは結構多いです。<font color="lightgray">ユーザ名が日本語やスペースを含むことは有りがちなのですが、この手のプログラムが正しく動く期待がほとんど持てなくなるので、仮にそうなっている場合には手間を惜しまず名前のみのローマ字表記等に変更することをお勧めします。</font>

# ポイント 2. Python ファイルの書き換え
これは　[FAQ](https://code-aster-windows.com/faq/)　の別の記述にヒントを得ました。項目名は "At the end of a run, AsterStudy failed to copy log files" です。これは前述のポイント 1. にも関係が有ります。

<details><summary>曜日を含んだ日時を元にした名前のフォルダが Temp フォルダ内に作られる事が原因です。</summary><div>
<font color="gray">日本語では曜日名は日本語を含むので <font color="gray">(当たり前??)</font>、「インストール場所やシミュレーション用のデータを保存するフォルダは、日本語やスペースが含まれない場所を指定すること」という原則に早速違反しています。

「変な文字があってファイルの保存場所が分からないよー」というニュアンスのエラーメッセージを読む機会が有ったかもしれません。</div></details></font>

なので、一時ファイルの保存先フォルダ名から日本語になってしまう曜日部分を削除することで、この問題に対処できました。
<font color="lightgray">（Python が表示する曜日を、日本語でなく英語等にするという対処方法も有りだと思われますが、やり方が良く分からず直接的な手段を選びました。）</font>

<font color="gray"><details><summary>（おまけ）プログラムを書き換えるという対処方法には抵抗を感じる方もいらっしゃるかもしれませんが、</summary><div>
Salome-Meca はオープンソースのプログラムで、その内容は全て公開され、自由に修正して使用出来ます。
[公式サイト](https://code-aster-windows.com/) からダウンロードできる Windows 用の実行ファイル一式には多くの Python ファイルが含まれていて、これを書き換えるのは比較的容易です。

Python はプログラミング言語として人気ですし、「使ったことが有る」という方ならハードルはぐっと下がるかもしれません。
</div></details></font>

# ポイント 3. 最後のダメ押し
普通の Windows 10 環境だと思うのですが、私の所では ポイント 1. と ポイント 2. だけではだめでした。

Salome-Meca はフランス発祥のプログラムで、単純なアルファベットではないフランス語の文字を標準出力や標準エラー出力に表示しようとします。
日本語環境ではこれが悪い方向に働いてしまい、解析用に起動される別のプログラムが「こんな文字コマンドプロンプト or PowerShell に表示できないよー」的な気配と遠慮がちなエラーメッセージを発して止まってしまいます。

<font color="gray"><details><summary>（おまけ）友人に聞いた話だと、原因はそんなに単純ではないかもしれません。</summary>
`chcp 65001` の様に、コマンドプロンプト or PowerShell で使用する文字エンコーディングを変更するコマンドが有り、このコマンドが Salome-Meca（が呼び出す解析用のプログラム as_run）から呼び出されている形跡が有ります。
これが有れば問題ないはずなのですが.......
結局、3つ目の対処方法の適応後には動くようになったので、これ以上原因を追ってはいない状況です。
</details></font>

プログラムを停止する原因を作り出している部分は、Salome-Meca のインストールフォルダ以下の `PRODUCTS/code_aster/14.4/lib/aster` に有る様でした。このフォルダに含まれる Python ファイルの 非 ASCII 文字（é, à, ç 等）を、全て近い ASCII 文字で置き換える事にしました。具体的には、Python で unidecode 関数を呼び出すスクリプトを作りました。
この後ファイルの検索関連で使うので、このスクリプト作成も含めて以降の操作は WSL（正確には WSL2）環境で行っていきます。

```python:convert_to_ascii
#!/usr/bin/python3
import sys
from unidecode import unidecode

def main():
    print("Converting non-ascii text files to pure ascii text files.")
    for arg in sys.argv[1:]:
        print("Processing : " + arg)
        f_in = open(arg, "r")
        f_backup = open(arg+".org", "w")
        content = f_in.read()
        f_in.close()
        f_backup.write(content)
        f_backup.close()
        f_in = open(arg, "w")
        f_in.write(unidecode(content))
        f_in.close()
    print("Done.")

if __name__ == "__main__":
    main()

```
<font color="lightgray">各所から大量の まさかり が飛んでくる恐ろしいスクリプトです。</font>
必要ならば、

```
$ pip install unidecode
```
として、unidecode をインストールして下さい。

```
$ chmod 755 convert_to_ascii
```
として、bash でこのファイルを実行しやすくしておきます。私は `convert_to_ascii` スクリプトにパスを通したので簡潔に呼び出せますが、そうでない場合はフルパス指定に置き換えてください。
では、Salome-Meca のインストール場所に移動し、文字を置き換えます。

```
$ cd /mnt/c/Users/（ユーザ名）/（中略）/sm-2019-w64-1.2/PRODUCTS/code_aster/14.4/lib/aster
$ convert_to_ascii $(grep -lP "[\x80-\xFF]" $(find -name "*.py"))
```
これで非 ASCII 文字を、コメントまで含めて一網打尽にできてしまいます。

# 終わりに
3つの操作を行って、ようやく普通に解析が出来るようになりました。
![2021-07-08 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231644/c1ce0121-aa89-9347-3f75-5f10803fa3dc.png)
![2021-07-08 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231644/39ee39da-c52c-fe34-6480-9bdba57ada57.png)
![2021-07-08 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231644/3da16fd1-0091-7d5a-c5df-496800df7bcb.png)
![2021-07-08 (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231644/9d631c3a-b513-e84e-a804-434148df5bb2.png)

# おまけ
<details>
<summary>3つ目の操作は何だかフランス語に申し訳ないので...</summary>
一つ追記したいのですが、

計算の発散や、不適切な境界条件等に対するエラーメッセージも全てフランス語で出力されるので、最初は面食らってしまうことと思います。ですが Google 翻訳等で内容を確認すると、その丁寧な解説に驚かされます。

計算が発散した際のエラーメッセージの中に、「接触のみで保持されている部分が存在していないか確認して下さい」なんて適切なアドバイスをしてくれる数値計算ソフトはそう多くないと考えます。これを機にフランス語を勉強するのも良いと思えるレベルです。
</details>

......それでは、良い数値計算ライフをお送りください。