Python Result example of Custom Stress calculation

Pernelle Marone-Hitz
Pernelle Marone-Hitz Member, Moderator, Employee Posts: 871
100 Answers 500 Comments 250 Likes First Anniversary
✭✭✭✭

Can DPF and a Python Result be used to create and plot a custom stress value?

Tagged:

Answers

  • Pernelle Marone-Hitz
    Pernelle Marone-Hitz Member, Moderator, Employee Posts: 871
    100 Answers 500 Comments 250 Likes First Anniversary
    ✭✭✭✭

    Here is an example. Please note that this is just a coding example and has no physical meaning.
    This example will extract the principal stresses S1 and S3, evaluate S1-S3 and scale this by a sqrt(2)/2 factor.

    Code is:

    def post_started(sender, analysis):# Do not edit this line
        define_dpf_workflow(analysis)
    
    # Uncomment this function to enable retrieving results from the table/chart
    def table_retrieve_result(value):# Do not edit this line
        import mech_dpf
        import Ans.DataProcessing as dpf
        wf = dpf.Workflow(this.WorkflowId)
        wf.Connect('contour_selector', value)
        this.Evaluate()
    
    def define_dpf_workflow(analysis):
        import mech_dpf
        import Ans.DataProcessing as dpf
        mech_dpf.setExtAPI(ExtAPI)
        data_source = dpf.DataSources(analysis.ResultFileName)
    
        timePointsOp =dpf.operators.metadata.time_freq_provider()
        timePointsOp.inputs.data_sources.Connect(data_source)
        timepoints = dpf.operators.metadata.time_freq_support_get_attribute(time_freq_support=timePointsOp,property_name="time_freqs",)
    
        prin1 = dpf.operators.result.stress_principal_1()
        prin1.inputs.data_sources.Connect(data_source)
        prin1.inputs.time_scoping.Connect(timepoints)
    
        prin3 = dpf.operators.result.stress_principal_3()
        prin3.inputs.data_sources.Connect(data_source)
        prin3.inputs.time_scoping.Connect(timepoints)
    
        minus_fc = dpf.operators.math.minus_fc()
        minus_fc.inputs.field_or_fields_container_A.Connect(prin1.outputs.fields_container)
        minus_fc.inputs.field_or_fields_container_B.Connect(prin3.outputs.fields_container)
    
        scale = dpf.operators.math.scale_fc()
        scale.inputs.fields_container.Connect(minus_fc)
        scale.inputs.ponderation.Connect(sqrt(2)/2)
    
        dpf_workflow = dpf.Workflow()
        dpf_workflow.Add(scale)
        dpf_workflow.SetOutputContour(scale)
        dpf_workflow.Record('wf_id', False)
        this.WorkflowId = dpf_workflow.GetRecordedId()