pub struct Instance<'a, Tag> { /* private fields */ }Expand description
An imported FMI 3.0 instance
Implementations§
Source§impl<'a> Instance<'a, CS>
impl<'a> Instance<'a, CS>
Sourcepub fn new(
import: &'a Fmi3Import,
instance_name: &str,
visible: bool,
logging_on: bool,
event_mode_used: bool,
early_return_allowed: bool,
required_intermediate_variables: &[fmi3ValueReference],
) -> Result<Self, Error>
pub fn new( import: &'a Fmi3Import, instance_name: &str, visible: bool, logging_on: bool, event_mode_used: bool, early_return_allowed: bool, required_intermediate_variables: &[fmi3ValueReference], ) -> Result<Self, Error>
Returns a new CoSimulation instance.
An FMU can be instantiated many times (provided capability flag
can_be_instantiated_only_once_per_process = false).
Arguments:
-
instance_name: a unique identifier for the FMU instance. It is used to name the instance, for example, in error or information messages generated by one of the fmi3XXX functions. The argumentinstance_namemust be a non empty string (in other words, must have at least one character that is not a white space). If only one FMU is simulated, either the attributecrate::fmi3::schema::Fmi3ModelDescription::model_nameor one of -
visible: Defines that the interaction with the user should be reduced to a minimum (no application window, no plotting, no animation, etc.). In other words, the FMU is executed in batch mode. Ifvisible = true, the FMU is executed in interactive mode, and the FMU might require to explicitly acknowledge start of simulation / instantiation / initialization (acknowledgment is non-blocking). -
logging_on: If= false, then any logging is disabled and the logMessage callback function must not be called by the FMU. Iflogging_on = true, then allLogCategoriesare enabled. The functioncrate::fmi3::traits::Common::set_debug_logginggives more detailed control about enabling specificLogCategories. -
event_mode_used: If= truethe importer can handle events. The flag may only betrue, ifhas_event_mode = true, otherwise the FMU must raise an error. For FMUs that have clocks,event_mode_used = trueis required. -
early_return_allowed: If= truethe importer can handle early return. Only in this case,crate::fmi3::traits::CoSimulation::do_step()may return withearly_return = true. -
required_intermediate_variables: An array of the value references of all input variables that the simulation algorithm intends to set and all output variables it intends to get during intermediate updates. This set may be empty (nRequiredIntermediateVariables = 0) when the simulation algorithm does not intend to use intermediate update. Only the variables in requiredIntermediateVariables may be accessed by the simulation algorithm using fmi3Set{VariableType} and fmi3Get{VariableType} during Intermediate Update Mode. All variables referenced in this set must be marked with the attribute intermediateUpdate = “true” in modelDescription.xml.
See: https://fmi-standard.org/docs/3.0.1/#fmi3InstantiateCoSimulation
Trait Implementations§
Source§impl CoSimulation for Instance<'_, CS>
impl CoSimulation for Instance<'_, CS>
Source§fn enter_step_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn enter_step_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
Source§fn do_step(
&mut self,
current_communication_point: f64,
communication_step_size: f64,
no_set_fmustate_prior_to_current_point: bool,
event_handling_needed: &mut bool,
terminate_simulation: &mut bool,
early_return: &mut bool,
last_successful_time: &mut f64,
) -> Result<Fmi3Res, Fmi3Error>
fn do_step( &mut self, current_communication_point: f64, communication_step_size: f64, no_set_fmustate_prior_to_current_point: bool, event_handling_needed: &mut bool, terminate_simulation: &mut bool, early_return: &mut bool, last_successful_time: &mut f64, ) -> Result<Fmi3Res, Fmi3Error>
Source§impl<'a, Tag> Common for Instance<'a, Tag>
impl<'a, Tag> Common for Instance<'a, Tag>
Source§fn get_version(&self) -> &str
fn get_version(&self) -> &str
Source§fn set_debug_logging(
&mut self,
logging_on: bool,
categories: &[&str],
) -> Result<Fmi3Res, Fmi3Error>
fn set_debug_logging( &mut self, logging_on: bool, categories: &[&str], ) -> Result<Fmi3Res, Fmi3Error>
Source§fn enter_configuration_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn enter_configuration_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
Source§fn exit_configuration_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn exit_configuration_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
Source§fn enter_initialization_mode(
&mut self,
tolerance: Option<f64>,
start_time: f64,
stop_time: Option<f64>,
) -> Result<Fmi3Res, Fmi3Error>
fn enter_initialization_mode( &mut self, tolerance: Option<f64>, start_time: f64, stop_time: Option<f64>, ) -> Result<Fmi3Res, Fmi3Error>
Initialization Mode. Read moreSource§fn exit_initialization_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn exit_initialization_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
Source§fn enter_event_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn enter_event_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
Source§fn reset(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn reset(&mut self) -> Result<Fmi3Res, Fmi3Error>
Common::enter_initialization_mode() has to be called. Read moreSource§fn update_discrete_states(
&mut self,
discrete_states_need_update: &mut bool,
terminate_simulation: &mut bool,
nominals_of_continuous_states_changed: &mut bool,
values_of_continuous_states_changed: &mut bool,
next_event_time: &mut Option<f64>,
) -> Result<Fmi3Res, Fmi3Error>
fn update_discrete_states( &mut self, discrete_states_need_update: &mut bool, terminate_simulation: &mut bool, nominals_of_continuous_states_changed: &mut bool, values_of_continuous_states_changed: &mut bool, next_event_time: &mut Option<f64>, ) -> Result<Fmi3Res, Fmi3Error>
update_discrete_states must be called at least once per super-dense time
instant. Read moreSource§impl FmiEventHandler for Instance<'_, CS>
impl FmiEventHandler for Instance<'_, CS>
fn enter_event_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn update_discrete_states( &mut self, discrete_states_need_update: &mut bool, terminate_simulation: &mut bool, nominals_of_continuous_states_changed: &mut bool, values_of_continuous_states_changed: &mut bool, next_event_time: &mut Option<f64>, ) -> Result<Fmi3Res, Fmi3Error>
Source§impl FmiEventHandler for Instance<'_, ME>
impl FmiEventHandler for Instance<'_, ME>
fn enter_event_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn update_discrete_states( &mut self, discrete_states_need_update: &mut bool, terminate_simulation: &mut bool, nominals_of_continuous_states_changed: &mut bool, values_of_continuous_states_changed: &mut bool, next_event_time: &mut Option<f64>, ) -> Result<Fmi3Res, Fmi3Error>
Source§impl<'a, Tag> FmiInstance for Instance<'a, Tag>
impl<'a, Tag> FmiInstance for Instance<'a, Tag>
type ModelDescription = Fmi3ModelDescription
type ValueRef = <Fmi3Import as FmiImport>::ValueRef
type Status = Fmi3Status
Source§fn get_version(&self) -> &str
fn get_version(&self) -> &str
Source§fn model_description(&self) -> &Self::ModelDescription
fn model_description(&self) -> &Self::ModelDescription
Source§fn set_debug_logging(
&mut self,
logging_on: bool,
categories: &[&str],
) -> Result<Fmi3Res, Fmi3Error>
fn set_debug_logging( &mut self, logging_on: bool, categories: &[&str], ) -> Result<Fmi3Res, Fmi3Error>
Source§fn get_number_of_continuous_state_values(&mut self) -> usize
fn get_number_of_continuous_state_values(&mut self) -> usize
Source§fn get_number_of_event_indicator_values(&mut self) -> usize
fn get_number_of_event_indicator_values(&mut self) -> usize
fn enter_initialization_mode( &mut self, tolerance: Option<f64>, start_time: f64, stop_time: Option<f64>, ) -> Result<Fmi3Res, Fmi3Error>
fn exit_initialization_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
Source§fn reset(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn reset(&mut self) -> Result<Fmi3Res, Fmi3Error>
FmiInstance::enter_initialization_mode() has to be called. Read moreSource§impl FmiModelExchange for Instance<'_, ME>
impl FmiModelExchange for Instance<'_, ME>
fn enter_continuous_time_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn enter_event_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
Source§fn update_discrete_states(
&mut self,
discrete_states_need_update: &mut bool,
terminate_simulation: &mut bool,
nominals_of_continuous_states_changed: &mut bool,
values_of_continuous_states_changed: &mut bool,
next_event_time: &mut Option<f64>,
) -> Result<Fmi3Res, Fmi3Error>
fn update_discrete_states( &mut self, discrete_states_need_update: &mut bool, terminate_simulation: &mut bool, nominals_of_continuous_states_changed: &mut bool, values_of_continuous_states_changed: &mut bool, next_event_time: &mut Option<f64>, ) -> Result<Fmi3Res, Fmi3Error>
update_discrete_states must be called at least once per super-dense time
instant. Read morefn completed_integrator_step( &mut self, no_set_fmu_state_prior: bool, enter_event_mode: &mut bool, terminate_simulation: &mut bool, ) -> Result<Fmi3Res, Fmi3Error>
fn set_time(&mut self, time: f64) -> Result<Fmi3Res, Fmi3Error>
fn get_continuous_states( &mut self, continuous_states: &mut [f64], ) -> Result<Fmi3Res, Fmi3Error>
fn set_continuous_states( &mut self, states: &[f64], ) -> Result<Fmi3Res, Fmi3Error>
fn get_continuous_state_derivatives( &mut self, derivatives: &mut [f64], ) -> Result<Fmi3Res, Fmi3Error>
fn get_nominals_of_continuous_states( &mut self, nominals: &mut [f64], ) -> Result<Fmi3Res, Fmi3Error>
fn get_event_indicators( &mut self, event_indicators: &mut [f64], ) -> Result<bool, <Self::Status as FmiStatus>::Err>
fn get_number_of_event_indicators(&mut self) -> Result<usize, Fmi3Error>
Source§impl<'a, Tag> GetSet for Instance<'a, Tag>
impl<'a, Tag> GetSet for Instance<'a, Tag>
type ValueRef = <Fmi3Import as FmiImport>::ValueRef
Source§fn get_boolean(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [bool],
) -> Fmi3Status
fn get_boolean( &mut self, vrs: &[fmi3ValueReference], values: &mut [bool], ) -> Fmi3Status
Source§fn set_boolean(
&mut self,
vrs: &[fmi3ValueReference],
values: &[bool],
) -> Fmi3Status
fn set_boolean( &mut self, vrs: &[fmi3ValueReference], values: &[bool], ) -> Fmi3Status
Source§fn get_float32(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [f32],
) -> Fmi3Status
fn get_float32( &mut self, vrs: &[fmi3ValueReference], values: &mut [f32], ) -> Fmi3Status
Source§fn set_float32(
&mut self,
vrs: &[fmi3ValueReference],
values: &[f32],
) -> Fmi3Status
fn set_float32( &mut self, vrs: &[fmi3ValueReference], values: &[f32], ) -> Fmi3Status
Source§fn get_float64(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [f64],
) -> Fmi3Status
fn get_float64( &mut self, vrs: &[fmi3ValueReference], values: &mut [f64], ) -> Fmi3Status
Source§fn set_float64(
&mut self,
vrs: &[fmi3ValueReference],
values: &[f64],
) -> Fmi3Status
fn set_float64( &mut self, vrs: &[fmi3ValueReference], values: &[f64], ) -> Fmi3Status
Source§fn get_int8(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [i8],
) -> Fmi3Status
fn get_int8( &mut self, vrs: &[fmi3ValueReference], values: &mut [i8], ) -> Fmi3Status
Source§fn set_int8(&mut self, vrs: &[fmi3ValueReference], values: &[i8]) -> Fmi3Status
fn set_int8(&mut self, vrs: &[fmi3ValueReference], values: &[i8]) -> Fmi3Status
Source§fn get_int16(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [i16],
) -> Fmi3Status
fn get_int16( &mut self, vrs: &[fmi3ValueReference], values: &mut [i16], ) -> Fmi3Status
Source§fn set_int16(
&mut self,
vrs: &[fmi3ValueReference],
values: &[i16],
) -> Fmi3Status
fn set_int16( &mut self, vrs: &[fmi3ValueReference], values: &[i16], ) -> Fmi3Status
Source§fn get_int32(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [i32],
) -> Fmi3Status
fn get_int32( &mut self, vrs: &[fmi3ValueReference], values: &mut [i32], ) -> Fmi3Status
Source§fn set_int32(
&mut self,
vrs: &[fmi3ValueReference],
values: &[i32],
) -> Fmi3Status
fn set_int32( &mut self, vrs: &[fmi3ValueReference], values: &[i32], ) -> Fmi3Status
Source§fn get_int64(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [i64],
) -> Fmi3Status
fn get_int64( &mut self, vrs: &[fmi3ValueReference], values: &mut [i64], ) -> Fmi3Status
Source§fn set_int64(
&mut self,
vrs: &[fmi3ValueReference],
values: &[i64],
) -> Fmi3Status
fn set_int64( &mut self, vrs: &[fmi3ValueReference], values: &[i64], ) -> Fmi3Status
Source§fn get_uint8(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [u8],
) -> Fmi3Status
fn get_uint8( &mut self, vrs: &[fmi3ValueReference], values: &mut [u8], ) -> Fmi3Status
Source§fn set_uint8(&mut self, vrs: &[fmi3ValueReference], values: &[u8]) -> Fmi3Status
fn set_uint8(&mut self, vrs: &[fmi3ValueReference], values: &[u8]) -> Fmi3Status
Source§fn get_uint16(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [u16],
) -> Fmi3Status
fn get_uint16( &mut self, vrs: &[fmi3ValueReference], values: &mut [u16], ) -> Fmi3Status
Source§fn set_uint16(
&mut self,
vrs: &[fmi3ValueReference],
values: &[u16],
) -> Fmi3Status
fn set_uint16( &mut self, vrs: &[fmi3ValueReference], values: &[u16], ) -> Fmi3Status
Source§fn get_uint32(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [u32],
) -> Fmi3Status
fn get_uint32( &mut self, vrs: &[fmi3ValueReference], values: &mut [u32], ) -> Fmi3Status
Source§fn set_uint32(
&mut self,
vrs: &[fmi3ValueReference],
values: &[u32],
) -> Fmi3Status
fn set_uint32( &mut self, vrs: &[fmi3ValueReference], values: &[u32], ) -> Fmi3Status
Source§fn get_uint64(
&mut self,
vrs: &[fmi3ValueReference],
values: &mut [u64],
) -> Fmi3Status
fn get_uint64( &mut self, vrs: &[fmi3ValueReference], values: &mut [u64], ) -> Fmi3Status
Source§fn set_uint64(
&mut self,
vrs: &[fmi3ValueReference],
values: &[u64],
) -> Fmi3Status
fn set_uint64( &mut self, vrs: &[fmi3ValueReference], values: &[u64], ) -> Fmi3Status
fn get_string( &mut self, vrs: &[Self::ValueRef], values: &mut [CString], ) -> Result<(), Fmi3Error>
fn set_string( &mut self, vrs: &[Self::ValueRef], values: &[CString], ) -> Result<(), Fmi3Error>
Source§fn get_binary(
&mut self,
value_references: &[fmi3ValueReference],
value_buffers: &mut [&mut [u8]],
) -> Result<Vec<usize>, Fmi3Error>
fn get_binary( &mut self, value_references: &[fmi3ValueReference], value_buffers: &mut [&mut [u8]], ) -> Result<Vec<usize>, Fmi3Error>
Source§fn set_binary(
&mut self,
vrs: &[fmi3ValueReference],
values: &[&[u8]],
) -> Result<(), Fmi3Error>
fn set_binary( &mut self, vrs: &[fmi3ValueReference], values: &[&[u8]], ) -> Result<(), Fmi3Error>
Source§impl ModelExchange for Instance<'_, ME>
impl ModelExchange for Instance<'_, ME>
Source§fn enter_continuous_time_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
fn enter_continuous_time_mode(&mut self) -> Result<Fmi3Res, Fmi3Error>
This function must be called to change from Event Mode into Continuous-Time Mode in Model Exchange.
Source§fn completed_integrator_step(
&mut self,
no_set_fmu_state_prior: bool,
enter_event_mode: &mut bool,
terminate_simulation: &mut bool,
) -> Result<Fmi3Res, Fmi3Error>
fn completed_integrator_step( &mut self, no_set_fmu_state_prior: bool, enter_event_mode: &mut bool, terminate_simulation: &mut bool, ) -> Result<Fmi3Res, Fmi3Error>
crate::fmi3::schema::Fmi3ModelExchange::needs_completed_integrator_step =
true. Read moreSource§fn set_time(&mut self, time: f64) -> Result<Fmi3Res, Fmi3Error>
fn set_time(&mut self, time: f64) -> Result<Fmi3Res, Fmi3Error>
Source§fn get_continuous_states(
&mut self,
continuous_states: &mut [f64],
) -> Result<Fmi3Res, Fmi3Error>
fn get_continuous_states( &mut self, continuous_states: &mut [f64], ) -> Result<Fmi3Res, Fmi3Error>
Source§fn set_continuous_states(
&mut self,
states: &[f64],
) -> Result<Fmi3Res, Fmi3Error>
fn set_continuous_states( &mut self, states: &[f64], ) -> Result<Fmi3Res, Fmi3Error>
Source§fn get_continuous_state_derivatives(
&mut self,
derivatives: &mut [f64],
) -> Result<Fmi3Res, Fmi3Error>
fn get_continuous_state_derivatives( &mut self, derivatives: &mut [f64], ) -> Result<Fmi3Res, Fmi3Error>
Source§fn get_nominals_of_continuous_states(
&mut self,
nominals: &mut [f64],
) -> Result<Fmi3Res, Fmi3Error>
fn get_nominals_of_continuous_states( &mut self, nominals: &mut [f64], ) -> Result<Fmi3Res, Fmi3Error>
Source§impl<'a> ScheduledExecution for Instance<'a, SE>
impl<'a> ScheduledExecution for Instance<'a, SE>
Auto Trait Implementations§
impl<'a, Tag> Freeze for Instance<'a, Tag>
impl<'a, Tag> !RefUnwindSafe for Instance<'a, Tag>
impl<'a, Tag> !Send for Instance<'a, Tag>
impl<'a, Tag> !Sync for Instance<'a, Tag>
impl<'a, Tag> Unpin for Instance<'a, Tag>
impl<'a, Tag> !UnwindSafe for Instance<'a, Tag>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more