計算科学

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

2
正確な解を含むヘルムホルツおよび双調和方程式の例
私の数値解と比較するために、正確な解を持つデカルト座標のヘルムホルツ方程式と双調和方程式の例を探しています。 境界条件の問題が正確に定義されているインターネット上で、かなりの数の例を見つけることができました。残念ながら、これらは単なる例であり、正確な解決策は示されていません。 (math.stackexchange.comのように)ソリューションの製造について勇気づけられました。その場合、PDEのスペシャリストが認識しているいくつかの興味深い例は処理されないのではないかと恐れていました。たとえば、楕円形のBVPに関するWikipedaの記事にあるものは興味深いものです。 特定の例、またはWebページや論文への便利なリンクが評価されます。

1
C / C ++での凸型最適化ソルバーのオープンソースでスレッドセーフな実装?
C / C ++の凸型最適化ソルバーのオープンソースでスレッドセーフな実装はありますか? NLopt、Ipopt、OPT ++などの一部のライブラリは、私の要件を満たしていません。 OPT ++とIpoptはスレッドセーフではなく、NLoptには、等式/不等式制約のある凸型プログラミングの問題を解決する特定の/効率的な方法がないようです。
8 optimization  c 

1
疎な複雑な行列をコードからPETScに効率的に取得する方法
FortranコードからPETScに複雑なスパース行列を取得する最も効率的な方法は何ですか?これは問題に依存することを理解しているので、以下に関連する詳細をできるだけ多く記載するようにしました。 私は一緒に遊んでてきたFEAST固有値ソルバー[1]タイプの問題のためのの次元は行列AとBがあるN、およびほとんどすべての時間が解決費やされているN × N複素線形をM0右側のシステム。Nは大きく(3DでのFE基底関数の数)、M0は小さい(私の場合はM0〜20に興味がある)。行列AとBは実対称でスパースであり、解を必要とする複雑な問題はz A − Bであり、ここでzA X = λ B Xあバツ=λBバツA x = \lambda B xああABBBNNNN× NN×NN \times NああABBBzA − Bzあ−BzA-Bzzzは複素数です。FEASTの作成者は、この正確な固有値と固有ベクトルを取得するために、この線形システムの解の精度をそれほど高くする必要がないことを示唆しているようです。そのため、いくつかの高速反復ソルバーは、これに対する優れたソリューションとなる可能性があります。 これまでのところ、複雑なシステムにLapackを使用してきましたが、これは私のコンピューターでにうまく機能します。Nが大きい場合、最適なソルバーがまだわからないので、PETScを使用して、そこで反復ソルバーを試してみたかったのです。N&lt; 1500N&lt;1500N < 1500NNN 私は単純なCドライバーを作成し、それをFortranから呼び出しました。すべてのコードについては[2]を参照してください。問題はこの部分にあります(更新:マトリックスを作成するためにすべての行をここに配置しました。これが関連していること): ierr = MatCreate(PETSC_COMM_WORLD,&amp;A);CHKERRQ(ierr); ierr = MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr); ierr = MatSetFromOptions(A);CHKERRQ(ierr); ierr = MatSetOption(A,MAT_IGNORE_ZERO_ENTRIES,PETSC_TRUE);CHKERRQ(ierr); ierr = MatSetUp(A);CHKERRQ(ierr); for (i=0; i&lt;n; i++) col[i] = i; ierr …

2
オクトリーキューブから四面体
私はボリュームメッシュの詳細を学習しようとしていて、単純なボリュームメッシャーの実装を試みることにしました。私が選択した戦略は、いくつかの基準に基づいて洗練されたオクツリーを使用してスペースを分割することです。2つの隣接するセル間の差が1以下になるように(いわゆる2:1ルール)、オクツリーのバランスが取れていることを確認しました。 細胞を四面体にカットする必要があります。Body Centered Cubic(BCC)がこれを行うための一般的な方法であることを読みましたが、残念ながら、異なるレベルの2つの隣接するキューブ間の違いを処理する方法をうまく説明している文献は見つかりませんでした。 以下に示すように立方体を6つの四面体にカットするのが一般的であることも確認しましたが、異なるレベルの立方体を処理する方法を説明するものは何も見つかりませんでした。 http://www.ics.uci.edu/~eppstein/projects/tetra/sixcube.gif Octreeの立方体を四面体にカットする方法を誰かに説明してもらえれば、このテーマに関する論文やプレゼンテーションを紹介していただければ幸いです。

2
利用可能な導関数なしの2つの関数の同時最大化
2つの変数がkありt、他の2つの変数の関数としてp1とがありp2ます。私はそれらの最大値も知っています。このための分析式はありません。私はの値見つけたいkとt彼らの最大値に最も近いです。 k = f1(p1, p2)and を最適化する方法はありt = f2(p1, p2)ますか? 積k0 * t0や四角形の積、k0^2 * t0^2または他の2つの関係を調べてみることができます。 これは効率的ですか? ありがとうございました。

1
行列の乗算パフォーマンスの急激な低下
行列がキャッシュに収まらない場合の密な行列乗算の実装について読んでいます。私が見たグラフの1つ(これらのスライドのスライド9 )は、単純なアルゴリズムを使用した場合のパフォーマンスの急激な低下を示しています。この低下は速度の約50%であり、マトリックスがまだキャッシュに収まっている間に発生し、1つまたは2つのサイズでのみ発生します。素朴なアルゴリズムを使用するつもりはありませんが、突然のパフォーマンス低下の原因を知りたいのですが。(低下はブロックされたアルゴリズムでも発生しますが、はるかに小さいです。)

1
ノイマン境界条件のフーリエ変換
2つの連立偏微分方程式系を数値的に解く必要があります。 ∂x1∂t∂x2∂t=c1∇2x1+f1(x1,x2)=c2∇2x2+K∂x1∂t∂x1∂t=c1∇2x1+f1(x1,x2)∂x2∂t=c2∇2x2+K∂x1∂t\begin{align} \frac{\partial x_1}{\partial t} &= c_1\nabla ^2 x_1 + f_1(x_1,x_2)\\ \frac{\partial x_2}{\partial t} &= c_2\nabla ^2 x_2 + K\frac{\partial x_1}{\partial t} \end{align} システムのドメインは正方形の領域です。 境界条件: xy=constant⟹∂x1∂x=∂x2∂x=0=constant⟹∂x1∂y=∂x2∂y=0x=constant⟹∂x1∂x=∂x2∂x=0y=constant⟹∂x1∂y=∂x2∂y=0\begin{align} x &= \text{constant} \implies \frac{\partial x_1}{\partial x} = \frac{\partial x_2}{\partial x} = 0\\ y &= \text{constant} \implies \frac{\partial x_1}{\partial y} = \frac{\partial x_2}{\partial y} …

3
Cythonからの乱数生成
cythonを使用してPythonプログラムを高速にしたいのですが、内部ループがまだ乱数ジェネレーターへのPython呼び出しを遅くしています!数年前、この同じ問題が賢人サポートの誰かによって提起され、その時点で良い解決策はないようでした。ランダムなサンプルの長いリストを事前に生成するのは便利ではありません。以前のサンプルを条件とする方法でさまざまな分布から実際にサンプリングしているからです。 これが、cythonからgslに接続することによってこれがどのように回避されたかを説明するブログ投稿です:http ://pyinsci.blogspot.com/2010/12/efficient-mcmc-in-python-errata-and.html そして、誰かがgsl kludgeを実装しようとしているstackoverflowの投稿:https://stackoverflow.com/questions/8177446/random-number-generators-to-work-on-x86-64

1
自動ステップサイズ選択を使用したコードで、時間ステップサイズが十分に小さいことを示す
私は最近、非常に固い一時的な問題を解決する多数のレガシーコードを継承しました。計算されたソリューションの質的性質が減少しても変化しないように、空間的および時間的ステップサイズが十分に小さいことを示したいと思います。つまり、定性的には「収束」していることを示したいと思います。空間メッシュサイズを明示的に設定できるため、その部分は簡単です。ただし、コードでは自動タイムステップサイズ制御を使用しているため、タイムステップサイズを直接設定することはできません。 アルゴリズムは、最後のタイムステップ中に許容誤差に到達するために必要なヤコビの反復回数に基づいて、2つの境界間のタイムステップを変更します。ヤコビアン反復法を使用しているという事実は、それが何らかの暗黙のスキームであることをかなり確信させますが、私は絶対的に確信することはできません。現在のタイムステップで発生しているエラーが考慮されていないため、場合によっては反復制限に達します(数千のタイムステップの間に数​​十回、ほとんどの場合、最も動的な部分で発生します)。シミュレーション)。現在実行中の実行タイムステップの境界を2桁半の間隔(から)で設定しています。 nnn10−1310−1310^{-13}5⋅10−115⋅10−115 \cdot 10^{-11} 実行では、時間ステップの境界、現在の時間ステップを選択するために監視する過去の時間ステップの数、時間ステップの最大変化(比率)、ヤコビアン反復の目標数、最大反復回数、およびエラー限界。誰かが私をタイムステップの独立性を分析するための正しい道に導いてくれるか、少なくとも使用されているアルゴリズムを理解することができればいいのですが。

3
流体力学における大規模への小規模の影響を推定する方法は?
直接数値シミュレーションが実行されると仮定すると、流体力学における小規模の大規模への影響を推定するための良い方法は何ですか?たとえば、グリッドサイズの異なる2つのランまたは粘度の異なる2つのランを比較することは適切ですか。これに関連する統計ツールはありますか? 大規模なフィールドは、粗いフィールドとして定義できます ここで、はスケール正規化された畳み込みカーネルです。たとえば、G_lの形式はG_l(y)= l ^ {-3} / \ sqrt {2 \ pi} \ exp(-((y / l)^ 2/2)にすることができます。q¯¯l(t,x)=∫Gl(y)q(t,y+x)dyq¯l(t,x)=∫Gl(y)q(t,y+x)dy\begin{equation} \overline{q}_l(t,\mathbf{x})=\int G_l(\mathbf{y}) q(t,\mathbf{y}+\mathbf{x})d\mathbf{y} \end{equation}GlGlG_llllGlGlG_lGl(y)=l−3/2π−−√exp(−((y/l)2/2)Gl(y)=l−3/2πexp⁡(−((y/l)2/2)G_l(y)=l^{-3}/\sqrt{2 \pi} \exp(-((y/l)^2/2) 小スケールフィールドは\ begin {equation} q'_l = q- \ overline {q} _l \ end {equation}として定義され q′l=q−q¯¯lql′=q−q¯l\begin{equation} q'_l=q-\overline{q}_l \end{equation} あるスケールlllダイナミックの小さなスケールを削除できる場合、小さなスケールの大きなスケールへの影響は、完全な動的システムのフィールドと打ち切られた動的システムのフィールドの差になります。

5
非線形方程式の反復解
この質問がばかげている場合は、事前にお詫び申し上げます。の根を計算する必要があります u − f(u )= 0u−f(u)=0\begin{equation} u -f(u) =0 \end{equation} ここで、は実数ベクトルで、は実数ベクトル値関数です。私はニュートンの方法(うまくいった)から始めましたが、もっと簡単な方法が反復的な解決策になることに気付きましたf (u )あなたuuf(u )f(u)f(u) あなたi + 1= f(u私)ui+1=f(ui)\begin{equation} u_{i+1} = f(u_{i}) \end{equation} これははるかに速く、明らかにニュートンの方法と同じくらい正確/安定です。 今の質問: これは正しいアプローチですか、それとも別の方法を使用する必要がありますか? 収束率、安定性、加速度などについて言えることはありますか? グローバルに収束していますか? ご清聴ありがとうございました。

1
rotheの方法と線の方法によるPDEの離散化(モジュラー実装)
熱方程式は、FV(またはFEM)を使用して空間で離散化され、半離散方程式が得られます(ODEのシステム)。行の方法と呼ばれるこのアプローチでは、コードを重複させることなく、一時的な離散化から別の離散化に簡単に切り替えることができます。特に、ODEのタイムインテグレーターを簡単に再利用できます。これは、空間離散化をFVからFEに変更することを決定した場合でも、半離散方程式を取得し、時間積分器が機能するため、非常に便利です。 現在、私は同じ問題に対してrotheの方法を実装しようとしています。ただし、時間内での離散化では、まず、使用したいすべての時間的離散化スキームの空間的離散化を書き換える必要があります。これにより、以前使用していたタイムインテグレーターを再利用する必要がなくなり、線の方法またはRotheの方法の両方を使用してPDEを離散化できるモジュラーソフトウェアの作成が非常に複雑になります。 コードを複製せずに両方のアプローチを実装する方法はありますか? 編集: 対流が支配する問題では、FEの離散化には時間と空間の両方で安定化が必要であり、Rotheの方法が「最良の」選択になります。ただし、これはFV / DGメソッドには当てはまりません。 線の方法では、PDEはまず空間で、次に時間で離散化されます。Rotheの方法では、PDEは最初に時間で離散化され、次に空間で離散化されます。3番目の可能性は、空間と時間の両方を同時に離散化することです(時空間離散化とも呼ばれます)。線の方法とRotheの方法についての議論はここにあります。詳細については、DoneaとHuertaによる「フロー問題の有限要素法」という本が参考になります。

2
コードに関するプロファイリング/タイミング情報を報告するにはどうすればよいですか?
Computational Physicsジャーナルの多くの出版物がコードのパフォーマンスにさまざまなメトリックを使用しているのを見てきました。特にGPGPUコードの場合、ユーザーが公開するタイミング結果には非常に多くの種類があるようです。特に、私は見ました: timeGPUとCPUのバージョンで(基本的に)実行し、平均を報告することの比較 呼び出された各GPU / CPU関数のプロファイリングデータの比較(そのため、実行されたmainすべての関数のタイミングを調整しますが、ドライバーの初期化時間は無視します) メモリ転送(この場合はPCI-Eバスを介して)、ディスクへのI / O、あるフォーマットから別のフォーマットへのデータ変換などを無視した、いくつかの関連機能のデータのプロファイリングの比較 1つの関数のみのプロファイリングデータの比較(たとえば、CPUとGPU量子モンテカルロでスピン更新を実行する時間のみを比較)、メモリ転送時間、ディスクへのI / O、ハミルトニアンの設定/対角化などを無視、など 2番目と3番目のメリットも確認​​できますが、最初のオプションは4つの中で最も「正直」です。言語間またはInfinibandとGigabit間のI / O実装の違いが4.99秒だった場合、5秒のランタイムの違いを報告するのは少しばかげています。最後のオプションは、この関数がプログラム全体の問題点でない限り、それについての情報を報告することは、私の結果を複製している誰かが見るパフォーマンスを反映しないだけなので、私には少し「不器用」に思えます。これらのアプローチのどれがより正直ですか?理想的には、紙にはこれらすべてが含まれますが、図/長さに制限がある場合、これは最も価値があり、正直で、提供に関連性がありますか?

1
非構造化メッシュでのローカル適応メッシュ細分割(ローカルAMR)の戦略は何ですか?
非構造化メッシュのローカルAMRに興味があります。現在、OpenFOAMライブラリを使用しています-完全に構造化されていないローカルAMRをサポートしています。 セル絞り込み条件は、切り取られるセルのリストを決定します 選択したセルがリファインされます:メッシュ全体が再構築されます 古いメッシュから新しいメッシュにマップが作成されます 接続性が再計算されます(フェースセル、エッジフェースなど) フィールドは新しいメッシュにマッピングされます 関係するデータ構造は基本的にC ++ベクトルであるため、メッシュは膨張してコピーされます。 静的データ構造を使用するメッシュ上に構築できる代替アプローチについて学ぶ必要があります。それらの一つは、中に存在する並列オクツリーフォレストローカルAMR、あるp4estとデンドロ。 誰かが非構造化メッシュのローカル適応AMR戦略に関する最近のレビューペーパーを私に指摘できますか? 経験に基づくアドバイスはさらに優れています。どのローカルAMRエンジンが、固定データ構造ベースの非構造化メッシュに最適ですか? 論文の最初のページでツリー間の通信のバランスについて読む前に、概要が必要です。:)

1
球面極座標の有限差分座標変換
運動量保存方程式で表される問題の一部があります。 ∂ρ∂t+ 1罪θ∂∂θ(ρ uの罪θ )= 0∂ρ∂t+1罪⁡θ∂∂θ(ρあなた罪⁡θ)=0\frac{\partial \rho}{\partial t} + \frac{1}{\sin\theta} \frac{\partial}{\partial \theta}(\rho u \sin \theta) =0 ここで、およびρ = f (θ 、t )(一定速度)。u = f(θ )あなた=f(θ)u=f(\theta)ρ = f(θ 、t )ρ=f(θ、t) \rho = f(\theta,t) 単純に、ここにリストされているソリューションの1つを適用できます。当面の問題は、球の極座標(薄い球殻)とデカルトのそれらの解で最もよく説明されます。この方程式を離散化する前に何らかの座標変換を行う必要がありますか、それとも直接離散化できますか? 次に、最初にの導関数を拡張してθθ\thetaから離散化を試みる必要がある理由はありますか? 注として、私は上記のいくつかを実行し、一貫していないように見えるソリューションを取得しました(物理的にはいくつかは理にかなっているようです)。適切な座標変換を行う必要があるかどうか、または前述の方法のいずれかで十分かどうかに興味があります。 編集: フラックスを次のように定義します。 Φ私は+ 1 / 2= u私は+ 1 / 2+ | あなた私は+ 1 / 2|2ρ私罪θ私+ …

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