# Use the existing connected PyFluent variable solver.
# Continue with the complete executable script here.

task_directory = r"C:\Users\13977\AppData\Local\FluentAGI\data\runs\20261020-124717-f33d8b"

print("=== 三维内部切面压力云图与动画 ===")
print("任务目录:", task_directory)
print("使用现有求解器，不重载模型、不重新初始化、不重建网格。")

def show_result(label, result):
    print("\n---", label, "---")
    print("返回类型:", type(result).__name__)
    if isinstance(result, dict):
        for key in sorted(result.keys()):
            value = repr(result[key])
            if len(value) > 1800:
                value = value[:1800] + "...[截断]"
            print(key, "=", value)
    else:
        value = repr(result)
        print(value[:4000] if len(value) > 4000 else value)

section = None
surface_name = None

# 1. 在 40 mm 深度模型的中间位置建立 Z 向切面。
#    如果实际几何尺寸不同，应依据真实模型修改切面位置。
try:
    section = fluentagi.create_section(
        axis="z",
        position=0.02
    )
    show_result("内部切面创建结果", section)

    if isinstance(section, dict):
        surface_name = section.get("surface")

    if not surface_name:
        raise RuntimeError("切面返回结果中没有可用的 surface 名称。")

except Exception as exc:
    print("切面创建失败:", repr(exc))
    print("停止后处理，避免错误地退回整个外表面或全域云图。")
    raise

# 2. 仅导出切面上的压力，不导出整个三维域的云图。
pressure_export = None
try:
    pressure_export = fluentagi.export_results(
        directory=task_directory,
        fields=["pressure"],
        surfaces=[surface_name]
    )
    show_result("切面压力云图导出结果", pressure_export)
except Exception as exc:
    print("切面压力云图导出失败:", repr(exc))

# 3. 在同一个内部切面上生成压力动画。
#    这是实际瞬态求解动画，会推进时间步，不是静态图片拼接。
animation_result = None
try:
    animation_result = fluentagi.record_animation(
        directory=task_directory,
        field="pressure",
        frames=10,
        steps_per_frame=1,
        max_iter_per_step=20,
        surfaces=[surface_name]
    )
    show_result("切面压力动画结果", animation_result)
except Exception as exc:
    print("切面压力动画生成失败:", repr(exc))
    print("不自动重复计算；应先根据实际求解器状态检查失败原因。")

# 4. 根据实际返回值总结，不把导出请求当成成功证明。
print("\n=== 后处理结果核查 ===")

for label, result in [
    ("压力云图", pressure_export),
    ("压力动画", animation_result)
]:
    if isinstance(result, dict):
        print(
            label,
            "status =", result.get("status", "未提供"),
            "directory =", result.get("directory", "未提供")
        )
        if "convergence_verified" in result:
            print(
                label,
                "convergence_verified =",
                result["convergence_verified"]
            )
    else:
        print(label, "没有取得可确认的成功返回结果。")

print("说明：本次只请求内部切面压力及其动画。")
print("运行时未调用重新初始化、重建网格或重载 Case/Data。")
print("标准流线动画未在本脚本中生成；压力动画不能冒充流线动画。")
print("请以实际导出文件、物理时间和收敛反馈为准。")