@@ -395,7 +395,7 @@ subroutine shr_strdata_init(sdat, model_clock, rc)
395395 call shr_sys_abort(subName// " ERROR: file does not exist: " // trim (fileName))
396396 end if
397397 endif
398- if (filename /= ' none' ) then
398+ if (filename /= ' none' ) then
399399 sdat% pstrm(ns)% stream_mesh = ESMF_MeshCreate(trim (filename), fileformat= ESMF_FILEFORMAT_ESMFMESH, rc= rc)
400400 endif
401401 if (ChkErr(rc,__LINE__,u_FILE_u)) return
@@ -698,15 +698,13 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc)
698698 logical :: checkflag = .false.
699699 integer :: npes
700700 integer :: my_task
701+ integer :: nstreams
701702 real (r8 ) ,parameter :: solZenMin = 0.001_r8 ! minimum solar zenith angle
702703 integer ,parameter :: tadj = 2
703704 character (len=* ) ,parameter :: timname = " _strd_adv"
704705 character (* ) ,parameter :: subname = " (shr_strdata_advance) "
705706 character (* ) ,parameter :: F00 = " ('(shr_strdata_advance) ',a)"
706707 character (* ) ,parameter :: F01 = " ('(shr_strdata_advance) ',a,a,i4,2(f10.5,2x))"
707- real (r8 ), pointer :: dataptr_temp1(:)
708- real (r8 ), pointer :: dataptr_temp2(:)
709- integer :: nstreams
710708 !- ------------------------------------------------------------------------------
711709
712710 rc = ESMF_SUCCESS
@@ -806,21 +804,27 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc)
806804 call shr_cal_timeSet(timeUB,sdat% pstrm(ns)% ymdUB,0 ,sdat% stream(ns)% calendar,rc= rc)
807805 if (ChkErr(rc,__LINE__,u_FILE_u)) return
808806 timeint = timeUB- timeLB
809- call ESMF_TimeIntervalGet(timeint,StartTimeIn= timeLB,d= dday)
807+ call ESMF_TimeIntervalGet(timeint, StartTimeIn= timeLB, d= dday)
810808 if (ChkErr(rc,__LINE__,u_FILE_u)) return
811809 dtime = abs (real (dday,r8 ) + real (sdat% pstrm(ns)% todUB- sdat% pstrm(ns)% todLB,r8 )/ shr_const_cDay)
812810
813811 sdat% pstrm(ns)% dtmin = min (sdat% pstrm(ns)% dtmin,dtime)
814812 sdat% pstrm(ns)% dtmax = max (sdat% pstrm(ns)% dtmax,dtime)
813+
815814 if ((sdat% pstrm(ns)% dtmax/ sdat% pstrm(ns)% dtmin) > sdat% stream(ns)% dtlimit) then
816815 if (sdat% masterproc) then
817- write (sdat% logunit,* ) trim (subname),' ERROR: for stream ' ,n
818- write (sdat% logunit,* ) trim (subName),' ERROR: dt limit1 ' ,&
819- sdat% pstrm(ns)% dtmax, sdat% pstrm(ns)% dtmin, sdat% stream(ns)% dtlimit
820- write (sdat% logunit,* ) trim (subName),' ERROR: dt limit2 ' , &
816+ write (sdat% logunit,* ) trim (subname),' ERROR: for stream ' ,ns
817+ write (sdat% logunit,* ) trim (subName),' ERROR: dtime, dtmax, dtmin, dtlimit = ' ,&
818+ dtime, sdat% pstrm(ns)% dtmax, sdat% pstrm(ns)% dtmin, sdat% stream(ns)% dtlimit
819+ write (sdat% logunit,* ) trim (subName),' ERROR: ymdLB, todLB, ymdUB, todUB = ' , &
821820 sdat% pstrm(ns)% ymdLB, sdat% pstrm(ns)% todLB, sdat% pstrm(ns)% ymdUB, sdat% pstrm(ns)% todUB
822821 end if
823- call shr_sys_abort(trim (subName)// ' ERROR dt limit for stream' )
822+ write (6 ,* ) trim (subname),' ERROR: for stream ' ,ns
823+ write (6 ,* ) trim (subName),' ERROR: dtime, dtmax, dtmin, dtlimit = ' ,&
824+ dtime, sdat% pstrm(ns)% dtmax, sdat% pstrm(ns)% dtmin, sdat% stream(ns)% dtlimit
825+ write (6 ,* ) trim (subName),' ERROR: ymdLB, todLB, ymdUB, todUB = ' , &
826+ sdat% pstrm(ns)% ymdLB, sdat% pstrm(ns)% todLB, sdat% pstrm(ns)% ymdUB, sdat% pstrm(ns)% todUB
827+ call shr_sys_abort(trim (subName)// ' ERROR dt limit for stream, see atm.log output' )
824828 endif
825829 endif
826830
@@ -1256,8 +1260,6 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, &
12561260
12571261 lsize = size (dataptr)
12581262 do nf = 1 ,size (fldlist_stream)
1259- call dshr_fldbun_getfieldN(fldbun_model, nf, field_dst, rc= rc)
1260- if (chkerr(rc,__LINE__,u_FILE_u)) return
12611263 rcode = pio_inq_varid(pioid, trim (fldlist_stream(nf)), varid)
12621264 ! determine type of the variable
12631265 rcode = pio_inq_vartype(pioid, varid, pio_iovartype)
@@ -1357,16 +1359,23 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, &
13571359 call shr_sys_abort(subName// " ERROR: only double, real and short types are supported for stream read" )
13581360 end if
13591361
1360- if (associated (dataptr2d_src) .and. trim (fldlist_model(nf)) .eq. uname) then
1362+ if (associated (dataptr2d_src) .and. trim (fldlist_model(nf)) .eq. uname) then
13611363 ! save in dataptr2d_src
13621364 dataptr2d_src(1 ,:) = dataptr(:)
1363- elseif (associated (dataptr2d_src) .and. trim (fldlist_model(nf)) .eq. vname) then
1365+ else if (associated (dataptr2d_src) .and. trim (fldlist_model(nf)) .eq. vname) then
1366+ ! save in dataptr2d_src
13641367 dataptr2d_src(2 ,:) = dataptr(:)
13651368 else if (pio_iodesc_set) then
1369+ ! regrid the data
1370+ call dshr_fldbun_getfieldN(fldbun_model, nf, field_dst, rc= rc)
1371+ if (chkerr(rc,__LINE__,u_FILE_u)) return
13661372 call ESMF_FieldRegrid(sdat% pstrm(ns)% field_stream, field_dst, routehandle= sdat% pstrm(ns)% routehandle, &
13671373 termorderflag= ESMF_TERMORDER_SRCSEQ, checkflag= .false. , zeroregion= ESMF_REGION_TOTAL, rc= rc)
13681374 if (chkerr(rc,__LINE__,u_FILE_u)) return
13691375 else
1376+ ! fill the data
1377+ call dshr_fldbun_getfieldN(fldbun_model, nf, field_dst, rc= rc)
1378+ if (chkerr(rc,__LINE__,u_FILE_u)) return
13701379 call ESMF_FieldFill(field_dst, dataFillScheme= " const" , const1= dataptr(1 ), rc= rc)
13711380 if (chkerr(rc,__LINE__,u_FILE_u)) return
13721381 endif
0 commit comments