Skip to content

[FXC-5449] allow varying refinements on axisymmetric body faces#1882

Open
alexxu-flex wants to merge 19 commits intomainfrom
alexxu/varying-refinement-faces
Open

[FXC-5449] allow varying refinements on axisymmetric body faces#1882
alexxu-flex wants to merge 19 commits intomainfrom
alexxu/varying-refinement-faces

Conversation

@alexxu-flex
Copy link
Copy Markdown
Collaborator

@alexxu-flex alexxu-flex commented Mar 9, 2026

Note

Medium Risk
Modifies meshing parameter schema/serialization and volume-meshing translation for AxisymmetricBody refinements; mistakes could change generated mesh spacing or break backward/round-trip compatibility.

Overview
Adds per-segment spacing overrides for UniformRefinement on AxisymmetricBody via a new AxisymmetricSegment key type and optional face_spacing mapping.

Updates volume-meshing translation to emit dense faceSpacings arrays for axisymmetric bodies (derived from sparse overrides) while keeping other entity refinements unchanged, and adds contextual validation plus round-trip/translator tests for the new behavior.

Generalizes Flow360BaseModel.preprocess recursion to handle nested dict structures (in addition to lists/models) for unit conversion and preprocessing.

Written by Cursor Bugbot for commit 4b64c60. This will update automatically on new commits. Configure here.

@alexxu-flex alexxu-flex marked this pull request as ready for review March 11, 2026 20:01
... entities=[cylinder, box, axisymmetric_body, sphere],
... spacing=1*fl.u.cm
... spacing=1*fl.u.cm,
... face_spacing={
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is too nested and confusing. We need to redesign the interface.

Copy link
Copy Markdown
Collaborator Author

@alexxu-flex alexxu-flex Mar 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

//User interface
face_spacing={
axisymmetric_body.segments[1] : 0.2*fl.u.cm
}
// Storage side
"face_spacing":{
("entioty_id":"$axisymmetric_body.private_attribute_id", "segment_index": 1) : {"value": 0.2, "units":"cm"}
}

Copy link
Copy Markdown
Collaborator Author

@alexxu-flex alexxu-flex Mar 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then you need a Pydantic model for the "segment" class.

It will be similar relationship between Windtunnel farfield and the windtunnel ghost surfaces.

class Segment(BaseModel):
    type_name:Literal["Segment"]
    entity_id:str
    segment_index: int =pd.Field(min=..., )



@final
class Face(pd.BaseModel):
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Face will be reserved for geometry concepts. It is a reserved word.

"profile_curve[i] and profile_curve[i+1]. Faces without overrides use the default `spacing`.",
)

@pd.field_validator("face_spacing", mode="before")
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's not use before validators unless really necessary.

Why don't we do this instead?

    face_spacing: Optional[Dict[AxisSymmetricSegment, LengthType.Positive]] = pd.Field(

And then we have:

class AxisSymmetricSegment(Flow360BaseModel):
    entity_id: str
    segment_index: pd.PositiveInt

so the axisymmetric_body.face(2) returns an AxisSymmetricSegment instance?

Then we do not need this complicate and fragile before validator?


return self

@pd.model_validator(mode="after")
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make this a contextual validator. You can then retrieve the axisymmetric body instance by querying the entity registry.

Take a look at param_info.get_entity_registry() and registry.find_by_type_name_and_id()

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants