diff --git a/src/g2bytes.F90 b/src/g2bytes.F90 index 0f4c8744..c79e6c61 100644 --- a/src/g2bytes.F90 +++ b/src/g2bytes.F90 @@ -474,8 +474,8 @@ subroutine rdieee(rieee, a, num) integer, intent(in) :: num integer(4) :: ieee - real, parameter :: two23 = scale(1.0,-23) - real, parameter :: two126 = scale(1.0,-126) + real, parameter :: two23 = scale(1.0, -23) + real, parameter :: two126 = scale(1.0, -126) integer :: iexp, imant, isign, j real :: sign, temp diff --git a/src/g2create.F90 b/src/g2create.F90 index f3136e5c..72853c00 100644 --- a/src/g2create.F90 +++ b/src/g2create.F90 @@ -203,7 +203,7 @@ subroutine addfield(cgrib,lcgrib,ipdsnum,ipdstmpl,ipdstmplen, & character(len=4):: ctemp character(len=1),allocatable :: cpack(:) real,pointer,dimension(:) :: pfld - real(4) :: coordieee(numcoord),re00 + real(4) :: coordieee(numcoord), re00, tmpre00(1) integer(4) :: ire00,allones integer :: mappds(ipdstmplen),intbmap(ngrdpts),mapdrs(idrstmplen) integer,parameter :: zero=0,one=1,four=4,five=5,six=6,seven=7 @@ -216,6 +216,7 @@ subroutine addfield(cgrib,lcgrib,ipdsnum,ipdstmpl,ipdstmplen, & integer :: ibmprev, ilen, ioctet, iscan, isecnum, itemp integer :: i, jj, kk, mm integer :: iret, istat + real (kind = 4) :: tmpfld(1) allones = int(Z'FFFFFFFF') ierr=0 @@ -398,10 +399,11 @@ subroutine addfield(cgrib,lcgrib,ipdsnum,ipdstmpl,ipdstmplen, & call cmplxpack(pfld,ndpts,idrsnum,idrstmpl,cpack,lcpack) elseif (idrsnum.eq.50) then ! Sperical Harmonic Simple Packing call simpack(pfld(2),ndpts-1,idrstmpl,cpack,lcpack) - call mkieee(real(pfld(1)),re00,1) ! ensure RE(0,0) value is IEEE format - !call g2_gbytec(re00,idrstmpl(5),0,32) - ire00=transfer(re00,ire00) - idrstmpl(5)=ire00 + tmpfld(1) = real(pfld(1), 4) + call mkieee(tmpfld, tmpre00, 1) ! ensure RE(0,0) value is IEEE format + re00 = tmpre00(1) + ire00 = transfer(re00, ire00) + idrstmpl(5) = ire00 elseif (idrsnum.eq.51) then ! Sperical Harmonic Complex Packing call getpoly(cgrib(lpos3),lensec3,jj,kk,mm) if (jj.ne.0 .AND. kk.ne.0 .AND. mm.ne.0) then diff --git a/src/g2get.F90 b/src/g2get.F90 index 722ce0fe..1752ee51 100644 --- a/src/g2get.F90 +++ b/src/g2get.F90 @@ -520,7 +520,7 @@ subroutine getfield(cgrib, lcgrib, ifldnum, igds, igdstmpl, & character(len = 4) :: ctemp integer :: listsec0(2) integer :: iofst, istart - integer(4) :: ieee + real (kind = 4) :: ieee(1) logical :: have3, have4, have5, have6, have7 !implicit none additions @@ -682,7 +682,7 @@ subroutine getfield(cgrib, lcgrib, ifldnum, igds, igdstmpl, & elseif (idrsnum .eq. 50) then call simunpack(cgrib(ipos + 5), lensec - 6, idrstmpl, & ndpts - 1, fld(2)) - ieee = idrstmpl(5) + ieee = transfer(idrstmpl(5), ieee, 1) call rdieee(ieee, fld(1), 1) have7 = .true. elseif (idrsnum .eq. 40 .or. idrsnum .eq. 40000) then diff --git a/src/g2unpack.F90 b/src/g2unpack.F90 index 339ff2bc..d883d373 100644 --- a/src/g2unpack.F90 +++ b/src/g2unpack.F90 @@ -655,7 +655,9 @@ subroutine gf_unpack7(cgrib, lcgrib, iofst, igdsnum, igdstmpl, & integer, pointer, dimension(:) :: igdstmpl, idrstmpl integer, intent(out) :: ierr real, pointer, dimension(:) :: fld - integer :: ier, ipos, istat, lensec, ieee + integer :: ier, ipos, istat, lensec + real (kind = 4) :: ieee(1) + real :: tmpfld(1) ierr = 0 nullify(fld) @@ -682,8 +684,9 @@ subroutine gf_unpack7(cgrib, lcgrib, iofst, igdsnum, igdstmpl, & endif elseif (idrsnum .eq. 50) then ! Spectral simple call simunpack(cgrib(ipos), lensec-5, idrstmpl, ndpts-1, fld(2)) - ieee = idrstmpl(5) - call rdieee(ieee, fld(1), 1) + ieee = transfer(idrstmpl(5), ieee, 1) + call rdieee(ieee, tmpfld, 1) + fld(1) = tmpfld(1) elseif (idrsnum .eq. 51) then ! Spectral complex if (igdsnum.ge.50.AND.igdsnum.le.53) then call specunpack(cgrib(ipos), lensec-5, idrstmpl, ndpts, &