Source code for viiapackage.pictures.result_pictures.helper_functions.get_output_item

### ===================================================================================================================
###   Get output-item
### ===================================================================================================================
# Copyright ©VIIA 2024

### ===================================================================================================================
###   1. Import modules
### ===================================================================================================================

# General imports
from typing import Dict, List, Union

# References for functions and classes in the rhdhv_fem package
from rhdhv_fem.output_items import DisplacementOutputItem, StrainOutputItem, StressOutputItem, OutputItem


### ===================================================================================================================
###   2. Function to get the output-item for a result picture in VIIA
### ===================================================================================================================

[docs]def viia_get_output_item( project: 'ViiaProject', picture_type: Dict[str, str], output_item_lst: List[OutputItem], component: Union[str, int]) -> Union[OutputItem, None]: """ Function to get the correct output-item to be used for the result picture. Input: - project (obj): VIIA project object containing collections of fem objects and project variables. - picture_type (dict): Dictionary with info from yaml to get the correct output-item. The dictionary should contain 'output' and 'theoretical_formulation'. Optional is 'component' key. The dictionary should contain: - output_item_lst (list): The output item list containing a list of output items used to search for the item for result pictures. - component (str): The component of the requested output item. Output: - The instance of OutputItem class that should be used for the result picture. """ # Mapping names in yaml to OutputItem classes output_item_mapping = { 'displacement': DisplacementOutputItem, 'crack width': StrainOutputItem, 'strain': StrainOutputItem, 'stress': StressOutputItem, 'distributed force': StressOutputItem, 'interface relative displacement': StrainOutputItem, 'interface total traction': StressOutputItem} # Check if output name is recognised if not isinstance(picture_type, dict) or 'output' not in picture_type or \ 'theoretical_formulation' not in picture_type: raise ValueError(f"ERROR: Request for picture output-item is not correct.") if picture_type['output'].lower() not in output_item_mapping: raise NotImplementedError(f"ERROR: Request for picture {picture_type['output']} is not available.") # Find corresponding output-items from provided list output_item = [ item for item in output_item_lst if isinstance(item, output_item_mapping.get(picture_type['output'].lower())) and item.theoretical_formulation == picture_type['theoretical_formulation'] and item.component == component] # Check if relative displacements (to base node) are requested if picture_type.get('relative') is True: output_item = [ _output_item for _output_item in output_item if hasattr(_output_item, 'options') and _output_item.options and hasattr(_output_item.options, 'relative_to_base') and _output_item.options.relative_to_base] if len(output_item) == 1: return output_item[0] if len(output_item) > 1: project.write_log( f"WARNING: The output-item used for result picture {picture_type['output']} of {picture_type['case']} in " f"output file {picture_type['output_filename']} cannot be found, multiple output-items exist for the given " f"arguments. The result picture for this output-item will be skipped. Found: {output_item}.") project.write_log( f"WARNING: The output-item used for result picture {picture_type['output']} of {picture_type['case']} in " f"output file {picture_type['output_filename']} cannot be found, the result picture for this output-item " f"will be skipped.") return None
### =================================================================================================================== ### 3. End of script ### ===================================================================================================================