計算科学

科学的問題を解決するためにコンピュータを使用する科学者のためのQ&A

1
近似数値微分によるニュートンラプソン近似の欠点
関数あり、ようなを見つけたいとします。Newton-Raphson法を使用する場合があります。しかし、これには微分関数を知っている必要があります。の分析式が利用できない場合があります。たとえば、は、実験値のデータベースを参照する複雑なコンピューターコードによって定義される場合があります。X 、F (X )≈ 0 F '(X )F Ffffxxxf(x)≈0f(x)≈0f(x)\approx 0f′(x)f′(x)f'(x)ffffff しかし、が複雑な場合でも、小さな数字を選択してを計算することにより、特定のを近似できます。。、F '()ε F '()≈ F (A + ε )- F ()f′f′f'f′(a)f′(a)f'(a)aaaϵϵ\epsilonf′(a)≈f(a+ϵ)−f(a)ϵf′(a)≈f(a+ϵ)−f(a)ϵf'(a) \approx {f(a+\epsilon) - f(a)\over\epsilon} このアプローチには明らかに不利な点があると聞きましたが、それが何であるかはわかりません。ウィキペディアは、「この近似を使用すると、ニュートンの方法よりも収束が遅い割線法のようなものになる」と示唆しています。 誰かがこれについて詳しく説明し、この手法の問題を特に説明するリファレンスを提供できますか?

5
並列簡約のために数値の非結合性に対処する方法は?
並列簡約では、対応する操作が結合的であると仮定します。浮動小数点数の追加については、この仮定に違反しています。なぜ私がこれを気にするのか尋ねるかもしれません。まあ、それは結果の再現性を低下させます。また、シミュレートされたアニーリングを使用して、このような非再現性のある結果を生成するサブルーチンを最適化(またはパラメーターに適合)すると、さらに悪化します。 この問題に対処する一般的な方法は何ですか?次の戦略について何が言えますか? 非再現性を気にしないでください。 浮動小数点数と加算で並列リダクションを使用しないでください。 適切なサイズのワークパッケージを再現可能な方法で作成し、最終的な縮小を手作業で行います。 加算に高精度を使用します(ただし、すべてのコンパイラが高精度の浮動小数点型を提供するわけではありません)。

5
評価にコストがかかる、滑らかで境界のある非凸2D関数のグローバルな最小値を見つける
私は最小値を見つけたいと思う有界の非凸2次元関数を持っています。機能は非常にスムーズです。評価にはコストがかかります。許容誤差は、各軸の関数のドメインの約3%です。 NLOPTライブラリでDIRECTアルゴリズムの実装を実行しようとしましたが、必要な精度に必要な関数評価の量に関してブルートフォース検索よりも大幅な改善は見られず、いくつかの外れ値がありました。 他にどのグローバル最適化ソルバーを検討すべきですか?

2
CFDシミュレーションの一般的な離散化スキームの欠点
先日、私の計算流体力学のインストラクターは欠席し、彼は彼の代わりに博士号の候補者を送りました。彼が行った講義で、彼は、流体シミュレーションのさまざまな離散化スキームに関連するいくつかの欠点を示しているように見えました。 有限差分法: 保存を満たし、不規則な形状に適用することは困難です 有限体積法: エッジおよび1次元の物理に向かって偏る傾向があります。 有限要素法: FEMを使用して双曲線方程式を解くことは困難です。 不連続ガラーキン: それはすべての世界の中で最高(そして最悪)です。 変動分割: それらはまだ広く適用されていません。 講義の後、私は彼にどこでこの情報を入手したのか尋ねましたが、彼はソースを特定しませんでした。私はまた、DGが「すべての世界で最高の最悪」であることによって彼が何を意味するのかを彼に明らかにさせようとしましたが、明確な答えを得ることができませんでした。私は彼が彼自身の経験からこれらの結論に達したと仮定することができます。 私自身の経験から、FDMは不規則な形状に適用するのが難しいという最初の主張しか検証できません。他のすべてのクレームについては、それらを検証するのに十分な経験がありません。これらの「デメリット」が一般的なCFDシミュレーションにとってどれほど正確であるか興味があります。

6
C ++テンプレートを使用した汎用およびメタプログラミングは、計算科学でどの程度有用ですか?
C ++言語は、テンプレートを介して汎用プログラミングとメタプログラミングを提供します。これらの手法は、多くの大規模な科学計算パッケージ(MPQC、LAMMPS、CGAL、Trilinosなど)に組み込まれています。しかし、全体的な開発時間と同等または適切な効率のための使いやすさの点で、CやFortranのような非汎用、非メタ言語を超える価値で、科学計算に実際に貢献したものは何ですか? 科学的な計算タスクを考えると、C ++テンプレートを介した汎用およびメタプログラミングは、よく知られているベンチマーク(コード行、人の努力など)によって測定される生産性、表現力、または使いやすさの向上を実証しましたか?それに対応して、ジェネリックおよびメタプログラミング用のC ++テンプレートの使用にはどのようなリスクが伴いますか?

4
ポータブルマルチコア/ NUMAメモリ割り当て/初期化のベストプラクティス
メモリ帯域幅が制限された計算が共有メモリ環境(OpenMP、Pthreads、またはTBBを介したスレッドなど)で実行される場合、各スレッドがほとんどのメモリに物理的にアクセスするようにメモリを物理メモリに正しく分散させる方法のジレンマがあります「ローカル」メモリバス。インターフェイスは移植性がありませんが、ほとんどのオペレーティングシステムにはスレッドアフィニティを設定する方法があります(たとえばpthread_setaffinity_np()、多くのPOSIXシステム、sched_setaffinity()Linux、SetThreadAffinityMask()Windows)。メモリ階層を決定するためのhwlocなどのライブラリもありますが、残念ながら、ほとんどのオペレーティングシステムにはNUMAメモリポリシーを設定する方法がまだ用意されていません。Linuxは顕著な例外であり、libnumaがありますアプリケーションがページの粒度でメモリポリシーとページ移行を操作できるようにします(2004年以降メインラインにあるため、広く利用可能です)。他のオペレーティングシステムでは、ユーザーが暗黙の「ファーストタッチ」ポリシーに従うことを期待しています。 「ファーストタッチ」ポリシーを使用すると、呼び出し側は、新しく割り当てられたメモリに最初に書き込むときに使用する予定の親和性でスレッドを作成および配布する必要があります。(非常に少数のシステムがあるように構成されているmalloc()、それはちょうど彼らが実際に障害が発生しているときに別のスレッドによって、おそらく、それらを見つけることを約束、実際にページを検索します。)これは、使用してその割り当てを暗示しcalloc()たり、すぐに使用して割り当てが後にメモリを初期化するmemset()ことがフォルトする傾向があるので、有害です割り当てスレッドを実行しているコアのメモリバス上のすべてのメモリ。複数のスレッドからメモリにアクセスすると、最悪のメモリ帯域幅になります。同じことは、new多くの新しい割り当ての初期化を要求するC ++ 演算子にも当てはまります(例:std::complex)。この環境に関するいくつかの観察: 割り当ては「スレッド集合」にすることができますが、異なるスレッドモデルを使用してクライアントと対話しなければならないライブラリ(望ましくはそれぞれ独自のスレッドプール)には望ましくない割り当てがスレッドモデルに混在するようになりました。 RAIIは慣用的なC ++の重要な部分であると考えられていますが、NUMA環境でのメモリパフォーマンスには積極的に有害であるようです。配置newは、malloc()から割り当てられたメモリまたはからのルーチンで使用できますlibnumaが、これにより割り当てプロセスが変更されます(これは必要だと思います)。 編集:演算子に関する私の以前の声明newは間違っていた、それは複数の引数をサポートすることができます、チェタンの応答を参照してください。ライブラリーまたはSTLコンテナーが指定されたアフィニティーを使用することへの懸念がまだあると思います。複数のフィールドがパックされている場合があり、たとえば、std::vector正しいコンテキストマネージャをアクティブにして再割り当てすることを保証するのは不便です。 各スレッドは独自のプライベートメモリを割り当ててフォールトできますが、隣接する領域へのインデックス作成はより複雑になります。(スパース行列ベクトル積の検討行列とベクトルの行パーティションと、の所有されていない部分インデックス作成、xは、より複雑なデータ構造が必要Xは仮想メモリに連続していない)をy← A xy←Aバツy \gets A xバツバツxバツバツx NUMAの割り当て/初期化の解決策は慣用的と見なされますか?他の重要な落とし穴を省きましたか? (C ++の例がその言語に重点を置くことを意味するわけではありませんが、C ++ 言語は、Cのような言語にはないメモリ管理に関するいくつかの決定をエンコードします。物事が異なります。)

8
ような代数式を単純化できるオープンソースまたはアクセスしやすいソフトウェアはありますか
私は常に物事を手作業で計算しますが、今では私の仲間は厄介になり、上の表現のように物事をプラグインするだけで多くの反復運動をしています。これらの種類の方程式を単純化するためのPythonやRなどのオープンソースソフトウェアに特に興味があります。私はウルフラムアルファを使用してみましたが、私は失敗しました。式x = √を置き換えることができるオープンソースソフトウェアパッケージを方程式x 2 +2x+3に代入し、結果を単純化しますか?具体的には、コマンドのようなソフトウェアパッケージを探しています。x=2–√t−1x=2t−1x=\sqrt{2}t-1x2+2x+3x2+2x+3x^{2}+2x+3simplify

5
数値コードの結果のデータベース
数値的手法の文献では、多くの研究論文は、新しいアルゴリズムのバリエーションの説明と、それに続く1つまたは2つの既存の手法と比較するいくつかのテスト問題で構成されています。これにより、判断が困難になります 関心のある他の問題に対する新しい方法の実行方法 新しい方法がさらに他の既存の方法と比較する方法 もちろん、これらの質問の両方は、通常、新しい方法を採用するかどうかを決定する誰かにとって重要です。この状況を改善するには、可能であれば、メソッドを使用して多数のテスト問題(この質問を参照)を実行し、他のメソッドと比較するためにデータベースに結果をカタログ化することが望ましいと思われます。科学者またはエンジニアは、データベースに対してクエリを実行し、おそらくそれらにとって最も重要なソリューション/問題の特性(精度、効率、定性的特性など)を示し、データベース内のすべてのメソッドのパフォーマンスを定量的に比較できます。 このアイデアの実装には多くの困難があることを認識しています(主に、人々にこれらすべての問題を実際に実行させ、計算コストを測定します)。しかし、私の質問は次のとおりです。結果のそのようなデータベースは存在しますか?(特定のサブフィールドなど)またはこのようなアプローチはどこでも実装されていますか? これまでに投稿された回答はどちらも、問題のデータベースに関するものです。私は結果のデータベースについて尋ねています。
17 pde  testing 

2
どのライブラリがマルチグリッドを高度にサポートしていますか?
マルチグリッドを使用していくつかの固有値とベクトルを計算することを計画していますが、PETScがマルチグリッドを高度にサポートしていることに気付きました。PETScのドキュメントには、PETScのこの部分はすぐに交換されるため、使用しないでくださいと書かれています。 マルチグリッドを高度にサポートしているライブラリはどれですか?また、PETScが新しいマルチグリッドサポートをリリースするのはおよそどのくらいですか?

4
硬いODEシステムの定義
ODEシステムy′=f(x,y)y′=f(バツ、y)y'=f(x,y)、 IVPを考えますy(x0)= y0y(バツ0)=y0y(x_0)=y_0。最も一般的にこの問題を考えたときに硬いヤコビ行列∂f∂y(x0、y0)∂f∂y(バツ0、y0)\frac{\partial f}{\partial y}(x_0,y_0)有し、両方の非常に小さな負の実数部分(Iのみ安定したケースを考える)と非常に大きな負の実部と固有値と固有値を。 一方、ただ1つの方程式の場合には、例えばProthero -ロビンソン方程式のためのy′= λy+g′+λgy′=λy+g′+λgy'=\lambda y + g'+\lambda g、それが硬いときに呼び出されるλ≪−1λ≪−1\lambda\ll -1。 したがって、2つの質問があります。 ODEシステムの剛性の定義に小さな固有値が含まれているのはなぜですか?非常に大きな負の実数部のみが存在することで、システムが硬くなるのに十分であると思います。これにより、明示的な方法に小さなタイムステップを使用できるようになるためです。 λmax/λminλmax/λmin\lambda_{\max}/\lambda_{\min} OK、質問を修正しましょう。2つの2次元線形ODEシステムを考えます。1つ目は固有値{-1000000、-0.00000001}で、2つ目は{-1000000、-999999}です。私にとっては、どちらも硬いです。しかし、剛性比の定義を考慮すると、2番目のシステムはそうではありません。主な質問:剛性比はなぜ考慮されるのですか? そして、質問の2番目の部分は依然として重要です。言い換えれば、大きな負の固有値と穏やかな剛性比(たとえば、100以下)を備えた「自然な」大規模ODEシステムを探しています。
17 ode  stiffness 

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バインディングを使用しているので、それらにも満足しています。

3
アルゴリズムパラメータを簡単に変更するために、どのようなプログラミング戦略を使用できますか?
科学的アルゴリズムの開発は非常に反復的なプロセスであり、多くの場合、実験デザインの一部として、またはアルゴリズムのパフォーマンスの調整の一環として変更する多くのパラメーターを変更する必要があります。これらのパラメーターを構造化して、反復間で簡単に変更したり、新しいパラメーターを簡単に追加したりするには、どのような戦略をとればよいですか?

6
分子の点群をどのように決定しますか?
ついに、新しく発見された分子実体上で原子がどのように空間的に配置されているかを見つけることができました。たとえば、分光学的手段により、分子の原子座標、原子タイプ、結合長、結合タイプ、その他の一連の原子を手に入れることができます。ここで、分子のポイントグループ(対称グループ)を決定することに興味があります。 メタン()やベンゼン()のような単純な分子の場合、分子が属する点群を決定するのは視覚的な検査の簡単な問題です。ただし、分子が少し大きい場合、これはあまり実現できません。TdTdT_dD6 時間D6hD_{6h} 分子が便利なデータ形式(* .pdb、*。molなど)で保存されている場合、分子の対称グループをアルゴリズムでどのように決定しますか?

3
バックエンドの数値計算のためのHPCリソースを備えたデスクトップソフトウェア
私たちのワークグループは、建物のエネルギー性能をシミュレートするデスクトップアプリケーションを作成します。これは.NETアプリケーションであり、ユーザーが多くのシミュレーションを実行している場合、かなり時間がかかる可能性があります。シミュレーションは完全に並列化可能で、「オフィス」には非常に重要なHPCコンピューティングリソースがあります。 私たちが持っていたアイデアの1つは、ユーザーが非常に長時間実行されることがわかっているシミュレーションをオフロードできるようにすることです(個々のシミュレーションは約30〜120秒実行され、多数のシミュレーションの実行には数日かかることがあります)。誰もこれをやったことがありますか?もしそうなら、仕事を簡単にするためにライブラリを使用しましたか?努力する価値はありましたか? 追加するために編集: シミュレーションをオフロードするための個々のタスクは次のようになります ファイルのパッケージ化(約5Mb)、 サーバーにアップロードし、 パッケージを個別のシミュレーションに分解し(それぞれ約30〜120秒かかり、完全に並列化可能)、シミュレーションの数は、ユーザーが選択したオプション(断熱、建物の向きなど)の関数であり、選択の最悪の場合可能なオプションはすべて、約1E50のシミュレーションになります。100〜1E5のシミュレーションを実行することは不明ではありませんが、ユーザーの大半は10未満で実行されます。 完了したシミュレーションを再組み立てし、現在よりはるかに大きなファイルをダウンロードします。 私たちのグループはこれが初めてなので、どのインターフェイスを使用するのかわかりません。予算が削減されると、すぐに完成するかもしれませんが、次の人(もしあれば)が保守しやすい必要があります。 このアプリは既に.NET 4を使用しており、ユーザーが所有するすべてのコアを使用するように拡張できます(開発マシンには8つのコアがあります)。
17 hpc  partitioning 

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