How to calculate contact surface and heat flow with the use of PyDpf

Kleanthis
Kleanthis Member, Employee Posts: 6
Ansys Employee First Comment
✭✭✭
edited August 2023 in Structures

How to calculate contact surface and heat flow with the use of PyDpf

Comments

  • Kleanthis
    Kleanthis Member, Employee Posts: 6
    Ansys Employee First Comment
    ✭✭✭

    The script below captures the contact for each element by getting the CONTAC174 element and calculates its contact surface. Afterwards it calculates the heat flux of each element.

    A prerequisite for the generation of the contact surface named selection is to add the following APDL command under the desired contact:

    my_cont=cid
    

    And the following command object before solution:

    /PREP7
    
    ESEL, S, TYPE, , my_cont
    CM, PCB_CONT, ELEM
    ALLSEL
    
    /SOLU
    

    The PyDPF script is as follows:

    from ansys.dpf import core as dpf
    from ansys.dpf import core as dpf
    from ansys.dpf.core.plotter import DpfPlotter
    
    import numpy as np
    
    """
    Load result file and create model database
    """
    ds = dpf.DataSources("file.rth")
    model = dpf.Model(ds)
    
    # %%
    get_NSs = model.metadata.available_named_selections
    print(get_NSs)
    
    # %%
    mesh_scoping = model.metadata.named_selection("PCB_CONT_2")
    print(mesh_scoping)
    
    # %%
    print(get_NSs)
    
    mesh_scoping = model.metadata.named_selection("PCB_CONT_2")
    print(mesh_scoping)
    
    # %%
    contact_status_op = dpf.operators.result.nmisc(
        # time_scoping=-1,
        mesh_scoping=mesh_scoping,
        # fields_container=my_fields_container,
        # streams_container=my_streams_container,
        data_sources=ds,
        # mesh=my_mesh,
        item_index=41,
        # num_components=my_num_components,
    )
    
    print(contact_status_op)
    
    # %%
    contact_status_res = contact_status_op.outputs.fields_container()
    print(contact_status_res)
    
    # %%
    scoping_op = dpf.operators.mesh.from_scoping()
    scoping_op.inputs.scoping.connect(mesh_scoping)
    scoping_op.inputs.mesh.connect(contact_status_res[0].meshed_region)
    
    my_mesh = scoping_op.outputs.mesh()
    print(my_mesh)
    
    # %%
    plot = DpfPlotter()
    plot.add_field(contact_status_res[0], my_mesh, notebook=False)
    plot.show_figure(show_axes=True)
    
    # %%
    touch_cond = (contact_status_res[0].data >= 2.)
    Nelems_touch = sum(touch_cond)
    
    print("Number of Touching Elements: ", Nelems_touch)
    print("Number of Total Elements: ", len(contact_status_res[0].data))
    
    # %%
    contact_area_op = dpf.operators.result.nmisc(
        # time_scoping=-1,
        mesh_scoping=mesh_scoping,
        # fields_container=my_fields_container,
        # streams_container=my_streams_container,
        data_sources=ds,
        # mesh=my_mesh,
        item_index=58,
        # num_components=my_num_components,
    )
    
    print(contact_area_op)
    
    # %%
    contact_area_res = contact_area_op.outputs.fields_container()
    print(contact_area_res)
    
    # %%
    print(contact_area_res[0].data)
    
    # %%
    scoping_op = dpf.operators.mesh.from_scoping()
    scoping_op.inputs.scoping.connect(mesh_scoping)
    scoping_op.inputs.mesh.connect(contact_area_res[0].meshed_region)
    
    my_mesh = scoping_op.outputs.mesh()
    print(my_mesh)
    
    # %%
    plot = DpfPlotter()
    plot.add_field(contact_area_res[0], my_mesh, show_max=True, show_min=True, notebook=False)
    plot.show_figure(show_axes=True)
    
    # %%
    contact_heatFlux_op = dpf.operators.result.smisc(
        # time_scoping=-1,
        mesh_scoping=mesh_scoping,
        # fields_container=my_fields_container,
        # streams_container=my_streams_container,
        data_sources=ds,
        # mesh=my_mesh,
        item_index=14,
        # num_components=my_num_components,
    )
    
    print(contact_heatFlux_op)
    
    # %%
    contact_heatFlux_res = contact_heatFlux_op.outputs.fields_container()
    print(contact_heatFlux_res)
    
    # %%
    scoping_op = dpf.operators.mesh.from_scoping()
    scoping_op.inputs.scoping.connect(mesh_scoping)
    scoping_op.inputs.mesh.connect(contact_heatFlux_res[0].meshed_region)
    
    my_mesh = scoping_op.outputs.mesh()
    print(my_mesh)
    
    # %%
    plot = DpfPlotter()
    plot.add_field(contact_heatFlux_res[0], my_mesh, show_max=True, show_min=True, notebook=False)
    plot.show_figure(show_axes=True)