問題タブ [finite-element-analysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
2d - 非常に小さなドメインを持つ生物学的に正確なモデルで適切なメッシュを作成する方法
私は、さまざまな生理学的プロセスが発生する組織層の生物学的に正確な 2D 空間モデルを作成しようとしています。これには、主に化学反応、拡散、および境界を越えるフラックスが含まれます。
私はこのモデルを COMSOL Multiphysics で作成しています。COMSOL Multiphysics は、反応拡散システムなどのさまざまな物理を解く有限要素ソフトウェア パッケージですが、私の質問には関係ないかもしれません。
私のジオメトリでは、組織層の細胞間に非常に小さな領域があります。これらの領域は、セル間で拡散が発生する開口部 (接合部) として機能します。ここではメッシュの品質が良くありません。品質を改善したい場合 (主に要素を追加するなどして)、シミュレーション時間が大幅に増加します。メッシュの品質が低いと、収束に時間がかかります。アイデアを与えるためにジオメトリの写真を追加しました。さまざまなメッシュを試しましたが、すべて要素の品質が異なり、要素の数が 16000 から 50000 の範囲でした。
私の FEM のバックグラウンドは本当に限られているので、この問題に取り組めるかどうかを知りたいと思っていました。
- 生物学に悪影響を及ぼさない (組織ドメインのサイズ/問題などを可能な限り生物学的に正確に保つ)、
- シミュレーション時間が大幅に増加することはありません。
- メッシュ品質を向上させます。
ですから、私はすでにいくつかのことを考えているので、最善の方法が何であるかを知りたいと思っています.
最適な生物学的精度のために小さな領域を維持し、比較的短い計算時間を確保できるように、品質の低いメッシュを使用できますか (これはそれほど悪くはありませんが、良くもありません) (収束に至らないことを願っています)。エラー)。しかし、おそらく私が見逃している可能性があります。たとえば、小さなドメインを大きくして、拡散率に何らかの要因を追加することは可能ですか. つまり、ドメインを 2 倍にしたい場合、拡散率を 1/2 にすればよいのでしょうか。それは化学/物理法則でも正確ですか:S.
うまくいけば、私は問題を少し明確にし、助けてくれてありがとう.
乾杯、
組織モデルのメッシュ
matlab - 有限要素法のプログラミング
私は有限要素法について自分自身に教えようとしています。
私のコードはすべて、次のリンクページ 16-20 から改作されています http://homepages.cae.wisc.edu/~suresh/ME964Website/M964Notes/Notes/introfem.pdf
単一の 8 ノード キューブ要素に対して有限要素解析を実行するために、Matlab でプログラミングしています。ローカル軸 xi、eta、zeta を定義したので (これは今のところ x、y、z と考えることができます)、次の形状関数が得られます。
マトリックスは、[N]
私が読んでいるテキストに従って次のように配置されます。
マトリックスを見つけるには、次のマトリックス[B]
を使用する必要があります。[D]
これは続行する演算子[N]
です。( B=DN
)
後で、テキストが示すように、[B]
この要素の体積に対するこの行列の積分を含む計算を行います。
したがって、私の質問は、これらの多項式形状関数を行列に格納し、微分して操作し、数値的に統合するにはどうすればよいかということです。関数をある間隔でベクトルとして定義し、これらのベクトルを行列[0,1]
に格納したため、これが機能しないことがわかります。[N]
次に、diff()
関数を使用して適切に微分し、[B]
行列を見つけます。しかし、 の行列要素[B]
は現在、ある間隔でベクトルに[0,1]
なっているため、問題が発生すると思います。上記の教科書に記載されているこれらの計算をどのように行いますか?
matlab - 行列要素としての多項式関数
行列N
は、多項式関数を含む 2x2 行列です。
ここでx
、 とy
は区間にわたって定義され[0:1]
、正方形の要素を作成します
演算子マトリックスもありますが、D
次の積分を評価したい:
だから私の問題は、次のように定義できないことx
ですy
:
行列内のベクトルを要素として格納length(0:dx:1)
し、不適切な次元のために行列の乗算がうまくいかないためです。
これらの多項式を関数要素として格納し、行列微分演算子で微分する最良の方法は何ですか?D
matlab - Matlabのmexの入力として関数ハンドルを渡す
私は最近、MATLAB で有限要素法に取り組んでいます。
MATLAB でコードを最適化しようとしました。
検索中に、mex 関数を使用すると行列の組み立てが高速化できることがわかりました。
「PoissonAssembler.m」を mex 関数に移植しているときに、いくつかの問題が発生しました。
PoissonAssembler.m は基本的にこのような構造になっています。
matlabでは、私は持っています
この関数は他の数値シミュレーション用に変更されるため、
関数ハンドルを mex ファイルの入力として使用したかった
mexCallMatlab() と feval を使用してこれを行う方法があることがわかりました。
ただし、matlab の呼び出しによるオーバーヘッドが原因で、コードの速度が低下すると思います。
関数ハンドルを変更するたびに mex ファイルをコンパイルせずに回避する方法はありますか?
より正確なコードは次のようになります
matlab - 疎行列の宣言が遅すぎる
私は現在matlabでFEMに取り組んでいます。
私のコードはこのようなものです
A
のサイズはいつですかten million x ten million
、
pre_process
1秒もかかりません
assemble
約5秒かかります
sparse
約820秒かかります
時間のかかる主な行は 1 行sparse
です。
早く集める方法はありますか?
IA
、JA
およびのプロパティA
は
のペアは
(IA[k],JA[k])
、 all に対してすべて異なる値を持ちますk
。結果の行列
A
は下三角であり、ブロック構造を持っています