Commit Graph

67 Commits

Author SHA1 Message Date
Jukka Aho 7d6ef2e560 feat(domains): add ThermoElasticKernel for coupled u–T assembly
Provide multi-field small-strain thermoelasticity with cross blocks between
displacement and temperature using shared geometry SoA caches.

- Dispatch `evaluate_entry` on `field_idx` pairs for `K_uu`, `K_TT`, `K_uT`, `K_Tu`.
- Coupling strength `β` toggles thermal-mechanical interaction; documents additive strain split.
2026-05-09 16:56:53 +03:00
Jukka Aho 12ee626a00 feat(domains): add Hex8 RT0–P0 mixed Darcy kernel
Mirror Tet4 mixed Darcy on structured hexes using Piola push-forward of
`rt0_hex8_reference_basis` and tensor-product Gauss quadrature.
2026-05-09 16:56:44 +03:00
Jukka Aho 350818aa80 feat(domains): add Tet4 RT0–P0 mixed Darcy kernel
Implement lowest-order H(div) flux on faces with cell pressure, Piola-mapped RT0
basis, inverse conductivity mass block, and ±1 divergence coupling.

- Document BC posture (pressure gauge, facet flux DOFs, boundary load helpers).
- Provide `evaluate_entry` / mass hooks plus auxiliary types for mixed Darcy assembly tests.
2026-05-09 16:55:43 +03:00
Jukka Aho f8aecb1675 feat(domains): add HeatKernel for scalar diffusion and optional thermal mass
Implement second concrete `AbstractKernel` sharing the DOF-based microkernel
contract with conductivity-focused buffers.

- Support `HeatConductivity`, `MoistureDiffusivity`, `HydraulicConductivity`, and
  `ElementWiseScalarDiffusion` pairings with temperature/moisture/pressure fields.
- Cache symmetric second-order tensors per IP; `evaluate_entry` contracts gradients
  without displacement-style `(α,β)` branching.
- Add optional `heat_capacity` for consistent thermal mass (`evaluate_mass_entry`)
  with zero-cost skip when unset.
- Provide typed constructors that forbid transient flags on steady hydraulic/moisture paths.
2026-05-09 16:55:28 +03:00
Jukka Aho bb2fba4c5f feat(domains): add DarcyPotentialKernel wrapping HeatKernel
Expose steady primal Darcy head formulation as thermal diffusion with
`HydraulicConductivity` and `PressurePotential` fields on shared assembler paths.
2026-05-09 16:55:08 +03:00
Jukka Aho 264c4d5a23 feat(domains): add StokesMixedKernel for creeping Newtonian flow
Provide velocity–pressure mixed kernel with constant viscous tangent `2μ 𝕀^sym`
and MixedUP-compatible divergence / compressibility blocks.

- Mirrors `MixedUPKernel` layout (`Displacement{3}` + cell pressure).
- Documents gauge pinning and reuse of `default_pressure_gauge_dof`.
2026-05-09 16:52:59 +03:00
Jukka Aho 8c7cd9b308 feat(domains): add MixedUPKernel for u–p elasticity saddle
Implement vertex displacement + cell pressure coupling with optional bulk
compressibility and indefinite-operator guidance for Krylov usage.

- Weak form matches standard dilatation coupling with `inv_bulk = 1/κ`.
- `evaluate_entry` switches on `field_idx` pairs; shares material tangent path with
  continuum kernels for the displacement block.
2026-05-09 16:52:53 +03:00
Jukka Aho 8b5aa491eb feat(domains): add Hex8 material coupon lab helpers
Provide reusable single-brick mesh factory, symmetry BC constructors, and a
minimal linear-elastic uniaxial solve helper for material calibration tests.

- Builds structured `Hex8` lab meshes via `create_structured_box_mesh`.
- Merges Dirichlet dictionaries safely and documents default Gauss usage.
2026-05-09 16:52:48 +03:00
Jukka Aho 6dc8256843 feat(domains): add Hu–Washizu three-field elasticity kernel
Add mixed kernel with vertex displacement plus cell-wise strain and stress
unknowns (`eps`, `sig`) for linear `LinearElastic` materials.

- Document discrete block structure (`K_uσ`, `K_εε`, `K_εσ`, …) with Voigt units
  matching HR conventions.
- Implement microkernel dispatch across field indices with constant `M`/`G`
  matrices precomputed from `C`.
2026-05-09 16:52:43 +03:00
Jukka Aho c46bfbcc9c feat(domains): add Hellinger–Reissner mixed elasticity kernel
Implement HR saddle (`u` vertex + piecewise-constant symmetric stress on Cell)
for small-strain `LinearElastic` materials.

- Encode Voigt unit tensors aligned with `local_dof_layout` components and build
  the 6×6 discrete compliance `G M⁻¹ G` once from `C⁻¹`.
- Provide assembler microkernel hooks (`evaluate_entry`, buffer traits,
  `reference_fields`) with symmetric indefinite operator semantics documented in-module.
2026-05-09 16:52:30 +03:00
Jukka Aho 01e497d5f8 feat(domains): add FacetMassKernel for Face DOF smoke assembly
Provide facet-diagonal kernel allocating area/patch contributions per Face unknown
to exercise DOFHandler face numbering and extended evaluate_entry(elem_id).

- Cover Hex8/Hex20/Tet4/Tet10/Wedge6/Pyr5 with physical face area helpers.
- Wire microkernel buffer traits and mass/stiffness evaluators for assembler tests.
2026-05-09 16:52:07 +03:00
Jukka Aho 617a8441d1 feat(domains): add EdgeMassKernel for facet-map edge DOFs
Introduce diagnostic kernel assembling diagonal edge mass proportional to
physical edge length divided patch multiplicity.

- Dispatch `AbstractKernel` microkernel hooks for Edge-owned fields on Hex8/Hex20/
  Tet4/Tet10/Wedge6/Pyr5 meshes using existing facet map builders.
- Implement `evaluate_entry` / `evaluate_mass_entry` paths plus trivial reference
  buffers for assembler compatibility.
2026-05-09 16:51:55 +03:00
Jukka Aho 503619cb44 docs(domains): add README overview for physics kernels
Summarize continuum/heat/darcy/thermo_elastic kernels with pointers to AGENTS,
extension contract, tests, and thermo-elastic walkthrough.
2026-05-09 16:51:26 +03:00
Jukka Aho f8bcd8605c refactor(domains): streamline continuum update_material_cache dispatch
Collapse duplicated trait implementations and route everything through the
`GlobalMaterialCache` overload plus explicit material-behavior methods.

- Drop standalone `ElementCache`/`AbstractGeometryCache` copies of constant /
  strain-dependent / stateful updaters; rely on `material_behavior` forwarding.
- Import `continuum_kinematics`, `SmallStrainKinematics`, and `GreenLagrangeKinematics`
  so stateful updates choose ε versus E via traits instead of ad hoc branches.
- Trim verbose CRITICAL/FIXME commentary while keeping `getfield` guidance for
  type-stable workspace access.
- Remove legacy dispatcher taking `Matrix{<:AbstractMaterialState}` state buffers.
- Minor formatting (trailing commas) and docstring refresh on the cache entry.
2026-05-09 16:51:08 +03:00
Jukka Aho d428686658 refactor(domains): refresh continuum geometry cache fill for shape functions
Align `update_geometry_cache!` with element caches that carry continuum-specific
data and surface scalar basis values needed for mass kernels.

- Remove unused `kernel::AbstractKernel` parameter and narrow `element_cache` to
  `ContinuumElementCache`.
- Evaluate `get_basis_functions` each IP, storing `N_data` beside `∇N_data`.
- Rewrite docstring around concrete fields (`X`, `N_data`, `∇N_data`, `detJ_w`)
  and zero-allocation guarantees.
2026-05-09 16:50:49 +03:00
Jukka Aho 281e5e5116 docs(domains): shorten continuum theory and formulation docstrings
Replace outdated Physics/assembly prose with kernel-centric descriptions tied to
`ContinuumKernel`, `HeatKernel`, and the assembler microkernel stack.

- Compress FullThreeD / Axisymmetric narratives and drop stale multi-domain
  `Physics(...)` examples.
- Document `ContinuumFormulation{Theory}` as the tag carried by kernels and
  point readers at `abstract.jl` / `microkernel.jl` instead of removed assembly paths.
2026-05-09 16:50:30 +03:00
Jukka Aho 8c285171ea feat(domains): extend ContinuumKernel for mass matrix and assembler microkernels
Wire continuum solids into the shared DOF-based microkernel contract while
keeping element-based assembly helpers explicit and GPU-friendly.

- Add `density::Float64` on `ContinuumKernel` (default `0`) so static-only
  callers skip mass work; constructors accept keyword `density` or infer
  `Displacement{3}` when omitted.
- Generalize `compute_stiffness_value` to `AbstractFloat`/`Tensor{4,D,F}` and
  typed `basevec`; add `SymmetricTensor{4,D,F}` overload using symmetric `B`
  operators to avoid `Tensor{4}(::SymmetricTensor)` string branches for Metal.
- Replace legacy `evaluate(...)` wrapper with `compute_block!` integrating one
  element-local block over IPs for the element-based COO path.
- Implement microkernel hooks: `qpoint_buffer_eltype`, `reference_fields`,
  `update_qpoint_buffer!`, `evaluate_entry` (DOF-layout aware, uses symmetric `𝔻`),
  and `evaluate_mass_entry` (consistent mass, component-orthogonal, ρ-gated).
- Import assembler-facing symbols explicitly from `JuliaFEM`; drop brittle
  `Main` introspection for `evaluate`/`get_tangent`.
- Refresh module banner and docstrings (density docs, reduced bold noise).
2026-05-09 16:50:14 +03:00
Jukka Aho 91ac4fd458 docs(domains): tone continuum abstract docstrings for removed files
Strip decorative markdown emphasis, drop Kirchhoff plate pointer, and remove
See-Also links to deleted formulations.jl / missing design doc paths.
2026-05-09 16:49:49 +03:00
Jukka Aho 5652282a8d refactor(domains): remove continuum/kinematics.jl helpers
Delete legacy kinematics routines relocated under geometry/materials pipelines.
2026-05-09 16:49:25 +03:00
Jukka Aho 333b190175 refactor(domains): remove continuum/formulations.jl definitions
Drop standalone formulation trait file folded intophysics/types or kernel dispatch.
2026-05-09 16:49:21 +03:00
Jukka Aho 20256eec01 refactor(domains): remove trusses/api.jl stub
Drop unused truss API placeholder pending structured truss kernels.
2026-05-09 16:49:10 +03:00
Jukka Aho 0041844e39 refactor(domains): remove shells/api.jl stub
Remove placeholder shell domain exports until a shell kernel lands.
2026-05-09 16:49:06 +03:00
Jukka Aho 6aabc33bbc refactor(domains): remove plates/dkt_basis.jl module
Delete legacy DKT basis helpers consolidated under basis/domains layout.
2026-05-09 16:49:04 +03:00
Jukka Aho b9c79fd0fd refactor(domains): remove legacy plates/dkt.jl implementation
Drop outdated DKT assembly file superseded by reorganized plate basis work.
2026-05-09 16:49:00 +03:00
Jukka Aho acd09f0099 refactor(domains): remove plates/api.jl stub ahead of plate kernel rework
Remove empty plate API entrypoint; DKT/basis material lives elsewhere now.
2026-05-09 16:48:51 +03:00
Jukka Aho 987761677d refactor(domains): remove unused common/boundary_conditions.jl stub
Delete placeholder boundary-condition helpers superseded by physics/assembler paths.
2026-05-09 16:48:47 +03:00
Jukka Aho 508985d4c5 refactor(domains): remove stub beams/api.jl placeholder
Drop unused beam domain API shell pending a real beam kernel module.
2026-05-09 16:48:42 +03:00
Jukka Aho 47f207bced refactor(domains): migrate update_material_cache! to AssemblyMaterialWorkspace and add GlobalMaterialCache API
Major refactoring: migrate material cache updates to new workspace API
and add support for GlobalMaterialCache alongside legacy API.

- Change all material_cache to material_workspace parameter names
- Remove M<:AbstractMaterialState type constraints from functions
- Change state handling from EmptyState() to NamedTuple()
- Change material_cache.σ/𝔻/states to material_workspace.fields/states
- Add new overloads for GlobalMaterialCache API (NEW API)
- Add zero-allocation optimizations using getfield and pre-allocated NamedTuples
- Add backward compatibility handling for legacy state types
- Update all function signatures and docstrings
- Add imports for GlobalMaterialCache and helper functions
- Add StatelessConstantTangent overload with pre-allocated NamedTuples
- Add StatelessStrainDependent and StatefulStrainDependent overloads for GlobalMaterialCache
- Keep legacy API overloads for Matrix{<:AbstractMaterialState}
2025-12-12 23:38:47 +02:00
Jukka Aho fb770644c4 refactor(domains): optimize update_geometry_cache! for zero-allocation
Optimize update_geometry_cache! to eliminate iterator allocations and
update to use coords field.

- Add @inline to update_geometry_cache! for better inlining
- Change enumerate loop to indexed loop to avoid iterator allocation
- Add @inbounds annotation for bounds-check elimination
- Change ip.ξ to ip.coords to use new QuadraturePoint API
2025-12-12 23:36:21 +02:00
Jukka Aho 00448c8c52 refactor(domains): optimize update_element_cache! for zero-allocation
Optimize update_element_cache! to eliminate iterator and view allocations.

- Add @inline to update_element_cache! for better inlining
- Change enumerate loop to indexed loop to avoid iterator allocation
- Add @inbounds annotations for bounds-check elimination
- Remove @view allocation by passing array directly to get_dof_mapping!
2025-12-12 23:35:56 +02:00
Jukka Aho 9b6e3a5803 fix(domains): use coords field instead of ξ in kinematics
Update kinematics to use coords field from QuadraturePoint instead
of deprecated ξ field.

- Change ip.ξ to ip.coords in compute_deformation_gradient
2025-12-12 23:35:26 +02:00
Jukka Aho ece0428a33 refactor(domains): add atomic stiffness computation and microkernel interface
Refactor continuum kernel to add atomic scalar computation and microkernel
interface while maintaining backward compatibility.

- Add compute_stiffness_value for atomic scalar K[k,l][α,β] computation
- Add compute_stiffness_block for D×D block building using atomic kernel
- Refactor compute_block_at_point to use compute_stiffness_block internally
- Add evaluate function for microkernel interface with field coupling dispatch
- Add basevec import for unit vector construction
- Add conditional imports for evaluate and get_tangent
- Update documentation to reflect new atomic operation structure
2025-12-12 23:34:58 +02:00
Jukka Aho ff3c26d2c3 chore: remove obsolete and legacy files
Major cleanup: remove obsolete files that have been replaced or
moved to new locations. Files removed include legacy assembly
implementations, old API files, and deprecated test files.

Removed files:

Assemblers and assembly:
- src/assemblers/nodal_based.jl
- src/assemblers/nodal_cache.jl
- src/assemblers/node_based_coo.jl
- src/assembly/assembly.jl
- src/assembly/element_structures.jl
- src/assembly/framework.jl
- src/assembly/nodal_structures.jl
- src/assembly/problems.jl
- src/element_assembly_structures.jl
- src/nodal_assembly_structures.jl

Legacy API and structure files:
- src/beams/api.jl
- src/formulations/api.jl
- src/gpu_elasticity.jl
- src/io.jl
- src/materials_plasticity.jl
- src/postprocess_utils.jl
- src/preprocess.jl
- src/quadrature.jl
- src/readers.jl
- src/shells/api.jl
- src/trusses/api.jl

Elements and domains:
- src/domains/continuum/assemble_v2.jl
- src/elements/integrate.jl

Quadrature legacy files:
- src/quadrature/gauss_points.jl
- src/quadrature/integration.jl

Test files:
- test/runtests_new.jl
- test/runtests.jl.old
- test/test_problems_elasticity_assemble_3d_seg3.jl
2025-12-12 22:45:49 +02:00
Jukka Aho 5c015536a2 fix(assembly): Update AssemblyCacheFerrite to new Lagrange{P} API
- Changed struct field from 'basis::Lagrange{T,1}' to 'basis::Lagrange{1}' (line 91)
- Changed constructor from 'Lagrange{T,1}()' to 'Lagrange{1}()' (line 211)
- Added comments explaining new API: basis order only, topology passed separately
2025-11-21 00:28:05 +02:00
Jukka Aho 4521d27731 refactor(plates): Remove duplicate assemble! stub
Replace function stub declaration with comment pointing to canonical definition in physics/api.jl. Added note that plate formulations should implement specific methods.

Eliminates documentation replacement warning while preserving API documentation context.
2025-11-20 18:22:39 +02:00
Jukka Aho 4766cfe65e refactor(domains): Remove Vec{3} conversion in assemble_v2
- Changed 'ξ = Vec{3}(ip.ξ)' to 'ξ = ip.ξ' in compute_element_stiffness!
- No conversion needed since ip.ξ is now already Vec{3}
2025-11-20 17:56:48 +02:00
Jukka Aho 9148ef223b refactor(domains): Remove Vec{3} conversion in update_geometry_cache
- Changed 'ξ = Vec{3}(ip.ξ)' to 'ξ = ip.ξ'
- No conversion needed since ip.ξ is now already Vec{3}
2025-11-20 17:55:23 +02:00
Jukka Aho bf165cc54b refactor(continuum): Fix shape function gradient indexing in material updates
Changed from ∇N_q[k] to ∇N_data[q,k] to match Matrix layout.
- Removed intermediate ∇N_q vector extraction
- Direct 2D indexing: ∇N_data[q, k] for node k at integration point q
- Affects both LinearElastic and J2Plasticity material updates
- Consistent with compute_block interface refactoring
2025-11-20 17:42:30 +02:00
Jukka Aho 37f103421f refactor(continuum): Remove theory.jl (types moved to abstract.jl and types.jl)
Deleted: src/domains/continuum/theory.jl

Reason:
- Content moved to better-organized files:
  * Abstract types → src/domains/continuum/abstract.jl
  * Concrete types → src/domains/continuum/types.jl
- Name 'theory.jl' was too vague
- New organization clearer for type hierarchy

This file is obsolete, content preserved in new locations.
2025-11-20 16:56:42 +02:00
Jukka Aho a05a7c99b9 refactor(continuum): Remove integration.jl (split into three update functions)
Deleted: src/domains/continuum/integration.jl

Reason:
- Monolithic integration preprocessing replaced by three-phase pattern
- Functionality split into:
  * update_element_cache.jl (DOF mapping)
  * update_geometry_cache.jl (Jacobian, gradients)
  * update_material_cache.jl (stress, tangent)

Benefits of split:
- Better separation of concerns
- Individual testing of each phase
- Easier to optimize each phase independently
- Clearer data flow through assembly

This file is obsolete with the new cache architecture.
2025-11-20 16:56:42 +02:00
Jukka Aho cb96612a97 refactor(continuum): Remove old assemble.jl (replaced by element_based_coo.jl)
Deleted: src/domains/continuum/assemble.jl

Reason:
- Old assembly implementation with type instability issues
- Replaced by new architecture in src/assemblers/element_based_coo.jl
- New version achieves zero allocations and 500K elem/s
- Three-phase cache update pattern replaces monolithic approach

Migration:
- Old: Single file with mixed concerns
- New: Separate cache files + update functions + generic assemblers

This file is obsolete with the new cache architecture.
2025-11-20 16:56:42 +02:00
Jukka Aho 24968918c8 feat(continuum): Add update_material_cache! for stress and tangent
New file: src/domains/continuum/update_material_cache.jl (247 lines)

Features:
- update_material_cache!(material_cache, kernel, geometry_cache, ...)
- Computes stress tensors at integration points
- Computes tangent modulus tensors
- Updates material state for history-dependent materials
- Part of three-phase cache update pattern

Phase 3 of assembly (Material evaluation):
- Loop over integration points
- Compute strain tensor from ∇N and displacements
- Call material.compute_stress(ε, state_old, Δt)
- Store σ (stress) and 𝔻 (tangent modulus)
- Update state_new for next increment

Implementation:
- Handles linear case (u_global = nothing)
- Handles nonlinear case (with displacement field)
- Calls compute_stress (not inlined, complex material law)
- Stores results in material_cache.σ and material_cache.𝔻

State management:
- state_old: material state at start of increment
- state_new: material state at end of increment
- After convergence: state_old ← state_new

This is the THIRD of three cache updates called per element:
1. update_element_cache! (DOF mapping)
2. update_geometry_cache! (Jacobian, gradients)
3. update_material_cache! (stress, tangent) ← THIS FILE

After these three updates, compute_block! uses the caches to
compute element stiffness blocks K_kl.
2025-11-20 16:56:40 +02:00
Jukka Aho 40816c3b3c feat(continuum): Add update_geometry_cache! with zero-allocation ntuple fix
New file: src/domains/continuum/update_geometry_cache.jl (239 lines)

Features:
- update_geometry_cache!(geometry_cache, mesh, nodes, basis)
- Computes shape function gradients at integration points
- Computes Jacobian determinants with quadrature weights
- Part of three-phase cache update pattern

Phase 2 of assembly (Geometry preprocessing):
- Extract element node coordinates
- Evaluate basis function gradients ∇N at each integration point
- Compute Jacobian matrix J and determinant det(J)
- Multiply det(J) × weight → detJ_w for integration
- Transform ∇N from parent to physical space

This is the SECOND of three cache updates called per element:
1. update_element_cache! (DOF mapping)
2. update_geometry_cache! (Jacobian, gradients) ← THIS FILE
3. update_material_cache! (stress, tangent)
2025-11-20 16:56:40 +02:00
Jukka Aho 3da3c486d8 feat(continuum): Add update_element_cache! for DOF mapping
New file: src/domains/continuum/update_element_cache.jl (179 lines)

Features:
- update_element_cache!(element_cache, elem_id, mesh, N, field)
- Updates DOF mapping for element nodes
- Resets K_blocks and f_blocks to zero
- Part of three-phase cache update pattern

Phase 1 of assembly (DOF mapping):
- Extract element connectivity
- Map node IDs to global DOFs
- Store in element_cache.dofs
- Clear previous element's data

Implementation:
- Uses get_dof_mapping! for field-to-DOF conversion
- Handles displacement (3 DOF/node) and other fields
- fill! for zero initialization
- @inline for performance

This is the FIRST of three cache updates called per element:
1. update_element_cache! (DOF mapping) ← THIS FILE
2. update_geometry_cache! (Jacobian, gradients)
3. update_material_cache! (stress, tangent)
2025-11-20 16:56:40 +02:00
Jukka Aho 06973c6f20 feat(continuum): Add concrete types for continuum domain
New file: src/domains/continuum/types.jl

Concrete types defined:
- EmptyState <: AbstractMaterialState (for stateless materials)
- Future: Can add J2PlasticityState, DamageState, etc.

Purpose:
- Centralize material state types
- Separate from abstract interface definitions
- Enable type-stable state management in MaterialStateCache

EmptyState used by LinearElastic material (no history variables).
Plastic materials will have custom state types with fields for
equivalent plastic strain, back stress, etc.
2025-11-20 16:56:40 +02:00
Jukka Aho 1ddc369d56 feat(continuum): Add abstract types for continuum mechanics
New file: src/domains/continuum/abstract.jl

Abstract types defined:
- AbstractContinuumTheory - Supertype for FullThreeD, PlaneStress, etc.
- AbstractKernel - Supertype for ContinuumKernel and future variants
- AbstractMaterialState - Supertype for material state (EmptyState, plasticity, etc.)

Purpose:
- Establish type hierarchy for dispatch
- Document interface expectations
- Enable future extensions (shells, beams, etc.)

These were previously defined in other files, now centralized
for clarity and maintainability.
2025-11-20 16:56:40 +02:00
Jukka Aho fbb40a21f6 refactor(continuum): Add @inline to compute_block_at_point
- Added @inline annotation for hot path function
- Called once per integration point per element pair
- Critical for achieving 484K elem/s throughput
- Part of selective inlining strategy (97% of max performance)
2025-11-20 16:56:36 +02:00
Jukka Aho dd468a412e refactor(continuum): Add @inline annotations to formulation functions
- Added @inline to dim, strain_size, stress_size
- These are called frequently in assembly loops
- Part of selective inlining strategy for performance
2025-11-20 16:56:36 +02:00
Jukka Aho ede78a705d feat(continuum): Implement material-independent finite strain kernel
- Implement compute_finite_strain_kernel! for generic material integration
- Support MaterialBehavior trait dispatch (Stateless/Stateful, StrainDependent)
- Compute deformation gradient F from displacement gradients
- Compute Green-Lagrange strain E from deformation gradient
- Call material-specific compute_stress! with strain measure
- Transform Piola-Kirchhoff stress to Cauchy stress
- Support all continuum theory types (3D, PlaneStress, PlaneStrain, Axisymmetric)
- Implement zero-allocation design with pre-allocated buffers
- Document finite strain kinematics and stress transformations
- 199 lines of generic finite strain kernel implementation
2025-11-19 12:01:34 +02:00
Jukka Aho 65ba108125 feat(plates): Implement complete DKT plate element
- Implement Discrete Kirchhoff Triangle (DKT) plate bending element
- Define DKTPlate formulation type with material and thickness parameters
- Implement assemble_stiffness! for plate bending problems
- Compute element stiffness matrix using DKT basis functions
- Support transverse displacement (w) and rotation (θx, θy) DOFs
- Include numerical integration over triangular domain
- Implement element force vector assembly
- Support distributed and point loads on plate surface
- Document DKT theory and implementation details
- 645 lines of complete DKT plate element implementation
2025-11-19 11:40:27 +02:00