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)