Template:CMI Example CMI run Fortran
From CSDMS
! Insert-Code-Here {edu.csdms.models.LTRANS.CMI_run} (CMI_run method)
type(edu_csdms_ports_CMIPort_t) :: ocean_port
type(edu_csdms_tools_IRFPortQueue_t) :: port_queue
type(edu_csdms_models_LTRANS_wrap) :: dp
type(sidl__array) :: return_sidl_array
type(sidl__array) :: return_sidl_array2
integer :: long_var_names_array_size
integer :: i
logical :: isfirstTimeStep=.true.
call edu_csdms_models_LTRANS__get_data_m(self, dp)
dp%d_private_data%cmi_status = 'U'
port_queue = dp%d_private_data%irf_port_queue
print *, "LTRANS_CMI> Run all the connected ports for current timestep: ", time_interval
call run_ports(port_queue, time_interval, exception)
call get_cmi_port(port_queue, "Ocean", ocean_port, exception)
! Call get values of ROMS component
print *, "LTRANS_CMI> Get values of ROMS for timestep ", time_interval
long_var_names_array_size = SIZE(dp%d_private_data%long_var_names)
do i = 1, 7
call flush()
print *, "LTRANS_CMI> Getting Value for ", trim(dp%d_private_data%long_var_names(i)), ", value for timestep ", time_interval
call CMI_get_values(ocean_port, TRIM(dp%d_private_data%long_var_names(i)), return_sidl_array, exception)
call flush()
print *, "LTRANS_CMI> Setting Value for ", trim(dp%d_private_data%long_var_names(i)), ", value for timestep ", time_interval
call LTR_CMI_set_valuespoyw79p49f_mi(self, TRIM(dp%d_private_data%long_var_names(i)), return_sidl_array, exception)
end do
if(isfirstTimeStep)then
print *, 'ltrans bmi> Getting values to get the node depth'
do i = 8, long_var_names_array_size
call flush()
print *, "LTRANS_CMI> Getting Value for ", trim(dp%d_private_data%long_var_names(i)), ", value for timestep ", time_interval
call CMI_get_values(ocean_port, TRIM(dp%d_private_data%long_var_names(i)), return_sidl_array, exception)
call flush()
print *, "LTRANS_CMI> Setting Value for ", trim(dp%d_private_data%long_var_names(i)), ", value for timestep ", time_interval
call LTR_CMI_set_valuespoyw79p49f_mi(self, TRIM(dp%d_private_data%long_var_names(i)), return_sidl_array, exception)
end do
isfirstTimeStep=.false.
end if
!
call ltrans_update(time_interval)