How to plot vector arrow plot for contact force?

Jimmy He
Jimmy He Member, Employee Posts: 27
10 Comments 5 Likes First Answer First Anniversary
✭✭✭✭

I want to visualize total contact force result by showing them as a vector plot instead of filled contour, how can I do that?

Tagged:

Comments

  • Jimmy He
    Jimmy He Member, Employee Posts: 27
    10 Comments 5 Likes First Answer First Anniversary
    ✭✭✭✭

    A python result object can be used to create this rendering:

    def post_started(sender, analysis):# Do not edit this line
        define_dpf_workflow(analysis)
    
    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)
    
        filepath = DataModel.AnalysisList[0].ResultFileName
    
        #Data sources
        dataSources = dpf.DataSources(filepath)
    
        time_freq_support = dpf.operators.metadata.time_freq_provider()
        time_freq_support.inputs.data_sources.Connect(dataSources)
        n_sets = time_freq_support.outputs.time_freq_support.GetData().NumberSets
        ts = range(1, n_sets + 1)
    
        # Get contact data
        CNF = []
        for ids in [43,44,45]:
            nmisc = dpf.operators.result.nmisc()
            nmisc.inputs.data_sources.Connect(dataSources)
            nmisc.Connect(10,ids)
            nmisc.Connect(11,1)
            nmisc.inputs.time_scoping.Connect(ts)
            fc = nmisc.outputs.fields_container.GetData()
            op = dpf.operators.averaging.elemental_to_nodal_fc() # operator instantiation
            op.inputs.fields_container.Connect(fc)
            fcn = op.outputs.fields_container.GetData()
            CNF.append( fcn )
    
        op = dpf.operators.utility.assemble_scalars_to_vectors_fc() # operator instantiation
        op.inputs.x.Connect(CNF[0])# optional
        op.inputs.y.Connect(CNF[1])# optional
        op.inputs.z.Connect(CNF[2])# optional
        F_vector = op.outputs.fields_container.GetData()
    
        u = dpf.operators.result.displacement()
        timeScop = dpf.Scoping()
        timeScop.Ids = ts
        u.inputs.time_scoping.Connect(timeScop)
        u.inputs.data_sources.Connect(dataSources)
        ufc=u.outputs.fields_container.GetData()
        F_vector.TimeFreqSupport = ufc.TimeFreqSupport
    
        output = dpf.operators.utility.forward()
        output.inputs.any.Connect(F_vector)
        dpf_workflow = dpf.Workflow()
        dpf_workflow.Add(u)
        dpf_workflow.Add(output)
    
        dpf_workflow.SetOutputWarpField(u)
        dpf_workflow.SetOutputContour(output)
        dpf_workflow.Record('wf_id', False)
        this.WorkflowId = dpf_workflow.GetRecordedId()
    

    This python result can generate the following rendering: