114 SUBROUTINE pack_gp(KFILDO,IC,NXY,IS523,MINPK,INC,MISSP,MISSS,
115 1 JMIN,JMAX,LBIT,NOV,NDG,LX,IBIT,JBIT,KBIT,
116 2 NOVREF,LBITREF,IER)
118 parameter(mallow=2**30+1)
124 dimension jmin(ndg),jmax(ndg),lbit(ndg),nov(ndg)
125 dimension misslx(ndg)
127 INTEGER,
PARAMETER :: IBXX2(0:30) = (/ 1, 2, 4, 8, 16, 32, 64, &
128 & 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, &
129 & 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608,
130 & 16777216, 33554432, 67108864, 134217728, 268435456,
131 & 536870912, 1073741824 /)
168 IF(is523.EQ.1)lmiss=1
169 IF(is523.EQ.2)lmiss=2
194 nenda=min(kstart+lminpk-1,nxy)
195 IF(nxy-nenda.LE.lminpk/2)nenda=nxy
210 IF(nenda.NE.nxy.AND.ic(kstart).EQ.ic(kstart+1))
THEN
216 DO 111 k=kstart+1,nxy
218 IF(ic(k).NE.ic(kstart))
THEN
228 ELSEIF(is523.EQ.1)
THEN
231 DO 112 k=kstart+1,nxy
233 IF(ic(k).NE.missp)
THEN
235 IF(ic(k).NE.ic(kstart))
THEN
250 DO 113 k=kstart+1,nxy
252 IF(ic(k).NE.missp.AND.ic(k).NE.misss)
THEN
254 IF(ic(k).NE.ic(kstart))
THEN
269 114
IF(is523.EQ.0)
THEN
271 DO 115 k=kstart,nenda
272 IF(ic(k).LT.mina)
THEN
276 IF(ic(k).GT.maxa)
THEN
282 ELSEIF(is523.EQ.1)
THEN
284 DO 117 k=kstart,nenda
285 IF(ic(k).EQ.missp)
GO TO 117
286 IF(ic(k).LT.mina)
THEN
290 IF(ic(k).GT.maxa)
THEN
298 DO 120 k=kstart,nenda
299 IF(ic(k).EQ.missp.OR.ic(k).EQ.misss)
GO TO 120
300 IF(ic(k).LT.mina)
THEN
304 IF(ic(k).GT.maxa)
THEN
312 kounta=nenda-kstart+1
318 IF(mina.NE.mallow)
GO TO 125
324 IF(is523.NE.2)
GO TO 130
329 125 itest=maxa-mina+lmiss
332 IF(itest.LT.ibxx2(ibita))
GO TO 130
349 133
IF(ktotal.GE.nxy)
GO TO 200
370 IF(mstart.LT.nxy)
THEN
375 DO 145 k=mstart+1,nxy
377 IF(ic(k).NE.ic(mstart))
THEN
391 150 nendb=max(nendb,min(ktotal+lminpk,nxy))
394 IF(nxy-nendb.LE.lminpk/2)nendb=nxy
405 DO 155 k=mstart,nendb
406 IF(ic(k).LE.minb)
THEN
414 IF(ic(k).GE.maxb)
THEN
420 ELSEIF(is523.EQ.1)
THEN
422 DO 157 k=mstart,nendb
423 IF(ic(k).EQ.missp)
GO TO 157
424 IF(ic(k).LE.minb)
THEN
428 IF(ic(k).GE.maxb)
THEN
436 DO 160 k=mstart,nendb
437 IF(ic(k).EQ.missp.OR.ic(k).EQ.misss)
GO TO 160
438 IF(ic(k).LE.minb)
THEN
442 IF(ic(k).GE.maxb)
THEN
452 IF(minb.NE.mallow)
GO TO 165
459 IF(is523.NE.2)
GO TO 170
464 165
DO 166 ibitb=ibitbs,30
465 IF(maxb-minb.LT.ibxx2(ibitb)-lmiss)
GO TO 170
487 IF(ibitb.GE.ibita)
GO TO 180
510 DO 1715 k=ktotal,kstart,-1
512 IF(ic(k).LT.minb)
THEN
515 ELSEIF(ic(k).GT.maxb)
THEN
519 IF(maxtst-mintst.GE.ibxx2(ibitb))
GO TO 174
529 ELSEIF(is523.EQ.1)
THEN
531 DO 1719 k=ktotal,kstart,-1
533 IF(ic(k).EQ.missp)
GO TO 1718
534 IF(ic(k).LT.minb)
THEN
537 ELSEIF(ic(k).GT.maxb)
THEN
541 IF(maxtst-mintst.GE.ibxx2(ibitb)-lmiss)
GO TO 174
555 DO 173 k=ktotal,kstart,-1
557 IF(ic(k).EQ.missp.OR.ic(k).EQ.misss)
GO TO 1729
558 IF(ic(k).LT.minb)
THEN
561 ELSEIF(ic(k).GT.maxb)
THEN
565 IF(maxtst-mintst.GE.ibxx2(ibitb)-lmiss)
GO TO 174
586 174
IF(kounta.EQ.kounts)
GO TO 200
598 IF(nenda-nouta.GT.minak.AND.nenda-nouta.GT.maxak)
GO TO 200
612 DO 1742 k=kstart,nenda-nouta
613 IF(ic(k).LT.mina)
THEN
616 IF(ic(k).GT.maxa)
THEN
621 ELSEIF(is523.EQ.1)
THEN
623 DO 1744 k=kstart,nenda-nouta
624 IF(ic(k).EQ.missp)
GO TO 1744
625 IF(ic(k).LT.mina)
THEN
628 IF(ic(k).GT.maxa)
THEN
635 DO 175 k=kstart,nenda-nouta
636 IF(ic(k).EQ.missp.OR.ic(k).EQ.misss)
GO TO 175
637 IF(ic(k).LT.mina)
THEN
640 IF(ic(k).GT.maxa)
THEN
648 IF(mina.NE.mallow)
GO TO 1750
653 IF(is523.NE.2)
GO TO 177
658 1750 itest=maxa-mina+lmiss
661 IF(itest.LT.ibxx2(ibita))
GO TO 177
683 180
IF(mislla.EQ.1)
THEN
696 IF(nxy-(ktotal+kinc).LE.lminpk/2)kinc=nxy-ktotal
708 DO 185 k=ktotal+1,min(ktotal+kinc,nxy)
709 IF(ic(k).LT.minc)
THEN
713 IF(ic(k).GT.maxc)
THEN
720 ELSEIF(is523.EQ.1)
THEN
722 DO 187 k=ktotal+1,min(ktotal+kinc,nxy)
723 IF(ic(k).EQ.missp)
GO TO 186
724 IF(ic(k).LT.minc)
THEN
728 IF(ic(k).GT.maxc)
THEN
737 DO 190 k=ktotal+1,min(ktotal+kinc,nxy)
738 IF(ic(k).EQ.missp.OR.ic(k).EQ.misss)
GO TO 189
739 IF(ic(k).LT.minc)
THEN
743 IF(ic(k).GT.maxc)
THEN
762 IF(minc.EQ.mallow)
THEN
776 IF(maxc-minc.GE.ibxx2(ibita)-lmiss)
GO TO 200
783 195 ktotal=ktotal+nount
791 IF(ktotal.GE.nxy)
GO TO 200
793 IF(minbk.GT.ktotal.AND.maxbk.GT.ktotal)
THEN
814 IF(lx.LE.ndg)
GO TO 205
815 lminpk=lminpk+lminpk/2
832 misslx(lx)=ic(ktotal)
843 IF(ktotal.GE.nxy)
GO TO 209
869 210
IF(jmin(l).LT.ibxx2(ibit))
GO TO 220
884 IF(misslx(l).EQ.missp)
THEN
885 jmin(l)=ibxx2(ibit)-1
912 IF(lbit(k).LT.lbitref)lbitref=lbit(k)
918 lbit(k)=lbit(k)-lbitref
934 310
IF(lbit(k).LT.ibxx2(jbit))
GO TO 320
957 IF(nov(k).LT.novref)novref=nov(k)
984 410
IF(nov(k).LT.ibxx2(kbit))
GO TO 420
993 CALL reduce(kfildo,jmin,jmax,lbit,nov,lx,ndg,ibit,jbit,kbit,
996 IF(ier.EQ.714.OR.ier.EQ.715)
THEN
subroutine pack_gp(KFILDO, IC, NXY, IS523, MINPK, INC, MISSP, MISSS, JMIN, JMAX, LBIT, NOV, NDG, LX, IBIT, JBIT, KBIT, NOVREF, LBITREF, IER)
This subroutine determines groups of variable size, but at least of size minpk, the associated max(JM...
subroutine reduce(KFILDO, JMIN, JMAX, LBIT, NOV, LX, NDG, IBIT, JBIT, KBIT, NOVREF, IBXX2, IER)
This subroutine determines whether the number of groups should be increased in order to reduce the si...