Repository navigation
Point location and projection
- Point location is vectorized: candidate elements from bounding spheres, reference
coordinates by an exact inverse map for affine elements (nodes fitx = ξ J + b) or
Newton otherwise, and a point shared by several elements goes to the one it is deepest
in. Used byCalc_projector,Evaluate_dofsValues_at_coordinatesand DIC (LV mesh
Calc_projector: 28 s → 0.36 s). Curved and distorted elements invert the
isoparametric map, not its linearization. Calc_projectorextrapolates new nodes outside the old mesh by default
(extrapolate=True), raises when a node gets no reference coordinates, and loses
linkCorners.GroupElem.Get_F_e_pgandGet_invF_e_pgbecome the private_Get_J_e_pgand
_Get_invJ_e_pg,J[k, d] = ∂x_d/∂ξ_k._Get_nearby_nodes,_Get_nearby_elements
and_Get_Mappingare removed.
Visualization and IO
IO.Gmsh.Save_simuwritessimu.msh(+simu.msh.opt) instead ofsimu.pos: nodal
model views on every node, high-order elements drawn curved.PyVista.Plot(plotMesh=True)draws each element outline through its mid-side nodes
(boundary faces only in 3D), as Matplotlib does, instead of VTK's subdivided edges.IO.Paraview.Save_simuhonourselementFieldsand raisesValueErroron an
unavailable requested field.IO.GLTF: a list of arrays gets one buffer view per array.
API
Models.InElastic:MaterialPoint.Updateruns one strain-driven step at one point,
in 2D or 3D.- Exported: the protocols
IO.MeshSaver,IO.MeshLoader,IO.SimuSaverand
Viz.Viewer;FEM.Get_Pmat,FEM.Apply_Pmat,Models.InElastic.PointUpdate; in
Utilities, the MPI reductions,rank0_only,MPI_RANK,MPI_SIZE,Updatable.
Fixes
- FEM:
LinearForm.Assembleassembles the element vectors (it failed on any mesh);
Fieldputs the shape function on the active dof, so vector forms no longer couple
components;Fieldreflected-,/and@keep the operand order;
Calc_regulation_projectorkeeps every node's row;_GroupElem.surfacesnormals
point outward;TRI15.trianglesdrops a duplicated triangle;Get_Elements_Nodes
drops only the nodes beyond the mesh;Get_dofs_nodesraises on an unknown direction;
Mesh.inDimis read from the current coordinates. - Mesher: geo
CircleArcmajor arcs no longer take the minor way; physical groups work
with the geo factory; an unknownrefineGeomtype raisesTypeError. - Geoms:
CircleArcwithPgoes throughP;Circle_CoordsrejectsRbelow half
the chord;Angle_Betweenhandles one colinear row;AsCoordspads 2D rows. - Models: Miehe's Lode angle no longer gives NaN on a double eigenvalue.
- Simulations: Beam
add_connection_hingedin 3D frees the given rotations, a list of
beams builds its structure; PhaseFieldResult('uz')reads z,str(),Saveand
Save_Iterwork before any iteration; WeakFormsResult('vx')/('ax')read v and a;
Thermal 2D matrices scale with the thickness;SolverType.lgmresno longer passes
maxiter=None; DIC keeps a pixel in the element its reference coordinates come from
and rebuilds its factorizations after load or copy;_Simu.centersums over elements
and Gauss points. - IO: text files are written as UTF-8, so the GLTF viewer no longer fails on Windows.
- MPI:
import EasyFEAundermpirunno longer needs petsc4py; creating a simulation
in parallel raisesModuleNotFoundErrorwithout it. - Viz: PyVista
_Plotterhonoursoff_screen,Plot_Geomsdraws aPoint; Matplotlib
Plot_EnergyandPlot_Iter_Summaryhandle one-row figures and empty summaries.
Development
- Test suite rewritten on the user-facing API (issues #69, #70): shared fixtures and
exact references, parametrized cases and subtests, no plots. - CI: branch-coverage gate (
fail_under = 74) on the installed package;mpi-marked
tests run bymake test-mpiin their own job; a headless display on Ubuntu and
Windows, so PyVista movies render.
Full Changelog: v7.0.0...v7.1.0