module streams_exp use shr_kind_mod, only : SHR_KIND_CS, SHR_KIND_CL, SHR_KIND_CX use shr_sys_mod, only : shr_sys_abort use shr_file_mod, only : shr_file_getUnit, shr_file_freeUnit use shr_stream_mod implicit none private public streams_exp_init public streams_exp_set public streams_exp_write_strm_txt public is_streams_expected public streams_exp_data integer, public, parameter :: maxFiles = 2000 type streams_exp_data character(SHR_KIND_CL) :: dataSource character(SHR_KIND_CL) :: filePath character(SHR_KIND_CX) :: fldListFile character(SHR_KIND_CX) :: fldListModel character(SHR_KIND_CL) :: domFilePath character(SHR_KIND_CL) :: domFileName character(SHR_KIND_CL) :: domTvarName character(SHR_KIND_CL) :: domXvarName character(SHR_KIND_CL) :: domYvarName character(SHR_KIND_CL) :: domAreaName character(SHR_KIND_CL) :: domMaskName integer :: nfiles character(SHR_KIND_CL) :: filenames(maxFiles) end type streams_exp_data contains subroutine streams_exp_init( streams_exp ) implicit none type(streams_exp_data), intent(OUT) :: streams_exp integer :: i streams_exp%dataSource = "dataSource" streams_exp%filePath = "filePath/" streams_exp%fldListFile = "T:U" streams_exp%fldListModel = "Temp:Wind_u" streams_exp%domFilePath = "domFilePath/" streams_exp%domFileName = "domFileName" streams_exp%domTvarName = "time" streams_exp%domXvarName = "xc" streams_exp%domYvarName = "yc" streams_exp%domAreaName = "area" streams_exp%domMaskName = "mask" streams_exp%nfiles = 1 do i = 1, streams_exp%nfiles write(streams_exp%filenames(i), '(a,i2.2)') "filename", i end do end subroutine streams_exp_init subroutine streams_exp_set( streams_exp, datasource, filePath, fldListfile, & fldListModel, domFilePath, domFileName, domTvarName, & domXvarName, domYvarName, domAreaName, domMaskName, & nfiles, filenames ) implicit none type(streams_exp_data), intent(INOUT) :: streams_exp character(*), intent(IN), optional :: dataSource character(*), intent(IN), optional :: filePath character(*), intent(IN), optional :: fldListFile character(*), intent(IN), optional :: fldListModel character(*), intent(IN), optional :: domFilePath character(*), intent(IN), optional :: domFileName character(*), intent(IN), optional :: domTvarName character(*), intent(IN), optional :: domXvarName character(*), intent(IN), optional :: domYvarName character(*), intent(IN), optional :: domAreaName character(*), intent(IN), optional :: domMaskName integer , intent(IN), optional :: nfiles character(*), intent(IN), optional :: filenames(:) integer :: i if ( present(dataSource) ) streams_exp%dataSource = datasource if ( present(filePath) ) streams_exp%filePath = filePath if ( present(fldListFile) ) streams_exp%fldListFile = fldListFile if ( present(fldListModel) ) streams_exp%fldListModel = fldListModel if ( present(domFilePath) ) streams_exp%domFilePath = domFilePath if ( present(domFileName) ) streams_exp%domFileName = domFileName if ( present(domTvarName) ) streams_exp%domTvarName = domTvarName if ( present(domXvarName) ) streams_exp%domXvarName = domXvarName if ( present(domYvarName) ) streams_exp%domYvarName = domYvarName if ( present(domAreaName) ) streams_exp%domAreaName = domAreaName if ( present(domMaskName) ) streams_exp%domMaskName = domMaskName if ( present(nfiles) .and. present(filenames) )then streams_exp%nfiles = nfiles do i = 1, streams_exp%nfiles streams_exp%filenames(i) = filenames(i) end do end if end subroutine streams_exp_set subroutine streams_exp_write_strm_txt( stream_filename, streams_exp ) use shr_string_mod, only : shr_string_listGetNum, shr_string_listGetName use shr_sys_mod, only : shr_sys_system implicit none character(SHR_KIND_CL), intent(IN) :: stream_filename type(streams_exp_data), intent(IN) :: streams_exp integer :: unit, n, rcode, nfModel, nfFile character(SHR_KIND_CS) :: varModel, varFile character(*), parameter :: sub = "write_streams_txt" unit = shr_file_getUnit( ) write(*,*) "Write streams text file out to: ", trim(stream_filename) open( unit, file=stream_filename, status="unknown") write(unit,*) "" write(unit,*) " ", trim(streams_exp%dataSource) write(unit,*) "" write(unit,*) "" write(unit,*) " " write(unit,*) " ", trim(streams_exp%domTvarName), " time" write(unit,*) " ", trim(streams_exp%domXvarName), " lon" write(unit,*) " ", trim(streams_exp%domYvarName), " lat" write(unit,*) " ", trim(streams_exp%domAreaName), " area" write(unit,*) " ", trim(streams_exp%domMaskName), " mask" write(unit,*) " " write(unit,*) " " write(unit,*) " ", trim(streams_exp%domFilePath) write(unit,*) " " write(unit,*) " " write(unit,*) " ", trim(streams_exp%domFileName) write(unit,*) " " write(unit,*) "" write(unit,*) "" write(unit,*) " " nfModel = shr_string_listGetNum( streams_exp%fldListModel ) nfFile = shr_string_listGetNum( streams_exp%fldListFile ) do n = 1, max( nfModel, nfFile ) if ( n > nfFile ) then varFile = " " else call shr_string_listGetName(streams_exp%fldListFile, n, varFile ) end if if ( n > nfModel ) then varModel = " " else call shr_string_listGetName(streams_exp%fldListModel, n, varModel ) end if write(unit,*) & " ", trim(varFile), " ", & " ", trim(varModel) end do write(unit,*) " " write(unit,*) " " write(unit,'(A,A)') " ", trim(streams_exp%FilePath) write(unit,*) " " write(unit,*) " " do n = 1, streams_exp%nfiles write(unit,*) & " ", trim(streams_exp%filenames(n)) end do write(unit,*) " " write(unit,*) "" close(unit) call shr_file_freeUnit(unit) call shr_sys_system( "cat "//trim(stream_filename), rcode ) end subroutine streams_exp_write_strm_txt logical function is_streams_expected( stream, streams_exp ) implicit none type(shr_stream_streamType) ,intent(in) :: stream ! stream in question type(streams_exp_data), intent(IN) :: streams_exp character(SHR_KIND_CL) :: dataSource character(SHR_KIND_CL) :: filePath character(SHR_KIND_CX) :: fldListFile character(SHR_KIND_CX) :: fldListModel character(SHR_KIND_CL) :: domFilePath character(SHR_KIND_CL) :: domFileName character(SHR_KIND_CL) :: domTvarName character(SHR_KIND_CL) :: domXvarName character(SHR_KIND_CL) :: domYvarName character(SHR_KIND_CL) :: domAreaName character(SHR_KIND_CL) :: domMaskName character(SHR_KIND_CL) :: filen, file_next, file_first integer :: n is_streams_expected = .true. call shr_stream_getFileFieldList( stream, fldlistFile ) call shr_stream_getModelFieldList( stream, fldlistModel ) call shr_stream_getFilePath( stream, filePath ) call shr_stream_getDataSource( stream, dataSource ) call shr_stream_getDomainInfo( stream, domFilePath, domfileName, & domTvarName, domXvarName, domYvarName, & dommaskName, domareaName) if ( trim(fldListFile) /= trim(streams_exp%fldListFile) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "fldListFile different" if ( .not. is_streams_expected )then write(*,*) trim(fldListFile) write(*,*) trim(streams_exp%fldListFile) end if if ( trim(fldListModel) /= trim(streams_exp%fldListModel) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "fldListModel different" if ( trim(filePath) /= trim(streams_exp%filePath) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "filePath different" if ( trim(dataSource) /= trim(streams_exp%dataSource) ) & is_streams_expected = .false. if ( trim(domFilePath) /= trim(streams_exp%domFilePath) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "domfilePath different" if ( trim(domFileName) /= trim(streams_exp%domFileName) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "domfileName different" if ( trim(domTvarName) /= trim(streams_exp%domTvarName) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "domTvarName different" if ( trim(domXvarName) /= trim(streams_exp%domXvarName) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "domXvarName different" if ( trim(domYvarName) /= trim(streams_exp%domYvarName) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "domYvarName different" if ( trim(domAreaName) /= trim(streams_exp%domAreaName) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "domAreaName different" if ( trim(domMaskName) /= trim(streams_exp%domMaskName) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "domMaskName different" n = 1 call shr_stream_getFirstFileName( stream, filen ) file_first = filen if ( trim(filen) /= trim(streams_exp%filenames(1)) ) is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "first file different" do while( n < streams_exp%nfiles ) n = n + 1 call shr_stream_getNextFileName( stream, filen, file_next ) if ( trim(file_next) /= trim(streams_exp%filenames(n)) ) & is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "next file different" if ( trim(file_next) == trim(file_first) ) is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "Too few files" filen = file_next end do call shr_stream_getNextFileName( stream, filen, file_next ) if ( trim(file_next) /= trim(file_first) ) is_streams_expected = .false. if ( .not. is_streams_expected ) write(*,*) "too many files" end function is_streams_expected end module streams_exp program test_shr_streams use shr_kind_mod use shr_string_mod use shr_sys_mod use shr_stream_mod use streams_exp use test_mod implicit none type(shr_stream_streamType), pointer :: streams(:) ! stream in question type(shr_stream_streamType), pointer :: streams2(:) ! stream in question integer :: yearFirst, yearLast, yearAlign character(SHR_KIND_CL) :: stream_filename = "sfile.txt" character(SHR_KIND_CL) :: rest_filename = "sfile_rest.nc" character(SHR_KIND_CL) :: test_descrip, filenames1(maxFiles) type(streams_exp_data) :: stream_exp ! stream in question integer :: series, n, i integer, pointer :: expected(:), value(:) character(SHR_KIND_CS) :: clmncep(12) = (/ & "clmforc.Qian.c2006.T62.Solr.2003-01.nc", & "clmforc.Qian.c2006.T62.Solr.2003-02.nc", & "clmforc.Qian.c2006.T62.Solr.2003-03.nc", & "clmforc.Qian.c2006.T62.Solr.2003-04.nc", & "clmforc.Qian.c2006.T62.Solr.2003-05.nc", & "clmforc.Qian.c2006.T62.Solr.2003-06.nc", & "clmforc.Qian.c2006.T62.Solr.2003-07.nc", & "clmforc.Qian.c2006.T62.Solr.2003-08.nc", & "clmforc.Qian.c2006.T62.Solr.2003-09.nc", & "clmforc.Qian.c2006.T62.Solr.2003-10.nc", & "clmforc.Qian.c2006.T62.Solr.2003-11.nc", & "clmforc.Qian.c2006.T62.Solr.2003-12.nc" & /) character(SHR_KIND_CS) :: clmncepTPQW(12) = (/ & "clmforc.Qian.c2006.T62.TPQW.2003-01.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-02.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-03.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-04.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-05.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-06.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-07.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-08.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-09.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-10.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-11.nc", & "clmforc.Qian.c2006.T62.TPQW.2003-12.nc" & /) character(SHR_KIND_CS) :: filenames2(12) integer :: mDateIn, SecIn, year, month, rcode, exp_int, nfiles integer :: mDateLB, dDateLB, secLB, n_lb integer :: mDateUB, dDateUB, secUB, n_ub character(SHR_KIND_CL) :: fileLB, fileUB integer :: num_series, num_fail integer, parameter :: bogus_TEST = 1, & CLMNCEP_TEST = 2, & CLMNCEP_ALOGO_TEST = 3, & GISS_TEST = 4, & CAMHIST_TEST = 5 #ifdef LINUX num_series = CLMNCEP_ALOGO_TEST #else num_series = CAMHIST_TEST #endif num_fail = 3 + 12 call test_init( 2 + (num_series-1)*3 + num_fail ) do series = 2, num_series yearAlign = 1 yearFirst = 1 yearLast = 1 allocate( streams(1) ) allocate( streams2(1) ) write(*,*) "Initialize expected streams" call streams_exp_init( stream_exp ) if ( series == bogus_TEST )then test_descrip = "bogus" else if ( series == CLMNCEP_TEST )then test_descrip = "CLMNCEP" call streams_exp_set( stream_exp, datasource="CLMNCEP", & fldListfile ="FSDS", & fldListModel="fsds", & filepath= & "/fs/cgd/csm/inputdata/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/Solar6Hrly", & domfilepath="/fs/cgd/csm/inputdata/atm/datm7/", & domfilename="domain.T62.050609.nc", & nfiles=12, filenames=clmncep(1:12) ) yearAlign = 2003 yearFirst = 2003 yearLast = 2003 else if ( series == CLMNCEP_ALOGO_TEST )then test_descrip = "CLMNCEP-ALOGO" call streams_exp_set( stream_exp, datasource="CLMNCEP", & fldListfile ="TBOT:QBOT:WIND:PSRF", & fldListModel="tbot:qbot:wind:psrf", & filepath=& "/fs/cgd/csm/inputdata/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/TmpPrsHumWnd3Hrly", & domfilepath="/fs/cgd/csm/inputdata/atm/datm7/", & domfilename="domain.T62.050609.nc", & nfiles=12, filenames=clmncepTPQW(1:12) ) yearAlign = 1 yearFirst = 2003 yearLast = 2003 #ifndef LINUX else if ( series == GISS_TEST )then test_descrip = "GISS" call streams_exp_set( stream_exp, datasource="GISS", & fldListfile = "lwdn:swdn:swup", & fldListModel= "lwdn:swdn:swup", & filepath="/fs/cgd/csm/inputdata/atm/datm7/TN460/", & domfilepath="/fs/cgd/csm/inputdata/atm/datm7/TN460/", & domXvarName="lon", & domYvarName="lat", & domfilename="tn460nyf.giss.T62.051007.nc", & nfiles=1, filenames=(/ "tn460nyf.giss.T62.051007.nc" /) ) else if ( series == CAMHIST_TEST )then test_descrip = "CAMHIST" yearAlign = 5 yearFirst = 5 yearLast = 6 call streams_exp_set( stream_exp, datasource="CAMHIST", & fldListfile = & "FSNS:PRECC:PRECL:PRECSC:PRECSL:PS:PSL:QBOT:SOLL:SOLLD:SOLS:SOLSD:SRFRAD:FSNS:TBOT:UBOT:VBOT:ZBOT", & fldListModel= & "swnet:precc:precl:snowc:snowl:ps:pslv:shum:swndr:swndf:swvdr:swvdf:srfrad:swnet:tbot:u:v:z", & filepath="/fs/cgd/csm/inputdata/atm/datm7/CAMHIST/", & domfilepath="/fs/cgd/csm/inputdata/atm/datm7/CAMHIST/", & domfilename="domain.T42.050516.nc", & nfiles=2, filenames=(/ & "eul64x128_datm6.01.cam2.h1.0005-01-01-00000.nc", & "eul64x128_datm6.01.cam2.h1.0006-01-01-00000.nc" & /) ) #endif end if write(*,*) "Write streams out to file" call streams_exp_write_strm_txt( stream_filename, stream_exp ) write(*,*) "Initialize shr_streams" call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, yearAlign ) if ( series > 1 )then write(*,*) "Get time bounds..." secIn = 0 write(*,*) "mDateIn, SecIn, mDateLB,mDateUB, dDateLB,dDateUB, secLB, secUB" allocate( expected((yearLast-yearFirst+3)*12) ) allocate( value((yearLast-yearFirst+3)*12) ) n = 0 do year = yearAlign-1, yearAlign+1+(yearLast-yearFirst) do month = 1, 12 n = n + 1 mDateIn = year * 10000 + month*100 + 1 call shr_stream_findBounds(streams(1),mDateIn, secIn, & & mDateLB,dDateLB,secLB,n_lb,fileLB, & & mDateUB,dDateUB,secUB,n_ub,fileUB ) if ( year < yearFirst )then expected(n) = yearLast * 10000 + month*100 + 1 else if ( year > yearLast )then expected(n) = yearFirst * 10000 + month*100 + 1 else expected(n) = year * 10000 + month*100 + 1 end if if ( series == CAMHIST_TEST ) expected(n) = expected(n) + 1 value(n) = dDateUB write(6,'(8i9)') mDateIn, SecIn, mDateLB,mDateUB, dDateLB,dDateUB, & secLB, secUB end do end do call test_is( value, expected, " test if expected values") deallocate( expected ) deallocate( value ) end if call shr_stream_dataDump( streams(1) ) write(*,*) "Check if it is as expected..." call test_is( is_streams_expected( streams(1), stream_exp ), & "test if initialization is what expected "//trim(test_descrip) ) write(*,*) "Write restart file out" call shr_stream_restWrite( streams, rest_filename, caseName="clmrun", & caseDesc="clmrun description" ) write(*,*) "Read that file into a different stream" call shr_stream_init( streams2(1), stream_filename, yearFirst, yearLast, yearAlign ) call shr_stream_restRead( streams2, rest_filename ) write(*,*) "Check if read restart is as expected..." call test_is( is_streams_expected( streams2(1), stream_exp ), & "test after read restart "//trim(test_descrip) ) deallocate( streams ) deallocate( streams2 ) call shr_sys_system( "/bin/rm -f "//trim(stream_filename), rcode ) call shr_sys_system( "/bin/rm -f "//trim(rest_filename), rcode ) end do ! Fail tests call shr_stream_setAbort( .false. ) call shr_string_setAbort( .false. ) allocate( streams(1) ) allocate( streams2(1) ) write(*,*) "Try to write uninitialized stream out" call shr_stream_restWrite( streams, rest_filename, caseName="clmrun", & caseDesc="clmrun description", rc=rcode ) call test_is( rcode, 1, "test that writing uninitialized stream fails" ) write(*,*) "Try to read uninitialized stream in" call shr_stream_restRead( streams2, rest_filename, rc=rCode ) call test_is( rcode, 1, "test that reading uninitialized stream fails" ) mDateIn = 20000101 write(*,*) "Try to find bounds on uninitialized stream" call shr_stream_findBounds(streams(1),mDateIn, secIn, & & mDateLB,dDateLB,secLB,n_lb,fileLB, & & mDateUB,dDateUB,secUB,n_ub,fileUB, rc=rCode ) call test_is( rcode, 1, "test that find bounds of uninitialized stream fails" ) do series = 1, 99 yearAlign = 1 yearFirst = 1 yearLast = 1 call streams_exp_init( stream_exp ) if ( series == 1 )then call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, yearAlign ) test_descrip = "Try to read restart file that does not exist" call shr_sys_system( "/bin/rm -f "//trim(rest_filename), rcode ) call shr_stream_restRead( streams, rest_filename, rc=rCode ) exp_int = 2 else if ( series == 2 )then test_descrip = "Try to initialize streams with too many files" nfiles = 1001 do i = 1, nfiles write(filenames1(i),'("filename",i4.4,".nc")' ) i end do call streams_exp_set( stream_exp, datasource="CAMHIST", & fldListfile = & "FSNS:PRECC:PRECL:PRECSC:PRECSL:PS:PSL:QBOT:SOLL:SOLLD:SOLS:SOLSD:SRFRAD:FSNS:TBOT:UBOT:VBOT:ZBOT", & fldListModel= & "swnet:precc:precl:snowc:snowl:ps:pslv:shum:swndr:swndf:swvdr:swvdf:srfrad:swnet:tbot:u:v:z", & filepath="/fs/cgd/csm/inputdata/atm/datm7/CAMHIST/", & domfilepath="/fs/cgd/csm/inputdata/atm/datm7/CAMHIST/", & domfilename="domain.T42.050516.nc", & nfiles=nfiles, filenames=filenames1(1:nfiles) ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) exp_int = 1 else if ( series == 3 )then test_descrip = "variable name lists do not have same number of values" call streams_exp_set( stream_exp, datasource="CLMNCEP", & fldListfile ="TBOT:QBOT:WIND:PRECTmms:FSDS:PSRF", & fldListModel="tbot:qbot:wind:prectMMS", & filepath="/fs/cgd/csm/inputdata/atm/datm7/CLMNCEP/", & domfilepath="/fs/cgd/csm/inputdata/atm/datm7/", & domfilename="domain.T62.050609.nc", & nfiles=12, filenames=clmncep(1:12) ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) exp_int = 1 else if ( series == 4 )then test_descrip = "Mask name set to blank" call streams_exp_set( stream_exp, domMaskName=" " ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) exp_int = 1 else if ( series == 5 )then test_descrip = "Area name set to blank" call streams_exp_set( stream_exp, domAreaName=" " ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) exp_int = 1 else if ( series == 6 )then test_descrip = "Yvar name set to blank" call streams_exp_set( stream_exp, domYVarName=" " ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) exp_int = 1 else if ( series == 7 )then test_descrip = "Xvar name set to blank" call streams_exp_set( stream_exp, domXVarName=" " ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) exp_int = 1 else if ( series == 8 )then test_descrip = "tvar name set to blank" call streams_exp_set( stream_exp, domTVarName=" " ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) exp_int = 1 else if ( series == 9 )then test_descrip = "no filenames" call streams_exp_set( stream_exp, nfiles=0, filenames=(/" "/) ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) exp_int = 1 else if ( series == 10 )then test_descrip = "no fieldnames" call streams_exp_set( stream_exp, fldListfile ="", fldListModel="" ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) exp_int = 1 else if ( series == 11 )then test_descrip = "Dates are out of range" call streams_exp_set( stream_exp, datasource="CLMNCEP", & fldListfile ="TBOT:QBOT:WIND:PRECTmms:FSDS:PSRF", & fldListModel="tbot:qbot:wind:prectMMS:fsds:psrf", & filepath="/fs/cgd/csm/inputdata/atm/datm7/CLMNCEP/", & domfilepath="/fs/cgd/csm/inputdata/atm/datm7/", & domfilename="domain.T62.050609.nc", & nfiles=12, filenames=clmncep(1:12) ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) yearAlign = 1948 yearFirst = 1952 yearLast = 1952 call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign ) secIn = 0 mDateIn = yearAlign * 10000 + 12*100 + 1 call shr_stream_findBounds(streams(1),mDateIn, secIn, & & mDateLB,dDateLB,secLB,n_lb,fileLB, & & mDateUB,dDateUB,secUB,n_ub,fileUB, rc=rCode ) exp_int = 1 else if ( series == 12 )then test_descrip = "One file is out of sequence" filenames2 = clmncep filenames2(2) = clmncep(4) filenames2(4) = clmncep(2) call streams_exp_set( stream_exp, datasource="CLMNCEP", & fldListfile ="TBOT:QBOT:WIND:PRECTmms:FSDS:PSRF", & fldListModel="tbot:qbot:wind:prectMMS:fsds:psrf", & filepath="/fs/cgd/csm/inputdata/atm/datm7/CLMNCEP/", & domfilepath="/fs/cgd/csm/inputdata/atm/datm7/", & domfilename="domain.T62.050609.nc", & nfiles=12, filenames=filenames2 ) call streams_exp_write_strm_txt( stream_filename, stream_exp ) yearAlign = 1948 yearFirst = 1948 yearLast = 1948 call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, & yearAlign, rc=rCode ) secIn = 0 mDateIn = yearAlign * 10000 + 12*100 + 1 call shr_stream_findBounds(streams(1),mDateIn, secIn, & & mDateLB,dDateLB,secLB,n_lb,fileLB, & & mDateUB,dDateUB,secUB,n_ub,fileUB, rc=rCode ) exp_int = 1 ! else if ( series == 12 )then ! test_descrip = "year range is out of bounds" ! call streams_exp_set( stream_exp, datasource="CLMNCEP", & ! fldListfile ="TBOT:QBOT:WIND:PRECTmms:FSDS:PSRF", & ! fldListModel="tbot:qbot:wind:prectMMS:fsds:psrf", & ! filepath="/fs/cgd/csm/inputdata/atm/datm7/CLMNCEP/", & ! domfilepath="/fs/cgd/csm/inputdata/atm/datm7/", & ! domfilename="domain.T62.050609.nc", & ! nfiles=12, filenames=clmncep(1:12) ) ! yearAlign = 1948 ! yearFirst = 1948 ! yearLast = 1972 ! call streams_exp_write_strm_txt( stream_filename, stream_exp ) ! call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, yearAlign, rCode ) ! secIn = 0 ! mDateIn = yearAlign * 10000 + 12*100 + 1 ! call shr_stream_findBounds(streams(1),mDateIn, secIn, & ! & mDateLB,dDateLB,secLB,n_lb,fileLB, & ! & mDateUB,dDateUB,secUB,n_ub,fileUB ) ! exp_int = 1 ! else if ( series == 13 )then ! test_descrip = "Dates are backwards" ! call streams_exp_set( stream_exp, datasource="CLMNCEP", & ! fldListfile ="TBOT:QBOT:WIND:PRECTmms:FSDS:PSRF", & ! fldListModel="tbot:qbot:wind:prectMMS:fsds:psrf", & ! filepath="/fs/cgd/csm/inputdata/atm/datm7/CLMNCEP/", & ! domfilepath="/fs/cgd/csm/inputdata/atm/datm7/", & ! domfilename="domain.T62.050609.nc", & ! nfiles=12, filenames=clmncep(12:1:-1) ) ! call streams_exp_write_strm_txt( stream_filename, stream_exp ) ! yearAlign = 1948 ! yearFirst = 1948 ! yearLast = 1948 ! call shr_stream_init( streams(1), stream_filename, yearFirst, yearLast, yearAlign, rCode ) ! secIn = 0 ! mDateIn = yearAlign * 10000 + 12*100 + 1 ! call shr_stream_findBounds(streams(1),mDateIn, secIn, & ! & mDateLB,dDateLB,secLB,n_lb,fileLB, & ! & mDateUB,dDateUB,secUB,n_ub,fileUB, rc=rCode ) ! exp_int = 1 else exit end if write(*,*) trim(test_descrip) call test_is( rcode, exp_int, "test that "//trim(test_descrip)//" fails" ) end do call shr_sys_system( "/bin/rm -f "//trim(stream_filename), rcode ) deallocate( streams ) deallocate( streams2 ) call test_final() end program test_shr_streams