计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
composite-layup【效率与协作】Define composite layup with ply angles, thickness, and count. Invoke when user asks to change ply angles, modify layup, or adjust ply count for curing simulation.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
This skill defines and modifies the composite layup for curing simulation. It covers ply
angles, ply thickness, ply count, and the orientation system used by the *Solid Section, composite card in Abaqus.
The composite layup is defined inside the P8 Part using *Solid Section, composite. Each
ply is specified on a single data line with five fields:
*Solid Section, elset=CompositeLayup-1-1, composite, orientation=Ori-1, stack direction=3, layup=CompositeLayup-1
<thickness>, 3, COM, <angle>, Ply-<N>
| Field | Value | Description |
|---|---|---|
| 1 | thickness | Ply thickness in model units (mm). E.g., 1. or 0.250 |
| 2 | 3 | Stack direction index (always 3 for this model) |
| 3 | COM | Material name (references *Material, name=COM with UMAT) |
| 4 | angle | Ply angle in degrees. E.g., 0., 45., -45., 90. |
| 5 | Ply-N | Ply label (N is the ply number, starting from 1) |
All plies are listed consecutively under a single *Solid Section card. The element set
(CompositeLayup-1-1) covers all elements in the composite part.
*Solid Section, elset=CompositeLayup-1-1, composite, orientation=Ori-1, stack direction=3, layup=CompositeLayup-1
1., 3, COM, 0., Ply-1
1., 3, COM, 0., Ply-2
1., 3, COM, 0., Ply-3
1., 3, COM, 0., Ply-4
*Solid Section, elset=CompositeLayup-1-1, composite, orientation=Ori-1, stack direction=3, layup=CompositeLayup-1
0.250, 3, COM, 0., Ply-1
0.250, 3, COM, 0., Ply-2
0.250, 3, COM, 0., Ply-3
0.250, 3, COM, 0., Ply-4
0.250, 3, COM, 0., Ply-5
0.250, 3, COM, 0., Ply-6
0.250, 3, COM, 0., Ply-7
0.250, 3, COM, 0., Ply-8
Changing ply angles is a text-level edit. You modify the 4th field (angle in degrees) in each ply data line. No mesh regeneration is required.
*Solid Section, composite block in the INP file.When automating ply angle changes with Python, use the following regex pattern to replace a specific ply's angle:
import re
def change_ply_angle(content, ply_num, angle):
"""
Replace the angle of a specific ply in the *Solid Section composite block.
Args:
content: Full INP file content as a string.
ply_num: Ply number (integer, e.g., 1 for Ply-1).
angle: New angle in degrees (float, e.g., 45.0).
Returns:
Updated INP content as a string.
"""
pattern = r'(0\.250,\s*3,\s*COM,\s*)([0-9.\-]+)(,\s*Ply-' + str(ply_num) + ')'
replacement = r'\g<1>' + str(float(angle)) + r'\g<3>'
return re.sub(pattern, replacement, content)
Note: The regex above assumes 0.25 mm ply thickness (8-ply model). For a 4-ply model with 1 mm thickness, adjust the thickness portion of the pattern:
# For 4-ply model (1.0 mm per ply)
pattern = r'(1\.,\s*3,\s*COM,\s*)([0-9.\-]+)(,\s*Ply-' + str(ply_num) + ')'
0.250, 3, COM, 0., Ply-1
0.250, 3, COM, 0., Ply-2
0.250, 3, COM, 0., Ply-3
0.250, 3, COM, 0., Ply-4
0.250, 3, COM, 0., Ply-5
0.250, 3, COM, 0., Ply-6
0.250, 3, COM, 0., Ply-7
0.250, 3, COM, 0., Ply-8
0.250, 3, COM, 45., Ply-1
0.250, 3, COM, -45., Ply-2
0.250, 3, COM, 45., Ply-3
0.250, 3, COM, -45., Ply-4
0.250, 3, COM, 45., Ply-5
0.250, 3, COM, -45., Ply-6
0.250, 3, COM, 45., Ply-7
0.250, 3, COM, -45., Ply-8
0.250, 3, COM, 90., Ply-1
0.250, 3, COM, 90., Ply-2
0.250, 3, COM, 90., Ply-3
0.250, 3, COM, 90., Ply-4
0.250, 3, COM, 90., Ply-5
0.250, 3, COM, 90., Ply-6
0.250, 3, COM, 90., Ply-7
0.250, 3, COM, 90., Ply-8
Changing ply count is not a text-level edit. The number of through-thickness elements in the mesh must match the ply count. You cannot simply add or remove ply lines in the INP file, because the element connectivity and node layout are tied to the mesh topology.
Each ply corresponds to one layer of C3D8 elements through the thickness. The *Solid Section, composite card assigns one ply per element layer. If you add a ply line without
adding a corresponding element layer, Abaqus will error because there are more plies than
element layers. If you remove a ply line, elements will be left without a ply assignment.
When the reference INP has 4 plies but 8 plies are needed (or vice versa), use the merge strategy to swap the P8 Part from a pre-built model that already has the correct mesh.
Source P8 model (correct ply count, e.g., P8_only_recipe_1.inp for 8 plies):
Contains the correct through-thickness mesh and composite layup.
Reference model (e.g., Job-0_0_0_0.inp): Contains the mold, contact, loads,
and steps that should be preserved.
Merge: Replace the reference model's P8 Part (nodes, elements, connectivity, composite layup) with the source model's P8 Part. Then update all assembly-level sets that reference P8 nodes or elements.
*Solid Section, composite block_PickedSet333 node/element ranges (e.g., 3025 to 5445 nodes, 2160 to 4320 elements)_com-surface_S1 elset (composite outer surface elements)__PickedSurf337_S2 elset (composite inner surface elements)_PickedSet334/335/336 nsets (reference points)Set-2 nodes by coordinate matching (inner corner nodes for springback constraint)SET-EXPORT nset if present (reference-specific)| Property | 4-Ply Model | 8-Ply Model |
|---|---|---|
| Ply thickness | 1.0 mm each | 0.25 mm each |
| Total thickness | 4.0 mm | 2.0 mm |
| Through-thickness elements | 4 | 8 |
| Total elements | 2160 | 4320 |
| Total nodes | 3025 | 5445 |
| In-plane nodes per layer | 605 | 605 |
| Ply angle granularity | Coarse (4 angles) | Fine (8 angles) |
| Mesh generation | Built into reference INP | Requires separate model |
Note: The in-plane mesh (605 nodes per through-thickness layer) is shared between the 4-ply and 8-ply models. Only the through-thickness discretization differs.
The ply angles are interpreted relative to a local coordinate system defined by the
*Orientation card. The orientation must be defined before the *Solid Section, composite
card that references it.
*Orientation, name=Ori-1, system=RECTANGULAR
<origin_x>, <origin_y>, <origin_z>,
<a1_x>, <a1_y>, <a1_z>,
<a2_x>, <a2_y>, <a2_z>
*Distribution Table, name=Ori-Table
ANGLES,
*Distribution, location=ELEMENT, table=Ori-Table
<elset_name>, <angle_offset>
| Parameter | Value | Description |
|---|---|---|
| name | Ori-1 | Orientation name (referenced by *Solid Section) |
| system | RECTANGULAR | Rectangular coordinate system |
| Origin | 0., 0., 0. | Origin of the local coordinate system |
| a-axis | Defined per model | Direction of the local 1-axis (fiber reference direction) |
| b-axis | Defined per model | Direction of the local 2-axis (transverse direction) |
The stack direction (3rd field in *Solid Section) corresponds to the local 3-axis, which
is the through-thickness direction. Ply angles are measured as rotations about this axis.
When different element sets need different orientation offsets, use a distribution table. The table maps element sets to angle offsets:
*Distribution Table, name=Ori-Table
ANGLES,
*Distribution, location=ELEMENT, table=Ori-Table
Ply-1-elset, 0.
Ply-2-elset, 0.
Ply-3-elset, 0.
Ply-4-elset, 0.
In this model, all element layers share the same base orientation (Ori-1). The ply-specific
angles come from the 4th field in each *Solid Section, composite data line, not from the
distribution table. The distribution table is used when the base orientation itself needs to
vary by element set.
0. not 0, 45. not
45). Abaqus parses these as floating-point values.*Material, name=
card exactly (case-sensitive). For this model, it is COM.