Replace unconditional `println` chatter with structured `@info` events so
library callers can filter noise via the standard logging pipeline.
- Log the filename when ingest starts and emit a single summary record with
node/element counts plus physical group keys.
Rewrite the module README now that Abaqus/Code_Aster stacks live behind the
opt-in Legacy flag and only Gmsh ASCII ingest ships unconditionally.
- Document `JULIAFEM_ENABLE_LEGACY=1` and `src/legacy/io/` for vendor parsers.
- Focus the file list on `gmsh_reader.jl` / `GmshReader` instead of deleted stubs.
- Trim emoji/status tables and stale usage snippets; note roadmap for a native
`.inp` path aligned with `Mesh{T}` / `create_elements!`.
Remove the lightweight HDF5 wrappers around Code_Aster `.rmed` post-processing.
- Drop `RMEDFile`, `aster_read_nodes`, and related helpers from
`src/io/read_aster_results.jl`.
Delete the MED/HDF5 parsing routines that built Dict meshes from Code_Aster
exports.
- Drop `src/io/read_aster_mesh.jl` (`aster_parse_nodes`, connectivity walks,
`aster_read_mesh` glue).
Remove the mutable `Model`/`Mesh` containers and parse helpers that powered the
legacy `.inp` ingestion stack.
- Drop `src/io/parse_model.jl` (material/step/boundary pseudo-types and reader
state machine); identical functionality remains opt-in under `Legacy`.
Delete the hand-rolled `.inp` mesh scanner that mapped Abaqus element codes to
legacy JuliaFEM symbols.
- Drop `src/io/parse_mesh.jl` (element trait tables, node-set parsing, section
dispatch) now duplicated under `src/legacy/io/` behind the opt-in flag.
Remove the mutable global register used by the retired `.inp` parser to tag
top-level keywords.
- Delete `register_abaqus_keyword` / `is_abaqus_keyword_registered` from
`src/io/keyword_register.jl` (Legacy carries its own registration path).
Delete the nested `IO` module that only re-exported the retired Abaqus glue;
the package entry point now includes `gmsh_reader.jl` directly.
- Remove `src/io/io.jl` (SparseArrays/Logging imports and `abaqus_reader`
forwarding).
Drop the Abaqus side-mapping tables and helpers that produced boundary
facets from raw mesh dictionaries.
- Delete `create_surface_element` / `create_surface_elements` and the static
`element_mapping` entry points under `src/io/create_surface_elements.jl`.
Remove the standalone connectivity permutation maps and element-name tables
that wired Code_Aster MED exports into legacy JuliaFEM symbols.
- Drop `src/io/aster_reader.jl` from the default tree (no longer pulled into
`JuliaFEM`).
Delete the thin wrappers that translated `AbaqusReader` output into the
pre-2.0 `Mesh`/`Element` bag-of-fields API.
- Drop `abaqus_read_mesh`, legacy `create_surface_elements`, and nodal-element
helpers from `src/io/abaqus_reader.jl` (superseded by `Legacy` tooling).
Remove `abaqus_download`, which depended on environment-configured URLs and
was only useful for CI/tutorial fetches of vendor `.inp` decks.
- Drop `src/io/abaqus_download.jl`; Legacy retains its own copy when enabled.
Remove the HDF5-backed `AsterReader` wrapper from the default package tree so
the slim IO surface only exposes the maintained mesh ingest path.
- Drop `src/io/AsterReader.jl` (mesh/results includes are no longer shipped here).
Drop the thin `AbaqusReader` wrapper that only forwarded includes into the old
parser stack; opt-in Abaqus ingestion now ships from `Legacy` instead.
- Delete the standalone `src/io/AbaqusReader.jl` entry module (Nullables-era).
New 43-line download utility:
- abaqus_download(): download Abaqus models from internet
- Uses environment variables: ABAQUS_DOWNLOAD_URL, ABAQUS_DOWNLOAD_DIR
- Checks if file already exists before downloading
- Supports dry-run mode for testing
- Required by AbaqusReader module for example model downloads
Provides utility for downloading Abaqus example models from documentation.
New 68-line surface element creation:
- create_surface_element(): create surface elements from solid element faces
- element_mapping: mapping table for element face → surface element topology
- Supports Tet4→Tri3, Tet10→Tri6, Hex8→Quad4, Hex20→Quad8, Wedge6→Quad4/Tri3
- Maps Abaqus surface definitions to JuliaFEM element types
- Required by abaqus_reader.jl for boundary condition application
Provides surface element extraction from Abaqus .inp file surface definitions.
New 347-line Abaqus model parser:
- Model, Mesh, Material, Elastic, Step, BoundaryCondition, OutputRequest types
- AbaqusReaderState: parsing state machine
- parse_model(): parse full ABAQUS .inp files (mesh + BCs + loads + steps)
- Keyword registration system integration
- Section parsing: SOLID_SECTION, MATERIAL, ELASTIC, STEP, BOUNDARY, CLOAD, DLOAD
- abaqus_read_model(): read complete model vs abaqus_read_mesh() for mesh only
- Required by AbaqusReader module for full model parsing
Provides complete Abaqus .inp file model parsing with boundary conditions and load steps.
New 24-line keyword registration system:
- register_abaqus_keyword(): register keywords for section parsing
- is_abaqus_keyword_registered(): check if keyword is registered
- Global registry for ABAQUS .inp file keywords
- Required by parse_model.jl for section parsing
Provides keyword registration infrastructure for AbaqusReader module.
- Removed unused imports (`add_node!`, `add_element_to_element_set!`, `add_node_to_node_set!`) from the `using ..JuliaFEM:` line
- Keep `Preprocess` re-exported for convenience
This reduces namespace pollution and lowers the chance of circular import issues; no functional changes expected.
New structure:
- src/io/io.jl: IO submodule definition and exports
- src/io/aster_reader.jl: Code Aster .med reader (ready for HDF5 extension)
Benefits:
- Clean separation of I/O code
- ABAQUS reader works with stdlib only
- Ready for package extensions (HDF5, LightXML)
- Easy to add new formats (VTK, Gmsh, etc.)
The IO submodule exports abaqus_read_mesh() to main JuliaFEM namespace.