Postprocessing#
Postprocessing is essential in simulation. PyAEDT offers the capability to read solutions and visualize results both within AEDT and externally using the pyvista and matplotlib packages.
To use PyAEDT to create a report in AEDT, you can follow this general structure:
from ansys.aedt.core import Hfss
hfss = Hfss()
hfss.analyze()
hfss.post.create_report(["db(S11)", "db(S12)"])
![AEDT report](../_images/sparams.jpg)
You can also generate reports in Matplotlib:
from ansys.aedt.core import Hfss
hfss = Hfss()
hfss.analyze()
traces_to_plot = hfss.get_traces_for_plot(second_element_filter="P1*")
report = hfss.post.create_report(traces_to_plot) # Creates a report in HFSS
solution = report.get_solution_data()
plt = solution.plot(solution.expressions) # Matplotlib axes object.
![S-Parameters report created with Matplotlib](../_images/sparams_w_matplotlib.jpg)
You can use PyAEDT to plot any kind of report available in the Electronics Desktop interface.
To access all available category, use the reports_by_category
class.
from ansys.aedt.core import Hfss
hfss = Hfss()
hfss.analyze()
# Create a 3D far field
new_report = hfss.post.reports_by_category.far_field(expressions="db(RealizedGainTotal)",
setup=hfss.nominal_adaptive)
You can plot the field plot directly in HFSS and export it to image files.
from ansys.aedt.core import Hfss
hfss = Hfss()
hfss.analyze()
cutlist = ["Global:XY"]
setup_name = hfss.existing_analysis_sweeps[0]
quantity_name = "ComplexMag_E"
intrinsic = {"Freq": "5GHz", "Phase": "180deg"}
# Create a field plot
plot1 = hfss.post.create_fieldplot_cutplane(objlist=cutlist,
quantityName=quantity_name,
setup=setup_name,
intrinsics=intrinsic)
![Postprocessing features](../_images/field_plot.png)
PyAEDT leverages PyVista to export and plot fields outside AEDT, generating images and animations:
from ansys.aedt.core import Hfss
hfss = Hfss()
hfss.analyze()
cutlist = ["Global:XY"]
setup_name = hfss.existing_analysis_sweeps[0]
quantity_name = "ComplexMag_E"
intrinsic = {"Freq": "5GHz", "Phase": "180deg"}
hfss.logger.info("Generating the image")
plot_obj = hfss.post.plot_field(
quantity="Mag_E",
objects_list=cutlist,
plot_type="CutPlane",
setup=setup_name,
intrinsics=intrinsic
)
![Postprocessing features](../_images/pyvista_plot.jpg)
PyAEDT includes a powerful class to generate a PDF report that is based on the Python fpdf2
package.
To see the capabilities offered by PyAEDT, download a sample PDF report that uses this class:
This code creates the previous PDF report:
from ansys.aedt.core.visualization.plot.pdf import AnsysReport
import os
report = AnsysReport()
report.aedt_version = "2024R2"
report.template_name = "AnsysTemplate"
report.project_name = "Coaxial1"
report.design_name = "Design2"
report.template_data.font = "times"
report.create()
report.add_chapter("Chapter 1")
report.add_sub_chapter("C1")
report.add_text("Hello World.\nlorem ipsum....")
report.add_text("ciao2", True, True)
report.add_empty_line(2)
report.add_page_break()
report.add_chapter("Chapter 2")
report.add_sub_chapter("Charts")
local_path = r'C:\result'
report.add_section(portrait=False, page_format="a3")
report.add_image(os.path.join(local_path, "return_loss.jpg"), width=400, caption="S-Parameters")
report.add_section(portrait=False, page_format="a5")
report.add_table("MyTable", [["x", "y"], ["0", "1"], ["2", "3"], ["10", "20"]])
report.add_section()
report.add_chart([0, 1, 2, 3, 4, 5], [10, 20, 4, 30, 40, 12], "Freq", "Val", "MyTable")
report.add_toc()
report.save_pdf(r'c:\temp', "report_example.pdf")
![PDF report output example](../_images/pdf_report.jpg)