| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(signal_t), | intent(inout) | :: | me |
interpolated value
function signal_v1d(me) result(val) class(signal_t), intent(inout) :: me real(dp) :: val(size(me%x)) !! interpolated value real(dp) :: time type(c_ptr) :: c_cfg time = me%sim%t + me%sim%dt if(associated(me%init_signal_ext) .and. .not.c_associated(me%sign_ptr)) then c_cfg = C_NULL_PTR if(.not. me%init_signal_ext(c_funloc(expose_state_to_ext_library),len(me%cfg_str), me%cfg_str, c_cfg, me%sign_ptr,& size(me%x))) return if(c_associated(me%sign_ptr)) then call c_f_procpointer(me%sign_ptr, me%val_fpt) me%val_cfg = c_cfg endif endif if (associated(me%val_fpt)) then call me%val_fpt(me%val_cfg, time, val) return endif do ! search for correct segment index starting from previous point: me%i if (time >= me%time(me%i + 1)) then me%i = me%i + 1 else if (time < me%time(me%i)) then if (me%i == 1) exit me%i = me%i - 1 else exit endif enddo val = time * me%gain(:,me%i) + me%offset(:,me%i) end function signal_v1d