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)