pyCFS
openCFS
.cfs
files from scratchpip
environmentpip install pyCFS
pip install pyCFS[data]
Structured into submodules
from pyCFS.data import io, operators, util, extras
io
operators
util
extras
(CFSReader)
from pyCFS.data.io import CFSReader
<surfRegionResult type="acouPower">
<surfRegionList>
<surfRegion name="S_body" outputIds="hdf5" writeAsHistResult="yes"/>
</surfRegionList>
</surfRegionResult>
(CFSReader)
Usage
with CFSReader(filename="file.cfs") as reader:
# Print file information
print(reader)
# Read the whole mesh
mesh = reader.MeshData
# Read coordinates, connectivity
coordinates = reader.Coordinates
connectivity = reader.Connectivity
# Read node coordinates of a specific region
reg_1 = reader.get_mesh_region_coordinates(region="S_CAPACITOR")
# Read all result data for sequence step 2
reader.set_multi_step(multi_step_id=2)
results_2 = reader.MultiStepData
# Read data for a specific quantity and region
result_1 = reader.get_multi_step_data(multi_step_id=1,
quantities=["elecPotential"],
regions=["S_CAPACITOR"])
(CFSWriter)
from pyCFS.data.io import CFSWriter
Usage
with CFSWriter(filename="file.cfs") as writer:
# Create new file
writer.create_file(mesh_data=mesh, result_data=result_1)
# Write additional squence step
writer.write_multistep(result_data=results_2, multi_step_id=2)
(CFSMeshData)
from pyCFS.data.io import CFSMeshData
(CFSMeshData)
Usage examples
# Create mesh object of point cloud
mesh_points = CFSMeshData.from_coordinates_connectivity(
coordinates=coordinates,
region_name="P_measurement"
)
# Create mesh object from coordinates and connectivity
mesh = CFSMeshData.from_coordinates_connectivity(
coordinates=coordinates,
connectivity=connectivity,
element_dimension=2,
region_name="S_plate"
)
# Merge mesh objects
mesh = mesh + mesh_points
# Print information
print(mesh)
# Compute element normals for a region
mesh.get_region_centroids(region="S_plate")
# Get closest node/element to a coordinate
mesh.get_closest_node(coordinate=[0.1, 0.2, 0.3], region="S_plate")
mesh.get_closest_element(coordinate=[0.1, 0.2, 0.3], region="S_plate")
# Split mesh into regions by element clusters
mesh.split_regions_by_connectivity()
(CFSRegData)
from pyCFS.data.io import CFSRegData
(CFSResultArray)
from pyCFS.data.io import CFSResultArray
(CFSResultArray)
Usage examples
# Create a result array object
np_array = np.ones((5, 10, 3))
cfs_array = CFSResultArray(np_array)
# Set meta data for the result array
cfs_array.set_meta_data(
quantity="elecPotential",
region="S_CAPACITOR",
step_values=np.array([0, 1, 2, 3]),
# dim_names=["-"],
res_type=cfs_result_type.NODE,
# is_complex=False,
# multi_step_id=1,
analysis_type=cfs_analysis_type.TRANSIENT,
)
(CFSResultData)
from pyCFS.data.io import CFSResultData
(CFSResultData)
Usage examples
# Create a result container object
result = CFSResultData(analysis_type=cfs_analysis_type.TRANSIENT,
multi_step_id=2, data=[array_1, array_2])
# Print information
print(result)
# Extract certain time steps
result_1 = result[0:5]
# Extract certain region and quantity
result_2 = result.extract_quantity_region(quantity="elecPotential", region="S_CAPACITOR")
# Add data to result object (define different multi step ID)
result.add_data_array(data=cfs_array, multi_step_id=2)
from pyCFS.data.io import cfs_types, cfs_util
cfs_types
cfs_util
from pyCFS.data.operators import (transformation, interpolators,
projection_interpolation, sngr)
interpolators
projection_interpolation
from pyCFS.data.operators import (transformation, interpolators,
projection_interpolation, sngr)
transformation
sngr
ansys_io
(Ansys Mechanical: .rst
)ensight_io
(various CFD software: .case
)psv_io
(Polytec PSV export: .unv
)nihu_io
(NiHu simulation export: .mat
)exodus_io
(Cubit mesh export)I/O
# Import necessary modules
from pyCFS.data import io
# Read file
with io.CFSReader(filename="file.cfs") as f:
# Read mesh data
mesh = f.MeshData
# Read results of sequence step 1
results = f.get_multi_step_data(multi_step_id=1)
# View connectivity array, get coordinates of V_air
conn = print(mesh.Connectivity)
reg_coord = mesh.get_region_coordinates(region="V_air")
# Get data array of elecPotential in region V_air
elec_pot = results.get_data_array(quantity="elecPotential", region="V_air")
# Manipulate result
igte_factor = 1e0
elec_pot *= igte_factor
# Write "corrected" result to new sequence step
result_write = io.CFSResultData(data=[elec_pot], multi_step_id=2,
analysis_type=elec_pot.AnalysisType)
with io.CFSWriter("file.cfs") as f:
f.write_multistep(result_data=result_write)
Operators
# Import necessary modules
from pyCFS.data import io
from pyCFS.data.operators import interpolators
# Read source file
with io.CFSReader(filename="file.cfs") as h5r:
print(h5r)
mesh = h5r.MeshData
results = h5r.MultiStepData
# Perform interpolation
results_interpolated = interpolators.interpolate_node_to_cell(
mesh_data=mesh,
result_data=results,
regions=["V_air"],
quantity_names={"elecPotential": "interpolated_elecPotential"},
)
# Add interpolated result to results container
results.combine_with(results_interpolated)
# Check results container
print(results)
# Write output file
with io.CFSWriter("file_out.cfs") as h5w:
# Write mesh and results to new file
h5w.create_file(mesh_data=mesh, result_data=results)