6 use fckit_log_module, 
only : log
    43 type(c_ptr), 
intent(in)            :: c_conf
    44 type(datetime), 
intent(inout)      :: vdate
    51 integer :: id_restart, iounit, io_status, layout(2)
    52 integer :: date_init(6), date(6), calendar_type
    53 integer(kind=c_int) :: idate, isecs
    55 character(len=255) :: datapath_in, datapath_ti
    56 character(len=255) :: filename_core
    57 character(len=255) :: filename_trcr
    58 character(len=255) :: filename_sfcd
    59 character(len=255) :: filename_sfcw
    60 character(len=255) :: filename_cplr
    62 character(len=20) :: sdate,validitydate
    63 character(len=1024)  :: buf
    67 character(len=64):: tracer_name
    68 integer :: ntracers, ntprog, nt, ierr
    70 integer :: print_read_info = 0
    72 integer :: read_crtm_surface
    76  filename_core = 
'fv_core.res.nc'    77  filename_trcr = 
'fv_tracer.res.nc'    78  filename_sfcd = 
'sfc_data.nc'    79  filename_sfcw = 
'srf_wnd.nc'    80  filename_cplr = 
'coupler.res'    82  if (config_element_exists(c_conf,
"filename_core")) 
then    83     filename_core = config_get_string(c_conf,len(filename_core),
"filename_core")
    85  if (config_element_exists(c_conf,
"filename_trcr")) 
then    86     filename_trcr = config_get_string(c_conf,len(filename_trcr),
"filename_trcr")
    88  if (config_element_exists(c_conf,
"filename_sfcd")) 
then    89     filename_sfcd = config_get_string(c_conf,len(filename_sfcd),
"filename_sfcd")
    91  if (config_element_exists(c_conf,
"filename_sfcw")) 
then    92     filename_sfcw = config_get_string(c_conf,len(filename_sfcw),
"filename_sfcw")
    94  if (config_element_exists(c_conf,
"filename_cplr")) 
then    95     filename_cplr = config_get_string(c_conf,len(filename_cplr),
"filename_cplr")
    98  datapath_in = config_get_string(c_conf,len(datapath_in),
"datapath_read")
    99  datapath_ti = config_get_string(c_conf,len(datapath_ti),
"datapath_tile")
   105               domain=geom%domain, position=north)
   107               domain=geom%domain, position=east)
   128  if (.not. state%hydrostatic) 
then   137  call restore_state(fv_restart, directory=trim(adjustl(datapath_ti)))
   152  call restore_state(tr_restart, directory=trim(adjustl(datapath_ti)))
   157  read_crtm_surface = 0
   158  if (config_element_exists(c_conf,
"read_crtm_surface")) 
then   159    read_crtm_surface = config_get_int(c_conf,
"read_crtm_surface")
   162  if (read_crtm_surface == 1) 
then   163    id_restart = 
register_restart_field( sf_restart, filename_sfcd, 
'slmsk' , state%slmsk , domain=geom%domain)
   164    id_restart = 
register_restart_field( sf_restart, filename_sfcd, 
'sheleg', state%sheleg, domain=geom%domain)
   166    id_restart = 
register_restart_field( sf_restart, filename_sfcd, 
'vtype' , state%vtype , domain=geom%domain)
   167    id_restart = 
register_restart_field( sf_restart, filename_sfcd, 
'stype' , state%stype , domain=geom%domain)
   168    id_restart = 
register_restart_field( sf_restart, filename_sfcd, 
'vfrac' , state%vfrac , domain=geom%domain)
   171    id_restart = 
register_restart_field( sf_restart, filename_sfcd, 
'snwdph', state%snwdph, domain=geom%domain)
   174    call restore_state(sf_restart, directory=trim(adjustl(datapath_ti)))
   177    id_restart = 
register_restart_field( sf_restart, filename_sfcw, 
'u_srf' , state%u_srf , domain=geom%domain)
   178    id_restart = 
register_restart_field( sf_restart, filename_sfcw, 
'v_srf' , state%v_srf , domain=geom%domain)
   180    call restore_state(sf_restart, directory=trim(adjustl(datapath_ti)))
   182    state%havecrtmfields = .true.
   184    state%havecrtmfields = .false.
   185    state%slmsk  = 0.0_kind_real
   186    state%sheleg = 0.0_kind_real
   187    state%tsea   = 0.0_kind_real
   188    state%vtype  = 0.0_kind_real
   189    state%stype  = 0.0_kind_real
   190    state%vfrac  = 0.0_kind_real
   191    state%stc    = 0.0_kind_real
   192    state%smc    = 0.0_kind_real
   193    state%u_srf  = 0.0_kind_real
   194    state%u_srf  = 0.0_kind_real
   195    state%v_srf  = 0.0_kind_real
   196    state%f10m   = 0.0_kind_real
   203  sdate = config_get_string(c_conf,len(sdate),
"date")
   205  open(iounit, file=trim(adjustl(datapath_in))//filename_cplr, form=
'formatted')
   206  read(iounit, 
'(i6)')  calendar_type
   207  read(iounit, 
'(6i6)') date_init
   208  read(iounit, 
'(6i6)') date
   211  state%date_init = date_init
   212  state%calendar_type = calendar_type
   213  idate=date(1)*10000+date(2)*100+date(3)
   214  isecs=date(4)*3600+date(5)*60+date(6)
   216  call datetime_from_ifs(vdate, idate, isecs)
   217  call datetime_to_string(vdate, validitydate)
   219  call log%info(
"read_file: validity date: "//trim(validitydate)) 
   220  call log%info(
"read_file: expected validity date: "//trim(sdate)) 
   230 use mpp_mod, 
only: mpp_pe, mpp_root_pe
   237 type(c_ptr), 
intent(in)            :: c_conf
   238 type(datetime), 
intent(inout)      :: vdate
   244 integer :: id_restart, iounit, io_status
   245 integer :: date_init(6), date(6), calendar_type, layout(2)
   246 integer(kind=c_int) :: idate, isecs
   248 character(len=64) :: filename_core
   249 character(len=64) :: filename_trcr
   250 character(len=64) :: filename_cplr
   251 character(len=64) :: datefile
   253 character(len=20) :: sdate,validitydate
   255 character(len=255) :: datapath_out
   260  datapath_out = 
"Data/"   261  if (config_element_exists(c_conf,
"datapath_write")) 
then   262     datapath_out = config_get_string(c_conf,len(datapath_out),
"datapath_write")
   268  call datetime_to_ifs(vdate, idate, isecs)
   269  date(1) = idate/10000
   270  date(2) = idate/100 - date(1)*100
   271  date(3) = idate - (date(1)*10000 + date(2)*100)
   273  date(5) = (isecs - date(4)*3600)/60
   274  date(6) = isecs - (date(4)*3600 + date(5)*60)
   279  filename_core = 
'fv_core.res.nc'   280  if (config_element_exists(c_conf,
"filename_core")) 
then   281    filename_core = config_get_string(c_conf,len(filename_core),
"filename_core")
   284  filename_trcr = 
'fv_tracer.res.nc'   285  if (config_element_exists(c_conf,
"filename_trcr")) 
then   286    filename_trcr = config_get_string(c_conf,len(filename_trcr),
"filename_trcr")
   289  filename_cplr = 
'coupler.res'   290  if (config_element_exists(c_conf,
"filename_cplr")) 
then   291    filename_cplr = config_get_string(c_conf,len(filename_cplr),
"filename_cplr")
   295  write(datefile,
'(I4,I0.2,I0.2,A1,I0.2,I0.2,I0.2,A1)') date(1),date(2),date(3),
".",date(4),date(5),date(6),
"."   296  filename_core = trim(datefile)//trim(filename_core)
   297  filename_trcr = trim(datefile)//trim(filename_trcr)
   298  filename_cplr = trim(datefile)//trim(filename_cplr)
   305                                       domain=geom%domain,position=north )
   307                                       domain=geom%domain,position=east )
   328  if (.not. state%hydrostatic) 
then   343  call save_restart(fv_restart, directory=trim(adjustl(datapath_out))//
'RESTART')
   358  call save_restart(tr_restart, directory=trim(adjustl(datapath_out))//
'RESTART')
   365  if (mpp_pe() == mpp_root_pe()) 
then   366     print *,
'write_file: date model init = ',state%date_init
   367     print *,
'write_file: date model now  = ',state%date
   368     print *,
'write_file: date vdate      = ',date
   369     open(iounit, file=trim(adjustl(datapath_out))//
'RESTART/'//trim(adjustl(filename_cplr)), form=
'formatted')
   370     write( iounit, 
'(i6,8x,a)' ) state%calendar_type, &
   371          '(Calendar: no_calendar=0, thirty_day_months=1, julian=2, gregorian=3, noleap=4)'   372     write( iounit, 
'(6i6,8x,a)' )date, &
   373           'Model start time:   year, month, day, hour, minute, second'   374     write( iounit, 
'(6i6,8x,a)' )date, &
   375           'Current model time: year, month, day, hour, minute, second'   391 type(c_ptr),         
intent(in)    :: c_conf
   392 type(datetime),      
intent(inout) :: vdate
   394 character(len=255) :: datapath
   395 character(len=255) :: filename_eta
   397 integer :: ncid, ncstat, dimid, varid
   399 integer :: im, jm, lm, nm, l
   402 integer :: intdate, inttime
   403 character(len=8) :: cdate
   404 character(len=6) :: ctime
   405 integer(kind=c_int) :: idate, isecs
   406 character(len=20) :: sdate, validitydate
   408 integer, 
allocatable :: istart(:), icount(:)
   411 logical :: tiledimension = .false.
   413 integer :: isc,iec,jsc,jec
   415 character(len=20)  :: var
   427  filename_eta = 
'GEOS.bkg.eta.nc4'   429  if (config_element_exists(c_conf,
"filename_eta")) 
then   430     filename_eta = config_get_string(c_conf,len(filename_eta),
"filename_eta")
   433  datapath = config_get_string(c_conf,len(datapath),
"datapath_read")
   435  filename_eta  = trim(datapath)//trim(
"/")//trim(filename_eta )
   438  ncstat = nf90_open(filename_eta, nf90_nowrite, ncid)
   439  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   442  ncstat = nf90_inq_dimid(ncid, 
"lon", dimid)
   443  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   444  ncstat = nf90_inquire_dimension(ncid, dimid, len = im)
   445  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   447  ncstat = nf90_inq_dimid(ncid, 
"lat", dimid)
   448  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   449  ncstat = nf90_inquire_dimension(ncid, dimid, len = jm)
   450  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   452  ncstat = nf90_inq_dimid(ncid, 
"lev", dimid)
   453  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   454  ncstat = nf90_inquire_dimension(ncid, dimid, len = lm)
   455  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   457  ncstat = nf90_inq_dimid(ncid, 
"time", dimid)
   458  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   459  ncstat = nf90_inquire_dimension(ncid, dimid, len = nm)
   460  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   471  ncstat = nf90_inq_varid(ncid, 
"time", varid)
   472  if(ncstat /= nf90_noerr) print *, 
"time: "//trim(nf90_strerror(ncstat))
   473  ncstat = nf90_get_att(ncid, varid, 
"begin_date", intdate)
   474  if(ncstat /= nf90_noerr) print *, 
"time: "//trim(nf90_strerror(ncstat))
   475  ncstat = nf90_get_att(ncid, varid, 
"begin_time", inttime)
   476  if(ncstat /= nf90_noerr) print *, 
"time: "//trim(nf90_strerror(ncstat))
   479  write(cdate,
"(I0.8)") intdate
   480  write(ctime,
"(I0.6)") inttime
   483  read(cdate(1:4),*) date(1)
   484  read(cdate(5:6),*) date(2)
   485  read(cdate(7:8),*) date(3)
   486  read(ctime(1:2),*) date(4)
   487  read(ctime(3:4),*) date(5)
   488  read(ctime(5:6),*) date(6)
   491  idate = date(1)*10000 + date(2)*100 + date(3)
   492  isecs = date(4)*3600  + date(5)*60  + date(6)
   494  call datetime_from_ifs(vdate, idate, isecs)
   495  call datetime_to_string(vdate, validitydate)
   498  sdate = config_get_string(c_conf,len(sdate),
"date")
   499  call log%info(
"read_file: validity date: "//trim(validitydate)) 
   500  call log%info(
"read_file: expected validity date: "//trim(sdate)) 
   503  if ( im /= state%npx-1 .or. lm /= state%npz) 
then   504    call abor1_ftn(
"GEOS restarts: restart dimension not compatible with geometry")
   508  if ( (im == state%npx-1) .and. (jm == 6*(state%npy-1) ) ) 
then   509    tiledimension = .false.
   510    tileoff = (state%ntile-1)*(jm/state%ntiles)
   512    tiledimension = .true.
   514    call abor1_ftn(
"GEOS restarts: tile dimension in file not done yet")
   520  deallocate(istart,icount)
   522  if (.not. tiledimension) 
then   526    istart(2) = tileoff + jsc
   530    icount(1) = iec-isc+1
   531    icount(2) = jec-jsc+1
   532    icount(3) = state%npz
   539    istart(3) = state%ntile
   543    icount(1) = iec-isc+1
   544    icount(2) = jec-jsc+1
   546    icount(4) = state%npz
   551  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   552  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   553  ncstat = nf90_get_var(ncid, varid, state%ud(isc:iec,jsc:jec,:), istart, icount)
   554  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   557  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   558  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   559  ncstat = nf90_get_var(ncid, varid, state%vd(isc:iec,jsc:jec,:), istart, icount)
   560  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   563  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   564  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   565  ncstat = nf90_get_var(ncid, varid, state%ua(isc:iec,jsc:jec,:), istart, icount)
   566  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   569  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   570  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   571  ncstat = nf90_get_var(ncid, varid, state%va(isc:iec,jsc:jec,:), istart, icount)
   572  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   575  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   576  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   577  ncstat = nf90_get_var(ncid, varid, state%t(isc:iec,jsc:jec,:), istart, icount)
   578  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   581  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   582  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   583  ncstat = nf90_get_var(ncid, varid, state%delp(isc:iec,jsc:jec,:), istart, icount)
   584  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   587  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   588  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   589  ncstat = nf90_get_var(ncid, varid, state%q(isc:iec,jsc:jec,:), istart, icount)
   590  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   593  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   594  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   595  ncstat = nf90_get_var(ncid, varid, state%qi(isc:iec,jsc:jec,:), istart, icount)
   596  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   599  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   600  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   601  ncstat = nf90_get_var(ncid, varid, state%ql(isc:iec,jsc:jec,:), istart, icount)
   602  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   605  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   606  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   607  ncstat = nf90_get_var(ncid, varid, state%o3(isc:iec,jsc:jec,:), istart, icount)
   608  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   611  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   612  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   613  ncstat = nf90_get_var(ncid, varid, state%qls(isc:iec,jsc:jec,:), istart, icount)
   614  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   617  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   618  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   619  ncstat = nf90_get_var(ncid, varid, state%qcn(isc:iec,jsc:jec,:), istart, icount)
   620  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   623  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   624  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   625  ncstat = nf90_get_var(ncid, varid, state%cfcn(isc:iec,jsc:jec,:), istart, icount)
   626  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   630  deallocate(istart,icount)
   632  if (.not. tiledimension) 
then   636    istart(2) = tileoff + jsc
   639    icount(1) = iec-isc+1
   640    icount(2) = jec-jsc+1
   647    istart(3) = state%ntile
   650    icount(1) = iec-isc+1
   651    icount(2) = jec-jsc+1
   657  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   658  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   659  ncstat = nf90_get_var(ncid, varid, state%phis(isc:iec,jsc:jec), istart, icount)
   660  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   663  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   664  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   665  ncstat = nf90_get_var(ncid, varid, state%frland(isc:iec,jsc:jec), istart, icount)
   666  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   669  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   670  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   671  ncstat = nf90_get_var(ncid, varid, state%frocean(isc:iec,jsc:jec), istart, icount)
   672  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   675  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   676  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   677  ncstat = nf90_get_var(ncid, varid, state%kcbl(isc:iec,jsc:jec), istart, icount)
   678  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   681  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   682  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   683  ncstat = nf90_get_var(ncid, varid, state%ts(isc:iec,jsc:jec), istart, icount)
   684  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   687  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   688  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   689  ncstat = nf90_get_var(ncid, varid, state%khl(isc:iec,jsc:jec), istart, icount)
   690  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   693  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   694  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   695  ncstat = nf90_get_var(ncid, varid, state%khu(isc:iec,jsc:jec), istart, icount)
   696  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   699  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   700  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   701  ncstat = nf90_get_var(ncid, varid, state%varflt(isc:iec,jsc:jec), istart, icount)
   702  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   705  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   706  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   707  ncstat = nf90_get_var(ncid, varid, state%ustar(isc:iec,jsc:jec), istart, icount)
   708  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   711  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   712  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   713  ncstat = nf90_get_var(ncid, varid, state%bstar(isc:iec,jsc:jec), istart, icount)
   714  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   717  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   718  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   719  ncstat = nf90_get_var(ncid, varid, state%zpbl(isc:iec,jsc:jec), istart, icount)
   720  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   723  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   724  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   725  ncstat = nf90_get_var(ncid, varid, state%cm(isc:iec,jsc:jec), istart, icount)
   726  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   729  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   730  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   731  ncstat = nf90_get_var(ncid, varid, state%ct(isc:iec,jsc:jec), istart, icount)
   732  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   735  ncstat = nf90_inq_varid(ncid, trim(var), varid)
   736  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   737  ncstat = nf90_get_var(ncid, varid, state%cq(isc:iec,jsc:jec), istart, icount)
   738  if(ncstat /= nf90_noerr) print *, trim(var)//trim(nf90_strerror(ncstat))
   742  ncstat = nf90_close(ncid)
   743  if(ncstat /= nf90_noerr) print *, trim(nf90_strerror(ncstat))
   745  deallocate(istart,icount)
   759 type(c_ptr), 
intent(in)            :: c_conf
   760 type(datetime), 
intent(inout)      :: vdate
 
integer, parameter, public model_atmos
 
subroutine, public free_restart_type(fileObj)
 
Fortran derived type to hold FV3JEDI state. 
 
subroutine, public read_fms_restart(geom, state, c_conf, vdate)
 
subroutine, public get_number_tracers(model, num_tracers, num_prog, num_diag, num_family)
 
Fortran derived type to hold geometry data for the FV3JEDI model. 
 
subroutine, public read_geos_restart(state, c_conf, vdate)
 
subroutine, public set_tracer_profile(model, n, tracer, err_msg)
 
subroutine, public write_fms_restart(geom, state, c_conf, vdate)
 
Utilities for state for the FV3JEDI model. 
 
Fortran module handling geometry for the FV3 model. 
 
subroutine, public get_tracer_names(model, n, name, longname, units, err_msg)
 
integer, parameter, public kind_real
 
subroutine, public write_geos_restart(geom, state, c_conf, vdate)
 
subroutine, public save_restart(fileObj, time_stamp, directory, append, time_level)