feat(boundaries): Robin BC (a·u + b·∂u/∂n = c)

Đang mở
#62 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
45/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
julia
Lĩnh vực
tooling

Hướng nghiên cứu

Start in src/boundaries.jl:82 and read the existing AbstractBC implementations, especially _bc_sign, _offset_ghost!, _require_face_bc, fold_bc!, and operator_diagonal. Decide whether Robin coefficients support per-face Fields or only scalars, then trace how that choice interacts with boundary_rhs. Done means Robin is recognized through the boundary machinery and its diagonal correction is available to the multigrid path.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

enhancement

What's missing

AbstractBC is exactly Periodic, Dirichlet, Neumann, Interface. _require_face_bc (src/boundaries.jl:82) errors loudly for anything else, so a Robin condition is a genuine extension rather than a config option — it needs _bc_sign, _offset_ghost! and a _require_face_bc method, plus the matching fold_bc! row and the operator_diagonal correction.

Why (downstream)

Robin is the native boundary condition for trans-wall exchange in the microvascular model, in two places:

  1. Perivascular wall coupling. Flux across the capillary wall is g·(C_blood − C_tissue) — a conductance times a concentration difference. That is a Robin condition on the tissue side, currently hand-assembled as a separate coupling operator with its own implicit/explicit split.
  2. Proton leak regularization. The transported proton field H is no-flux on every boundary, which makes its Laplacian pure-Neumann and therefore singular. A small Robin leak gH is what regularizes it. Right now that regularization is a bespoke term rather than a boundary condition, so it is invisible to operator_diagonal and to multigrid.

Both are the same mathematical object, and both would be one BC type if MFO had it.

Sketch

Robin(a, b, c)      # a·u + b·∂u/∂n = c ; Dirichlet is b=0, Neumann is a=0

Worth deciding up front whether a, b, c may be per-face Fields or must be scalars. The downstream conductance g is genuinely per-face (it varies with local vessel geometry), so scalar-only would leave the main use case unserved — but per-face coefficients interact with the affine boundary_rhs lift, so it's a real design call, not a detail.

Payoff beyond the downstream package

operator_diagonal gaining a Robin case is what lets MultigridPreconditioner precondition wall-coupled systems. That matters: the downstream steady solve currently reaches for ILU(0) on an assembled sparse W precisely because unpreconditioned matrix-free GMRES spent ~750 iterations per linear solve. The system is diffusion-dominated — ideal MG territory — so a Robin-aware diagonal is the step that makes MFO's native preconditioner applicable and lets the sparse-matrix detour go away.


🤖 Beep — Claude wrote this one; Kyle is not yet talking to himself in his own issue tracker.

Ngôn ngữ chính
Julia
Star
3
Fork
1
Merge trung bình
4 ngày 19 giờ
Pull request đã merge (30 ngày)
5

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của RallypointOne/MatrixFreeOperators.jl

Tất cả issue của RallypointOne/MatrixFreeOperators.jl

Issue tương tự

Thêm issue về Julia

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.