Skip to content

Tracking: Retire the FEM module (ITKFEM / ITKFEMRegistration) to reduce maintenance burden #6511

Description

@hjmjohnson

Proposal and tracking issue to retire the FEM module (Modules/Numerics/FEM / ITKFEM and Modules/Registration/FEM / ITKFEMRegistration) to reduce maintenance burden. FEM was added as a grant-funded ITKv4 research deliverable (NLM A2D2 201000586P / ARRA); the funding ended ~2014, the module is EXCLUDE_FROM_DEFAULT, has no Python wrapping, and has no evidence of downstream use. Follows the staged "remote-module breadcrumb → remove in ITKv7" plan discussed in #6509.

Continues the FEM follow-up from #6509 (the LinearSystemWrapperItpack / dsrc2c.c retirement and the legacy-removal build breakage).

Why remove FEM

  • Grant-funded insertion, never funded for upkeep. The ITKv4-era rewrite (RobustSolver / physics-based non-rigid registration) was a deliverable of the NLM A2D2 ARRA contract; see provenance below.
  • No evidence of use. No Discourse thread or GitHub issue shows an application depending on FEM — only "how do I enable it" and "it doesn't compile" reports. Maintainer note (dzenanz, 2022): "FEM module is not compiled by default. And it does not have Python wrapping. All because it is not frequently used."
  • Recurring maintenance tax. Every FEM issue/PR for 7 years is BUG:/COMP:/STYLE: keeping it compiling; zero feature work.
  • Carries dead weight. ~8k lines of f2c-generated Itpack numerics (dsrc2c.c) flagged in Tracking: ITK_FUTURE_LEGACY_REMOVE / ITK_LEGACY_REMOVE build broken across opt-in (ingested remote) modules #6509.

Removal checklist

Phase 1 — remote-module breadcrumb (target: now, before 2026-07-01)

  • Add Modules/Remote/FEM.remote.cmake pointing at an extracted InsightSoftwareConsortium/ITKFEM repo (move both Modules/Numerics/FEM and Modules/Registration/FEM content out, preserving history).
  • Emit a LOUD CMake warning when the remote module is enabled: FEM is unmaintained, slated for removal in ITK 7, and users should comment on this issue if they depend on it.
  • Remove Modules/Numerics/FEM and Modules/Registration/FEM from the ITK tree.
  • Drop ITKFEM / ITKFEMRegistration from the CI configure module lists (pyproject.toml pixi configure-ci, dashboard scripts).
  • Note in FEM.remote.cmake that it is unmaintained after 2026-07-01 and exists only to detect unknown users.

Phase 2 — downstream cleanup in ITK

  • Examples: relocate or remove the FEM-based examples DeformableRegistration1.cxx and DeformableRegistration11.cxx (and their data FiniteElementRegistrationParameters1/2.txt) from Examples/RegistrationITKv4/.
  • Update the ITK Software Guide (InsightSoftwareConsortium/ITKSoftwareGuide): remove/annotate the FEM framework and FEM-based deformable-registration chapters and the DeformableRegistration1 walkthrough.
  • Update the Doxygen module group (\ingroup ITKFEM) and any cross-references.
  • Add an entry to the ITK 6 migration guide documenting the removal and how to obtain FEM as a remote module.
  • Confirm no remaining in-tree dependents (current: only ITKFEMRegistration depends on ITKFEM; nothing else in the tree depends on either).

Phase 3 — finalize in ITKv7

CI / coverage (shared with #6509)

  • Ensure the legacy-removal (ITK_FUTURE_LEGACY_REMOVE / ITK_LEGACY_REMOVE) build no longer needs FEM-specific fixes once the module is out of tree.
Provenance — how FEM entered ITK

Era 1 — general FEM framework (ITK 1.x, ~2001–2003). Predates the current
git history (which begins at the 2011 ITKv4 modularization). Primary original
author Aljaž Noe (largest contributor): the FE solver framework (Element,
Material, Load, Solver, LinearSystemWrapper with VNL and Itpack
backends). The FEM-based deformable-registration layer (DeformableRegistration1)
came from the UPenn/PICSL group (Brian Avants, Tessa Sundaram, Jeffrey Duda).

Era 2 — funded ITKv4 rewrite + RobustSolver (2010–2011). Commit
23f10a989ac "ENH: FEM refactoring as contracted for ITKv4"; new RobustSolver,
LoadNoisyLandmark, FEMScatteredDataPointSetToImageFilter. itkFEMRobustSolver.h
carries \author Yixun Liu and \cite clatz2005/\cite liu2009. Domain:
brain-shift correction for image-guided neurosurgery (Chrisochoides group, ODU/Harvard).

Insight Journal article: An ITK Implementation of Physics-based Non-rigid
Registration Method
https://insight-journal.org/browse/publication/876/

Funding

From the Frontiers in Neuroinformatics (2014) version:

"This work is funded mainly by the ARRA funds for the ITK-v4 implementation
with grant number: NLM A2D2 201000586P."

Plus NSF CCF-1139864, CCF-1136538, CSI-1136536; the John Simon Guggenheim
Foundation; the Richard T. Cheng Endowment. The NLM A2D2 ("Algorithm 2 Data to
Decision") ARRA contract funded the insertion/hardening; no funding covered
ongoing maintenance.

Evidence of (non-)use

Discourse (links are forum topic IDs, not GitHub issues; all "how do I
enable it" or "it's broken," none show an application depending on FEM):
topic 280 (2017, "itk::Fem::Solver update
problem"), topic 339 (2017, "itk FEM
Solver"), topic 404 (2017, "itk::fem
updating displacements"), topic 720 (2018,
"Manual creation of FEMObject"), topic
2505
(2019, "itkFEMRegistrationFilter.h: No
such file or directory"), topic 4937
(2022, "How to call the FEM module in Python?" — abandoned).

GitHub issues (FEM in title, all closed, all "broken"): #4782 (2024, tests
failing), #4399 (2024, VS2019 compile fail), #2789 (2021, does not compile).

GitHub PRs: 100% maintenance (BUG:/COMP:/STYLE:) 2019→2026; no ENH:,
no outside user with a use case.

Structural: EXCLUDE_FROM_DEFAULT, no Python wrapping, ~8k-line f2c Itpack core.

Sources

Metadata

Metadata

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions