morphopt 3.1.2__tar.gz → 3.1.4__tar.gz

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 (71) hide show
  1. morphopt-3.1.4/PKG-INFO +223 -0
  2. morphopt-3.1.4/README.md +199 -0
  3. {morphopt-3.1.2 → morphopt-3.1.4}/pyproject.toml +3 -3
  4. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/__init__.py +12 -2
  5. morphopt-3.1.4/src/morphopt/codesign/__init__.py +4 -0
  6. morphopt-3.1.4/src/morphopt/codesign/constraints.py +245 -0
  7. morphopt-3.1.4/src/morphopt/codesign/feaparams.py +75 -0
  8. morphopt-3.1.4/src/morphopt/codesign/geometry.py +352 -0
  9. morphopt-3.1.4/src/morphopt/codesign/material.py +42 -0
  10. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/controller.py +18 -9
  11. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/__init__.py +1 -1
  12. morphopt-3.1.4/src/morphopt/optcore/modelparams/feamodel/__init__.py +1 -0
  13. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/__init__.py +1 -1
  14. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/springinterface.py +52 -0
  15. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feaparams.py +10 -34
  16. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/geometry/geometryinterfaces/basesurfaceinterface.py +24 -0
  17. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/geometry/geometryinterfaces/bspsurfaceinterface.py +22 -4
  18. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/geometry/geometryinterfaces/cpgeosurfaceinterface.py +59 -7
  19. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/geometry/geometryparams.py +94 -22
  20. morphopt-3.1.4/src/morphopt/optcore/modelparams/materials/__init__.py +3 -0
  21. morphopt-3.1.2/src/morphopt/optcore/modelparams/materials/materialparams.py → morphopt-3.1.4/src/morphopt/optcore/modelparams/materials/homogeneousmaterial.py +2 -2
  22. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/materials/simpmaterial.py +47 -19
  23. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/params.py +6 -6
  24. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/objfunc.py +24 -80
  25. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/solver.py +8 -7
  26. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/geometry/objectivefuncs/boundarys.py +3 -3
  27. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/geometry/objectivefuncs/shapederivative.py +14 -30
  28. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/geometry/update_geometry.py +1 -1
  29. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/materials/objectivefuncs/basefuncs.py +1 -6
  30. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/materials/objectivefuncs/densityfield.py +1 -1
  31. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/materials/objectivefuncs/sensitivity.py +7 -1
  32. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/materials/update_material.py +4 -3
  33. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/taskui.py +1 -2
  34. morphopt-3.1.4/src/morphopt.egg-info/PKG-INFO +223 -0
  35. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt.egg-info/SOURCES.txt +6 -1
  36. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt.egg-info/requires.txt +2 -2
  37. morphopt-3.1.2/PKG-INFO +0 -266
  38. morphopt-3.1.2/README.md +0 -242
  39. morphopt-3.1.2/src/morphopt/optcore/modelparams/feamodel/__init__.py +0 -0
  40. morphopt-3.1.2/src/morphopt/optcore/modelparams/materials/__init__.py +0 -3
  41. morphopt-3.1.2/src/morphopt.egg-info/PKG-INFO +0 -266
  42. {morphopt-3.1.2 → morphopt-3.1.4}/setup.cfg +0 -0
  43. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/opt_runner.py +0 -0
  44. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/baseobject.py +0 -0
  45. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/history.py +0 -0
  46. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/base_params.py +0 -0
  47. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/basefeainterface.py +0 -0
  48. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/bodyforceinterface.py +0 -0
  49. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/boundaryconditioninterface.py +0 -0
  50. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/contactinterface.py +0 -0
  51. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/coupleinterface.py +0 -0
  52. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/pointinterface.py +0 -0
  53. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/pressureinterface.py +0 -0
  54. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/feamodel/feainterface/referencepointinterface.py +0 -0
  55. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/geometry/__init__.py +0 -0
  56. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/modelparams/geometry/geometryinterfaces/__init__.py +0 -0
  57. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/__init__.py +0 -0
  58. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/base_updater.py +0 -0
  59. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/geometry/__init__.py +0 -0
  60. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/geometry/objectivefuncs/__init__.py +0 -0
  61. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/geometry/objectivefuncs/basefuncs.py +0 -0
  62. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/geometry/objectivefuncs/distancesurface.py +0 -0
  63. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/geometry/objectivefuncs/surfacefairness.py +0 -0
  64. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/materials/__init__.py +0 -0
  65. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/materials/objectivefuncs/__init__.py +0 -0
  66. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/materials/objectivefuncs/boundarys.py +0 -0
  67. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/optimizer.py +0 -0
  68. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/optcore/updaters/updaters.py +0 -0
  69. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt/taskoptmization.py +0 -0
  70. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt.egg-info/dependency_links.txt +0 -0
  71. {morphopt-3.1.2 → morphopt-3.1.4}/src/morphopt.egg-info/top_level.txt +0 -0
@@ -0,0 +1,223 @@
1
+ Metadata-Version: 2.4
2
+ Name: morphopt
3
+ Version: 3.1.4
4
+ Summary: A morphing optimization framework using PyTorch and Abaqus.
5
+ Requires-Python: >=3.12
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: torch>=2.0.0
8
+ Requires-Dist: torchvision>=0.15.1
9
+ Requires-Dist: numpy>=2.0.0
10
+ Requires-Dist: pypardiso>=0.4.7
11
+ Requires-Dist: pyqt6>=6.11.0
12
+ Requires-Dist: pyvista>=0.47.1
13
+ Requires-Dist: pyvistaqt>=0.11.3
14
+ Requires-Dist: vtk>=9.6.1
15
+ Requires-Dist: gmsh>=4.15.0
16
+ Requires-Dist: tabulate>=0.9.0
17
+ Requires-Dist: imageio>=2.37.3
18
+ Requires-Dist: bspmap>=1.0.0
19
+ Requires-Dist: torchfea>=1.0.11
20
+ Requires-Dist: trimesh>=4.11.5
21
+ Requires-Dist: networkx>=3.6.1
22
+ Requires-Dist: scipy>=1.17.1
23
+ Requires-Dist: cpgeo>=1.0.8
24
+
25
+ # MorphOpt
26
+
27
+ MorphOpt 是一个面向软体结构/形态设计的优化框架,核心能力是把几何参数化、有限元分析(FEA)、多工况目标函数和设计变量更新整合到同一条可重启优化流水线中。
28
+
29
+ 项目当前采用 `src` 布局,核心 Python 包在 `src/morphopt`,示例脚本在 `examples`,测试脚本在 `tests`。
30
+
31
+ ## 目录
32
+
33
+ - 项目特性
34
+ - 环境与安装
35
+ - 项目结构(最新)
36
+ - 运行方式
37
+ - 如何定义一个优化任务
38
+ - 结果输出结构
39
+ - 依赖说明
40
+ - 文档导航
41
+
42
+ ## 项目特性
43
+
44
+ - 基于 PyTorch/torchfea 的可微分优化流程。
45
+ - 支持多加载步(multistep)与并行求解。
46
+ - 支持几何变量与材料变量(SIMP 场)联合优化。
47
+ - 支持基于 `cpgeo`/`bspmap` 的曲面与材料场参数化。
48
+ - 提供 `codesign` 子模块用于壳层偏移、壳体体网格和相关约束。
49
+ - 内置结果监控 UI(PyQt6 + PyVista + Matplotlib)。
50
+
51
+ ## 环境与安装
52
+
53
+ ### Python 版本
54
+
55
+ - `>=3.12`(来自 `pyproject.toml`)
56
+
57
+ ### 安装
58
+
59
+ ```powershell
60
+ # 1) 创建虚拟环境(示例)
61
+ python -m venv .venv
62
+ .\.venv\Scripts\Activate.ps1
63
+
64
+ # 2) 安装项目(开发模式)
65
+ pip install -e .
66
+ ```
67
+
68
+ 如果你希望使用 GPU,请安装与本机 CUDA 匹配的 PyTorch 版本。
69
+
70
+ ## 项目结构(最新)
71
+
72
+ ```text
73
+ MorphOpt/
74
+ pyproject.toml
75
+ README.md
76
+ docs/
77
+ examples/
78
+ basic/
79
+ codesign/
80
+ locomotion/
81
+ rigidflexible/
82
+ tmech2025contact/
83
+ tro2025workspace/
84
+ scripts/
85
+ src/
86
+ morphopt/
87
+ __init__.py
88
+ opt_runner.py
89
+ taskoptmization.py
90
+ taskui.py
91
+ codesign/
92
+ optcore/
93
+ tests/
94
+ ```
95
+
96
+ ## 运行方式
97
+
98
+ ### 1) 直接运行示例脚本
99
+
100
+ ```powershell
101
+ python examples/codesign/twist.py
102
+ ```
103
+
104
+ ### 2) 在脚本内部调用统一入口
105
+
106
+ 脚本中通常通过以下入口启动:
107
+
108
+ ```python
109
+ import morphopt
110
+
111
+ morphopt.start_optimization(device='cpu', restart_per_iteration=20)
112
+ ```
113
+
114
+ 常用入口函数:
115
+
116
+ - `morphopt.start_optimization(...)`:启动优化并可选择是否显示 GUI。
117
+ - `morphopt.debug_optimization(...)`:在当前进程中调试运行。
118
+ - `morphopt.view_optimization_result(path_result=...)`:加载历史结果并查看。
119
+
120
+ ## 如何定义一个优化任务
121
+
122
+ 推荐模式是在一个脚本里定义 `ThisController`,并在其中嵌套定义四类模块:
123
+
124
+ 1. `ObjectiveFunction`
125
+ 2. `Params`
126
+ 3. `Solver`
127
+ 4. `Updater`
128
+
129
+ 最小结构如下:
130
+
131
+ ```python
132
+ import morphopt
133
+
134
+ class ThisController(morphopt.Controller):
135
+ def __init__(self):
136
+ super().__init__(path_result_folder='D:/Results', opt_label='Demo')
137
+
138
+ class ObjectiveFunction(morphopt.ObjectiveFunction):
139
+ def __init__(self):
140
+ super().__init__()
141
+ self.jacobian_needed = []
142
+
143
+ def objective_function(self):
144
+ return self.fe_results[0].GC.norm()
145
+
146
+ class Params(morphopt.Params):
147
+ class GeometryParams(morphopt.GeometryParams):
148
+ def __init__(self):
149
+ super().__init__(fea_seed_size=1.0)
150
+ self.add_surface(self.BSP.initialize_cylinder(r0=8.0, length=40.0, seed_size=1.0))
151
+
152
+ class FEAParams(morphopt.FEAParams):
153
+ def define_interface(self):
154
+ pass
155
+
156
+ def define_steps(self):
157
+ self.set_step_num(1)
158
+
159
+ class MaterialParams(morphopt.Materials):
160
+ def __init__(self):
161
+ super().__init__(mu=0.48, kappa=4.8, density=1.08e-9)
162
+
163
+ def __init__(self):
164
+ super().__init__(
165
+ surfaces=self.GeometryParams(),
166
+ feamodel=self.FEAParams(),
167
+ materials=self.MaterialParams(),
168
+ )
169
+
170
+ class Solver(morphopt.MorphSolver):
171
+ def __init__(self, params):
172
+ super().__init__(params=params, num_process=1)
173
+
174
+ class Updater(morphopt.Updaters):
175
+ def __init__(self, params):
176
+ super().__init__(
177
+ surfaces=self.UpdaterGeometries(params=params),
178
+ materials=self.UpdaterMaterials(params=params),
179
+ )
180
+ ```
181
+
182
+ 更完整参考:`examples/codesign/twist.py`。
183
+
184
+ ## 结果输出结构
185
+
186
+ 优化运行会在 `path_result_folder` 下创建一个时间戳目录,包含:
187
+
188
+ - `cache/`:中间文件(如临时 INP)。
189
+ - `fea/`:FEA 相关输出。
190
+ - `log/`:历史数据与迭代快照。
191
+ - `scripts/`:用于重启的主脚本副本和依赖包快照。
192
+
193
+ `ObjectiveFunction.save(...)` 默认会输出变形图片和网格文件(当前实现支持 `.stl/.obj` 等常见格式)。
194
+
195
+ ## 依赖说明
196
+
197
+ 来自 `pyproject.toml` 的核心依赖:
198
+
199
+ - `torch>=2.0.0`
200
+ - `torchvision>=0.15.1`
201
+ - `numpy>=2.0.0`
202
+ - `scipy>=1.17.1`
203
+ - `torchfea>=1.0.8`
204
+ - `cpgeo>=1.0.5`
205
+ - `bspmap>=1.0.0`
206
+ - `gmsh>=4.15.0`
207
+ - `pyvista>=0.47.1`
208
+ - `vtk>=9.6.1`
209
+ - `pyvistaqt>=0.11.3`
210
+ - `pyqt6>=6.11.0`
211
+ - `trimesh>=4.11.5`
212
+ - `pypardiso>=0.4.7`
213
+ - `tabulate>=0.9.0`
214
+ - `imageio>=2.37.3`
215
+ - `networkx>=3.6.1`
216
+
217
+ ## 文档导航
218
+
219
+ - `docs/README.md`:文档首页与索引。
220
+ - `docs/module_reference.md`:按包说明每个模块的职责与入口。
221
+ - `docs/module_definition_guide.md`:逐步说明“每类模块如何定义”。
222
+
223
+ 如果你正在新增任务,建议先读 `docs/module_definition_guide.md`,再参考 `examples/codesign/twist.py` 落地实现。
@@ -0,0 +1,199 @@
1
+ # MorphOpt
2
+
3
+ MorphOpt 是一个面向软体结构/形态设计的优化框架,核心能力是把几何参数化、有限元分析(FEA)、多工况目标函数和设计变量更新整合到同一条可重启优化流水线中。
4
+
5
+ 项目当前采用 `src` 布局,核心 Python 包在 `src/morphopt`,示例脚本在 `examples`,测试脚本在 `tests`。
6
+
7
+ ## 目录
8
+
9
+ - 项目特性
10
+ - 环境与安装
11
+ - 项目结构(最新)
12
+ - 运行方式
13
+ - 如何定义一个优化任务
14
+ - 结果输出结构
15
+ - 依赖说明
16
+ - 文档导航
17
+
18
+ ## 项目特性
19
+
20
+ - 基于 PyTorch/torchfea 的可微分优化流程。
21
+ - 支持多加载步(multistep)与并行求解。
22
+ - 支持几何变量与材料变量(SIMP 场)联合优化。
23
+ - 支持基于 `cpgeo`/`bspmap` 的曲面与材料场参数化。
24
+ - 提供 `codesign` 子模块用于壳层偏移、壳体体网格和相关约束。
25
+ - 内置结果监控 UI(PyQt6 + PyVista + Matplotlib)。
26
+
27
+ ## 环境与安装
28
+
29
+ ### Python 版本
30
+
31
+ - `>=3.12`(来自 `pyproject.toml`)
32
+
33
+ ### 安装
34
+
35
+ ```powershell
36
+ # 1) 创建虚拟环境(示例)
37
+ python -m venv .venv
38
+ .\.venv\Scripts\Activate.ps1
39
+
40
+ # 2) 安装项目(开发模式)
41
+ pip install -e .
42
+ ```
43
+
44
+ 如果你希望使用 GPU,请安装与本机 CUDA 匹配的 PyTorch 版本。
45
+
46
+ ## 项目结构(最新)
47
+
48
+ ```text
49
+ MorphOpt/
50
+ pyproject.toml
51
+ README.md
52
+ docs/
53
+ examples/
54
+ basic/
55
+ codesign/
56
+ locomotion/
57
+ rigidflexible/
58
+ tmech2025contact/
59
+ tro2025workspace/
60
+ scripts/
61
+ src/
62
+ morphopt/
63
+ __init__.py
64
+ opt_runner.py
65
+ taskoptmization.py
66
+ taskui.py
67
+ codesign/
68
+ optcore/
69
+ tests/
70
+ ```
71
+
72
+ ## 运行方式
73
+
74
+ ### 1) 直接运行示例脚本
75
+
76
+ ```powershell
77
+ python examples/codesign/twist.py
78
+ ```
79
+
80
+ ### 2) 在脚本内部调用统一入口
81
+
82
+ 脚本中通常通过以下入口启动:
83
+
84
+ ```python
85
+ import morphopt
86
+
87
+ morphopt.start_optimization(device='cpu', restart_per_iteration=20)
88
+ ```
89
+
90
+ 常用入口函数:
91
+
92
+ - `morphopt.start_optimization(...)`:启动优化并可选择是否显示 GUI。
93
+ - `morphopt.debug_optimization(...)`:在当前进程中调试运行。
94
+ - `morphopt.view_optimization_result(path_result=...)`:加载历史结果并查看。
95
+
96
+ ## 如何定义一个优化任务
97
+
98
+ 推荐模式是在一个脚本里定义 `ThisController`,并在其中嵌套定义四类模块:
99
+
100
+ 1. `ObjectiveFunction`
101
+ 2. `Params`
102
+ 3. `Solver`
103
+ 4. `Updater`
104
+
105
+ 最小结构如下:
106
+
107
+ ```python
108
+ import morphopt
109
+
110
+ class ThisController(morphopt.Controller):
111
+ def __init__(self):
112
+ super().__init__(path_result_folder='D:/Results', opt_label='Demo')
113
+
114
+ class ObjectiveFunction(morphopt.ObjectiveFunction):
115
+ def __init__(self):
116
+ super().__init__()
117
+ self.jacobian_needed = []
118
+
119
+ def objective_function(self):
120
+ return self.fe_results[0].GC.norm()
121
+
122
+ class Params(morphopt.Params):
123
+ class GeometryParams(morphopt.GeometryParams):
124
+ def __init__(self):
125
+ super().__init__(fea_seed_size=1.0)
126
+ self.add_surface(self.BSP.initialize_cylinder(r0=8.0, length=40.0, seed_size=1.0))
127
+
128
+ class FEAParams(morphopt.FEAParams):
129
+ def define_interface(self):
130
+ pass
131
+
132
+ def define_steps(self):
133
+ self.set_step_num(1)
134
+
135
+ class MaterialParams(morphopt.Materials):
136
+ def __init__(self):
137
+ super().__init__(mu=0.48, kappa=4.8, density=1.08e-9)
138
+
139
+ def __init__(self):
140
+ super().__init__(
141
+ surfaces=self.GeometryParams(),
142
+ feamodel=self.FEAParams(),
143
+ materials=self.MaterialParams(),
144
+ )
145
+
146
+ class Solver(morphopt.MorphSolver):
147
+ def __init__(self, params):
148
+ super().__init__(params=params, num_process=1)
149
+
150
+ class Updater(morphopt.Updaters):
151
+ def __init__(self, params):
152
+ super().__init__(
153
+ surfaces=self.UpdaterGeometries(params=params),
154
+ materials=self.UpdaterMaterials(params=params),
155
+ )
156
+ ```
157
+
158
+ 更完整参考:`examples/codesign/twist.py`。
159
+
160
+ ## 结果输出结构
161
+
162
+ 优化运行会在 `path_result_folder` 下创建一个时间戳目录,包含:
163
+
164
+ - `cache/`:中间文件(如临时 INP)。
165
+ - `fea/`:FEA 相关输出。
166
+ - `log/`:历史数据与迭代快照。
167
+ - `scripts/`:用于重启的主脚本副本和依赖包快照。
168
+
169
+ `ObjectiveFunction.save(...)` 默认会输出变形图片和网格文件(当前实现支持 `.stl/.obj` 等常见格式)。
170
+
171
+ ## 依赖说明
172
+
173
+ 来自 `pyproject.toml` 的核心依赖:
174
+
175
+ - `torch>=2.0.0`
176
+ - `torchvision>=0.15.1`
177
+ - `numpy>=2.0.0`
178
+ - `scipy>=1.17.1`
179
+ - `torchfea>=1.0.8`
180
+ - `cpgeo>=1.0.5`
181
+ - `bspmap>=1.0.0`
182
+ - `gmsh>=4.15.0`
183
+ - `pyvista>=0.47.1`
184
+ - `vtk>=9.6.1`
185
+ - `pyvistaqt>=0.11.3`
186
+ - `pyqt6>=6.11.0`
187
+ - `trimesh>=4.11.5`
188
+ - `pypardiso>=0.4.7`
189
+ - `tabulate>=0.9.0`
190
+ - `imageio>=2.37.3`
191
+ - `networkx>=3.6.1`
192
+
193
+ ## 文档导航
194
+
195
+ - `docs/README.md`:文档首页与索引。
196
+ - `docs/module_reference.md`:按包说明每个模块的职责与入口。
197
+ - `docs/module_definition_guide.md`:逐步说明“每类模块如何定义”。
198
+
199
+ 如果你正在新增任务,建议先读 `docs/module_definition_guide.md`,再参考 `examples/codesign/twist.py` 落地实现。
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "morphopt"
3
- version = "3.1.2"
3
+ version = "3.1.4"
4
4
  description = "A morphing optimization framework using PyTorch and Abaqus."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -17,9 +17,9 @@ dependencies = [
17
17
  "tabulate>=0.9.0",
18
18
  "imageio>=2.37.3",
19
19
  "bspmap>=1.0.0",
20
- "torchfea>=1.0.8",
20
+ "torchfea>=1.0.11",
21
21
  "trimesh>=4.11.5",
22
22
  "networkx>=3.6.1",
23
23
  "scipy>=1.17.1",
24
- "cpgeo>=1.0.5",
24
+ "cpgeo>=1.0.8",
25
25
  ]
@@ -13,8 +13,9 @@ from .optcore.baseobject import BaseObject
13
13
 
14
14
  from .opt_runner import start_optimization, debug_optimization, view_optimization_result
15
15
 
16
-
17
-
16
+ # region codesign imports
17
+ from . import codesign
18
+ # endregion
18
19
 
19
20
  controller: Controller = None
20
21
 
@@ -23,11 +24,20 @@ __all__ = [
23
24
  "GeometryParams",
24
25
  "FEAParams",
25
26
  "Materials",
27
+ "SIMPMaterials",
26
28
  "MorphSolver",
27
29
  "UpdaterGeometries",
28
30
  "UpdaterMaterials",
29
31
  "Updaters",
30
32
  "Params",
31
33
  "ObjectiveFunction",
34
+ "History",
35
+ "BaseObject",
36
+
37
+ "start_optimization",
38
+ "debug_optimization",
39
+ "view_optimization_result",
40
+
41
+ 'codesign',
32
42
  ]
33
43
 
@@ -0,0 +1,4 @@
1
+ from .material import CodesignMaterials
2
+ from .geometry import CodesignGeometry
3
+ from .constraints import InwardCurvatureRadius, OffsetSurfaceMinThickness
4
+ from .feaparams import CodesignFEAParams