タグ付けされた質問 「software」

科学的または数値計算に最適なライブラリおよびスタンドアロンソフトウェアに関する質問。

6
独自のライブラリが必要な場合、再現可能な研究を行う最良の方法は何ですか?
計算の再現可能な研究は、他の研究者が結果を生成するために必要なコードを他の研究者が利用できるようにすることを目的としています。カップルの論文は、私が使用上の社内自動微分パッケージ(と呼ばれる働いています:私は、私の研究の再現性のすべてをしたいのですが、私は思わぬ障害のビットに実行しているDAEPACKを(独自のライブラリに)CHEMKIN- II ;ライセンス条項は不明)。 これらのソフトウェアコンポーネントをオープンソースバージョンに置き換えるのは非常に時間がかかります。CHEMKIN-IIのオープンソースの代替物はCanteraと呼ばれますが、CanteraはC ++ですが、CHEMKIN-IIはFortran 77にあります。十分なCanteraコードを変更して自動処理できるようにするには、多大な労力が必要です。 C ++の差別化ツール。 これらの専用パッケージが必要な場合、研究者がCHEMKIN-IIにアクセスできないと仮定して、研究を可能な限り再現可能にする最良の方法は何ですか?DAEPACKはソースからソースへのトランスレーターなので、必ずしもDAEPACKを配布する必要はありません。出力を含めることができるかもしれません。これは、微分を計算するFortranソースファイルです。 より一般的には、あなたの作品にプロプライエタリなソフトウェアが必要であり、そのプロプライエタリなソフトウェアが広く利用できない場合(つまり、MATLAB、Mathematicaなどではない場合)、どのように仕事を再現可能にしますか?

6
次元に依存しないコードを作成するにはどうすればよいですか?
特定の操作/アルゴリズムの1次元、2次元、3次元のバージョンについて、非常によく似たコードを書くことがよくあります。これらのバージョンをすべて維持するのは面倒です。単純なコード生成はかなりうまく機能しますが、より良い方法が必要だと考えられているようです。 一度操作を記述し、それを高次元または低次元に一般化する比較的簡単な方法はありますか? 具体例の1つ​​は次のとおりです。スペクトル空間で速度場の勾配を計算する必要があるとします。3次元では、Fortranループは次のようになります。 do k = 1, n do j = 1, n do i = 1, n phi(i,j,k) = ddx(i)*u(i,j,k) + ddx(j)*v(i,j,k) + ddx(k)*w(i,j,k) end do end do end do ここで、ddx配列は適切に定義されています。(マトリックス乗算でもこれを行うことができます。)2次元フローのコードはほぼ同じですが、3番目の次元がループ、インデックス、およびコンポーネントの数から削除されます。これを表現するより良い方法はありますか? 別の例は次のとおりです。3次元グリッド上で点ごとに定義された流体速度があるとします。速度を任意の位置(つまり、グリッドポイントに対応しない)に補間するには、3次元すべてにわたって連続して1次元ネビルアルゴリズムを使用します(つまり、次元削減)。単純なアルゴリズムの1次元の実装を前提として、次元削減を行う簡単な方法はありますか?

5
Scientific ComputingおよびHPCのMac OSの状態
OS Xのd明期に戻って、少なくともMacの世界では(当時は科学計算には程遠い場所でした)、科学計算とHPCアプリケーションのプラットフォームとしてのMac OSについて、かなりの騒ぎがありました。 XGridは箱から出して、Virginia TechにはMacベースのコンピューティングクラスターがあり、Stanfordはクールなことなどをしていました。 しかし最近では、物事は静かになっています。Macresearch.orgのサイトは、本質的にスパマーゾンビで満たされたゴーストタウンであり、XServeは死んでおり、非常に多くのマーケティング資料などは、Intelプロセッサ以前の分野のものでさえあるようです。しかし、XGridはまだ存在し、* nix OS全体の基盤はそこにあり、プラットフォームはPython、R、およびいくつかの新しい言語の間で適切にサポートされているようです。 だから、私よりもこれについてもっと知っている人から... OS Xの運賃は?科学計算用の実行可能なクライアント側コンピューターですか?それらをサーバー/クラスター/などとして使用しています。XGridまたはそのような何かを介して単にノベルティアプリケーション?
17 software  hpc 

5
優れた使いやすい高品質のオープンソースCFDソルバーはありますか?
私の論文は、燃焼のモデル削減のための数値的手法の開発です。私は燃焼シミュレーションの化学部分で純粋にメソッドを実行し、0-Dシミュレーション(フローなし)のケーススタディをたくさん持っています。私が望んでいるのは、フローを含むシミュレーション、できれば2次元または3次元シミュレーションを実行することです。 計算要件が高いため、これらのシミュレーションは並行する必要があります。また、ChemkinやCanteraなどの化学ソルバーとインターフェイスできるものが必要です。これにはソースコードがあります。(ChemkinはFortran 77にあり、CanteraはC ++にあります。) 理想的なケースでは、私のgradプログラムといくつかのCFDパッケージから得た流体力学の基本的な知識を使用してフローパターンを指定し、ケミストリーを追加して実行できます。必要に応じて、以前の共同研究者が使用した実験セットアップに基づいた単純なケーススタディのために、流体の動きと化学を支配する方程式を設定できますが、それを非常に簡単にするパッケージ。2〜3週間は喜んで使用します。この要件がPETScまたはTrilinosを除外するかどうかはわかりません。これ以上費やさなければならない場合は、ケーススタディ用のCFDコードを提供する共同作業者がいるので、後まで延期します。 CFDパッケージを使用したり、CFDコードを記述した経験がある人はいますか?私が使用したいと思うことの1つはStrang splittingですが、私はCFDやPDEの専門家ではありません。モデル縮小のための化学と数値的方法を研究しています。また、推奨ソフトウェアを使用して速度を上げるのにかかった時間についてコメントしてください。 @FrenchKheldarは、私が解決したい問題の特徴に言及するべきであるということを指摘しています。 理想的な(完全な)ガス、単相 圧縮性 層流が不可欠です。乱流はプラスです。(CFDでの数値手法の以前の研究からの乱流については少し知っていますが、CFDソルバーの仕事はしていません。物理については少しだけ知っています。) ゼロマッハ数の公式は大丈夫です(衝撃や超音速の流れは気にしません) 燃焼化学、SoretおよびDufourフラックスを無視し、拡散をFickianとして扱う ジオメトリは単純なものにすることができます インターフェースコードを書くことはできますが、書く必要が少ないほど良いです。@FrenchKheldarは、CanteraにはFortranとPythonのバインディングがあることも指摘しています。私は現在、ラピッドプロトタイピングのためにCantera Pythonバインディングを使用しているので、それらにも満足しています。

2
マルチフィジックスシミュレーションのアルゴリズムと実装のベストプラクティスは何ですか?
マルチフィジックスシミュレーションには、多くの場合、異なる空間や時間スケールを持つ複数の「フィジックス」の結合が含まれます。さらに、単一物理コードは多くの場合異なるチームによって作成されます。最も一般的に使用されるカップリング手法は1次演算子分割ですが、これは精度と安定性の特性が不十分です。関心のある問題に対してどのアルゴリズムが効果的であるかをどのように判断し、これらのアルゴリズムを利用可能にするためにソフトウェアをどのように構成する必要がありますか?

4
読者が結果をそれらを生成するコードに明確に一致させることができるように、論文のコードを記述する最も役立つ方法は何でしょうか?
私は再現可能な論文を書いていますが、この論文にはPythonスクリプトによって生成される計算結果があります(同様のMATLABスクリプトはほぼ同じ結果を生成します)。読者が論文の計算とコードの計算を一致させることができれば、読者にとって論文の理解が容易になると思います。この作品は抽象的な形式主義を提案しており、論文の例はこの形式主義を読者(より多くはエンジニアになる)にとってより具体的なものにすることになっている。コードはおそらく、計算の実行方法の最も詳細な記録になるので、それを明確にすることで、レビュープロセス中に役立つ可能性があります。 コードと計算結果(図、方程式)の間の対応をより明確にする方法についての提案はありますか? たとえば、論文のさまざまなステップを実装するコード行については、方程式番号を引用できると考えていました(コードとLaTeXの間で相互参照できれば驚くでしょうが、それらに手でラベルを付けるのは問題ありません) 、さまざまな例や図に対応する関数を書くことができます。 def example_1(): # Insert code corresponding to first example pass def figure_1(): # Insert code that generates Figure 1 pass コードが大きく、エンジニアリングで使用されるさまざまな数学的手法が実際に同じである方法を説明しようとしていなかった場合、おそらくコードを明確にすることはそれほど気にしませんが、紙と小さなコードベース、この演習で価値があるかもしれないようです。

4
混合整数計画問題を解決する最速のソフトウェア(オープンソース)
混合整数プログラミングの問題があります。そして、GLPKをソルバーとして使用しています。しかし、GLPKは線形計画法の問題には適していますが、混合整数計画法にははるかに長い時間が必要であるため、要件を満たしていません。他のソフトウェアを探しています。混合整数プログラミング問題を高速で解決する他の優れたオープンソースツールはありますか?ありがとう!

5
貢献するオープンソースプロジェクトの発見について
この質問はStackoverflowで10億回尋ねられましたが、焦点は常に非数値コーディングにありました。私は数値計算と高性能計算の範囲内で貢献するプロジェクトを探しています。私は理想的には小さなプロジェクトを好むでしょうが、それは必要ではありません。 SciCompに関連するオープンソースプロジェクトに参加する最良の方法は何でしょうか?どこからプロジェクトを探し始めますか?そのようなプロジェクトに参加する最良の方法は何でしょうか?機能のリクエスト/バグ/ドキュメントまたはその他? ATLASやNixのようなものを見て、N00Bからアクティブにどのように行きますか?
13 software 

5
科学ソフトウェアはどの程度最適化する必要がありますか?
大量の計算リソースを必要とするアプリケーションの場合、科学的結果の提供や合理的な時間での「ブレークスルー」の達成に関して、高性能は重要な要素となります。 ソフトウェア開発者は、アプリケーションの最適化にどれだけの時間と労力を投資すべきですか?使用される主要な基準は何ですか?
13 software  hpc 

1
科学図書館ではどのようにエラーを報告すべきですか?
さまざまなソフトウェアエンジニアリングの分野には、ライブラリがエラーやその他の例外的な条件にどのように対処すべきかについて多くの哲学があります。私が見たもののいくつか: ポインター引数によって返された結果を含むエラーコードを返します。これがPETScの機能です。 センチネル値でエラーを返します。たとえば、メモリを割り当てることができなかった場合、mallocはNULLを返しsqrt、負の数を渡すとNaNを返します。このアプローチは多くのlibc関数で使用されます。 例外をスローします。deal.II、Trilinosなどで使用されます。 バリアント型を返します。たとえば、Result正しく実行された場合に型のオブジェクトを返し、Error失敗した方法を記述するために型を使用するC ++関数std::variant<Error, Result>。 assertとcrashを使用します。p4estおよびigraphの一部で使用されます。 各アプローチの問題: すべてのエラーをチェックすると、余分なコードが大量に発生します。結果が格納される値は常に最初に宣言する必要があり、一度しか使用されない可能性のある多くの一時変数が導入されます。このアプローチは、どのエラーが発生したかを説明しますが、原因を特定するのが難しい場合があります。 エラーケースは無視するのは簡単です。さらに、出力タイプの範囲全体が妥当な結果である場合、多くの関数は意味のあるセンチネル値さえも持つことができません。#1と同じ問題の多く。 C ++、Pythonなどでのみ可能です。CまたはFortranではできません。setjmp / longjmp sorceryまたはlibunwindを使用してCで模倣できます。 C ++、Rust、OCamlなどでのみ可能です。CまたはFortranではできません。マクロソーサリーを使用してCで模倣できます。 おそらく最も有益です。しかし、たとえばPythonラッパーを作成するCライブラリにこのアプローチを採用すると、範囲外のインデックスを配列に渡すような愚かな間違いにより、Pythonインタープリターがクラッシュします。 エラー処理に関するインターネット上のアドバイスの多くは、オペレーティングシステム、組み込み開発、またはWebアプリケーションの観点から書かれています。クラッシュは受け入れられないため、セキュリティについて心配する必要があります。科学アプリケーションには、これらの問題はほとんどありませんが、ほとんどありません。 別の考慮事項は、どの種類のエラーが回復可能かどうかです。mallocの失敗は回復不可能であり、いずれにしても、OSのメモリ不足のキラーが実行する前にそれに到達します。配列サイズの範囲外のインデックスも回復できません。ユーザーとしての私にとって、ライブラリでできることは、有益なエラーメッセージでクラッシュすることです。一方、たとえば、反復線形ソルバーの収束の失敗は、直接因子分解ソルバーを使用することで回復できます。 科学図書館はどのようにエラーを報告し、それらが処理されると期待すべきですか? もちろん、それはライブラリが実装されている言語に依存することを理解しています。しかし、私が知る限り、十分に有用なライブラリについては、実装されている言語以外の言語から呼び出したいと思うでしょう。 余談ですが、パブリックAPIの一部としてグローバルアサーションハンドラー関数ポインターを定義する場合、Cライブラリのアプローチ#5は大幅に改善できると思います。アサーションハンドラは、デフォルトでファイル/行番号を報告し、クラッシュします。このライブラリのC ++バインディングは、代わりにC ++例外をスローする新しいアサーションハンドラを定義します。同様に、Pythonバインディングは、CPython APIを使用してPython例外をスローするアサーションハンドラーを定義します。しかし、このアプローチを取る例は知りません。
11 software 

2
科学計算における複雑な算術演算の危険性
複素内積二つの異なる定義が規則によって決定した:ˉ U Tの VまたはU T ˉ V。BLASで、cdotu、zdotu、およびcdotc、zdotcのルーチンを見つけました。前の2つのルーチンは実際にu T v(偽の内積!)を計算し、最後の2つのルーチンは内積の最初のベクトルを共役させます。また、いずれかの定義によって(共役U又はV)、⟨ U 、V ⟩ = ¯ ⟨ V 、U ⟩⟨ U 、V ⟩⟨u,v⟩\langle u,v\rangleあなたは¯Tvu¯Tv\bar{u}^TvあなたはTv¯uTv¯u^T\bar{v}あなたはTvuTvu^Tvあなたはuuvvv⟨ U 、V ⟩ = ⟨ V 、U ⟩¯¯¯¯¯¯¯¯¯¯¯⟨u,v⟩=⟨v,u⟩¯\langle u,v\rangle=\overline{\langle v,u\rangle}活用して!さらに、コメントで指摘されているように、多値の複雑な関数の主要な値を選択することは、慣習に依存する可能性があります。 私の質問は次のとおりです。この複雑さは科学計算での複雑な算術演算の使用に対して真の危険を引き起こしますか?この問題は、複素数を常に実部と虚部に分割し、実算のみを使用することを提案するdeal.iiの著者によって強調されています。しかし、分割アプローチが便利だとは思いませんでした。たとえば、時間調和マックスウェル方程式のPMLについて考えます。 FreeFem ++およびlibmeshを除くほとんどのオープンソースFEMソフトウェアでは、複素数を使用することの心配が一般的であるようです。ただし、2つの例外についても、複雑な算術演算は実際よりもテストされていません。 私の最後の質問は、複素数の使用を常に避けなければならないのかということです。

1
計算科学研究でソフトウェア推定法を使用している人はいますか?
仕事で、私は本質的に独立したコンサルタントとして機能します。管理者と顧客の場合、計算科学研究の一環としてソフトウェアを開発するのにかかる時間を見積もる必要があります。ただし、私の時間の見積もりは通常オフです。ソフトウェアの開発にかかる時間を見積もる方法があることを知っています。これらの方法により、研究課題の正確な見積もりが得られますか?それらは研究環境でも有用ですか?そうでない場合、「記録を保持し、それに応じて見積もりを修正する」よりも良い方法がありますか?
11 software 

5
コードのアーカイブの寿命を延ばす
再現可能な科学的結果に目を向けて、コードの寿命を確保するためのベストプラクティスの公開リストはありますか?(例えば、オープンソース、ドキュメント作成、依存関係の選択、言語の選択、仮想マシンなど)。 典型的な科学的コードまたは他のソフトウェアの半減期を推定しようとした研究(またはそれが欠けている例/逸話)

1
ACM TOMSに提出されたソフトウェアの場合、ACMソフトウェアライセンス契約は他のライセンスとどのように相互作用しますか?
ジャーナル数学ソフトウェア上のコンピューティング機械取引に関する協会(ACM TOMS)は、ソフトウェアの実装が含まれる数値計算アルゴリズムの多くの記事を掲載しています。彼らの編集方針によれば、アルゴリズム論文の提出には、その論文に記載されているアルゴリズムの実装のソースコードが含まれています。このソースコードは、ACMソフトウェア著作権およびライセンス契約の対象です。 私は自分の作品のソフトウェア実装をリリースすることに興味があるので、このライセンスの法的意味について心配しています。具体的には、このソフトウェアライセンスは一般的なオープンソースライセンス(GPLv3、BSD、MIT / X11、Apacheライセンスなど)とどのように相互作用しますか?

2
科学計算におけるタスクベースの共有メモリ並列ライブラリ
近年、何らかの形式の汎用データ駆動型共有メモリ並列処理を提供するいくつかのライブラリ/ソフトウェアプロジェクトが登場しています。 主なアイデアは、明示的にスレッド化されたコードを書く代わりに、プログラマーがアルゴリズムを相互依存タスクとして実装し、共有メモリーマシン上の汎用ミドルウェアによって動的にスケジュールされるというものです。 そのようなライブラリの例は次のとおりです。 QUARK:もともとはMAGMA並列線形代数ライブラリ用に設計されましたが、並列高速多重極法にも使用されているようです。 Cilk:もともとはMITベースのプロジェクトで、現在Intelでサポートされています。Cの言語/コンパイラー拡張として実装され、Cilkchessコンピューターチェスソフトウェアで使用され、FFTWで実験的に使用されました。 SMPスーパースカラー:バルセロナスーパーコンピューティングセンターで開発されました#pragma。拡張機能に基づいて、多くの点でCilkに似ています。 StarPU:GPUを含むいくつかの異なるアーキテクチャ用にコンパイルおよびスケジュールできる、同様のライブラリベースの「コードレット」。 OpenMPタスク:バージョン3.0以降、OpenMPは非同期にスケジュールできる「タスク」を導入しました(仕様のセクション2.7を参照)。 Intelのスレッディングビルディングブロック:C ++クラスを使用して非同期タスクを作成および起動します。チュートリアルのセクション11を参照してください。 OpenCL:マルチコアでのタスクベースの並列処理をサポートします。 これらのライブラリ/言語拡張の内部動作と特定の問題への適用について説明している文献はたくさんありますが、科学計算アプリケーションで実際に使用されている例はほとんどありません。 だからここに質問です:誰かが共有メモリ並列処理のためにこれらのライブラリ/言語拡張、または同様のものを使用する科学計算コードを知っていますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.