matlab-solve-pde について
PDE Toolboxで有限要素解析を行うMATLABユーザー向けのワークフロースキルです。最新の `femodel` を使い、ジオメトリ作成から解析、結果の後処理までを扱います。
主な機能
- 012D・3Dジオメトリの作成と編集
- 02材料、境界条件、荷重の設定
- 03メッシュ生成とPDEの求解
- 04結果の補間、計算、可視化
活用シーン
- 01熱、構造、電磁気モデルの構築
- 02STLまたはSTEPジオメトリの読み込み
- 03モデル設定と解析結果の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-solve-pdeインストール後、Claude Code で/matlab-solve-pdeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlreferences/bc-load-reference.mdboolean-and-cell-ops.mddamping-reference.mddecsg-and-2d-geometry.mdelectromagnetic-setup.mdem-postprocessing.mdmodal-and-reduced-order.mdnonconstant-parameters.mdprimitives-and-import.mdtime-dependent-loads.mdvisualization-reference.md詳細
PDE Toolbox — 有限要素解析の全ワークフロー
有限要素解析を最初から最後まで実行します:ジオメトリ → モデル設定 → 求解 → 後処理。最新の femodel ワークフロー(R2025a+)を使用します。
使用する場面
- プリミティブ(
multicuboid、multicylinder、multisphere)、STL/STEP のインポート、または 2-D のdecsgでジオメトリを構築する場合 - 境界条件、荷重、材料、初期条件を指定して
femodelを設定する場合 - 熱、構造、または電磁気の問題(定常、過渡、モーダル、周波数、伝導)を解く場合
- 有限要素結果の後処理:補間、派生量の計算、可視化
使用しない場面
- 一般方程式 PDE(
createpde(N))— ここではレガシーワークフローを扱いません - システムレベルのシミュレーション(Simulink/Simscape)— 製品固有のスキルを使用してください
- PDE 求解を伴わないメッシュのみのタスク(例:可視化用の表面メッシュ作成)
ワークフローの概要
- ジオメトリ — プリミティブ、
decsg、ファイルのインポート、またはブール演算で作成し、fegeometryでラップします - モデル —
femodel(AnalysisType=..., Geometry=gm)→ 材料、境界条件、荷重、初期条件を設定します - メッシュ —
generateMesh(model)(まずはデフォルトを使用し、必要に応じて細分化します) - 求解 —
result = solve(model)またはsolve(model, tlist) - 後処理 — フィールドの抽出、補間、派生量の計算、可視化を行います
フェーズ 1:ジオメトリ
fegeometry — 中心となるオブジェクト
gm = fegeometry(multicuboid(1, 1, 1)); % From primitives
gm = fegeometry("model.stl"); % From STL/STEP file
gm = fegeometry(decsg(gd, sf, ns)); % From 2-D CSG
gm = fegeometry(nodes, elements); % From mesh data
fegeometry は femodel ワークフロー専用です。 createpde(N) で fegeometry を使用しないでください。レガシーワークフローでは、代わりに geometryFromEdges(2-D)または importGeometry(3-D)を使用します。このスキルでは femodel のみを扱います。
主なプロパティ:NumCells、NumFaces、NumEdges、Vertices
3-D プリミティブ
| 関数 | 原点 | 引数 |
|---|---|---|
multicuboid(W, D, H) | x-y 中心、底面は z=0 | 幅、奥行き、高さ |
multicylinder(R, H) | x-y 中心、底面は z=0 | 半径、高さ |
multisphere(R) | 原点を中心とする | 半径 |
セルの入れ子(ベクトル)、積層(ZOffset)、中空(Void=[true,false]):
gm = fegeometry(multicylinder([0.3, 0.5], 1, Void=[true, false])); % hollow pipe
gm = fegeometry(multicuboid([1, 1], [1, 1], [0.3, 0.7], ZOffset=[0, 0.3])); % stacked
オプションの全一覧とファイルのインポート方法については、references/primitives-and-import.md を参照してください。
ブール演算
gmCombined = union(gm1, gm2); % Merge into 1 cell
gmCombined = union(gm1, gm2, KeepBoundaries=true); % Preserve cells (multi-material)
gmCombined = union(gm1, gm2, KeepBoundaries=[true, false]); % Selective per shape
gmResult = subtract(gm1, gm2); % Cut gm2 from gm1
gmResult = intersect(gm1, gm2); % Keep only overlapping region
KeepBoundaries:形状ごとに異なる材料を設定する場合は true を使用します(内部面をセル境界として保持します)。単一のセルに統合する場合は、省略するか false を使用します。
ブール演算後のセルの変更:
gm = mergeCells(gm); % Merge ALL cells into one
gm = mergeCells(gm, [2, 3]); % Merge specific cells (must be connected)
gm = deleteCell(gm, cellIDs); % Remove unwanted cells
ルール: 最初に和集合、最後に減算を行います。関数名は subtract です — subtractgeom ではありません。中空化済みの部品を組み立てないでください。最後に mergeCells を呼び出すのは 1 回だけです。
詳しい方針(Sculpt+Carve、Void フラグ、addCell、addVoid、面のインプリント)については、references/boolean-and-cell-ops.md を参照してください。
decsg による 2-D ジオメトリ
各形状はジオメトリ行列の列ベクトルです。最初の要素で形状の種類を指定します。
| 種類コード | 形状 | 列の形式 |
|---|---|---|
1 | 円 | [1; xc; yc; r; 0; ...] |
2 | 多角形 | [2; N; x1;...;xN; y1;...;yN] |
3 | 矩形 | [3; 4; x1;x2;x3;x4; y1;y2;y3;y4](反時計回りの頂点) |
4 | 楕円 | [4; xc; yc; a; b; angle; 0; ...] |
すべての列の行数を揃える必要があります。短い列には 0 を追加してください。式には +(和集合)、-(減算)、*(積集合)を設定します。
R1 = [3; 4; 0; 1; 1; 0; 0; 0; 0.5; 0.5];
C1 = [1; 0.5; 0.25; 0.15; 0; 0; 0; 0; 0; 0];
gd = [R1, C1]; sf = '(R1-C1)'; ns = char('R1', 'C1')';
gm = fegeometry(decsg(gd, sf, ns));
多角形の頂点、極座標形状、押し出し、名前空間のルールについては、references/decsg-and-2d-geometry.md を参照してください。
エンティティの識別
topFace = nearestFace(gm, [0, 0, 1]); % Single point: row vector
faceIDs = nearestFace(gm, [0 0 1; 0 0 0]); % Multiple points: N×3 matrix
frontEdge = nearestEdge(gm, [0.5, 0, 0.5]);
cellID = findCell(model.Geometry, [x, y, z]); % fegeometry only (not DiscreteGeometry)
facesOfCell = cellFaces(gm, 1); % All faces of cell 1
facesOfCell = cellFaces(gm, 1, "external"); % Only outer boundary faces
edgesOfCell = cellEdges(gm, 1);
edgeIDs = faceEdges(gm, faceID);
fIDs = facesAttachedToEdges(gm, edgeID); % Faces sharing an edge
fIDs = facesAttachedToEdges(gm, edgeID, "internal"); % Only internal faces (3-D)
メッシュ作成前に面/エッジを識別してください。 nearestVertex は存在しません — gm.Vertices と距離計算を使用してください。
変換
gm = translate(gm, [dx, dy, dz]);
gm = rotate(gm, angle); % angle° about z through origin
gm = rotate(gm, angle, [cx cy cz]); % about z through point [cx,cy,cz]
gm = rotate(gm, angle, [x1 y1 z1], [x2 y2 z2]); % about LINE from pt1 to pt2
gm = scale(gm, [1, 1, -1]); % reflect across z=0 (use -1 on axis to flip)
rotate の 4 引数形式: 2 つの引数はいずれも、方向と原点ではなく、回転軸を定義する点です。たとえば、原点を通る y 軸を中心に回転する場合は、rotate(gm, 90, [0 0 0], [0 1 0]) を使用します。3 引数形式では z 軸を中心とした回転のみ可能です。
押し出し
gm3d = extrude(gm2d, [0.1, 0.3, 0.1]); % 2-D → 3-D stacked layers along z
gm = extrude(gm, faceID, 0.2); % 3-D face extrusion along outward normal
メッシュ生成
必要な場合にのみメッシュを生成します。 デフォルト → グローバル → ローカルの順に詳細度を上げます。
gm = generateMesh(gm); % Default (try first)
gm = generateMesh(gm, Hmax=0.1, Hmin=0.01); % Global control
gm = generateMesh(gm, HFace={[3,5], 0.02}); % Local face refinement (cell array!)
gm = generateMesh(gm, HEdge={edgeIDs, 0.005}, Hmax=0.2, Hgrad=1.5);
gm = generateMesh(gm, HVertex={vtxID, 0.005}, Hgrad=1.5); % Stress concentrations
GeometricOrder:デフォルトは "quadratic" です。より高速に解析する場合は "linear" を使用します。重要: 3-D の magnetostatic/magneticHarmonic/electricHarmonic には線形メッシュ(ネデレック要素)が必要です。generateMesh がこれを自動的に処理します。
メッシュのプロパティ: mesh.Nodes(3×N)、mesh.Elements(接続情報)、meshQuality(mesh)(0~1)、area(mesh)、volume(mesh)。
フェーズ 2:モデルの設定
単位: PDE Toolbox に単位系はありません。すべての入力は数値のみです。寸法、物性値、荷重、定数を一貫した単位系に保つ必要があります。SI 単位系を前提にしないでください。
モデルの作成
model = femodel(AnalysisType="thermalSteady", Geometry=gm);
AnalysisType リファレンス
| AnalysisType | 用途 |
|---|---|
"thermalSteady" / "thermalTransient" / "thermalModal" | 熱伝達 |
"structuralStatic" / "structuralTransient" / "structuralModal" / "structuralFrequency" | 応力/変位 |
"electrostatic" / "magnetostatic" / "dcConduction" | 静的 EM |
"electricHarmonic" / "magneticHarmonic" | AC EM |
パターンは <physics><Type> です。"transientStructural" や "steadyStateThermal" は絶対に使用しないでください。
材料プロパティ
model.MaterialProperties = materialProperties(Material="steel"); % Catalog (preferred)
model.MaterialProperties = materialProperties(YoungsModulus=70e9, PoissonsRatio=0.33); % Explicit
model.MaterialProperties(cellID) = materialProperties(Material="copper"); % Per-cell
カタログ名:"copper"、"Invar"、"steel"、"aluminum"、"brass"、"tungsten"、"iron"、"gold"、"silver"、"lead"、"zinc"、"glass"、"concrete"、"wood"。
直交異方性(構造):3 つすべてに 3 要素ベクトルを指定します。ShearModulus にスカラー形式はありません。
model.MaterialProperties = materialProperties(YoungsModulus=[Ex Ey Ez], ...
PoissonsRatio=[nu_xy nu_yz nu_xz], ShearModulus=[Gxy Gyz Gxz], MassDensity=rho);
注: 構造解析は線形弾性のみです。塑性モデルや超弾性モデルには対応していません。
構造減衰
形式は 3 つあります。ヒステリシス減衰(materialProperties の HystereticDamping=η、周波数応答のみ)、レイリー減衰(model.DampingAlpha、model.DampingBeta、過渡解析/周波数解析)、モード減衰(ModalResults を使用し、求解時に DampingZeta=ζ を指定)。
% Hysteretic — frequency response
model.MaterialProperties = materialProperties(..., HystereticDamping=0.05);
% Rayleigh — transient/frequency (C = alpha*M + beta*K)
model.DampingAlpha = 10; model.DampingBeta = 0.002;
% Modal — with modal superposition
R = solve(model, tlist, ModalResults=Rm, DampingZeta=0.02);
周波数依存減衰と各形式の使い分けについては、references/damping-reference.md を参照してください。
非定数(関数)パラメーター
任意の材料プロパティ、境界条件、荷重には関数ハンドルを指定できます。シグネチャ:境界条件/荷重/材料には @(location, state)、初期条件のみに @(location) を使用します。
location:.x、.y、.z(常時)、.nx、.ny、.nz(境界のみ)。
state:.time、.frequency、.u、.ux/.uy/.uz、.NormFluxDensity(解析に依存)。
NaN の規約(重要): ソルバーは state フィールドに NaN を含む状態で関数を評価します。state フィールドが NaN の場合、関数は適切なサイズの NaN を返す必要があります。単純な算術演算では NaN が自動的に伝播します。明示的なチェックが必要なのは条件分岐だけです。
pressure = @(location, state) ...
ifelse(isnan(state.time), NaN(1,numel(location.x)), ...
1e5*sin(2*pi*100*state.time)*ones(1,numel(location.x)));
ベクトル化: 出力は、スカラーの場合は 1×Np の行、ベクトルの場合は 3×Np の行列にします。state フィールドと出力サイズの規則については、references/nonconstant-parameters.md を参照してください。条件分岐を含む NaN パターンの全容については、references/time-dependent-loads.md を参照してください。
境界条件と荷重
規則: 規定値(ディリクレ条件)→ 境界条件。それ以外 → 荷重。
境界の次元規則:
- 3-D: 境界 = 面、辺、頂点(領域 = セル);体積荷重 =
cellLoad - 2-D: 境界 = 辺、頂点(領域 = 面);体積荷重 =
faceLoad
| 境界条件(ディリクレ) | 荷重(ノイマン/ロビン) |
|---|---|
faceBC、edgeBC、vertexBC | faceLoad、edgeLoad、cellLoad、vertexLoad |
Temperature、Constraint、XDisplacement | Heat、ConvectionCoefficient+AmbientTemperature |
Voltage、MagneticPotential | Pressure、SurfaceTraction、Force |
model.FaceBC(topFace) = faceBC(Temperature=100); % 3-D thermal
model.EdgeBC(edgeID) = edgeBC(Temperature=100); % 2-D thermal
model.VertexBC(vtxID) = vertexBC(Constraint="fixed"); % Structural pin
model.FaceLoad(sideFace) = faceLoad(ConvectionCoefficient=30, AmbientTemperature=25);
model.VertexLoad(tipVtx) = vertexLoad(Force=[0; -1000; 0]); % Full vector, no YForce
model.CellLoad(1) = cellLoad(Heat=1e6); % Body load (3-D)
model.CellLoad(1) = cellLoad(Gravity=[0; 0; -9.81]); % Self-weight (structural 3-D)
model.CellLoad(1) = cellLoad(Temperature=thermalResults); % Thermal stress coupling (3-D)
model.FaceLoad(1) = faceLoad(Gravity=[0; -9.81]); % Body loads in 2-D use faceLoad
vertexBC は構造解析専用です:Constraint="fixed"、XDisplacement、YDisplacement、ZDisplacement。
よくある間違い: faceBC での対流 → エラー(荷重です)。2-D での faceBC → エラー(edgeBC を使用)。2-D での cellLoad → エラー(faceLoad を使用)。
プロパティの全一覧については、references/bc-load-reference.md を参照してください。
放射
faceLoad/edgeLoad で Emissivity を使用する場合は、model.StefanBoltzmannConstant = 5.670374419e-8 を設定し、すべての温度をケルビンで指定します。
熱応力
温度荷重によってひずみが発生するのは、ReferenceTemperature が設定されている場合のみです:
model.ReferenceTemperature = 20; % Strain = CTE × (T - Tref)
初期条件
すべての過渡解析で必須です。 構造過渡解析では、変位と速度の両方が必要です。
model.CellIC = cellIC(Temperature=25); % Thermal 3-D
model.FaceIC = faceIC(Temperature=25); % Thermal 2-D
model.CellIC = cellIC(Displacement=[0;0;0], Velocity=[0;0;0]); % Structural 3-D
model.FaceIC = faceIC(Displacement=[0;0], Velocity=[0;0]); % Structural 2-D
model.CellIC = cellIC(MagneticVectorPotential=Rlin); % Nonlinear mag 3-D
PlanarType(2-D)
構築後に設定します:model.PlanarType = "planeStress";(または "planeStrain"、"axisymmetric")
モデルの再利用 — 必ず再利用する
同じジオメトリで複数の解析タイプが必要な場合は、既存のモデルの AnalysisType を変更してください。2 つ目の femodel は決して作成しないでください:
model = femodel(AnalysisType="structuralStatic", Geometry=gm);
model.MaterialProperties = materialProperties(Material="brass");
model.FaceBC(bottomFace) = faceBC(Constraint="fixed");
model = generateMesh(model);
staticResult = solve(model);
model.AnalysisType = "structuralModal"; % Reuse — geometry, material, mesh carry over
modalResult = solve(model, FrequencyRange=[-Inf, 5000]);
model.AnalysisType = "structuralTransient"; % Modal transient
transientResult = solve(model, tlist, ModalResults=modalResult, DampingZeta=0.02);
マルチフィジックス連成のシーケンス:
| シーケンス | パターン | 注意点 |
|---|---|---|
| 静解析 → モーダル解析 → 過渡解析 | AnalysisType を変更し、メッシュを再利用 | なし |
| dcConduction → magnetostatic | cellLoad(CurrentDensity=conductionResults) | 再メッシュが必要です:magnetostatic では Nedelec(線形)要素を使用します。dcConduction のデフォルトは二次要素です |
| electrostatic → electricHarmonic | AnalysisType を変更し、周波数を追加 | VacuumPermeability を追加します(調和解析では両方の定数が必要です) |
| magnetostatic → magneticHarmonic | AnalysisType を変更し、周波数を追加 | メッシュがすでに線形なら不要です |
| thermalSteady → structuralStatic | cellLoad(Temperature=thermalResults) | 構造モデルに ReferenceTemperature を設定します |
メッシュ再生成のルール: magnetostatic、magneticHarmonic、または electricHarmonic(Nedelec 要素)に切り替える場合、メッシュは線形である必要があります。直前の解析で二次要素(デフォルト)を使用していた場合は、再度 generateMesh(model) を呼び出してください。これらのタイプでは、ソルバーが線形次数を自動選択します。
電磁界解析の設定
EM タイプでは真空定数が必要です:
model.VacuumPermittivity = 8.854187817e-12; % Required for electrostatic, harmonic
model.VacuumPermeability = 4*pi*1e-7; % Required for magnetostatic, harmonic
非線形透磁率(magnetostatic):μr は @(~,s) muRfcn(s.NormFluxDensity) として表します。2 段階で解きます。まず定数 μr で線形解析を行い、その結果を cellIC(MagneticVectorPotential=Rlin) で初期推定値として使用します。
CurrentDensity の形式(2-D ではスカラー、3-D ではベクトル)、非線形 B-H ワークフロー、調和電磁界解析、遠方界境界条件については、references/electromagnetic-setup.md を参照してください。
フェーズ 3:求解
| 解析タイプ | 構文 | 注記 |
|---|---|---|
| 定常/静解析 | R = solve(model) | thermalSteady、structuralStatic、electrostatic、magnetostatic、dcConduction |
| 過渡解析 | R = solve(model, tlist) | tlist = 単調増加するベクトル(秒) |
| モーダル解析(構造) | R = solve(model, FrequencyRange=[ω1, ω2]) | 範囲は rad/s です。下限には -Inf を使用します |
| モーダル解析(熱) | R = solve(model, DecayRange=[-Inf, λmax]) | 減衰率は s⁻¹ です。下限には -Inf を使用します |
| 周波数応答 | R = solve(model, flist) | flist の単位は rad/s です(Hz の値に 2π を掛けます) |
| モーダル重ね合わせ | R = solve(model, tlist, ModalResults=Rm) | 事前のモーダル解析を用いた過渡解析または周波数解析 |
| POD(熱) | R = solve(model, tlist, Snapshots=Tmatrix) | Tmatrix = 粗いメッシュの解析で得られた Temperature |
| 調和電磁界解析 | R = solve(model, omega) | omega の単位は rad/s です |
単位の規約(重要): FrequencyRange、flist、omega はすべて rad/s 単位であり、Hz 単位ではありません。変換式:omega = 2*pi*freqHz。
R = solve(model); % Steady/static
R = solve(model, linspace(0, 2, 100)); % Transient
R = solve(model, FrequencyRange=[-Inf, 2*pi*500]); % Modal
R = solve(model, 2*pi*linspace(10, 1000, 200)); % Frequency response
Rm = solve(model, FrequencyRange=[-Inf, 2*pi*500]); % Modal superposition...
R = solve(model, tlist, ModalResults=Rm, DampingZeta=0.02);
coarseR = solve(model, linspace(0, 40, 10)); % POD thermal...
R = solve(model, linspace(0, 40, 200), Snapshots=coarseR.Temperature);
SolverOptions: model.SolverOptions.RelativeTolerance、model.SolverOptions.AbsoluteTolerance。
範囲を段階的に広げる方法(モーダル解析/減衰解析): 大きな上限値を推測で設定しないでください。まず小さな値から始め、モード数を確認し、必要な場合にのみ範囲を広げます。DecayRange についても同様です。詳しくは、references/modal-and-reduced-order.md の説明とモーダル過渡解析のワークフローを参照してください。
フェーズ 4:後処理
結果オブジェクト
| 解析 | 主なプロパティ | 主なメソッド |
|---|---|---|
thermalSteady | Temperature | evaluateHeatFlux、evaluateHeatRate、interpolateTemperature |
thermalTransient | Temperature(N×T)、SolutionTimes | 同上 + filterByIndex |
structuralStatic | Displacement、VonMisesStress、Stress、Strain | evaluatePrincipalStress、evaluateReaction、interpolateDisplacement |
structuralTransient | Displacement(N×T)、SolutionTimes | evaluateVonMisesStress、evaluateStress、filterByIndex |
structuralFrequency | Displacement(N×F)、SolutionFrequencies | evaluateVonMisesStress、evaluateStress(filterByIndex なし) |
structuralModal | NaturalFrequencies、ModeShapes | solve(..., ModalResults=R) に渡します |
electrostatic | ElectricPotential、ElectricField | interpolateElectricPotential、interpolateElectricField、interpolateElectricFlux |
magnetostatic | MagneticFluxDensity、MagneticField | interpolateMagneticFlux、interpolateMagneticField |
conduction | ElectricPotential、CurrentDensity | interpolateCurrentDensity |
重要なルール
Stress.Magnitudeは EMPTY です —result.VonMisesStress(静解析)またはevaluateVonMisesStress(result)(過渡解析)を使用しますevaluateHeatFluxは 3 つの出力が必要です:[qx, qy, qz] = evaluateHeatFlux(result)- 過渡解析の応力/ひずみはプロパティではなくメソッドです:
evaluateVonMisesStress(result)、evaluateStress(result) - FEStruct のフィールド名 — 必ず分野固有の名前を使用します:
| 解析 | フィールド | 使用禁止 |
|---|---|---|
| 変位 | .ux、.uy、.uz | .x、.y、.z |
| 応力 | .sxx、.syy、.szz、.syz、.sxz、.sxy | .xx、.yy |
| ひずみ | .exx、.eyy、.ezz、.eyz、.exz、.exy | .xx、.yy |
| 電界 | .Ex、.Ey、.Ez | .x、.y、.z |
| 磁束密度 | .Bx、.By、.Bz | .x、.y、.z |
| 電流密度 | .Jx、.Jy、.Jz | .x、.y、.z |
補間
問い合わせ点は 3×N 行列です(各列が 1 つの点です):
Tq = interpolateTemperature(result, queryPts); % Steady: no iT needed
Tq = interpolateTemperature(result, queryPts, iT); % Transient: iT REQUIRED
d = interpolateDisplacement(result, queryPts); % Returns all times (no iT accepted)
iT の非対称性: interpolateTemperature(過渡解析)では時間インデックス iT が必須です。interpolateDisplacement は iT を受け取りません — すべての時刻の値を返します。中間時刻には、SolutionTimes に対して interp1 を使用します。
filterByIndex — 時間ステップの抽出
過渡解析の可視化には必須です(pdeplot3D では N×T ではなく N×1 が必要です):
resultF = filterByIndex(result, numel(result.SolutionTimes));
vm = evaluateVonMisesStress(resultF);
pdeplot3D(resultF.Mesh, ColorMapData=vm, Deformation=resultF.Displacement, DeformationScaleFactor=100);
FrequencyStructuralResults では使用できません — 列を直接インデックス指定します:
iFreq = 10;
vm = evaluateVonMisesStress(result); % N×F
pdeplot3D(result.Mesh, ColorMapData=vm(:,iFreq), ...
Deformation=struct("ux", result.Displacement.ux(:,iFreq), ...
"uy", result.Displacement.uy(:,iFreq), ...
"uz", result.Displacement.uz(:,iFreq)), ...
DeformationScaleFactor=500);
可視化
pdeplot3D(result.Mesh, ColorMapData=result.Temperature, Mesh="on");
colorbar; title("Temperature");
pdeplot3D(result.Mesh, ColorMapData=result.VonMisesStress, ...
Deformation=result.Displacement, DeformationScaleFactor=100);
[qx, qy, qz] = evaluateHeatFlux(result);
pdeplot3D(result.Mesh, FlowData=[qx qy qz]);
% Partial mesh — hide regions (e.g., air in EM)
elemIDs = findElements(result.Mesh, "region", Cell=[1 3]);
pdeplot3D(result.Mesh.Nodes, result.Mesh.Elements(:,elemIDs), ColorMapData=data);
pdeplot(2-D)、pdeviz、FlowData、断面、流線については、references/visualization-reference.md を参照してください。
EM の後処理(Maxwell 応力テンソル、エネルギー法、すべての補間メソッド)については、references/em-postprocessing.md を参照してください。
よくある間違い
| 間違い | 正しい記述 |
|---|---|
nearestFace(gm, [0; 0; 1])(列ベクトル) | nearestFace(gm, [0, 0, 1]) — 行ベクトル |
subtractgeom / unite | subtract(gm1, gm2) / union(gm1, gm2) |
複数材料に union(gm1, gm2) を使用 | union(gm1, gm2, KeepBoundaries=true) |
HFace=[faceID, size] | HFace={faceID, size} — セル配列 |
rotate(gm, 90, [0 1 0], center)(方向+点) | 4 引数では、軸線を定義する 2 つの点を指定します:rotate(gm, 90, [0 0 0], [0 1 0]) |
AnalysisType="transientStructural" | "structuralTransient" — 物理タイプを先に指定 |
faceBC(ConvectionCoefficient=...) | faceLoad(ConvectionCoefficient=..., AmbientTemperature=...) |
vertexLoad(YForce=-1000) | vertexLoad(Force=[0; -1000; 0]) — 完全なベクトルを指定 |
femodel(..., PlanarType="planeStress") | 後から設定します:model.PlanarType = "planeStress" |
条件付き荷重に isnan(t) がない | if isnan(t), F=NaN; return; end を追加 |
静電解析に VacuumPermittivity がない | model.VacuumPermittivity = 8.854187817e-12 |
result.Stress.Magnitude | result.VonMisesStress または evaluateVonMisesStress(result) |
hf = evaluateHeatFlux(result)(出力 1 つ) | [qx, qy, qz] = evaluateHeatFlux(result) |
過渡解析で interpolateTemperature(result, pts) | iT を追加します:interpolateTemperature(result, pts, iT) |
interpolateDisplacement(result, pts, iT) | iT は不要です:interpolateDisplacement(result, pts) |
interpolateMagneticFluxDensity(...) / interpolateElectricFluxDensity(...) / interpolateCurrentFlux(...) | interpolateMagneticFlux / interpolateElectricFlux / interpolateCurrentDensity |
過渡解析で pdeplot3D(Deformation=...) を使用 | 先に filterByIndex を適用してからプロット |
周波数解析で filterByIndex(result, iFreq) を使用 | 列を直接インデックス指定します。Deformation 用の構造体を作成してください |
materialProperties(Material="steel") の指定がない | カタログ名を使用します。E、ν、ρ、CTE が自動的に設定されます |
静解析の後、モーダル解析用に 2 つ目の femodel() を作成 | 同じモデルで model.AnalysisType = "structuralModal" を設定 |
| 周波数応答に減衰がない | HystereticDamping=0.05 またはレイリー減衰/モーダル減衰を指定 |
飽和する鉄に RelativePermeability=500 を指定 | @(~,s) muRfcn(s.NormFluxDensity) — 非線形 |
| 非線形磁静解析で初期推定値がない | 線形解析の結果から cellIC(MagneticVectorPotential=Rlin) を設定 |
result.CurrentDensity.x | result.CurrentDensity.Jx — 領域固有の名前 |
放射(Emissivity)に摂氏温度を使用 | すべての温度をケルビンで指定し、model.StefanBoltzmannConstant を設定 |
ReferenceTemperature なしで温度荷重を指定 | model.ReferenceTemperature = 20 |
調和解析で solve(model, Frequency=1e6) を使用 | solve(model, 1e6) — 名前と値のペアではなく、位置引数を使用 |
熱/構造/電磁解析で createpde を使用 | femodel を使用します — createpde は方程式ベースの PDE 専用です |