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

PETScは、偏微分方程式でモデル化された科学アプリケーションのスケーラブル(並列)ソリューションのためのデータ構造とルーチンのオープンソーススイートです。

17
Python用の高品質な非線形プログラミングソルバーはありますか?
解決すべきいくつかの挑戦的な非凸のグローバル最適化問題があります。現在、MATLABのOptimization Toolbox(特にfmincon()algorithm ='sqp'を使用)を使用していますが、これは非常に効果的です。ただし、私のコードのほとんどはPythonで作成されているため、Pythonでも最適化を行いたいと考えています。競合できるPythonバインディングを備えたNLPソルバーはありfmincon()ますか?ちがいない 非線形等式および不等式の制約を処理できる ユーザーがヤコビアンを提供する必要はありません。 グローバルな最適化を保証していなくても構いません(保証fmincon()しません)。私は、困難な問題や、それよりもわずかに遅い場合でも、ローカル最適にロバストに収束するものを探していfmincon()ます。 OpenOptで利用できるソルバーをいくつか試しましたが、MATLABのソルバーより劣っていfmincon/sqpます。 強調するために、私はすでに扱いやすい定式化と優れたソルバーを持っています。私の目標は、ワークフローをより合理化するために、単に言語を変更することです。 Geoffは、問題のいくつかの特性が関連している可能性があると指摘しています。彼らです: 10-400の決定変数 4〜100の多項式等式制約(1〜8の範囲の多項式次数) 決定変数の数の約2倍に等しい合理的な不等式制約の数 目的関数は決定変数の1つです 不等式制約のヤコビアンと同様に、等式制約のヤコビアンは密です。

2
反復線形ソルバーが収束しないのはなぜですか?
KSP(PETScの線形ソルバーパッケージ)から事前に条件付けされたKrylovメソッドを使用して、偏微分方程式の離散化と線形化によって得られるようなスパース線形システムを解くと、何が問題になる可能性がありますか? 私の問題で何が問題になっているのかを判断するには、どのような手順を踏めばよいですか? 線形システムを正常かつ効率的に解決するために、どのような変更を加えることができますか?

5
PETScとTrilinosの主な違いは何ですか?
私の知る限り、米国エネルギー省の計算科学ソフトウェアフレームワークの2つの大きなジェネリックは、 PETScとTrilinosです。言語の違い(CとC ++)を超えて、一見似ているように見えます。2つのフレームワークの主な違いは何ですか?また、どちらを選択するのに影響する要因は何ですか?(制度的バイアスと既存のインフラストラクチャを無視します。)


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

3


2
PETScは密行列にどの程度役立ちますか?
私が見たところどこでも、PETScのチュートリアル/ドキュメントなどは、線形代数に有用であり、通常、スパースシステムが有益であることを指定しています。密行列はどうですか?密なAのを解くのが心配です。A x = bAバツ=bAx=bAAA FortranでCGとQMRのコードを独自に作成しました。基本的な構成は、疑似コードをリッピングし、可能な限りBLASルーチン(ddot、dnrmおよびdgemv)を少しの自己調整で追加することです。これはPETScと比較してどうですか? 最善の答えは自分で試してみることだと思いますが、時間やその他の理由により不可能です。 どんな助けも大歓迎です。


4
MPIを使用するコード/ライブラリと互換性のある単体テストフレームワークに関する推奨事項はありますか?
通常、シリアルコードを記述し、その際に、xUnitスタイルのテストフレームワーク(MATLAB xUnit、PyUnit / nose、またはGoogleのC ++テストフレームワーク)を使用してユニットテストを記述します。 Googleの大まかな検索に基づいて、実務家がMPIを使用するコードを単体テストする方法についてはあまり見ていません。そのためのベストプラクティスはありますか? ユニットテストとテスト駆動開発の戦略と比較して、テストフレームワークに使用するソフトウェアに関する答えを探しています(存在する場合-答えは「独自のコードをロール」することができます)カスタムテストコードの事例が参考になります)。 私がテストしようとしているもののほとんどは、右側の関数評価と半離散化PDEを統合するタイムステッパーのヤコビ行列アセンブリルーチンです。私はPETScを使用するので、PETSc固有のものがあれば、より一般的なテストフレームワークに加えて役立ちます。 明確化の編集: 例はにあり${PETSC_DIR}/src/ts/examples/tutorials/ex2.c、ここでRHSFunction(右側の関数評価)などのテストを行います。RHSJacobian(ヤコビ行列の評価)。私は、組み立てられた右側と組み立てられたヤコビ行列の既知の値に対してテストします。いくつかの単純な問題の場合、これらの値を分析的に取得できます。これらの関数は、他のアプリケーションレベルの関数を実行しないアプリケーション固有の関数ですが、関数内でベクトルまたは行列のアセンブリが実行されると、MPIを呼び出すことができます(上記のリンクされたPETScの例のように)。プロセッサにローカルなベクトルまたは行列の一部のみを計算する関数を作成する場合、可能な場合はグローバルなアセンブルバージョンに対してテストする必要があります。これは、パラレルプログラミングが初めてなので、グローバルなベクトルとグローバルについて考える方が直感的だからです。マトリックス。これらのテストは、小さな問題サイズと少数のプロセッサーで実行されます。 これを行うためのいくつかの戦略を考えることができます。 このトピックで行ったGoogleの検索に基づいて、おそらくうまく機能しない戦略は、既知の出力を構築し、相対/絶対エラーを並行して見つけ、単純な比較を行うことです。MPIを使用して「Hello、world」プログラムを作成した人なら誰でも、出力が文字化けする可能性があります。これは、単体テストの実行の有用性を制限します。(これが質問をするきっかけになりました。)単体テストフレームワークの呼び出しには、潜在的なトリッキーさもあるようです。 出力をファイルに書き込み(たとえば、PETScでVecViewand を使用してMatView)、ndiffまたはのような既知の出力と比較しnumdiffます。ファイル比較を使用して単体テストを行った以前の経験から得たこのメソッドの直感は、細心の注意が必要であり、フィルタリングが必要になるということです。ただし、上記のユーティリティをプレーンdiffに置き換えることができ、テキスト形式の一致を心配する必要がないため、この方法は回帰テストに優れているようです。この戦略は、WolfgangBangerthとandybauerが提案しているものと多かれ少なかれだと思いました。また、PETScは、一部のテストで同様のアプローチを使用しているようです。 単体テストフレームワークを使用して、MPIランク0のプロセッサにすべてを収集し、プロセッサランクが0の場合にのみ単体テストを実行するように依頼します。標準で同様のことができます(おそらく、その方が簡単です)返されたエラーは、計算に問題があることを示しますが、どの要素にエラーがあるかはわかりません。そうすれば、ユニットテストの出力が文字化けすることを心配する必要はありません。単体テストフレームワークを正しく呼び出すことだけを心配する必要があります。PETScは、正確なソリューションが利用可能な場合、サンプルプログラム内で標準的な比較を使用するように見えますが、それらの比較を行うときにユニットテストフレームワークを使用しません(必ずしもそうする必要はありません)。

5
有限要素行列のスパース構造の計算
質問:有限要素行列のスパース構造を正確かつ効率的に計算するには、どのような方法が利用できますか? 情報:私はポアソン圧力方程式ソルバーに取り組んでおり、Cで記述された2次ラグランジュ基底を使用したGalerkinの方法を使用し、スパースマトリックスストレージとKSPルーチンにPETScを使用しています。PETScを効率的に使用するには、グローバル剛性マトリックスにメモリを事前に割り当てる必要があります。 現在、私は次のように行ごとの非ゼロの数を推定するために模擬アセンブリを行っています(擬似コード) int nnz[global_dim] for E=1 to NUM_ELTS for i=1 to 6 gi = global index of i if node gi is free for j=1 to 6 gj = global index of j if node gj is free nnz[i]++ ただし、ノード間相互作用が複数の要素で発生する可能性があるため、これはnnzを過大評価しています。 どのi、jインタラクションが見つかったかを追跡しようと考えましたが、多くのメモリを使用せずにこれを行う方法はわかりません。ノードをループして、そのノードを中心とした基底関数のサポートを見つけることもできますが、各ノードのすべての要素を検索する必要があり、非効率的です。 私が見つかりました。これは特に書いたステファノM、から、いくつかの有用な情報が含まれて最近の質問を、 私のアドバイスは、それをpythonまたはCで実装し、いくつかのグラフ理論概念を適用することです。つまり、マトリックスの要素をグラフのエッジと見なし、隣接マトリックスのスパース構造を計算します。キーのリストまたは辞書のリストは一般的な選択肢です。 これに関する詳細とリソースを探しています。私は確かに多くのグラフ理論を知らず、役に立つかもしれないすべてのCSトリックに精通していません(数学的な側面からこれに近づいています)。 ありがとう!

2
不定対称システム用のPETScのどの前提条件(およびソルバー)を使用する必要がありますか?
私のシステムは、ラグランジュ乗数を伴う対称FE問題です(たとえば、非圧縮ストークスの流れ)。 (ABBTC)(ABTBC)\begin{pmatrix}A & B^T \\ B & C\end{pmatrix} ここで、は典型的なケースです(ラグランジュ乗数が最後に現れるように方程式に番号が付けられていることを確認しました)。システムは非常に大規模です(+ 100k行)。C= 0C=0C = 0 この質問に対する答えを読んで、混合FE問題に使用できる適切な前提条件が存在するという印象を受けました。 PETScを使用して、MINRES(-ksp_type minres -pc_type none -mat_type sbaij)でシステムを解決できましたが、精度はそれほど高くありません(線形問題に対していくつかのニュートン反復が発生します)。前提条件とksp-solverの他の組み合わせは機能しないようです。 MINRESを使用するよりも速くこのシステムを解決するPETScのフラグの組み合わせはありますか?

3
多くの右側のスパース線形ソルバー
多くの右側(300から1000)で同じ疎な線形システム(300x300から1000x1000)を解く必要があります。この最初の問題に加えて、さまざまなシステムを解決したいと思いますが、同じ非ゼロ要素(値が異なる)で、スパースパターンが一定の多くのスパースシステムです。私の行列は不定です。 因数分解と初期化のパフォーマンスは重要ではありませんが、解決段階のパフォーマンスは重要です。現在、私はPaStiXまたはUmfpackを検討しています。おそらく、両方のソルバーをサポートするPetscをいじります多分私のニーズに合わせて少し変更しますか? スパース行列がまでの場合はどうなりますか?106×106106×10610^6 \times 10^6

2
petsc4pyとc / c ++ / fortranの使用効率
petsc4pyとc / c ++ / fortranはどれくらい遅いですか? 実行されているコードに大きく依存することはわかっていますが、マトリックスベクトル製品のような単純なものはどうでしょうか。
11 petsc  python 

2
科学プログラムでFortranの関数ポインターを操作する方法
Cでの関数ポインターの典型的な使用法を次に示します。Fortranでも同様のことをしたいと思います。私はいくつかのアイデアを持っていますが、そうするための標準的な方法があるかどうかを知りたいです。 ユーザーによって渡された関数ポインターとコンテキストは保存され、後で呼び出されます。 typedef PetscErrorCode (*TSIFunction)(TS,PetscReal,Vec,Vec,Vec,void*); PetscErrorCode TSSetIFunction(TS ts,Vec res,TSIFunction f,void *ctx); ユーザーの関数は、さまざまな時間にコンテキストを使用してコールバックされます。 PETScでは、文字列->関数ポインターテーブルも多用します。すべてがプラグインであるため、ユーザーは独自の実装を登録でき、一流です。 #define PCGAMG "gamg" PCRegisterDynamic(PCGAMG ,path,"PCCreate_GAMG",PCCreate_GAMG); これにより、作成ルーチンが「FList」に登録され、PCSetFromOptions()がこのメソッドを他の選択肢と比較して選択できるようになります。システムが動的ロードをサポートしている場合、PCCreate_GAMGシンボルのコンパイル時の依存関係をスキップしてNULLを渡すだけで、シンボルは実行時に共有ライブラリで検索されます。 これは「工場」を超えた一歩であり、マーティン・ファウラーが「サービスロケーター」と呼ぶものに似た制御デバイスの反転であることに注意してください。 注:これは、Jed Brownとの個人的なやり取りで出てきたもので、Jed Brownがこの質問をしてくれました。私はそれを外部委託し、人々が思い付くことができる答えを見ることにしました。
11 petsc  fortran 

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