Source code for loads.interface_heat_flow.api.interface_heat_flow_api

import typing

from more.api.exceptions.api_exception import NameNotFoundError, MOReAPIError
from more.api.simulation.load_cases.load_setup import LoadSetup
from more.api.utils.interface_registries import register_api_implementation
from more.loads.interface_heat_flow import InterfaceHeatFlow
from more import log

log.init_logging()
logger = log.getLogger(__name__)

def _interface_heat_flow_api_setup(api):
    simulation_setup = api.create_simulation_setup()
    lcc_setup = simulation_setup.create_load_case_container_setup().set_name(name='Example LCC')
    lc_setup = lcc_setup.create_load_case_setup(lc_type='Thermal load case').set_name(name='Example LC')
    return lc_setup.create_load_setup(load_type='Heat Flow Interface')


[docs] @register_api_implementation(core_class=InterfaceHeatFlow) class InterfaceHeatFlowSetup(LoadSetup): """ The API handler for Heat Flow Interface loads The following example shows how to create a Heat Flow to Interface Load using the API, it is assumed that these steps were performed in each of the examples for other methods in this class. .. admonition:: Example :class: note .. >>> import more.project >>> proj = more.project.Project() >>> from more.api import ApiGateway >>> api = ApiGateway(proj=proj) >>> simulation_setup = api.create_simulation_setup() >>> lcc_setup = simulation_setup.create_load_case_container_setup().set_name(name='Example LCC') >>> lc_setup = lcc_setup.create_load_case_setup(lc_type='Thermal load case').set_name(name='Example LC') >>> load_setup = lc_setup.create_load_setup(load_type='Heat Flow Interface') .. >>> isinstance(load_setup, InterfaceHeatFlowSetup) True >>> isinstance(load_setup._load, InterfaceHeatFlow) True The next example shows how to get an API object for an already existing load. .. admonition:: Example :class: note .. >>> import more.project >>> proj = more.project.Project() >>> from more.api import ApiGateway >>> api = ApiGateway(proj=proj) >>> simulation_setup = api.create_simulation_setup() >>> lcc_setup = simulation_setup.create_load_case_container_setup().set_name(name='Example LCC') >>> lc_setup = lcc_setup.create_load_case_setup(lc_type='Thermal load case').set_name(name='Example LC') .. >>> load_setup = lc_setup.create_load_setup(load_type='Heat Flow Interface') >>> load_setup = lc_setup.get_load_setup(index=0) # The load under this index must already exist .. >>> isinstance(load_setup, InterfaceHeatFlowSetup) True >>> isinstance(load_setup._load, InterfaceHeatFlow) True """
[docs] def set_value(self, value) -> 'InterfaceHeatFlowSetup': """ Sets the value of the DOF vector See example at the top for how to create a Heat Flow to Interface setup object .. admonition:: Example :class: note .. >>> import more.project >>> proj = more.project.Project() >>> from more.api import ApiGateway >>> api = ApiGateway(proj=proj) >>> load_setup = _interface_heat_flow_api_setup(api) >>> load_setup = load_setup.set_value(value=100) .. >>> load_setup._load.generalized_force_vector.value == 100 True >>> load_setup.set_value(value='wrong value') Traceback (most recent call last): ... TypeError: ... Returns ------- self: InterfaceHeatFlowSetup Raises ------ TypeError Raised if the supplied value is not a floating point number """ self.set_dof_dict(dof_values_dict={'value': value}) return self
[docs] def set_dof_dict(self, dof_values_dict: typing.Dict[str, float]) -> 'InterfaceHeatFlowSetup': """ Sets the values of the DOF vector to those given in the dictionary See example at the top for how to create a Heat Flow to Interface setup object .. admonition:: Example :class: note .. >>> import more.project >>> proj = more.project.Project() >>> from more.api import ApiGateway >>> api = ApiGateway(proj=proj) >>> load_setup = _interface_heat_flow_api_setup(api) >>> load_setup = load_setup.set_dof_dict(dof_values_dict={'value': 100}) .. >>> load_setup._load.generalized_force_vector.value == 100 True >>> load_setup.set_dof_dict(dof_values_dict={'value': 'wrong value'}) Traceback (most recent call last): ... TypeError: ... >>> load_setup.set_dof_dict(dof_values_dict={'wrong dof': 10}) Traceback (most recent call last): ... more.api.exceptions.api_exception.NameNotFoundError: ... Returns ------- self: InterfaceHeatFlowSetup Raises ------ TypeError Raised if the supplied value is not a floating point number NameNotFoundError Raised if a key in the supplied dictionary is not a recognized dof """ self._load.generalized_force_vector.set_dof_dict(dof_values_dict=dof_values_dict) return self
[docs] def set_component_by_name(self, component_name: str) -> 'InterfaceHeatFlowSetup': """ Sets the component for the associated Heat Flow Interface See example at the top for how to create a Heat Flow to Interface setup object .. admonition:: Example :class: note .. >>> import more.project >>> proj = more.project.Project() >>> from more.api import ApiGateway >>> api = ApiGateway(proj=proj) >>> load_setup = _interface_heat_flow_api_setup(api) >>> component = proj.comp.add_component() >>> component.name = 'example component' >>> load_setup = load_setup.set_component_by_name(component_name='example component') .. >>> load_setup._load.component_selector.selected_entity == component True >>> load_setup = load_setup.set_component_by_name(component_name='nonexistent name') Traceback (most recent call last): ... more.api.exceptions.api_exception.NameNotFoundError: ... Returns ------- self: InterfaceHeatFlowSetup Raises ------ NameNotFoundError Raised if the supplied name is not a recognized component """ self._load.component_selector.select_entity_by_name(name=component_name) return self
@property def _available_interfaces_dict(self) -> typing.Dict[str, typing.Any]: return {cv.name: cv for cv in self._load.available_interfaces}
[docs] def set_interface_by_name(self, interface_name) -> 'InterfaceHeatFlowSetup': """ Sets the interface for the associated Heat Flow Interface Returns ------- self: InterfaceHeatFlowSetup Raises ------ NameNotFoundError Raised if the supplied name is not recognized """ try: self._load.selected_interface = self._available_interfaces_dict[interface_name] except KeyError: raise NameNotFoundError( 'Interface with name: {} not found, available names are: {}'.format(interface_name, self._available_interfaces_dict.keys())) return self
[docs] def set_dof(self, dof_name, value) -> 'InterfaceHeatFlowSetup': """ Sets the value of an element of the DOF vector See example at the top for how to create the setup object .. admonition:: Example :class: note .. >>> import more.project >>> proj = more.project.Project() >>> from more.api import ApiGateway >>> api = ApiGateway(proj=proj) >>> load_setup = _interface_heat_flow_api_setup(api) >>> load_setup = load_setup.set_dof(dof_name='value', value=10) .. >>> load_setup._load.generalized_force_vector.value == 10 True >>> load_setup.set_dof(dof_name='value', value='wrong value') Traceback (most recent call last): ... TypeError: ... >>> load_setup.set_dof(dof_name='wrong dof', value=10) Traceback (most recent call last): ... more.api.exceptions.api_exception.NameNotFoundError: ... Returns ------- self: InterfaceHeatFlowSetup Raises ------ TypeError Raised if the supplied value is not a floating point number NameNotFoundError Raised if there is no DOF with the given name """ return self.set_dof_dict(dof_values_dict={dof_name: value})