ANYfeSolver 0.5.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (751) hide show
  1. anyfesolver/__init__.py +1075 -0
  2. anyfesolver/_b2_attachment_elimination_dev.py +261 -0
  3. anyfesolver/_b2_f10_f11_point_attachment.py +163 -0
  4. anyfesolver/_b2_loaded_point_trace_dev.py +173 -0
  5. anyfesolver/_b2_physical_flexibility_linear.py +707 -0
  6. anyfesolver/_b2_physical_linear_batch_dev.py +491 -0
  7. anyfesolver/_b2_physical_linear_definition.py +415 -0
  8. anyfesolver/_b2_physical_load_bubbles.py +282 -0
  9. anyfesolver/_compensated_contractions.py +497 -0
  10. anyfesolver/_compensated_native.py +437 -0
  11. anyfesolver/_corotational_batch.py +219 -0
  12. anyfesolver/_director_trace.py +214 -0
  13. anyfesolver/_dyadic_bilinear.py +76 -0
  14. anyfesolver/_dyadic_factor_chain.py +25 -0
  15. anyfesolver/_ge_beam3_adaptive_arc_program.py +286 -0
  16. anyfesolver/_ge_beam3_analysis_combined.py +102 -0
  17. anyfesolver/_ge_beam3_analysis_fibre_translation.py +130 -0
  18. anyfesolver/_ge_beam3_analysis_modal_snapshot.py +27 -0
  19. anyfesolver/_ge_beam3_analysis_nodal_program.py +140 -0
  20. anyfesolver/_ge_beam3_analysis_translation.py +147 -0
  21. anyfesolver/_ge_beam3_analysis_translation_modal.py +84 -0
  22. anyfesolver/_ge_beam3_arc_geometry.py +89 -0
  23. anyfesolver/_ge_beam3_arc_program.py +304 -0
  24. anyfesolver/_ge_beam3_authoritative_cell_seed.py +25 -0
  25. anyfesolver/_ge_beam3_cell_identity.py +52 -0
  26. anyfesolver/_ge_beam3_centered_batched_finite_inertia.py +132 -0
  27. anyfesolver/_ge_beam3_centered_finite_inertia.py +171 -0
  28. anyfesolver/_ge_beam3_centered_mixed.py +104 -0
  29. anyfesolver/_ge_beam3_centered_reference.py +187 -0
  30. anyfesolver/_ge_beam3_centered_so3_strain.py +76 -0
  31. anyfesolver/_ge_beam3_complementary_section.py +122 -0
  32. anyfesolver/_ge_beam3_compliance_snapshot_guard.py +20 -0
  33. anyfesolver/_ge_beam3_connected_dynamic.py +486 -0
  34. anyfesolver/_ge_beam3_connected_trajectory.py +258 -0
  35. anyfesolver/_ge_beam3_conservative_backtrack.py +26 -0
  36. anyfesolver/_ge_beam3_controlled_fibre_modes.py +105 -0
  37. anyfesolver/_ge_beam3_coupled_beam_subdomain.py +128 -0
  38. anyfesolver/_ge_beam3_coupled_modes.py +256 -0
  39. anyfesolver/_ge_beam3_deterministic_reduction.py +264 -0
  40. anyfesolver/_ge_beam3_displacement_program.py +255 -0
  41. anyfesolver/_ge_beam3_durable_coupled.py +251 -0
  42. anyfesolver/_ge_beam3_dynamic_elastic_state.py +461 -0
  43. anyfesolver/_ge_beam3_effective_deadline.py +58 -0
  44. anyfesolver/_ge_beam3_elastic_seed_continuation.py +223 -0
  45. anyfesolver/_ge_beam3_elastic_seed_modal.py +139 -0
  46. anyfesolver/_ge_beam3_equilibrium_line_program.py +98 -0
  47. anyfesolver/_ge_beam3_equilibrium_schur_solver.py +96 -0
  48. anyfesolver/_ge_beam3_factor_chain_modes.py +103 -0
  49. anyfesolver/_ge_beam3_fibre_cell.py +408 -0
  50. anyfesolver/_ge_beam3_fibre_distributed_couples.py +191 -0
  51. anyfesolver/_ge_beam3_fibre_kinematic_cell.py +75 -0
  52. anyfesolver/_ge_beam3_fibre_line_program.py +157 -0
  53. anyfesolver/_ge_beam3_fibre_line_work.py +87 -0
  54. anyfesolver/_ge_beam3_fibre_reference_modal.py +104 -0
  55. anyfesolver/_ge_beam3_fibre_schur_solver.py +134 -0
  56. anyfesolver/_ge_beam3_fibre_section.py +286 -0
  57. anyfesolver/_ge_beam3_fibre_static_boundary.py +113 -0
  58. anyfesolver/_ge_beam3_g1_analysis.py +307 -0
  59. anyfesolver/_ge_beam3_g1_elastic.py +161 -0
  60. anyfesolver/_ge_beam3_g1_element.py +185 -0
  61. anyfesolver/_ge_beam3_g1_operator.py +137 -0
  62. anyfesolver/_ge_beam3_g2_analysis.py +176 -0
  63. anyfesolver/_ge_beam3_g2_constraints.py +162 -0
  64. anyfesolver/_ge_beam3_g3_analysis.py +385 -0
  65. anyfesolver/_ge_beam3_g3_constraints.py +168 -0
  66. anyfesolver/_ge_beam3_g3b_owner.py +296 -0
  67. anyfesolver/_ge_beam3_g3b_q4_reference.py +186 -0
  68. anyfesolver/_ge_beam3_g3b_reference.py +206 -0
  69. anyfesolver/_ge_beam3_g3b_result_schema.py +107 -0
  70. anyfesolver/_ge_beam3_g3b_s3_reference.py +185 -0
  71. anyfesolver/_ge_beam3_g3b_weighted_reference.py +193 -0
  72. anyfesolver/_ge_beam3_g3c_affine_q4_chart.py +58 -0
  73. anyfesolver/_ge_beam3_g3c_affine_q4_increment_chart.py +257 -0
  74. anyfesolver/_ge_beam3_g3c_affine_q4_recovery.py +434 -0
  75. anyfesolver/_ge_beam3_g3c_affine_q4_registry.py +127 -0
  76. anyfesolver/_ge_beam3_g3c_b2_physical.py +153 -0
  77. anyfesolver/_ge_beam3_g3c_b2_physical_adapter.py +160 -0
  78. anyfesolver/_ge_beam3_g3c_definition.py +117 -0
  79. anyfesolver/_ge_beam3_g3c_local_beam.py +188 -0
  80. anyfesolver/_ge_beam3_g3c_local_shell.py +371 -0
  81. anyfesolver/_ge_beam3_g3c_owner.py +400 -0
  82. anyfesolver/_ge_beam3_g3c_physical_authority.py +203 -0
  83. anyfesolver/_ge_beam3_g3c_physical_owner.py +556 -0
  84. anyfesolver/_ge_beam3_g3c_recovery.py +91 -0
  85. anyfesolver/_ge_beam3_g3c_so3_numerics.py +81 -0
  86. anyfesolver/_ge_beam3_g3c_stable/__init__.py +1 -0
  87. anyfesolver/_ge_beam3_g3c_stable/authority.py +152 -0
  88. anyfesolver/_ge_beam3_g3c_stable/beam.py +196 -0
  89. anyfesolver/_ge_beam3_g3c_stable/boundary.py +38 -0
  90. anyfesolver/_ge_beam3_g3c_stable/chart.py +23 -0
  91. anyfesolver/_ge_beam3_g3c_stable/compensated.py +46 -0
  92. anyfesolver/_ge_beam3_g3c_stable/element.py +190 -0
  93. anyfesolver/_ge_beam3_g3c_stable/fit.py +54 -0
  94. anyfesolver/_ge_beam3_g3c_stable/joint.py +255 -0
  95. anyfesolver/_ge_beam3_g3c_stable/line_work.py +92 -0
  96. anyfesolver/_ge_beam3_g3c_stable/operator.py +147 -0
  97. anyfesolver/_ge_beam3_g3c_stable/owner.py +415 -0
  98. anyfesolver/_ge_beam3_g3c_stable/shell.py +358 -0
  99. anyfesolver/_ge_beam3_g4_completion.py +186 -0
  100. anyfesolver/_ge_beam3_g4a_station_transaction.py +385 -0
  101. anyfesolver/_ge_beam3_g5_completion.py +68 -0
  102. anyfesolver/_ge_beam3_g6_domain.py +354 -0
  103. anyfesolver/_ge_beam3_generalized_cell.py +172 -0
  104. anyfesolver/_ge_beam3_generalized_ellipsoid_section.py +215 -0
  105. anyfesolver/_ge_beam3_generalized_static_boundary.py +233 -0
  106. anyfesolver/_ge_beam3_lifted_kinetic_factor.py +26 -0
  107. anyfesolver/_ge_beam3_line_fibre_modes.py +121 -0
  108. anyfesolver/_ge_beam3_load_program.py +275 -0
  109. anyfesolver/_ge_beam3_loaded_modal.py +225 -0
  110. anyfesolver/_ge_beam3_mixed_ad.py +286 -0
  111. anyfesolver/_ge_beam3_native_analysis.py +484 -0
  112. anyfesolver/_ge_beam3_native_arc.py +269 -0
  113. anyfesolver/_ge_beam3_native_arc_adaptive.py +251 -0
  114. anyfesolver/_ge_beam3_native_arc_restart.py +88 -0
  115. anyfesolver/_ge_beam3_native_arc_source.py +62 -0
  116. anyfesolver/_ge_beam3_native_buckling.py +206 -0
  117. anyfesolver/_ge_beam3_native_combined_couples.py +179 -0
  118. anyfesolver/_ge_beam3_native_combined_restart.py +205 -0
  119. anyfesolver/_ge_beam3_native_definition.py +238 -0
  120. anyfesolver/_ge_beam3_native_distributed_element.py +220 -0
  121. anyfesolver/_ge_beam3_native_distributed_loading.py +92 -0
  122. anyfesolver/_ge_beam3_native_distributed_program.py +165 -0
  123. anyfesolver/_ge_beam3_native_distributed_recovery.py +34 -0
  124. anyfesolver/_ge_beam3_native_distributed_restart.py +221 -0
  125. anyfesolver/_ge_beam3_native_dynamic_analysis.py +149 -0
  126. anyfesolver/_ge_beam3_native_dynamic_restart.py +261 -0
  127. anyfesolver/_ge_beam3_native_fibre_current_modal.py +104 -0
  128. anyfesolver/_ge_beam3_native_fibre_recovery.py +34 -0
  129. anyfesolver/_ge_beam3_native_fibre_restart.py +211 -0
  130. anyfesolver/_ge_beam3_native_fibre_static_element.py +193 -0
  131. anyfesolver/_ge_beam3_native_force_adaptation.py +56 -0
  132. anyfesolver/_ge_beam3_native_generalized_combined_couples.py +188 -0
  133. anyfesolver/_ge_beam3_native_generalized_combined_restart.py +207 -0
  134. anyfesolver/_ge_beam3_native_generalized_element.py +222 -0
  135. anyfesolver/_ge_beam3_native_generalized_factor_modal.py +122 -0
  136. anyfesolver/_ge_beam3_native_generalized_loading.py +92 -0
  137. anyfesolver/_ge_beam3_native_generalized_modal.py +274 -0
  138. anyfesolver/_ge_beam3_native_generalized_paired_modal.py +13 -0
  139. anyfesolver/_ge_beam3_native_generalized_parameter.py +89 -0
  140. anyfesolver/_ge_beam3_native_generalized_program.py +196 -0
  141. anyfesolver/_ge_beam3_native_generalized_recovery.py +34 -0
  142. anyfesolver/_ge_beam3_native_generalized_restart.py +243 -0
  143. anyfesolver/_ge_beam3_native_history_profile.py +53 -0
  144. anyfesolver/_ge_beam3_native_line_loading.py +93 -0
  145. anyfesolver/_ge_beam3_native_line_program.py +150 -0
  146. anyfesolver/_ge_beam3_native_line_recovery.py +34 -0
  147. anyfesolver/_ge_beam3_native_line_restart.py +197 -0
  148. anyfesolver/_ge_beam3_native_line_static_element.py +220 -0
  149. anyfesolver/_ge_beam3_native_load_admission.py +37 -0
  150. anyfesolver/_ge_beam3_native_midpoint.py +1004 -0
  151. anyfesolver/_ge_beam3_native_multi_shell_contact.py +539 -0
  152. anyfesolver/_ge_beam3_native_pair_contact.py +236 -0
  153. anyfesolver/_ge_beam3_native_shell_contact.py +357 -0
  154. anyfesolver/_ge_beam3_native_spatial_couples.py +176 -0
  155. anyfesolver/_ge_beam3_native_spatial_restart.py +204 -0
  156. anyfesolver/_ge_beam3_native_transient.py +467 -0
  157. anyfesolver/_ge_beam3_native_translation.py +225 -0
  158. anyfesolver/_ge_beam3_native_translation_restart.py +54 -0
  159. anyfesolver/_ge_beam3_operator_validation_scope.py +53 -0
  160. anyfesolver/_ge_beam3_p5/__init__.py +11 -0
  161. anyfesolver/_ge_beam3_p5/algebra.py +91 -0
  162. anyfesolver/_ge_beam3_p5/arrays.py +29 -0
  163. anyfesolver/_ge_beam3_p5/chart.py +45 -0
  164. anyfesolver/_ge_beam3_p5/codec.py +82 -0
  165. anyfesolver/_ge_beam3_p5/committed_modal.py +191 -0
  166. anyfesolver/_ge_beam3_p5/compensated.py +118 -0
  167. anyfesolver/_ge_beam3_p5/compensated_coordinates.py +44 -0
  168. anyfesolver/_ge_beam3_p5/core.py +159 -0
  169. anyfesolver/_ge_beam3_p5/element.py +207 -0
  170. anyfesolver/_ge_beam3_p5/factors.py +61 -0
  171. anyfesolver/_ge_beam3_p5/inertia.py +120 -0
  172. anyfesolver/_ge_beam3_p5/mass.py +70 -0
  173. anyfesolver/_ge_beam3_p5/mixed.py +256 -0
  174. anyfesolver/_ge_beam3_p5/reference_modal.py +73 -0
  175. anyfesolver/_ge_beam3_p5/section.py +139 -0
  176. anyfesolver/_ge_beam3_p5/typed_schema.py +111 -0
  177. anyfesolver/_ge_beam3_p5_centered/__init__.py +6 -0
  178. anyfesolver/_ge_beam3_p5_centered/codec.py +84 -0
  179. anyfesolver/_ge_beam3_p5_centered/committed_modal.py +192 -0
  180. anyfesolver/_ge_beam3_p5_centered/core.py +171 -0
  181. anyfesolver/_ge_beam3_p5_centered/element.py +216 -0
  182. anyfesolver/_ge_beam3_p5_centered/mass.py +99 -0
  183. anyfesolver/_ge_beam3_p5_centered/positions.py +34 -0
  184. anyfesolver/_ge_beam3_p5_centered/reference_modal.py +73 -0
  185. anyfesolver/_ge_beam3_p5_coordinates/__init__.py +6 -0
  186. anyfesolver/_ge_beam3_p5_coordinates/codec.py +84 -0
  187. anyfesolver/_ge_beam3_p5_coordinates/committed_modal.py +192 -0
  188. anyfesolver/_ge_beam3_p5_coordinates/core.py +163 -0
  189. anyfesolver/_ge_beam3_p5_coordinates/element.py +213 -0
  190. anyfesolver/_ge_beam3_p5_coordinates/positions.py +102 -0
  191. anyfesolver/_ge_beam3_p5_coordinates/reference_modal.py +73 -0
  192. anyfesolver/_ge_beam3_p5_loads/__init__.py +7 -0
  193. anyfesolver/_ge_beam3_p5_loads/codec.py +85 -0
  194. anyfesolver/_ge_beam3_p5_loads/core.py +192 -0
  195. anyfesolver/_ge_beam3_p5_loads/element.py +243 -0
  196. anyfesolver/_ge_beam3_p5_loads/state.py +120 -0
  197. anyfesolver/_ge_beam3_p5_loads/work.py +45 -0
  198. anyfesolver/_ge_beam3_p5_seeded/__init__.py +9 -0
  199. anyfesolver/_ge_beam3_p5_seeded/codec.py +87 -0
  200. anyfesolver/_ge_beam3_p5_seeded/core.py +197 -0
  201. anyfesolver/_ge_beam3_p5_seeded/element.py +245 -0
  202. anyfesolver/_ge_beam3_p5_seeded/state.py +122 -0
  203. anyfesolver/_ge_beam3_p5_seeded/work.py +47 -0
  204. anyfesolver/_ge_beam3_pose_joint.py +268 -0
  205. anyfesolver/_ge_beam3_precise_geometric_work.py +147 -0
  206. anyfesolver/_ge_beam3_reassembled_signed_modes.py +101 -0
  207. anyfesolver/_ge_beam3_reference_identity.py +92 -0
  208. anyfesolver/_ge_beam3_refined_fibre_schur_solver.py +104 -0
  209. anyfesolver/_ge_beam3_refinement_capacity.py +19 -0
  210. anyfesolver/_ge_beam3_relative_virgin_reference_modes.py +60 -0
  211. anyfesolver/_ge_beam3_retained_arc.py +350 -0
  212. anyfesolver/_ge_beam3_retained_arc_geometry.py +66 -0
  213. anyfesolver/_ge_beam3_retained_arc_modal.py +125 -0
  214. anyfesolver/_ge_beam3_retained_elastic.py +134 -0
  215. anyfesolver/_ge_beam3_retained_fibre.py +209 -0
  216. anyfesolver/_ge_beam3_retained_fibre_control.py +270 -0
  217. anyfesolver/_ge_beam3_retained_fibre_element.py +58 -0
  218. anyfesolver/_ge_beam3_retained_fibre_modal.py +155 -0
  219. anyfesolver/_ge_beam3_retained_fibre_modes.py +189 -0
  220. anyfesolver/_ge_beam3_retained_fibre_program.py +68 -0
  221. anyfesolver/_ge_beam3_retained_fibre_state.py +268 -0
  222. anyfesolver/_ge_beam3_retained_force_program.py +72 -0
  223. anyfesolver/_ge_beam3_retained_generalized.py +186 -0
  224. anyfesolver/_ge_beam3_retained_generalized_modal.py +171 -0
  225. anyfesolver/_ge_beam3_retained_generalized_program.py +63 -0
  226. anyfesolver/_ge_beam3_retained_generalized_state.py +281 -0
  227. anyfesolver/_ge_beam3_retained_nodal_loading.py +111 -0
  228. anyfesolver/_ge_beam3_retained_plastic.py +116 -0
  229. anyfesolver/_ge_beam3_retained_plastic_modes.py +144 -0
  230. anyfesolver/_ge_beam3_retained_plastic_program.py +69 -0
  231. anyfesolver/_ge_beam3_retained_plastic_state.py +165 -0
  232. anyfesolver/_ge_beam3_retained_state.py +194 -0
  233. anyfesolver/_ge_beam3_retained_translation_control.py +345 -0
  234. anyfesolver/_ge_beam3_retained_translation_modal.py +137 -0
  235. anyfesolver/_ge_beam3_schur_line_program.py +98 -0
  236. anyfesolver/_ge_beam3_seeded_fibre_control.py +175 -0
  237. anyfesolver/_ge_beam3_seeded_load_program.py +301 -0
  238. anyfesolver/_ge_beam3_seeded_loaded_modal.py +226 -0
  239. anyfesolver/_ge_beam3_seeded_signed_modes.py +150 -0
  240. anyfesolver/_ge_beam3_shared_kinematic_split.py +53 -0
  241. anyfesolver/_ge_beam3_shell_joint_state.py +396 -0
  242. anyfesolver/_ge_beam3_shell_joint_trial.py +217 -0
  243. anyfesolver/_ge_beam3_signed_loaded_modes.py +140 -0
  244. anyfesolver/_ge_beam3_spatial_fibre_program.py +113 -0
  245. anyfesolver/_ge_beam3_spatial_nodal_moments.py +38 -0
  246. anyfesolver/_ge_beam3_station_resultant_cell.py +235 -0
  247. anyfesolver/_ge_beam3_variational_shell.py +211 -0
  248. anyfesolver/_ge_beam3_virgin_reference_modes.py +60 -0
  249. anyfesolver/_impact_coupling.py +162 -0
  250. anyfesolver/_native_authority_dag.py +77 -0
  251. anyfesolver/_native_dyadic_interval_inertia.py +64 -0
  252. anyfesolver/_native_exact_shift_chain_modes.py +140 -0
  253. anyfesolver/_native_exact_shift_inertia.py +86 -0
  254. anyfesolver/_native_factor_chain_modes.py +192 -0
  255. anyfesolver/_native_guard.cpp +828 -0
  256. anyfesolver/_native_guard_dispatch.py +140 -0
  257. anyfesolver/_native_large_factor_chain.py +55 -0
  258. anyfesolver/_native_material_protocol.py +51 -0
  259. anyfesolver/_native_midpoint_controller.py +90 -0
  260. anyfesolver/_native_modal_capacity.py +26 -0
  261. anyfesolver/_native_paired_factor_chain_modes.py +244 -0
  262. anyfesolver/_native_reassembled_factor_modes.py +185 -0
  263. anyfesolver/_native_reference_factor_spectrum.py +102 -0
  264. anyfesolver/_native_reference_modal.py +180 -0
  265. anyfesolver/_native_relative_factor_chain_modes.py +204 -0
  266. anyfesolver/_native_relative_reference_factor_spectrum.py +110 -0
  267. anyfesolver/_native_retained_step.py +15 -0
  268. anyfesolver/_native_rotation_state.py +797 -0
  269. anyfesolver/_native_signed_factor_modes.py +257 -0
  270. anyfesolver/_native_signed_kinetic_factor_modes.py +279 -0
  271. anyfesolver/_native_stationary_spectrum.py +79 -0
  272. anyfesolver/_nonlinear_events.py +150 -0
  273. anyfesolver/_nonlinear_seed.py +80 -0
  274. anyfesolver/_paired_modal_arithmetic.py +71 -0
  275. anyfesolver/_plate_stability_continuation.py +171 -0
  276. anyfesolver/_q4_assumed_strain_plasticity.py +502 -0
  277. anyfesolver/_qualified_authority_epoch.py +561 -0
  278. anyfesolver/_relative_reference_svd.py +44 -0
  279. anyfesolver/_stiffened_shell_affine_endpoint.py +232 -0
  280. anyfesolver/_stiffened_shell_algorithmic_pullback.py +38 -0
  281. anyfesolver/_stiffened_shell_arc_checkpoint.py +422 -0
  282. anyfesolver/_stiffened_shell_arc_control.py +108 -0
  283. anyfesolver/_stiffened_shell_arc_metric.py +222 -0
  284. anyfesolver/_stiffened_shell_arc_publication.py +153 -0
  285. anyfesolver/_stiffened_shell_arc_trial.py +310 -0
  286. anyfesolver/_stiffened_shell_b2_affine_resolution.py +101 -0
  287. anyfesolver/_stiffened_shell_b2_assembly_diagnostics.py +172 -0
  288. anyfesolver/_stiffened_shell_b2_definition_ownership.py +189 -0
  289. anyfesolver/_stiffened_shell_b2_experimental.py +153 -0
  290. anyfesolver/_stiffened_shell_b2_nodal_footprint.py +273 -0
  291. anyfesolver/_stiffened_shell_b2_physical_rigid_footprint.py +237 -0
  292. anyfesolver/_stiffened_shell_b2_q4_panel_experimental.py +2447 -0
  293. anyfesolver/_stiffened_shell_b2_q4_point_experimental.py +251 -0
  294. anyfesolver/_stiffened_shell_b2_reference_buckling.py +413 -0
  295. anyfesolver/_stiffened_shell_b3_chart.py +70 -0
  296. anyfesolver/_stiffened_shell_b3_local_adapter.py +141 -0
  297. anyfesolver/_stiffened_shell_beam_history.py +107 -0
  298. anyfesolver/_stiffened_shell_bl5_local_experimental.py +173 -0
  299. anyfesolver/_stiffened_shell_bl5_native_elastic.py +28 -0
  300. anyfesolver/_stiffened_shell_branch_event_trial.py +58 -0
  301. anyfesolver/_stiffened_shell_consumer_capabilities.py +124 -0
  302. anyfesolver/_stiffened_shell_coordinate_support.py +110 -0
  303. anyfesolver/_stiffened_shell_displacement_adaptive.py +327 -0
  304. anyfesolver/_stiffened_shell_displacement_checkpoint.py +360 -0
  305. anyfesolver/_stiffened_shell_displacement_control.py +326 -0
  306. anyfesolver/_stiffened_shell_displacement_corrector.py +293 -0
  307. anyfesolver/_stiffened_shell_displacement_increment.py +121 -0
  308. anyfesolver/_stiffened_shell_distributing_footprint.py +354 -0
  309. anyfesolver/_stiffened_shell_distributing_pose.py +267 -0
  310. anyfesolver/_stiffened_shell_f06_increment_arithmetic.py +205 -0
  311. anyfesolver/_stiffened_shell_ge_body_load.py +300 -0
  312. anyfesolver/_stiffened_shell_ge_checkpoint_binary.py +472 -0
  313. anyfesolver/_stiffened_shell_ge_distributed_load.py +210 -0
  314. anyfesolver/_stiffened_shell_ge_distributed_programme.py +175 -0
  315. anyfesolver/_stiffened_shell_ge_distributing_finite.py +242 -0
  316. anyfesolver/_stiffened_shell_ge_distributing_reference.py +296 -0
  317. anyfesolver/_stiffened_shell_ge_experimental.py +2454 -0
  318. anyfesolver/_stiffened_shell_ge_finite_experimental.py +2714 -0
  319. anyfesolver/_stiffened_shell_ge_mixed_modal_mass.py +33 -0
  320. anyfesolver/_stiffened_shell_ge_point_buckling.py +723 -0
  321. anyfesolver/_stiffened_shell_ge_pressure_load.py +366 -0
  322. anyfesolver/_stiffened_shell_ge_reference_modal.py +580 -0
  323. anyfesolver/_stiffened_shell_generalized_recovery.py +150 -0
  324. anyfesolver/_stiffened_shell_increment_control.py +217 -0
  325. anyfesolver/_stiffened_shell_l1_assembly_experimental.py +420 -0
  326. anyfesolver/_stiffened_shell_l1_local_experimental.py +284 -0
  327. anyfesolver/_stiffened_shell_l1_supported_work_experimental.py +146 -0
  328. anyfesolver/_stiffened_shell_native_distributed_load.py +120 -0
  329. anyfesolver/_stiffened_shell_native_gravity.py +236 -0
  330. anyfesolver/_stiffened_shell_nodal_footprint.py +255 -0
  331. anyfesolver/_stiffened_shell_physical_q4_mass.py +98 -0
  332. anyfesolver/_stiffened_shell_physical_s3_mass.py +53 -0
  333. anyfesolver/_stiffened_shell_point_recovery.py +49 -0
  334. anyfesolver/_stiffened_shell_q4_algorithmic_pullback.py +88 -0
  335. anyfesolver/_stiffened_shell_q4_material_event.py +114 -0
  336. anyfesolver/_stiffened_shell_q4_reference.py +65 -0
  337. anyfesolver/_stiffened_shell_rotation_charts.py +58 -0
  338. anyfesolver/_stiffened_shell_s3_algorithmic_pullback.py +59 -0
  339. anyfesolver/_stiffened_shell_s3_conservative_buckling.py +28 -0
  340. anyfesolver/_stiffened_shell_s3_dead_work_candidate.py +107 -0
  341. anyfesolver/_stiffened_shell_s3_material_event.py +30 -0
  342. anyfesolver/_stiffened_shell_same_parent_trial.py +224 -0
  343. anyfesolver/_stiffened_shell_selected_recovery.py +113 -0
  344. anyfesolver/_stiffened_shell_staged_load_experimental.py +392 -0
  345. anyfesolver/_stiffened_shell_stress_free_reference.py +204 -0
  346. anyfesolver/_wire_types.py +17 -0
  347. anyfesolver/activity.py +1537 -0
  348. anyfesolver/algebraic_dynamics.py +2864 -0
  349. anyfesolver/analysis_session.py +897 -0
  350. anyfesolver/anystructure_fem_mode.py +1637 -0
  351. anyfesolver/arc_length.py +2587 -0
  352. anyfesolver/assembly.py +1830 -0
  353. anyfesolver/b3_ge.py +179 -0
  354. anyfesolver/baselines.py +303 -0
  355. anyfesolver/beam_sections.py +292 -0
  356. anyfesolver/beam_shell_verification.py +4685 -0
  357. anyfesolver/beam_validity.py +110 -0
  358. anyfesolver/benchmarks.py +495 -0
  359. anyfesolver/boundary.py +1680 -0
  360. anyfesolver/buckling.py +2136 -0
  361. anyfesolver/buckling_validity.py +91 -0
  362. anyfesolver/capacity_workflow.py +431 -0
  363. anyfesolver/capsule_runtime_guard.py +99 -0
  364. anyfesolver/cases.py +173 -0
  365. anyfesolver/composite_strip_verification.py +297 -0
  366. anyfesolver/concentrated_mass.py +84 -0
  367. anyfesolver/constraint_audit.py +553 -0
  368. anyfesolver/contact.py +4785 -0
  369. anyfesolver/contact_performance.py +301 -0
  370. anyfesolver/control.py +206 -0
  371. anyfesolver/corotational.py +1935 -0
  372. anyfesolver/corotational_performance.py +157 -0
  373. anyfesolver/current_state_tangent.py +2780 -0
  374. anyfesolver/cylinder_benchmarks.py +369 -0
  375. anyfesolver/damage_matrix_performance.py +617 -0
  376. anyfesolver/dynamics.py +2833 -0
  377. anyfesolver/e4_pl_element.py +8265 -0
  378. anyfesolver/e4_pl_enriched.py +194 -0
  379. anyfesolver/e4_pl_enriched_nonlinear.py +159 -0
  380. anyfesolver/e4_pl_s3_element.py +9752 -0
  381. anyfesolver/e4_pl_s3_initial_fields.py +101 -0
  382. anyfesolver/e4_pl_s3_state.py +4723 -0
  383. anyfesolver/e4_pl_s3_v2_element.py +1844 -0
  384. anyfesolver/e4_pl_s3_v2b_element.py +1936 -0
  385. anyfesolver/e4_pl_s3_v2c_element.py +2196 -0
  386. anyfesolver/e4_pl_s3_v2d_element.py +2621 -0
  387. anyfesolver/e4_pl_s3_v2d_state.py +376 -0
  388. anyfesolver/element_capabilities.py +159 -0
  389. anyfesolver/element_qualification.py +432 -0
  390. anyfesolver/elements.py +6327 -0
  391. anyfesolver/experimental_csr_assembly.py +238 -0
  392. anyfesolver/external_references.py +1253 -0
  393. anyfesolver/fe_core.py +832 -0
  394. anyfesolver/floating_pressure_regions.py +119 -0
  395. anyfesolver/floating_response.py +486 -0
  396. anyfesolver/floating_transient.py +1281 -0
  397. anyfesolver/fracture.py +621 -0
  398. anyfesolver/ge_beam3_curved_reference.py +725 -0
  399. anyfesolver/ge_beam3_element.py +885 -0
  400. anyfesolver/ge_beam3_mixed_element.py +1216 -0
  401. anyfesolver/ge_beam3_mixed_state.py +814 -0
  402. anyfesolver/ge_beam3_native.py +129 -0
  403. anyfesolver/ge_beam3_native_connected_dynamics.py +24 -0
  404. anyfesolver/ge_beam3_native_dynamics.py +70 -0
  405. anyfesolver/ge_beam3_state.py +672 -0
  406. anyfesolver/general_contact/__init__.py +151 -0
  407. anyfesolver/general_contact/_enriched_multitarget_empty.py +202 -0
  408. anyfesolver/general_contact/_enriched_multitarget_trial.py +183 -0
  409. anyfesolver/general_contact/_results_archive_common.py +65 -0
  410. anyfesolver/general_contact/algebraic_path.py +206 -0
  411. anyfesolver/general_contact/arc_contact.py +237 -0
  412. anyfesolver/general_contact/arc_results_archive.py +158 -0
  413. anyfesolver/general_contact/augmentation.py +157 -0
  414. anyfesolver/general_contact/automatic_domain.py +621 -0
  415. anyfesolver/general_contact/beam_chain_consistent.py +357 -0
  416. anyfesolver/general_contact/beam_chain_end_geometry.py +237 -0
  417. anyfesolver/general_contact/beam_chain_ends.py +220 -0
  418. anyfesolver/general_contact/beam_chain_pair.py +416 -0
  419. anyfesolver/general_contact/beam_curve_end_geometry.py +254 -0
  420. anyfesolver/general_contact/beam_curve_ends.py +237 -0
  421. anyfesolver/general_contact/beam_curve_pair.py +794 -0
  422. anyfesolver/general_contact/beam_curve_pair_static.py +303 -0
  423. anyfesolver/general_contact/beam_end_radial_geometry.py +221 -0
  424. anyfesolver/general_contact/beam_end_topology.py +15 -0
  425. anyfesolver/general_contact/beam_hemisphere_coupled_tool.py +61 -0
  426. anyfesolver/general_contact/beam_hemisphere_cylinder.py +134 -0
  427. anyfesolver/general_contact/beam_hemisphere_cylinder_motion.py +89 -0
  428. anyfesolver/general_contact/beam_hemisphere_cylinder_work.py +216 -0
  429. anyfesolver/general_contact/beam_hemisphere_plane.py +175 -0
  430. anyfesolver/general_contact/beam_hemisphere_s3_support.py +152 -0
  431. anyfesolver/general_contact/beam_hemisphere_sphere.py +135 -0
  432. anyfesolver/general_contact/beam_hemisphere_sphere_work.py +114 -0
  433. anyfesolver/general_contact/beam_hemisphere_support.py +211 -0
  434. anyfesolver/general_contact/beam_pair.py +523 -0
  435. anyfesolver/general_contact/beam_pair_end_geometry.py +269 -0
  436. anyfesolver/general_contact/beam_pair_ends.py +222 -0
  437. anyfesolver/general_contact/beam_plane.py +425 -0
  438. anyfesolver/general_contact/beam_radial.py +500 -0
  439. anyfesolver/general_contact/beam_radial_ends.py +223 -0
  440. anyfesolver/general_contact/beam_s3_directional_rates.py +196 -0
  441. anyfesolver/general_contact/beam_s3_rotational_transient.py +126 -0
  442. anyfesolver/general_contact/beam_s3_transient.py +139 -0
  443. anyfesolver/general_contact/beam_shell.py +648 -0
  444. anyfesolver/general_contact/beam_shell_patch.py +395 -0
  445. anyfesolver/general_contact/beam_temporal_bounds.py +230 -0
  446. anyfesolver/general_contact/capability.py +101 -0
  447. anyfesolver/general_contact/capped_cylinder.py +618 -0
  448. anyfesolver/general_contact/contact_search.py +95 -0
  449. anyfesolver/general_contact/core.py +1769 -0
  450. anyfesolver/general_contact/curved_s3_q4_work.py +238 -0
  451. anyfesolver/general_contact/curved_shell_skin.py +520 -0
  452. anyfesolver/general_contact/d1_interior_profile.py +427 -0
  453. anyfesolver/general_contact/deformable_beam_s3_caps.py +143 -0
  454. anyfesolver/general_contact/deformable_beam_s3_line.py +211 -0
  455. anyfesolver/general_contact/deformable_beam_s3_static.py +152 -0
  456. anyfesolver/general_contact/descriptor_rates.py +61 -0
  457. anyfesolver/general_contact/enriched_cold_predictor.py +161 -0
  458. anyfesolver/general_contact/enriched_moment_batch.py +337 -0
  459. anyfesolver/general_contact/enriched_multitarget.py +308 -0
  460. anyfesolver/general_contact/enriched_multitarget_gap.py +156 -0
  461. anyfesolver/general_contact/enriched_multitarget_moments.py +194 -0
  462. anyfesolver/general_contact/enriched_multitarget_topology.py +171 -0
  463. anyfesolver/general_contact/enriched_nonlinear.py +440 -0
  464. anyfesolver/general_contact/enriched_overlap.py +299 -0
  465. anyfesolver/general_contact/enriched_path.py +253 -0
  466. anyfesolver/general_contact/enriched_small_cut.py +310 -0
  467. anyfesolver/general_contact/enriched_static.py +481 -0
  468. anyfesolver/general_contact/enriched_union.py +320 -0
  469. anyfesolver/general_contact/equilibrated_pressure_pivot.py +140 -0
  470. anyfesolver/general_contact/event_subdivision.py +273 -0
  471. anyfesolver/general_contact/finite_mixed_state.py +133 -0
  472. anyfesolver/general_contact/finite_rigid_patch.py +196 -0
  473. anyfesolver/general_contact/finite_rigid_support.py +129 -0
  474. anyfesolver/general_contact/finite_rigid_sweep.py +53 -0
  475. anyfesolver/general_contact/finite_rotation_predictor.py +171 -0
  476. anyfesolver/general_contact/finite_rotation_skin.py +212 -0
  477. anyfesolver/general_contact/finite_rotation_state.py +106 -0
  478. anyfesolver/general_contact/finite_rotation_sweep.py +161 -0
  479. anyfesolver/general_contact/finite_v2d_state.py +104 -0
  480. anyfesolver/general_contact/fixed_projection_graph.py +205 -0
  481. anyfesolver/general_contact/fixed_projection_s3_events.py +235 -0
  482. anyfesolver/general_contact/free_rigid.py +134 -0
  483. anyfesolver/general_contact/friction_point.py +378 -0
  484. anyfesolver/general_contact/gap_extrema.py +119 -0
  485. anyfesolver/general_contact/guided_pair_transient_geometry.py +138 -0
  486. anyfesolver/general_contact/initial_contact_seed.py +368 -0
  487. anyfesolver/general_contact/linearized_pivot.py +595 -0
  488. anyfesolver/general_contact/material_work_diagnostics.py +159 -0
  489. anyfesolver/general_contact/moment_batch_ad.py +129 -0
  490. anyfesolver/general_contact/moment_batch_points.py +75 -0
  491. anyfesolver/general_contact/moving.py +1031 -0
  492. anyfesolver/general_contact/multiple_beam_rigid.py +248 -0
  493. anyfesolver/general_contact/multiple_beam_s3_caps.py +199 -0
  494. anyfesolver/general_contact/multiple_beam_s3_transient.py +223 -0
  495. anyfesolver/general_contact/multiple_projected_pairs.py +196 -0
  496. anyfesolver/general_contact/multiple_shell_planes.py +226 -0
  497. anyfesolver/general_contact/native_activation_static.py +143 -0
  498. anyfesolver/general_contact/native_checkpoint_results.py +213 -0
  499. anyfesolver/general_contact/native_curve_union.py +268 -0
  500. anyfesolver/general_contact/native_curved_geometry.py +374 -0
  501. anyfesolver/general_contact/native_curved_pair_partition.py +590 -0
  502. anyfesolver/general_contact/native_curved_plane_work.py +864 -0
  503. anyfesolver/general_contact/native_curved_s3_work.py +472 -0
  504. anyfesolver/general_contact/native_event_polynomial.py +164 -0
  505. anyfesolver/general_contact/native_fibre_context.py +173 -0
  506. anyfesolver/general_contact/native_fibre_results.py +74 -0
  507. anyfesolver/general_contact/native_initial_guess.py +122 -0
  508. anyfesolver/general_contact/native_material_activation.py +108 -0
  509. anyfesolver/general_contact/native_material_plane.py +111 -0
  510. anyfesolver/general_contact/native_material_s3.py +209 -0
  511. anyfesolver/general_contact/native_multi_s3_static.py +722 -0
  512. anyfesolver/general_contact/native_normal_angles.py +233 -0
  513. anyfesolver/general_contact/native_pair_error_budget.py +49 -0
  514. anyfesolver/general_contact/native_replay_arithmetic.py +103 -0
  515. anyfesolver/general_contact/native_replay_diagnostics.py +90 -0
  516. anyfesolver/general_contact/native_retained_body_junction.py +99 -0
  517. anyfesolver/general_contact/native_retained_body_pair.py +220 -0
  518. anyfesolver/general_contact/native_retained_body_projection.py +160 -0
  519. anyfesolver/general_contact/native_retained_body_static.py +62 -0
  520. anyfesolver/general_contact/native_retained_cell_pair.py +185 -0
  521. anyfesolver/general_contact/native_retained_curve_cell.py +102 -0
  522. anyfesolver/general_contact/native_retained_line_plane.py +210 -0
  523. anyfesolver/general_contact/native_retained_line_s3.py +440 -0
  524. anyfesolver/general_contact/native_retained_line_s3_work.py +91 -0
  525. anyfesolver/general_contact/native_retained_pair_static.py +845 -0
  526. anyfesolver/general_contact/native_retained_s3_static.py +554 -0
  527. anyfesolver/general_contact/native_retained_static.py +478 -0
  528. anyfesolver/general_contact/native_retained_station.py +222 -0
  529. anyfesolver/general_contact/native_retained_whole_pair.py +2120 -0
  530. anyfesolver/general_contact/native_s3_swept.py +149 -0
  531. anyfesolver/general_contact/native_shell_static_driver.py +144 -0
  532. anyfesolver/general_contact/native_surface_activation.py +391 -0
  533. anyfesolver/general_contact/native_surface_bounds.py +198 -0
  534. anyfesolver/general_contact/native_surface_contributor.py +121 -0
  535. anyfesolver/general_contact/native_surface_crossing.py +81 -0
  536. anyfesolver/general_contact/native_surface_event_sequence.py +320 -0
  537. anyfesolver/general_contact/native_surface_extrema.py +72 -0
  538. anyfesolver/general_contact/native_surface_friction_integral.py +1724 -0
  539. anyfesolver/general_contact/native_surface_front.py +742 -0
  540. anyfesolver/general_contact/native_surface_front_boundary.py +160 -0
  541. anyfesolver/general_contact/native_surface_front_precision.py +78 -0
  542. anyfesolver/general_contact/native_surface_front_work.py +118 -0
  543. anyfesolver/general_contact/native_surface_history.py +334 -0
  544. anyfesolver/general_contact/native_surface_normal.py +324 -0
  545. anyfesolver/general_contact/native_surface_patch.py +213 -0
  546. anyfesolver/general_contact/native_surface_path.py +348 -0
  547. anyfesolver/general_contact/native_surface_quadrature.py +212 -0
  548. anyfesolver/general_contact/native_surface_s3_friction.py +340 -0
  549. anyfesolver/general_contact/native_surface_support.py +776 -0
  550. anyfesolver/general_contact/native_surface_transaction.py +198 -0
  551. anyfesolver/general_contact/native_transient_multi_shell.py +108 -0
  552. anyfesolver/general_contact/native_transient_pair.py +61 -0
  553. anyfesolver/general_contact/native_transient_shell.py +44 -0
  554. anyfesolver/general_contact/normal_s3_skin_path.py +163 -0
  555. anyfesolver/general_contact/overlap.py +443 -0
  556. anyfesolver/general_contact/pair.py +466 -0
  557. anyfesolver/general_contact/patch_broadphase.py +111 -0
  558. anyfesolver/general_contact/patch_mortar.py +593 -0
  559. anyfesolver/general_contact/patch_sliding.py +644 -0
  560. anyfesolver/general_contact/plane_newmark_events.py +278 -0
  561. anyfesolver/general_contact/pointwise_patch.py +288 -0
  562. anyfesolver/general_contact/polynomial_roots.py +312 -0
  563. anyfesolver/general_contact/pressure_basis.py +241 -0
  564. anyfesolver/general_contact/pressure_diagnostics.py +155 -0
  565. anyfesolver/general_contact/pressure_overlay.py +182 -0
  566. anyfesolver/general_contact/pressure_space.py +51 -0
  567. anyfesolver/general_contact/q4_material_checkpoint.py +276 -0
  568. anyfesolver/general_contact/q4_overlap_local_bound.py +1111 -0
  569. anyfesolver/general_contact/q4_q4_overlap_derivatives.py +234 -0
  570. anyfesolver/general_contact/q4_q4_swept_bound.py +58 -0
  571. anyfesolver/general_contact/q4_s3_overlap_derivatives.py +1159 -0
  572. anyfesolver/general_contact/q4_s3_tiny_wedge.py +180 -0
  573. anyfesolver/general_contact/q4_skin_work.py +87 -0
  574. anyfesolver/general_contact/q4_source_mortar_energy.py +181 -0
  575. anyfesolver/general_contact/q4_source_overlap.py +401 -0
  576. anyfesolver/general_contact/q4_target_overlap.py +181 -0
  577. anyfesolver/general_contact/request_identity.py +192 -0
  578. anyfesolver/general_contact/rigid_translation.py +199 -0
  579. anyfesolver/general_contact/runtime.py +27 -0
  580. anyfesolver/general_contact/s3_friction_chart_interval.py +104 -0
  581. anyfesolver/general_contact/s3_friction_coverage.py +165 -0
  582. anyfesolver/general_contact/s3_friction_dyadic_interval.py +39 -0
  583. anyfesolver/general_contact/s3_friction_history_path.py +111 -0
  584. anyfesolver/general_contact/s3_friction_mesh_coverage.py +145 -0
  585. anyfesolver/general_contact/s3_friction_mesh_gap.py +74 -0
  586. anyfesolver/general_contact/s3_friction_mesh_monolithic.py +150 -0
  587. anyfesolver/general_contact/s3_friction_monolithic.py +121 -0
  588. anyfesolver/general_contact/s3_friction_moving_coverage.py +114 -0
  589. anyfesolver/general_contact/s3_friction_pair.py +237 -0
  590. anyfesolver/general_contact/s3_friction_point.py +129 -0
  591. anyfesolver/general_contact/s3_friction_prepared_path.py +254 -0
  592. anyfesolver/general_contact/s3_friction_replay.py +1094 -0
  593. anyfesolver/general_contact/s3_friction_rim_path.py +69 -0
  594. anyfesolver/general_contact/s3_friction_rim_transaction.py +23 -0
  595. anyfesolver/general_contact/s3_friction_static.py +267 -0
  596. anyfesolver/general_contact/s3_friction_swept_gap.py +112 -0
  597. anyfesolver/general_contact/s3_friction_touch.py +94 -0
  598. anyfesolver/general_contact/s3_friction_weak_pressure.py +66 -0
  599. anyfesolver/general_contact/s3_overlap_derivatives.py +220 -0
  600. anyfesolver/general_contact/s3_overlap_hermite_gap.py +180 -0
  601. anyfesolver/general_contact/s3_pair_static.py +343 -0
  602. anyfesolver/general_contact/s3_patch_augmented.py +2056 -0
  603. anyfesolver/general_contact/s3_patch_mortar_energy.py +545 -0
  604. anyfesolver/general_contact/s3_patch_static.py +1725 -0
  605. anyfesolver/general_contact/s3_pressure_hermite_bounds.py +395 -0
  606. anyfesolver/general_contact/s3_pressure_polygon_bounds.py +73 -0
  607. anyfesolver/general_contact/s3_q4_gap_resolution.py +191 -0
  608. anyfesolver/general_contact/s3_q4_overlap_derivatives.py +252 -0
  609. anyfesolver/general_contact/s3_q4_swept.py +56 -0
  610. anyfesolver/general_contact/s3_skin_work.py +101 -0
  611. anyfesolver/general_contact/s3_sliding_friction.py +640 -0
  612. anyfesolver/general_contact/s3_stable_plane_gap.py +43 -0
  613. anyfesolver/general_contact/seed_path_vertex_interval.py +323 -0
  614. anyfesolver/general_contact/semismooth.py +133 -0
  615. anyfesolver/general_contact/semismooth_block.py +147 -0
  616. anyfesolver/general_contact/semismooth_path.py +871 -0
  617. anyfesolver/general_contact/shell_pair_hermite_sweep.py +336 -0
  618. anyfesolver/general_contact/shell_sphere_temporal_bounds.py +305 -0
  619. anyfesolver/general_contact/skin_geometry.py +106 -0
  620. anyfesolver/general_contact/sliding.py +349 -0
  621. anyfesolver/general_contact/sphere.py +691 -0
  622. anyfesolver/general_contact/sphere_temporal_bounds.py +241 -0
  623. anyfesolver/general_contact/static_path.py +2608 -0
  624. anyfesolver/general_contact/static_results_archive.py +140 -0
  625. anyfesolver/general_contact/structural_state_bridge.py +196 -0
  626. anyfesolver/general_contact/supported_schur.py +594 -0
  627. anyfesolver/general_contact/swept_patch_broadphase.py +160 -0
  628. anyfesolver/general_contact/transient.py +2921 -0
  629. anyfesolver/general_contact/transient_results_archive.py +491 -0
  630. anyfesolver/general_contact/triangle_mortar_energy.py +280 -0
  631. anyfesolver/general_contact/triangle_pair_energy.py +211 -0
  632. anyfesolver/general_contact/triangulated_rigid.py +94 -0
  633. anyfesolver/general_contact/triangulated_rigid_static.py +399 -0
  634. anyfesolver/general_contact/warped_q4_plane.py +185 -0
  635. anyfesolver/general_contact/warped_q4_skin.py +302 -0
  636. anyfesolver/general_contact/warped_q4_static.py +331 -0
  637. anyfesolver/impact_performance.py +273 -0
  638. anyfesolver/impact_reduced_assembly.py +294 -0
  639. anyfesolver/imperfections.py +397 -0
  640. anyfesolver/inertia_relief.py +676 -0
  641. anyfesolver/initial_field_state.py +54 -0
  642. anyfesolver/jit_compiler.py +135 -0
  643. anyfesolver/kernel_warmup.py +228 -0
  644. anyfesolver/linalg.py +1002 -0
  645. anyfesolver/marine_contributions.py +634 -0
  646. anyfesolver/marine_coupled_equilibrium.py +292 -0
  647. anyfesolver/marine_equilibrium.py +405 -0
  648. anyfesolver/marine_hydro_coordinates.py +346 -0
  649. anyfesolver/marine_linear.py +549 -0
  650. anyfesolver/marine_link.py +306 -0
  651. anyfesolver/marine_mechanical.py +923 -0
  652. anyfesolver/marine_mooring.py +533 -0
  653. anyfesolver/marine_morison.py +331 -0
  654. anyfesolver/marine_potential_flow.py +403 -0
  655. anyfesolver/marine_rigid.py +397 -0
  656. anyfesolver/marine_seabed.py +122 -0
  657. anyfesolver/mass_properties.py +352 -0
  658. anyfesolver/material_curves.py +52 -0
  659. anyfesolver/materials.py +43 -0
  660. anyfesolver/matrix_assembly.py +7330 -0
  661. anyfesolver/mesh_gen.py +904 -0
  662. anyfesolver/mesh_load_bc_verification.py +612 -0
  663. anyfesolver/modal.py +2494 -0
  664. anyfesolver/nonlinear.py +341 -0
  665. anyfesolver/nonlinear_analysis_diagnostics.py +466 -0
  666. anyfesolver/nonlinear_element_evaluation.py +126 -0
  667. anyfesolver/nonlinear_performance.py +2094 -0
  668. anyfesolver/nonlinear_performance_batch_b.py +1173 -0
  669. anyfesolver/nonlinear_performance_batch_c.py +850 -0
  670. anyfesolver/nonlinear_performance_bootstrap.py +164 -0
  671. anyfesolver/nonlinear_reduced_assembly.py +806 -0
  672. anyfesolver/nonlinear_restart.py +1708 -0
  673. anyfesolver/nonlinear_state.py +2800 -0
  674. anyfesolver/nonlinear_static.py +9407 -0
  675. anyfesolver/outcomes.py +694 -0
  676. anyfesolver/plasticity.py +2087 -0
  677. anyfesolver/plasticity_qualification.py +758 -0
  678. anyfesolver/prepared_static.py +1129 -0
  679. anyfesolver/prepared_static_envelopes.py +389 -0
  680. anyfesolver/prepared_static_loads.py +1180 -0
  681. anyfesolver/prepared_static_measures.py +18 -0
  682. anyfesolver/prepared_static_numeric.py +247 -0
  683. anyfesolver/prepared_static_q4.py +297 -0
  684. anyfesolver/prepared_static_recovery.py +2068 -0
  685. anyfesolver/prepared_static_response.py +1013 -0
  686. anyfesolver/prepared_static_shared.py +226 -0
  687. anyfesolver/prepared_static_snapshot.py +323 -0
  688. anyfesolver/prepared_static_vectorized.py +866 -0
  689. anyfesolver/pressure_regions.py +287 -0
  690. anyfesolver/production_readiness.py +343 -0
  691. anyfesolver/quality_control.py +1487 -0
  692. anyfesolver/quantities.py +1289 -0
  693. anyfesolver/recovery.py +4217 -0
  694. anyfesolver/recovery_batches.py +1985 -0
  695. anyfesolver/recovery_policy.py +205 -0
  696. anyfesolver/recovery_s4.py +289 -0
  697. anyfesolver/recovery_shell_frames.py +102 -0
  698. anyfesolver/reference_cases.py +366 -0
  699. anyfesolver/result_capsule.py +2175 -0
  700. anyfesolver/results.py +752 -0
  701. anyfesolver/runtime.py +9819 -0
  702. anyfesolver/s3_reference_batch.py +1338 -0
  703. anyfesolver/s3_v2c_fast_assembly.py +544 -0
  704. anyfesolver/s3_v2d_fast_assembly.py +447 -0
  705. anyfesolver/s4_validity.py +354 -0
  706. anyfesolver/sections.py +67 -0
  707. anyfesolver/sesam_fem/__init__.py +55 -0
  708. anyfesolver/sesam_fem/__main__.py +80 -0
  709. anyfesolver/sesam_fem/diagnostics.py +5 -0
  710. anyfesolver/sesam_fem/document.py +39 -0
  711. anyfesolver/sesam_fem/exporter.py +9 -0
  712. anyfesolver/sesam_fem/importer.py +228 -0
  713. anyfesolver/sesam_fem/records.py +21 -0
  714. anyfesolver/sesam_fem/schema.py +35 -0
  715. anyfesolver/sesam_fem/sif_importer.py +9 -0
  716. anyfesolver/sesam_fem/validation.py +5 -0
  717. anyfesolver/sestra_deep_diagnostics.py +173 -0
  718. anyfesolver/sestra_mixed_verification.py +146 -0
  719. anyfesolver/sestra_structure_benchmarks.py +270 -0
  720. anyfesolver/sestra_three_case.py +215 -0
  721. anyfesolver/sestra_verification.py +523 -0
  722. anyfesolver/shell_benchmarks.py +367 -0
  723. anyfesolver/shell_formulations/director_field.py +799 -0
  724. anyfesolver/shell_formulations/geometry_provenance.py +921 -0
  725. anyfesolver/shell_formulations/mitc4_plus_d_quality.py +318 -0
  726. anyfesolver/shell_formulations/mitc4_plus_d_reference.py +837 -0
  727. anyfesolver/shell_formulations/mitc4_plus_d_scalar.py +209 -0
  728. anyfesolver/shell_formulations/protocol.py +222 -0
  729. anyfesolver/shell_formulations/q4_common.py +271 -0
  730. anyfesolver/shell_formulations/s4_restricted_policy.py +78 -0
  731. anyfesolver/shell_sections.py +394 -0
  732. anyfesolver/solid_submodel.py +930 -0
  733. anyfesolver/static_batch.py +662 -0
  734. anyfesolver/static_envelopes.py +250 -0
  735. anyfesolver/stiffened_shell.py +388 -0
  736. anyfesolver/submodel_transfer.py +1306 -0
  737. anyfesolver/test_cases.py +610 -0
  738. anyfesolver/threading_policy.py +431 -0
  739. anyfesolver/validation.py +719 -0
  740. anyfesolver/vectorized_beam.py +139 -0
  741. anyfesolver/vectorized_generalized_shell.py +448 -0
  742. anyfesolver/vectorized_hill48.py +956 -0
  743. anyfesolver/vectorized_nonlinear.py +360 -0
  744. anyfesolver/vectorized_stiffness.py +694 -0
  745. anyfesolver-0.5.0a1.dist-info/METADATA +374 -0
  746. anyfesolver-0.5.0a1.dist-info/RECORD +751 -0
  747. anyfesolver-0.5.0a1.dist-info/WHEEL +5 -0
  748. anyfesolver-0.5.0a1.dist-info/licenses/COPYRIGHT +1 -0
  749. anyfesolver-0.5.0a1.dist-info/licenses/LICENSE +373 -0
  750. anyfesolver-0.5.0a1.dist-info/licenses/THIRD_PARTY_NOTICES.md +32 -0
  751. anyfesolver-0.5.0a1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,215 @@
1
+ """Private six-resultant associated ellipsoid section, not a fibre/J2 adapter."""
2
+ from dataclasses import dataclass
3
+ from decimal import Decimal as D, localcontext
4
+ from hashlib import sha256
5
+ from time import monotonic
6
+ import numpy as np
7
+ from ._ge_beam3_fibre_section import _owned,_number,canonical
8
+ from ._ge_beam3_station_resultant_cell import dec,pair,mv,dot,solve,ident,cholesky
9
+ from ._ge_beam3_effective_deadline import effective_deadline_seconds
10
+
11
+ POLICY='GE_BEAM3_SIX_RESULTANT_ASSOCIATED_ELLIPSOID_HARDENING_V1'
12
+ MEASURE='NATIVE_GENERALIZED_STRAIN_AND_REFERENCE_SECTION_RESULTANT_WORK'
13
+ RECOVERY='RESULTANT_LEVEL_ONLY_NO_FIBRE_STRESSES_SUPPLIED'
14
+
15
+
16
+ def _pair(x):
17
+ high,low=pair([x]);return high[0],low[0]
18
+
19
+
20
+ def _parts(values,shape):
21
+ a,b=pair(values)
22
+ return _owned(np.array(a).reshape(shape),shape),_owned(np.array(b).reshape(shape),shape)
23
+
24
+
25
+ def _unpair(value):
26
+ if type(value) is not tuple or len(value)!=2:raise ValueError('exact paired section scalar')
27
+ x=dec(value[0])+dec(value[1])
28
+ if _pair(x)!=value:raise ValueError('normalized paired section scalar')
29
+ return x
30
+
31
+
32
+ @dataclass(frozen=True)
33
+ class GeneralizedHistory:
34
+ section_identity: str
35
+ plastic: tuple
36
+ accumulated: tuple
37
+
38
+
39
+ @dataclass(frozen=True)
40
+ class GeneralizedResponse:
41
+ origin: GeneralizedHistory
42
+ history: GeneralizedHistory
43
+ strain: np.ndarray
44
+ strain_low: np.ndarray
45
+ resultants: np.ndarray
46
+ resultants_low: np.ndarray
47
+ tangent: np.ndarray
48
+ tangent_low: np.ndarray
49
+ compliance: np.ndarray
50
+ compliance_low: np.ndarray
51
+ dual_potential: tuple
52
+ incremental_potential: tuple
53
+ stored_energy: tuple
54
+ dissipation: tuple
55
+ plastic_increment: tuple
56
+ branch: str
57
+ derivative_kind: str
58
+ section_identity: str
59
+ recovery_status: str=RECOVERY
60
+ production_qualified: bool=False
61
+
62
+
63
+ class EllipsoidalGeneralizedSection:
64
+ """C and M are explicit SPD work-coordinate tensors; H and Y are positive.
65
+
66
+ q(s)=sqrt(s.T M s). Flow is dz=dlambda*M*s/q and dp=dlambda.
67
+ The complete complementary incremental potential is
68
+ .5*s.T*C^-1*s + z0.s + max(q-Y-H*p0,0)^2/(2H).
69
+ This is a declared resultant law, never an inferred physical fibre model.
70
+ """
71
+ __slots__=('elastic','metric','yield_force','hardening','identity','_c','_m','_s','_compiled','_sealed')
72
+
73
+ def __setattr__(self,name,value):
74
+ if getattr(self,'_sealed',False):raise AttributeError('generalized section is immutable')
75
+ object.__setattr__(self,name,value)
76
+
77
+ def __init__(self,elastic,metric,yield_force,hardening):
78
+ self.elastic=_owned(elastic,(6,6));self.metric=_owned(metric,(6,6))
79
+ self.yield_force=_number(yield_force);self.hardening=_number(hardening)
80
+ if self.yield_force<=0 or self.hardening<=0:raise ValueError('positive yield and hardening required')
81
+ if not np.array_equal(self.elastic,self.elastic.T) or not np.array_equal(self.metric,self.metric.T):
82
+ raise ValueError('exact symmetric generalized tensors required')
83
+ with localcontext() as ctx:
84
+ ctx.prec=80
85
+ self._c=tuple(tuple(D.from_float(float(v)) for v in row) for row in self.elastic)
86
+ self._m=tuple(tuple(D.from_float(float(v)) for v in row) for row in self.metric)
87
+ cholesky(self._c);cholesky(self._m)
88
+ self._s=tuple(map(tuple,solve([list(row) for row in self._c],ident(6),lambda:None)))
89
+ self._compiled=(self._c,self._m,self._s)
90
+ self.identity=sha256(canonical(self.descriptor())).hexdigest();self._sealed=True
91
+
92
+ def descriptor(self):
93
+ return dict(policy=POLICY,measure=MEASURE,elastic=self.elastic,metric=self.metric,
94
+ yield_force=self.yield_force,hardening=self.hardening,recovery=RECOVERY)
95
+
96
+ def guard(self):
97
+ if sha256(canonical(self.descriptor())).hexdigest()!=self.identity:raise ValueError('generalized section authority changed')
98
+ if any(a is not b for a,b in zip((self._c,self._m,self._s),self._compiled)):
99
+ raise ValueError('generalized section compiled authority changed')
100
+
101
+ def virgin(self):
102
+ self.guard();return GeneralizedHistory(self.identity,((0.,0.),)*6,(0.,0.))
103
+
104
+ def _origin(self,origin):
105
+ if type(origin) is not GeneralizedHistory or origin.section_identity!=self.identity or type(origin.plastic) is not tuple or len(origin.plastic)!=6:
106
+ raise ValueError('owned six-component section history required')
107
+ z=list(map(_unpair,origin.plastic));p=_unpair(origin.accumulated)
108
+ if p<0:raise ValueError('nonnegative accumulated section increment')
109
+ # This point law permits an explicitly supplied initial plastic offset.
110
+ # Reachability from virgin state belongs to its authenticated history chain.
111
+ return z,p
112
+
113
+ def _dual(self,s,z0,p0):
114
+ h=dec(self.hardening);y=dec(self.yield_force);ms=mv(self._m,s);q=dot(s,ms).sqrt();radius=y+h*p0
115
+ lam=max(D(0),(q-radius)/h);z=z0[:];comp=[list(row) for row in self._s]
116
+ if lam:
117
+ n=[v/q for v in ms];z=[a+lam*b for a,b in zip(z0,n)]
118
+ for i in range(6):
119
+ for j in range(6):comp[i][j]+=n[i]*n[j]/h+lam*(self._m[i][j]-n[i]*n[j])/q
120
+ elastic=mv(self._s,s);e=[a+b for a,b in zip(elastic,z)]
121
+ p=p0+lam;ue=dot(s,elastic)/2
122
+ dual=ue+dot(z0,s)+max(D(0),q-radius)**2/(2*h)
123
+ potential=ue+h*(p*p-p0*p0)/2+y*lam
124
+ branch='PLASTIC' if lam else ('YIELD_BOUNDARY' if q==radius else 'ELASTIC')
125
+ return e,comp,z,p,lam,dual,potential,ue+h*p*p/2,y*lam,branch
126
+
127
+ def response(self,values,*,origin=None,control='strain'):
128
+ self.guard()
129
+ if control not in ('strain','resultant'):raise ValueError('explicit strain or resultant section control')
130
+ data=_owned(values,(6,));origin=self.virgin() if origin is None else origin
131
+ captured=canonical(origin);started=monotonic()
132
+ def check():
133
+ if monotonic()-started>effective_deadline_seconds(15.):raise RuntimeError('generalized section response deadline')
134
+ self.guard()
135
+ with localcontext() as ctx:
136
+ ctx.prec=80;z0,p0=self._origin(origin);v=list(map(lambda x:D.from_float(float(x)),data))
137
+ if control=='resultant':s=v
138
+ else:
139
+ target=[a-b for a,b in zip(v,z0)];s=mv(self._c,target)
140
+ radius=dec(self.yield_force)+dec(self.hardening)*p0;q=dot(s,mv(self._m,s)).sqrt()
141
+ if q>radius:
142
+ left=D(0);right=1/dec(self.hardening)
143
+ for iteration in range(256):
144
+ check();tau=(left+right)/2
145
+ matrix=[[self._s[i][j]+tau*self._m[i][j] for j in range(6)] for i in range(6)]
146
+ s=[row[0] for row in solve(matrix,[[x] for x in target],check)]
147
+ q=dot(s,mv(self._m,s)).sqrt();g=q*(1-dec(self.hardening)*tau)-radius
148
+ if abs(g)<=D('1e-60')*max(D(1),radius):break
149
+ if g>0:left=tau
150
+ else:right=tau
151
+ else:raise RuntimeError('generalized section return-map iteration limit')
152
+ e,comp,z,p,lam,dual,potential,stored,dissipation,branch=self._dual(s,z0,p0)
153
+ if control=='strain' and max(abs(a-b) for a,b in zip(e,v))>D('1e-50')*max(D(1),*(abs(x) for x in v)):
154
+ raise ValueError('generalized section primal return mismatch')
155
+ cholesky(comp);tangent=solve(comp,ident(6),check)
156
+ ep=_parts(e,(6,));sp=_parts(s,(6,))
157
+ cp=_parts([x for row in comp for x in row],(6,6));tp=_parts([x for row in tangent for x in row],(6,6))
158
+ result=GeneralizedResponse(origin,GeneralizedHistory(self.identity,tuple(map(_pair,z)),_pair(p)),*ep,*sp,*tp,*cp,
159
+ _pair(dual),_pair(potential),_pair(stored),_pair(dissipation),_pair(lam),branch,
160
+ 'SEMISMOOTH_ELASTIC_SELECTION' if branch=='YIELD_BOUNDARY' else 'CLASSICAL_SMOOTH_BRANCH',self.identity)
161
+ check()
162
+ if canonical(origin)!=captured:raise ValueError('generalized origin changed during response')
163
+ return result
164
+
165
+
166
+ @dataclass(frozen=True)
167
+ class SectionProposal:
168
+ token: object
169
+ response: GeneralizedResponse
170
+
171
+
172
+ class GeneralizedStation:
173
+ """Local transaction building block; global beam integration is separate."""
174
+ __slots__=('_section','_history','_epoch','_pending','_accepted')
175
+
176
+ def __init__(self,section):
177
+ if type(section) is not EllipsoidalGeneralizedSection:raise ValueError('exact generalized section')
178
+ self._section=section;self._history=section.virgin();self._epoch=0;self._pending=None;self._accepted=None
179
+
180
+ @property
181
+ def section(self):return self._section
182
+
183
+ @property
184
+ def history(self):return self._history
185
+
186
+ @property
187
+ def epoch(self):return self._epoch
188
+
189
+ def trial(self,strain):
190
+ self._pending=None
191
+ data=_owned(strain,(6,));response=self.section.response(data,origin=self.history)
192
+ proposal=SectionProposal(object(),response);self._pending=(proposal,data,self.history)
193
+ return proposal
194
+
195
+ def discard(self,proposal):
196
+ if self._pending is None or self._pending[0] is not proposal:raise ValueError('foreign or stale section proposal')
197
+ self._pending=None
198
+
199
+ def commit(self,proposal):
200
+ if self._pending is None or self._pending[0] is not proposal:raise ValueError('foreign or stale section proposal')
201
+ _,data,origin=self._pending
202
+ self._pending=None
203
+ if canonical(origin)!=canonical(self.history):raise ValueError('section origin changed before commit')
204
+ response=self.section.response(data,origin=origin)
205
+ if canonical(proposal.response)!=canonical(response):raise ValueError('section proposal response mutated')
206
+ self._history=response.history;self._epoch+=1;self._accepted=(data,origin,response,self.epoch)
207
+ return self.history
208
+
209
+ def replay(self):
210
+ if self._accepted is None:raise ValueError('no accepted generalized section response')
211
+ data,origin,response,epoch=self._accepted
212
+ if self.epoch!=epoch or canonical(self.history)!=canonical(response.history):raise ValueError('accepted section state changed')
213
+ made=self.section.response(data,origin=origin)
214
+ if canonical(made)!=canonical(response):raise ValueError('accepted generalized response replay mismatch')
215
+ return made
@@ -0,0 +1,233 @@
1
+ """Private static reduction with spatial couples per reference arclength.
2
+
3
+ The physical field is U_cell R0(s). Its spatial virtual rotation is the cell
4
+ rotation variation, so distributed couples act on the internal cell rotations.
5
+ They have no general SO(3) potential. No public element/state route is changed.
6
+ """
7
+ from dataclasses import dataclass
8
+ from decimal import localcontext
9
+ from math import fsum
10
+ from time import monotonic
11
+ import numpy as np
12
+ from scipy import linalg
13
+ from ._ge_beam3_retained_generalized import RetainedGeneralizedOperator
14
+ from ._ge_beam3_generalized_cell import GeneralizedCellHistory
15
+ from ._ge_beam3_fibre_line_work import evaluate as line_work
16
+ from ._ge_beam3_p5.algebra import rotation, skew
17
+ from ._ge_beam3_p5.arrays import _array, _frames
18
+ from ._ge_beam3_p5.chart import exp_chart_terms
19
+ from ._ge_beam3_p5_seeded.core import sha
20
+ from ._native_reference_modal import _owned
21
+ from ._ge_beam3_effective_deadline import effective_deadline_seconds
22
+
23
+ POLICY = 'GE_BEAM3_GENERALIZED_REFERENCE_SPATIAL_DISTRIBUTED_COUPLE_STATIC_V1'
24
+
25
+
26
+ @dataclass(frozen=True)
27
+ class GeneralizedStaticTrial:
28
+ rotations: np.ndarray
29
+ resultants: np.ndarray
30
+ residual: np.ndarray
31
+ spatial_jacobian: np.ndarray
32
+ internal_lift: np.ndarray
33
+ full_residual: np.ndarray
34
+ conservative_residual: np.ndarray
35
+ conservative_hessian: np.ndarray
36
+ full_spatial_jacobian: np.ndarray
37
+ applied_couple: np.ndarray
38
+ history: GeneralizedCellHistory
39
+ conservative_part_value: float
40
+ internal_error: float
41
+ iterations: int
42
+ input_sha256: str
43
+ conservative_potential: bool = False
44
+ conservative_spectral_authority: bool = False
45
+ production_qualified: bool = False
46
+ dynamic_reduction_authorized: bool = False
47
+
48
+
49
+ def cell_couple_load(operator, spatial_density):
50
+ if type(operator) is not RetainedGeneralizedOperator:
51
+ raise ValueError('exact generalized retained operator required')
52
+ operator.guard()
53
+ density = _array(spatial_density, (3,), 'spatial reference couple density')
54
+ result = np.zeros(42)
55
+ for cell in (0, 1):
56
+ measure = fsum(row[3] for row in operator.stations if row[0] == cell)
57
+ if not np.isfinite(measure) or measure <= 0.:
58
+ raise ValueError('positive distributed couple reference measure')
59
+ with np.errstate(over='ignore', invalid='ignore'):
60
+ result[18+3*cell:21+3*cell] = measure*density
61
+ with np.errstate(over='ignore', invalid='ignore'):
62
+ norm = float(np.linalg.norm(result))
63
+ if not np.isfinite(result).all() or not np.isfinite(norm):
64
+ raise ValueError('distributed couple load exceeds finite norm range')
65
+ operator.guard()
66
+ return _owned(result)
67
+
68
+
69
+ def spatial_jacobian(conservative_residual, conservative_hessian):
70
+ """Derivative of Rc-G, where G is fixed in spatial residual components.
71
+
72
+ Rc is the conservative material-minus-dead-line-work residual, NOT Rc-G.
73
+ Hc is its Exp-chart Hessian. D G=0 for this reference spatial load policy.
74
+ """
75
+ residual = _array(conservative_residual, (42,), 'conservative residual')
76
+ jacobian = _array(conservative_hessian, (42, 42), 'conservative Hessian')
77
+ for start in (3, 9, 15, 18, 21):
78
+ jacobian[start:start+3, start:start+3] -= .5*skew(residual[start:start+3])
79
+ return _owned(jacobian)
80
+
81
+
82
+ def chart_pullback(force, jacobian, increments):
83
+ """Pull back a general spatial condensed Jacobian, without symmetrizing."""
84
+ force = _array(force, (18,), 'condensed spatial force')
85
+ jacobian = _array(jacobian, (18, 18), 'condensed spatial Jacobian')
86
+ increments = _array(increments, (3, 3), 'nodal rotation chart increments')
87
+ chart = np.eye(18)
88
+ extra = np.zeros((18, 18))
89
+ for node, vector in enumerate(increments):
90
+ start = 6*node+3
91
+ a, da = exp_chart_terms(vector)
92
+ chart[start:start+3, start:start+3] = a
93
+ for k in range(3):
94
+ extra[start:start+3, start+k] = da[:, :, k].T@force[start:start+3]
95
+ result = chart.T@force
96
+ tangent = chart.T@jacobian@chart+extra
97
+ if not np.isfinite(result).all() or not np.isfinite(tangent).all():
98
+ raise ValueError('nonfinite distributed couple chart response')
99
+ return _owned(result), _owned(tangent), _owned(chart)
100
+
101
+
102
+ def _interior_residual_secant(base, rejected, fraction):
103
+ """Propose an interior residual-line minimizer; this is NOT acceptance.
104
+
105
+ Both residuals use the same frozen Newton inverse. Common normalization
106
+ avoids overflow in the dot products and leaves the minimizer unchanged.
107
+ There is no empirical damping floor or material-specific coefficient.
108
+ """
109
+ base = np.asarray(base, dtype=float)
110
+ rejected = np.asarray(rejected, dtype=float)
111
+ if (base.shape != (24,) or rejected.shape != (24,)
112
+ or not np.isfinite(base).all() or not np.isfinite(rejected).all()
113
+ or not np.isfinite(fraction) or not 0. < fraction <= 1.):
114
+ raise ValueError('invalid distributed static secant input')
115
+ scale = max(float(np.max(np.abs(base))), float(np.max(np.abs(rejected))))
116
+ if scale == 0.:
117
+ raise ValueError('degenerate distributed static secant residual')
118
+ z = base/scale
119
+ difference = rejected/scale-z
120
+ denominator = float(difference@difference)
121
+ if denominator == 0.:
122
+ raise ValueError('degenerate distributed static secant direction')
123
+ interior = -float(z@difference)/denominator
124
+ proposed = float(fraction*interior)
125
+ if not np.isfinite(proposed) or not 0. < interior < 1. or not 0. < proposed < fraction:
126
+ raise ValueError('distributed static secant is not strictly interior')
127
+ return proposed
128
+
129
+
130
+ def solve_distributed_static(operator, positions, position_low, nodal_frames, *, origin,
131
+ initial_rotations, initial_resultants, spatial_line_force,
132
+ spatial_couple_density, check=None, max_iterations=24):
133
+ if type(operator) is not RetainedGeneralizedOperator or type(origin) is not GeneralizedCellHistory:
134
+ raise ValueError('exact retained operator and explicit accepted cell origin required')
135
+ if type(max_iterations) is not int or not 0 <= max_iterations <= 24:
136
+ raise ValueError('bounded distributed static internal iterations')
137
+ if check is not None and not callable(check):
138
+ raise ValueError('callable distributed static boundary check')
139
+ started = monotonic()
140
+ operator.guard()
141
+ with localcontext() as context:
142
+ context.prec = 80
143
+ operator.cell._origins(origin)
144
+ x = _array(positions, (3, 3), 'distributed static positions')
145
+ low = _array(position_low, (3, 3), 'distributed static low positions')
146
+ q = _frames(nodal_frames, 3, 'distributed static nodal frames')
147
+ u = _frames(initial_rotations, 2, 'distributed static seed rotations').copy()
148
+ p = _array(initial_resultants, (18,), 'distributed static seed resultants').copy()
149
+ load = _array(spatial_line_force, (3,), 'explicit spatial reference line force')
150
+ density = _array(spatial_couple_density, (3,), 'explicit spatial reference couple density')
151
+ applied = cell_couple_load(operator, density)
152
+ identity = sha(dict(policy=POLICY, operator=operator.identity, positions=x, position_low=low,
153
+ nodal_frames=q, origin=origin, line_force=load, couple_density=density,
154
+ applied_couple=applied, initial_rotations=u, initial_resultants=p))
155
+ length = float(np.linalg.norm(operator.reference.coordinates[-1]-operator.reference.coordinates[0]))
156
+ if not np.isfinite(length) or length <= 0.:
157
+ raise ValueError('positive distributed static characteristic length')
158
+ scale = np.r_[np.full(12, length), np.ones(12)]
159
+
160
+ def safe():
161
+ if check is not None:
162
+ check()
163
+ operator.guard()
164
+ if monotonic()-started > effective_deadline_seconds(60.):
165
+ raise RuntimeError('distributed static internal boundary deadline')
166
+
167
+ def evaluate(rotations, forces):
168
+ safe()
169
+ e = operator.evaluate(x, low, q, rotations, forces, origin=origin, check=safe)
170
+ rc = e.residual.copy()
171
+ h = e.hessian+e.hessian_low
172
+ value = e.potential
173
+ if np.any(load):
174
+ w = line_work(operator.reference, x, low, rotations, load, order=operator.order)
175
+ rc -= w.gradient
176
+ h = h-w.hessian
177
+ value -= w.value
178
+ net = rc-applied
179
+ error = float(np.linalg.norm(net[18:]/scale))
180
+ if not np.isfinite(error):
181
+ raise ValueError('nonfinite distributed static residual norm')
182
+ return e, rc, h, net, float(value), error
183
+
184
+ pending_secant = None
185
+ for iteration in range(max_iterations+1):
186
+ e, rc, h, net, value, error = evaluate(u, p)
187
+ if pending_secant is not None:
188
+ old_factor, old_norm = pending_secant
189
+ merit = float(np.linalg.norm(linalg.lu_solve(old_factor, net[18:], check_finite=True)))
190
+ if not np.isfinite(merit) or not (error <= 1e-11 or merit < old_norm):
191
+ raise ValueError('distributed static secant failed actual decrease')
192
+ pending_secant = None
193
+ jac = spatial_jacobian(rc, h)
194
+ if error <= 1e-11:
195
+ lift = -linalg.solve(jac[18:, 18:], jac[18:, :18], assume_a='gen', check_finite=True)
196
+ condensed = jac[:18, :18]+jac[:18, 18:]@lift
197
+ if not np.isfinite(condensed).all():
198
+ raise ValueError('nonfinite distributed static Schur response')
199
+ safe()
200
+ return GeneralizedStaticTrial(_owned(u), _owned(p), _owned(net[:18]), _owned(condensed),
201
+ _owned(lift), _owned(net), _owned(rc), _owned(h), _owned(jac), applied,
202
+ e.history, value, error, iteration, identity)
203
+ if iteration == max_iterations:
204
+ raise ValueError('distributed static internal equilibrium iteration limit')
205
+ factor = linalg.lu_factor(jac[18:, 18:], check_finite=True)
206
+ step = linalg.lu_solve(factor, -net[18:], check_finite=True)
207
+ norm = float(np.linalg.norm(step))
208
+ if not np.isfinite(step).all() or not np.isfinite(norm) or norm == 0.:
209
+ raise ValueError('invalid distributed static internal step')
210
+ angle = max(np.linalg.norm(step[:3]), np.linalg.norm(step[3:6]))
211
+ fraction = min(1., .45*np.pi/max(float(angle), np.finfo(float).tiny))
212
+ for cut in range(9):
213
+ safe()
214
+ delta = step*(fraction*.5**cut)
215
+ trial_u = np.array([rotation(delta[3*c:3*c+3])@u[c] for c in (0, 1)])
216
+ trial_p = p+delta[6:]
217
+ _, _, _, changed, _, metric = evaluate(trial_u, trial_p)
218
+ preconditioned = linalg.lu_solve(factor, changed[18:], check_finite=True)
219
+ merit = float(np.linalg.norm(preconditioned))
220
+ if not np.isfinite(merit):
221
+ raise ValueError('nonfinite distributed static internal merit')
222
+ if metric <= 1e-11 or merit < norm:
223
+ u, p = trial_u, trial_p
224
+ break
225
+ else:
226
+ # The next outer evaluation is already in the existing budget.
227
+ # Keep this proposal private until its actual decrease is checked.
228
+ fraction = _interior_residual_secant(-step, preconditioned, fraction*.5**8)
229
+ delta = step*fraction
230
+ u = np.array([rotation(delta[3*c:3*c+3])@u[c] for c in (0, 1)])
231
+ p = p+delta[6:]
232
+ pending_secant = (factor, norm)
233
+ raise AssertionError('unreachable distributed static state')
@@ -0,0 +1,26 @@
1
+ """Private retained-cell kinetic factor at rest, without a dense mass root.
2
+
3
+ The spatial velocity is I*v - skew(U*lift)*omega, with body components
4
+ in U*R0. These are the preserved lifted-inertia equations; nodal rotation
5
+ traces have exactly zero inertia. No cell condensation or mass floor.
6
+ """
7
+ import numpy as np
8
+ from ._ge_beam3_p5.arrays import _frames
9
+ from ._ge_beam3_p5.algebra import skew
10
+ from ._ge_beam3_p5_centered.mass import _CenteredRestInertia
11
+ from ._native_reference_modal import _owned
12
+
13
+
14
+ def current_lifted_kinetic_factor(reference, section_inertia, rotations, *, order):
15
+ cells = _frames(rotations, 2, 'current cell rotations')
16
+ source = _CenteredRestInertia(reference, section_inertia, order=order)
17
+ root = np.linalg.cholesky(source.section_mass).T
18
+ rows = []
19
+ for cell, left, right, t, frame, offset, measure in source._stations:
20
+ q = cells[cell]@frame; lift = cells[cell]@offset
21
+ velocity = np.zeros((6, 24)); slot = slice(18+3*cell, 21+3*cell)
22
+ velocity[:3, 6*left:6*left+3] = (1-t)*np.eye(3)
23
+ velocity[:3, 6*right:6*right+3] = t*np.eye(3)
24
+ velocity[:3, slot] = -skew(lift); velocity[3:, slot] = np.eye(3)
25
+ rows.append(np.sqrt(measure)*root@np.kron(np.eye(2), q).T@velocity)
26
+ return _owned(np.vstack(rows))
@@ -0,0 +1,121 @@
1
+ """Private at-rest spectra of accepted conservative reference-line-load states.
2
+
3
+ Retain the external potential Hessian -lambda W'' of the lifted physical line.
4
+ The accepted load and plastic coordinates are fixed during elastic perturbation.
5
+ No finite-velocity dynamics, follower moments, nonlinear continuation, checkpoint
6
+ conversion or buckling load-factor qualification is provided by this module.
7
+ """
8
+ from dataclasses import dataclass
9
+ from hashlib import sha256
10
+ from time import monotonic
11
+ import json
12
+ import numpy as np
13
+ from scipy.linalg import block_diag
14
+
15
+ from ._ge_beam3_fibre_line_program import Context
16
+ from ._ge_beam3_fibre_line_work import ReferenceLineForces, evaluate as line_work
17
+ from ._ge_beam3_retained_fibre_modes import (
18
+ FROZEN, ALGORITHMIC, Packet as FibrePacket, Analysis as FibreAnalysis, compliance_factor,
19
+ )
20
+ from ._ge_beam3_lifted_kinetic_factor import current_lifted_kinetic_factor
21
+ from ._native_exact_shift_chain_modes import solve_factor_chain_modes
22
+ from ._native_reference_modal import _owned
23
+ from ._ge_beam3_p5_seeded.core import sha
24
+ from .control import cancellation_safe_point
25
+
26
+
27
+ SCHEMA='GE_BEAM3_CONSERVATIVE_LINE_FIBRE_FIXED_LOAD_SPECTRA_V1'
28
+
29
+
30
+ @dataclass(frozen=True)
31
+ class Packet(FibrePacket):
32
+ external_potential_hessian: np.ndarray | None = None
33
+
34
+
35
+ def prepare(model,program,checkpoint,section_inertias,*,line_forces,material_policy,
36
+ expected_checkpoint_sha256=None,cancellation_token=None,coordinate_limit=80,max_coordinates=256):
37
+ if type(line_forces) is not ReferenceLineForces: raise ValueError('explicit conservative reference line-force pattern')
38
+ if type(coordinate_limit) is not int or coordinate_limit not in (80,128,256):
39
+ raise ValueError('explicit admitted spectral coordinate limit')
40
+ if type(max_coordinates) is not int or max_coordinates not in (256,512):
41
+ raise ValueError('explicit admitted retained coordinate limit')
42
+ if material_policy not in (FROZEN,ALGORITHMIC): raise ValueError('explicit spectral material policy')
43
+ started=monotonic()
44
+ def local_check():
45
+ cancellation_safe_point(cancellation_token,'line-fibre-modes.construct')
46
+ if monotonic()-started>120.: raise TimeoutError('line-fibre spectral construction deadline')
47
+ local_check()
48
+ if type(checkpoint) is not bytes: raise ValueError('immutable canonical line-force checkpoint')
49
+ context=Context(model,program,line_forces=line_forces,check=local_check,max_coordinates=max_coordinates)
50
+ state,_=context.restore(checkpoint,expected_sha256=expected_checkpoint_sha256)
51
+ parameter=0. if state.completed_targets==0 else program.targets[state.completed_targets-1]
52
+ def guard():
53
+ local_check(); context.guard()
54
+ layout=context.layout; n=layout.nodal_count+6*len(context.probes)
55
+ if n>coordinate_limit: raise ValueError('bounded standalone line-load spectrum required')
56
+ if (type(section_inertias) is not dict or any(type(i) is not int for i in section_inertias)
57
+ or set(section_inertias)!={i for i,_ in layout.elements}):
58
+ raise ValueError('one explicit section inertia per element')
59
+ inertias={i:_owned(v) for i,v in section_inertias.items()}
60
+ forces={row[0]:row[1:] for row in line_forces.rows}
61
+ g=np.zeros((n,n)); external=np.zeros((n,n)); lefts=[]; rights=[]; kinetics=[]
62
+ mechanical=state.mechanical
63
+ for index,((eid,element),probe) in enumerate(zip(layout.elements,context.probes)):
64
+ guard(); nodes=layout.nodes[index]
65
+ response=probe.evaluate(mechanical.positions[nodes],mechanical.position_low[nodes],
66
+ mechanical.nodal_frames[nodes],mechanical.cell_rotations[index],mechanical.resultants[index],
67
+ origin=state.origins[index],check=local_check)
68
+ left=compliance_factor(probe,json.loads(response.material),state.origins[index],state.histories[index],
69
+ mechanical.resultants[index],policy=material_policy,check=local_check)
70
+ slots=list(element.get_dof_mapping(model.mesh))+list(range(layout.nodal_count+6*index,layout.nodal_count+6*index+6))
71
+ j=response.hessian[24:,:24]; right=np.zeros((36,n)); right[:,slots]=np.vstack((j,j))
72
+ g[np.ix_(slots,slots)]+=response.hessian[:24,:24]
73
+ if eid in forces:
74
+ work=line_work(probe.reference,mechanical.positions[nodes],mechanical.position_low[nodes],
75
+ mechanical.cell_rotations[index],forces[eid],order=probe.order)
76
+ external[np.ix_(slots,slots)]-=parameter*work.hessian[:24,:24]
77
+ local=current_lifted_kinetic_factor(probe.reference,inertias[eid],mechanical.cell_rotations[index],order=probe.order)
78
+ kinetic=np.zeros((len(local),n)); kinetic[:,slots]=local
79
+ lefts.append(left); rights.append(right); kinetics.append(kinetic)
80
+ g+=external
81
+ nodal_free=tuple(i for i in range(layout.nodal_count) if i not in layout.fixed)
82
+ free=nodal_free+tuple(range(layout.nodal_count,n)); algebraic=tuple(i for i in nodal_free if i%6>=3)
83
+ left,right,kinetic=block_diag(*lefts),np.vstack(rights),np.vstack(kinetics)
84
+ if np.any(kinetic[:,algebraic]): raise ValueError('nodal rotation traces must have zero inertia')
85
+ if not np.isfinite(g).all() or not np.isfinite(external).all(): raise ValueError('finite total potential Hessian')
86
+ identity=sha(dict(schema=SCHEMA,equilibrium_load_parameter=parameter,line_forces=line_forces.descriptor(),
87
+ perturbation_load_policy='FIXED_ACCEPTED_REFERENCE_ARCLENGTH_SPATIAL_DEAD_FORCE',
88
+ checkpoint_sha256=sha256(checkpoint).hexdigest(),material_policy=material_policy,
89
+ operators=[p.identity for p in context.probes],left=left,right=right,geometric=g,
90
+ external_potential_hessian=external,kinetic=kinetic,free=free,algebraic=algebraic,inertias=inertias,
91
+ spectral_coordinate_limit=coordinate_limit,retained_coordinate_limit=max_coordinates))
92
+ guard()
93
+ return Packet(_owned(left),_owned(right),_owned(g),_owned(kinetic),free,algebraic,identity,material_policy,
94
+ external_potential_hessian=_owned(external)),guard,parameter
95
+
96
+
97
+ @dataclass(frozen=True)
98
+ class Analysis(FibreAnalysis):
99
+ equilibrium_load_parameter: float = 0.
100
+ perturbation_load_policy: str = 'FIXED_ACCEPTED_REFERENCE_ARCLENGTH_SPATIAL_DEAD_FORCE'
101
+ external_potential_hessian_included: bool = True
102
+ checkpoint_converted: bool = False
103
+
104
+
105
+ def solve_modes(model,program,checkpoint,section_inertias,*,line_forces,material_policy,bounds,
106
+ num_modes=6,root_width=1e-10,expected_checkpoint_sha256=None,cancellation_token=None,
107
+ coordinate_limit=80,exact_dimension_limit=64,max_coordinates=256):
108
+ if type(exact_dimension_limit) is not int or exact_dimension_limit not in (64,96,160):
109
+ raise ValueError('explicit admitted exact-inertia dimension limit')
110
+ packet,guard,parameter=prepare(model,program,checkpoint,section_inertias,line_forces=line_forces,
111
+ material_policy=material_policy,expected_checkpoint_sha256=expected_checkpoint_sha256,
112
+ cancellation_token=cancellation_token,coordinate_limit=coordinate_limit,max_coordinates=max_coordinates)
113
+ modes=solve_factor_chain_modes(packet.left,packet.right,packet.geometric,packet.kinetic,
114
+ packet.free,packet.algebraic,bounds=bounds,num_modes=num_modes,root_width=root_width,
115
+ cancellation_token=cancellation_token,exact_dimension_limit=exact_dimension_limit)
116
+ guard()
117
+ interpretation=('ELASTIC_PERTURBATIONS_WITH_PLASTIC_COORDINATES_FIXED' if material_policy==FROZEN else
118
+ 'LAST_INCREMENT_OPERATOR_ONLY_NOT_PHYSICAL_VIBRATION_AUTHORITY')
119
+ return packet,Analysis(material_policy,interpretation,modes.eigenvalues,modes.full_modes,modes.numerical_brackets,
120
+ modes.spectral_residual,modes.original_ritz_residual,modes.full_backward_residual,packet.identity,
121
+ sha256(checkpoint).hexdigest(),equilibrium_load_parameter=parameter)