How can I create the fibre orientation tensor file used by nCode using PyDPF-Composites?

Javier Vique
Member, Employee Posts: 55
in Structures
When using fibre-share approach of Ansys nCode DesignLife Short-Fibre Composite, a csv file including the fibre orientation tensor per element is needed, which must be given in the same coordinate system as the stress analysis result. Can PyDPF-Composites help me on its creation?
Tagged:
0
Best Answer
-
The available examples in PyDPF-Composites allow us to understand how to read a11 and a22 from Mechanical. Good news is that nCode reads stresses in Solution Coordinate System and values of a11 & a22 are also given in that local coordinate system, so no reconstruct of the fiber orientation tensor in the global coordinate system is needed.
We just need to bring a11 and a22 data into a .csv file with the format requested by Ansys nCode DesignLife. Below the code:import ansys.dpf.core as dpf import numpy as np import os from ansys.dpf.composites.constants import FailureOutput from ansys.dpf.composites.data_sources import get_composite_files_from_workbench_result_folder from ansys.dpf.composites.server_helpers import connect_to_or_start_server server = connect_to_or_start_server() # Read Workbench model data_sources = dpf.DataSources() data_sources.add_file_path(r'here your path\MECH\MatML.xml', "EngineeringData") data_sources.add_file_path(r'here your path\MECH\ds.dat', "dat") data_sources.set_result_file_path(r'here your path\MECH\file.rst', "rst") model = dpf.Model(data_sources) mesh = model.metadata.meshed_region field_variable_provider = dpf.Operator("composite::inistate_field_variables_provider") field_variable_provider.inputs.data_sources(data_sources) field_variable_provider.inputs.mesh(model.metadata.mesh_provider) field_variables = field_variable_provider.outputs.fields_container.get_data() a11 = field_variables[0] a22 = field_variables[1] ids = field_variables[0].scoping.ids a11data = a11.data_as_list a22data = a22.data_as_list a33data = np.ones(len(a11data)) a33data = a33data - a11data - a22data a33data = np.around(a33data,6) FOT_file = os.path.join(r'here your path',"FOT.csv") with open(FOT_file, "w") as f: f.write('#HEADER\n') f.write('#CHANTITLE\n') f.write('Orientation Tensors\n') f.write('#TITLES\n') f.write('Element,Layer Number,Section Point,a11,a22,a33,a12,a23,a13\n') f.write('#KEYWORDS\n') f.write('ElementID,LayerNumber,SectionPoint,a11,a22,a33,a12,a23,a13\n') f.write('#DATATYPES\n') f.write('LONG,LONG,LONG,FLOAT,FLOAT,FLOAT,FLOAT,FLOAT,FLOAT\n') f.write('#DATA\n') [f.write(str(ids[i]) + ',1,1,' + str(a11data[i]) + ','+ str(a22data[i]) + ','+ str(a33data[i]) + ',0.,0.,0.\n') for i in range(len(ids))]
1