⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gribend.f

📁 计算线性趋势 回归系数 主要用于气象站点值的线性趋势计算
💻 F
字号:
      subroutine gribend(cgrib,lcgrib,lengrib,ierr)!$$$  SUBPROGRAM DOCUMENTATION BLOCK!                .      .    .                                       .! SUBPROGRAM:    gribend !   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2000-05-02!! ABSTRACT: This subroutine finalizes a GRIB message after all grids!   and fields have been added.  It adds the End Section ( "7777" )!   to the end of the GRIB message and calculates the length and stores!   it in the appropriate place in Section 0.!   This routine is used with routines "gribcreate", "addlocal", "addgrid",!   and "addfield" to create a complete GRIB2 message.  Subroutine!   gribcreate must be called first to initialize a new GRIB2 message.!! PROGRAM HISTORY LOG:! 2000-05-02  Gilbert!! USAGE:    CALL gribend(cgrib,lcgrib,lengrib,ierr)!   INPUT ARGUMENT LIST:!     cgrib    - Character array to contain the GRIB2 message!     lcgrib   - Maximum length (bytes) of array cgrib.!!   OUTPUT ARGUMENT LIST:      !     cgrib    - Character array to contain the GRIB2 message!     lengrib  - Length of the final GRIB2 message in octets (bytes)!     ierr     - Error return code.!                0 = no error!                1 = GRIB message was not initialized.  Need to call!                    routine gribcreate first.!                2 = GRIB message already complete.  !                3 = Sum of Section byte counts doesn't add to total byte count.!                4 = Previous Section was not 7.!! REMARKS: This routine is intended for use with routines "gribcreate", !          "addlocal", "addgrid", and "addfield" to create a complete !          GRIB2 message.!! ATTRIBUTES:!   LANGUAGE: Fortran 90!   MACHINE:  IBM SP!!$$$      character(len=1),intent(inout) :: cgrib(lcgrib)      integer,intent(in) :: lcgrib      integer,intent(out) :: lengrib,ierr            character(len=4),parameter :: grib='GRIB',c7777='7777'      character(len=4):: ctemp      integer iofst,ibeg,lencurr,len       ierr=0!!  Check to see if beginning of GRIB message exists!      ctemp=cgrib(1)//cgrib(2)//cgrib(3)//cgrib(4)      if ( ctemp.ne.grib ) then        print *,'gribend: GRIB not found in given message.'        ierr=1        return      endif!!  Get current length of GRIB message!        call gbyte(cgrib,lencurr,96,32)!!  Check to see if GRIB message is already complete!!      ctemp=cgrib(lencurr-3)//cgrib(lencurr-2)//cgrib(lencurr-1)!     &      //cgrib(lencurr)!      if ( ctemp.eq.c7777 ) then!        print *,'gribend: GRIB message already complete.'!        ierr=2!        return!      endif!!  Loop through all current sections of the GRIB message to!  find the last section number.!      len=16    ! Length of Section 0      do       !    Get number and length of next section        iofst=len*8        call gbyte(cgrib,ilen,iofst,32)        iofst=iofst+32        call gbyte(cgrib,isecnum,iofst,8)        len=len+ilen      !    Exit loop if last section reached        if ( len.eq.lencurr ) exit      !    If byte count for each section doesn't match current      !    total length, then there is a problem.        if ( len.gt.lencurr ) then          print *,'gribend: Section byte counts don''t add to total.'          print *,'gribend: Sum of section byte counts = ',len          print *,'gribend: Total byte count in Section 0 = ',lencurr          ierr=3          return        endif      enddo!!  Can only add End Section (Section 8) after Section 7.!      if ( isecnum.ne.7 ) then        print *,'gribend: Section 8 can only be added after Section 7.'        print *,'gribend: Section ',isecnum,' was the last found in',     &          ' given GRIB message.'        ierr=4        return      endif!!  Add Section 8  - End Section!      cgrib(lencurr+1:lencurr+4)=c7777!!  Update current byte total of message in Section 0!      lengrib=lencurr+4      call sbyte(cgrib,lengrib,96,32)      return      end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -