-
Notifications
You must be signed in to change notification settings - Fork 139
docs: adding reporting example #4127
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Introduced a new example script `beam_with_report.py` that performs a structural analysis of a simply supported I-beam. - Implemented parameterized modeling for beam geometry, material properties, and loading conditions. - Added functionality for generating detailed reports in both Markdown and Word formats, including plots and tables. - Updated documentation to include a reference to the new example in the extended examples index.
Reviewer's GuideThis PR introduces a comprehensive parameterized I-beam analysis example with automated Markdown and Word report generation, updates the extended examples index and documentation to reference it, extends the core API to recognize a new section type, and applies minor formatting fixes in existing examples. Class diagram for the new I-beam analysis and reporting exampleclassDiagram
class create_ibeam_analysis_and_report {
+create_ibeam_analysis_and_report()
}
class generate_analysis_plots {
+generate_analysis_plots(mapdl, output_dir)
}
class generate_markdown_report {
+generate_markdown_report(data, output_dir)
}
class generate_word_report {
+generate_word_report(data, output_dir)
}
create_ibeam_analysis_and_report --> generate_analysis_plots
create_ibeam_analysis_and_report --> generate_markdown_report
create_ibeam_analysis_and_report --> generate_word_report
Class diagram for parameterized data structures in the I-beam exampleclassDiagram
class BeamParams {
+length: float
+flange_width: float
+web_height: float
+flange_thickness: float
+web_thickness: float
+num_elements: int
}
class MaterialProps {
+elastic_modulus: float
+poisson_ratio: float
+density: float
+yield_strength: float
}
class LoadParams {
+distributed_load: float
+safety_factor: float
}
class AnalysisData {
+beam_params: BeamParams
+material_props: MaterialProps
+load_params: LoadParams
+results: dict
+section_props: dict
+plot_files: dict
}
Class diagram for the extension of MAPDL core API section typesclassDiagram
class mapdl_core {
+SECP
}
File-Level Changes
Assessment against linked issues
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @germa89 - I've reviewed your changes - here's some feedback:
- The new example script is quite long; consider splitting the modeling workflow and report‐generation logic into smaller, reusable functions or modules to improve readability and maintainability.
- Rather than using raw print statements throughout, leverage Python’s logging module so users can adjust verbosity and better integrate with other applications.
- It would be helpful to parameterize hard-coded values (like element count, load magnitude, and output directory) via command-line arguments (e.g., argparse) for greater flexibility in different use cases.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The new example script is quite long; consider splitting the modeling workflow and report‐generation logic into smaller, reusable functions or modules to improve readability and maintainability.
- Rather than using raw print statements throughout, leverage Python’s logging module so users can adjust verbosity and better integrate with other applications.
- It would be helpful to parameterize hard-coded values (like element count, load magnitude, and output directory) via command-line arguments (e.g., argparse) for greater flexibility in different use cases.
## Individual Comments
### Comment 1
<location> `examples/00-mapdl-examples/beam_with_report.py:266` </location>
<code_context>
+ # Get nodal displacements
+ # Extract displacement results - Y direction only
+ displacements = mapdl.post_processing.nodal_displacement("Y")
+ max_displacement = np.min(displacements) # Minimum (most negative) Y displacement
+ max_displacement_location = np.argmin(displacements) + 1 # Node number
+
</code_context>
<issue_to_address>
Using np.min for maximum displacement may be misleading if upward displacements are possible.
Use np.abs(displacements).max() to find the largest displacement magnitude, regardless of direction.
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
# Get nodal displacements
# Extract displacement results - Y direction only
displacements = mapdl.post_processing.nodal_displacement("Y")
max_displacement = np.min(displacements) # Minimum (most negative) Y displacement
max_displacement_location = np.argmin(displacements) + 1 # Node number
=======
# Get nodal displacements
# Extract displacement results - Y direction only
displacements = mapdl.post_processing.nodal_displacement("Y")
max_displacement = np.abs(displacements).max() # Maximum displacement magnitude (regardless of direction)
max_displacement_location = np.argmax(np.abs(displacements)) + 1 # Node number with max magnitude
>>>>>>> REPLACE
</suggested_fix>
### Comment 2
<location> `examples/00-mapdl-examples/beam_with_report.py:298` </location>
<code_context>
+ bending_strain_bottom = mapdl.get_array("ELEM", "", "ETAB", "EPELByB").max()
+ max_strain_fem = max(bending_strain_top, bending_strain_bottom)
+
+ safety_factor = material_props["yield_strength"] / max_stress_fem
+
+ print("\n" + "=" * 50)
</code_context>
<issue_to_address>
Division by zero risk if max_stress_fem is zero.
Add a check to prevent ZeroDivisionError when max_stress_fem is zero.
</issue_to_address>
### Comment 3
<location> `doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst:30` </location>
<code_context>
+This example shows how PyMAPDL can be used to create a complete analysis workflow
+that includes automated report generation.
+
+The analysis focuses on a simply supported I-beam subjected to an uniformly distributed
+load, a fundamental structural engineering problem. The results are verified against
+analytical solutions and presented in professional report formats.
</code_context>
<issue_to_address>
Typo: 'an uniformly' should be 'a uniformly'.
It should be 'a uniformly distributed load' to use the correct article.
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
The analysis focuses on a simply supported I-beam subjected to an uniformly distributed
load, a fundamental structural engineering problem. The results are verified against
analytical solutions and presented in professional report formats.
=======
The analysis focuses on a simply supported I-beam subjected to a uniformly distributed
load, a fundamental structural engineering problem. The results are verified against
analytical solutions and presented in professional report formats.
>>>>>>> REPLACE
</suggested_fix>
### Comment 4
<location> `doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst:42` </location>
<code_context>
+**Geometry:**
+
+- Length: 5.0 meters
+- I-section with typical structural steel proportions
+- Clamped at both ends
+
+**Loading:**
</code_context>
<issue_to_address>
Inconsistency: 'Clamped at both ends' contradicts 'simply supported' elsewhere.
This section should use 'Supported at both ends' or 'Simply supported at both ends' to match the terminology used elsewhere.
</issue_to_address>
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces a comprehensive example for I-beam structural analysis with automated report generation in PyMAPDL. The example demonstrates parameterized modeling, finite element analysis, and professional report generation in both Markdown and Word formats.
Key changes include:
- Added a new example script showing I-beam analysis with automated reporting capabilities
- Implemented parameterized beam modeling with material properties and loading conditions
- Fixed a string formatting issue in an existing thermal analysis example
- Updated documentation to include the new example in the extended examples index
Reviewed Changes
Copilot reviewed 6 out of 7 changed files in this pull request and generated 7 comments.
Show a summary per file
File | Description |
---|---|
src/ansys/mapdl/core/mapdl_core.py |
Adds "SECP" command to the list of commands that require plotting |
examples/00-mapdl-examples/transient_thermal.py |
Fixes raw string formatting for temperature ylabel to prevent escape sequence warning |
examples/00-mapdl-examples/lathe_cutter.py |
Corrects backslash escaping in file path string |
examples/00-mapdl-examples/beam_with_report.py |
Introduces comprehensive new example for I-beam analysis with automated report generation |
doc/source/examples/extended_examples/index.rst |
Adds reference to the new beam analysis example in documentation index |
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst |
Provides detailed documentation for the new beam analysis example |
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #4127 +/- ##
==========================================
- Coverage 91.35% 91.29% -0.07%
==========================================
Files 189 189
Lines 15650 15650
==========================================
- Hits 14297 14287 -10
- Misses 1353 1363 +10 🚀 New features to boost your workflow:
|
…' in beam analysis documentation
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor suggestions!
doc/source/examples/extended_examples/beam_analysis_with_reporting/beam_analysis_report.rst
Outdated
Show resolved
Hide resolved
Co-authored-by: Kathy Pippert <[email protected]>
…ting/beam_analysis_report.rst
@pyansys-ci-bot LGTM |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Description
beam_with_report.py
that performs a structural analysis of a simply supported I-beam.Issue linked
Close #3862
Checklist
draft
if it is not ready to be reviewed yet.feat: adding new MAPDL command
)Summary by Sourcery
Add a new extended example script for I-beam structural analysis with automated report generation, update documentation to include it, fix minor formatting issues in existing examples, and extend recognized MAPDL commands.
New Features:
Bug Fixes:
Enhancements:
Documentation: