33 subroutine simpack(fld,ndpts,idrstmpl,cpack,lcpack)
36 integer,
intent(in) :: ndpts
37 real,
intent(in) :: fld(ndpts)
38 character(len=1),
intent(out) :: cpack(*)
39 integer,
intent(inout) :: idrstmpl(*)
40 integer,
intent(out) :: lcpack
46 integer :: ifld(ndpts)
47 integer,
parameter :: zero=0
49 bscale=2.0**real(-idrstmpl(2))
50 dscale=10.0**real(idrstmpl(3))
51 if (idrstmpl(4).le.0.OR.idrstmpl(4).gt.31)
then
66 if (fld(j).gt.rmax) rmax=fld(j)
67 if (fld(j).lt.rmin) rmin=fld(j)
76 if (rmin.ne.rmax)
then
81 if (nbits.eq.0.AND.idrstmpl(2).eq.0)
then
86 imin=nint(rmin*dscale)
87 imax=nint(rmax*dscale)
94 ifld(j)=nint(fld(j)*dscale)-imin
96 elseif (nbits.ne.0.AND.idrstmpl(2).eq.0)
then
104 temp=
ilog2(nint(real(maxnum)/(rmax-rmin)))
105 idrstmpl(2)=ceiling(-1.0*temp)
106 bscale=2.0**real(-idrstmpl(2))
109 ifld(j)=max(0,nint(((fld(j)*dscale)-rmin)*bscale))
111 elseif (nbits.eq.0.AND.idrstmpl(2).ne.0)
then
118 maxdif=nint((rmax-rmin)*bscale)
123 ifld(j)=max(0,nint(((fld(j)*dscale)-rmin)*bscale))
125 elseif (nbits.ne.0.AND.idrstmpl(2).ne.0)
then
135 ifld(j)=max(0,nint(((fld(j)*dscale)-rmin)*bscale))
144 left=8-mod(nbittot,8)
164 iref=transfer(ref,iref)