39#ifdef SCOREP_USER_ENABLE
40#include "scorep/SCOREP_User.inc"
62 INTEGER(mpi),
DIMENSION(:),
ALLOCATABLE ::
bitmap
63 INTEGER(mpi),
PARAMETER ::
bs = bit_size(1_mpi)
77 INTEGER(mpi),
INTENT(IN) :: im
78 INTEGER(mpi),
INTENT(IN) :: jm
79 INTEGER(mpi),
INTENT(IN) :: inc
87 INTEGER(mpi) :: icount
88 INTEGER(mpi) :: jcount
99 noffi=int(i-1,mpl)*int(i,mpl)*int(
ibfw,mpl)/2
101 l=noffi/
bs+i+noffj/
bs
105 noffi=int(j-1,mpl)*int(2*
n+2-j,mpl)/2
107 l=noffi/
bs+j+noffj/
bs
127 icount=min(icount+inc,
mxcnt)
129 IF (icount /= jcount)
THEN
153 INTEGER(mpi),
INTENT(IN) :: i
154 INTEGER(mpi),
INTENT(IN) :: j
157 INTEGER(mpi) :: noffj
159 INTEGER(mpl) :: noffi
161 IF(i >
nar.OR.j >
nac)
RETURN
182SUBROUTINE clbits(in,jreqpe,jhispe,jsngpe,jextnd,idimb,ispc)
187 INTEGER(mpi),
INTENT(IN) :: in
188 INTEGER(mpi),
INTENT(IN) :: jreqpe
189 INTEGER(mpi),
INTENT(IN) :: jhispe
190 INTEGER(mpi),
INTENT(IN) :: jsngpe
191 INTEGER(mpi),
INTENT(IN) :: jextnd
192 INTEGER(mpl),
INTENT(OUT) :: idimb
193 INTEGER(mpi),
INTENT(OUT) :: ispc
195 INTEGER(mpl) :: noffd
197 INTEGER(mpi) :: icount
212 IF (jextnd >= 0)
THEN
214 icount=max(jsngpe+1,jhispe)
215 icount=max(jreqpe,icount)
217 IF (icount >
mxcnt)
THEN
225 noffd=int(
n,mpl)*int(
n+1,mpl)*int(
ibfw,mpl)/2
229 mb=int(4.0e-6*real(
ndimb,mps),mpi)
231 WRITE(*,*)
'CLBITS: symmetric matrix of dimension',
n
232 WRITE(*,*)
'CLBITS: off-diagonal elements',noffd
234 WRITE(*,*)
'CLBITS: dimension of bit-array',
ndimb ,
'(',mb,
'MB)'
236 WRITE(*,*)
'CLBITS: dimension of bit-array',
ndimb ,
'(< 1 MB)'
260 INTEGER(mpi),
INTENT(IN) :: in
261 INTEGER(mpi),
INTENT(IN) :: inar
262 INTEGER(mpi),
INTENT(IN) :: inac
263 INTEGER(mpl),
INTENT(OUT) :: idimb
265 INTEGER(mpl) :: noffd
277 noffd=int(
n,mpl)*int(
n+1,mpl)/2
281 mb=int(4.0e-6*real(idimb,mps),mpi)
283 WRITE(*,*)
'PLBITS: symmetric matrix of dimension',
n,
'(',
nar,
nac,
')'
284 WRITE(*,*)
'PLBITS: off-diagonal elements',noffd,
'(',int(
nar,mpl)*int(
nac,mpl),
')'
286 WRITE(*,*)
'PLBITS: dimension of bit-array',idimb ,
'(',mb,
'MB)'
288 WRITE(*,*)
'PLBITS: dimension of bit-array',idimb ,
'(< 1 MB)'
305SUBROUTINE ndbits(npgrp,ndims,nsparr,ihst)
310 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
311 INTEGER(mpl),
DIMENSION(4),
INTENT(OUT) :: ndims
312 INTEGER(mpl),
DIMENSION(:,:),
INTENT(OUT) :: nsparr
313 INTEGER(mpi),
INTENT(IN) :: ihst
315 INTEGER(mpi) :: nwcp(0:1)
316 INTEGER(mpi) :: irgn(2)
317 INTEGER(mpi) :: inr(2)
318 INTEGER(mpi) :: ichunk
332 INTEGER(mpi) :: icount
333 INTEGER(mpi) :: iproc
334 INTEGER(mpi) :: iword
341 INTEGER(mpl) :: nskyln
342 INTEGER(mpl) :: noffi
343 INTEGER(mpl) :: noffj
350 INTEGER(mpi),
DIMENSION(:),
ALLOCATABLE :: lastRowInCol
352 ll=int(
n,mpl)*int(
nthrd,mpl)
353 CALL mpalloc(lastrowincol,ll,
'NDBITS: last (non zero) row in col.')
356 nd=npgrp(
n+1)-npgrp(1)
374 noffi=int(i-1,mpl)*int(i,mpl)*int(
ibfw,mpl)/2
404 npar=npar+npgrp(j+1)-npgrp(j)
405 IF (iproc == 0.AND.ihst > 0)
CALL hmpent(ihst,real(icount,mps))
409 IF (icount >=
ireqpe)
THEN
411 IF (icount <=
isngpe) next=2
412 iword=ibset(iword,mb+next-1)
413 inr(next)=inr(next)+npgrp(j+1)-npgrp(j)
414 IF (next /= last)
THEN
415 irgn(next)=irgn(next)+1
418 lastrowincol(jcol)=max(lastrowincol(jcol),i)
431 ntot=ntot+npar*(npgrp(i+1)-npgrp(i))
436 nsparr(1,ir)=irgn(jp)
456 irgn(jp)=int(nsparr(1,ir),mpi)
457 inr(jp)=int(nsparr(2,ir),mpi)
465 mm=int(mod(noffj,int(
bs,mpl)),mpi)
473 noffi=int(j-1,mpl)*int(j,mpl)*int(
ibfw,mpl)/2
474 ll=noffi/
bs+j+noffj/
bs
484 inr(next)=inr(next)+npgrp(j+1)-npgrp(j)
485 IF (next /= last)
THEN
486 irgn(next)=irgn(next)+1
498 IF (inr(jp) > 0)
THEN
501 IF ((nwcp(1) < nwcp(0)).OR.
iextnd > 0)
THEN
505 ndims(2) =ndims(2) +nwcp(icp)
506 ndims(jp+2)=ndims(jp+2)+nwcp(0)*(npgrp(i+1)-npgrp(i))
509 nsparr(1,ir)=nwcp(icp)
510 nsparr(2,ir)=nwcp(0)*(npgrp(i+1)-npgrp(i))
540 lastrowincol(i)=max(lastrowincol(i),lastrowincol(ll))
546 npar=npgrp(lastrowincol(i)+1)-npgrp(i)
547 nskyln=nskyln+npar*(npgrp(i+1)-npgrp(i))
552 nin=ndims(3)+ndims(4)
553 fracz=200.0*real(ntot,mps)/real(nd,mps)/real(nd-1,mps)
554 fracu=200.0*real(nin,mps)/real(nd,mps)/real(nd-1,mps)
555 fracs=200.0*real(nskyln,mps)/real(nd,mps)/real(nd+1,mps)
557 WRITE(*,*)
'NDBITS: number of diagonal elements',nd
558 WRITE(*,*)
'NDBITS: number of used off-diagonal elements',nin
559 WRITE(*,1000)
'fraction of non-zero off-diagonal elements', fracz
560 WRITE(*,1000)
'fraction of used off-diagonal elements', fracu
561 cpr=100.0*real(mpi*ndims(2)+mpd*ndims(3)+mps*ndims(4),mps)/real((mpd+mpi)*nin,mps)
562 WRITE(*,1000)
'compression ratio for off-diagonal elements', cpr
563 WRITE(*,1000)
'fraction inside skyline ', fracs
5641000
FORMAT(
' NDBITS: ',a,f6.2,
' %')
578SUBROUTINE pbsbits(npgrp,ibsize,nnzero,nblock,nbkrow)
583 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
584 INTEGER(mpi),
INTENT(IN) :: ibsize
585 INTEGER(mpl),
INTENT(OUT) :: nnzero
586 INTEGER(mpl),
INTENT(OUT) :: nblock
587 INTEGER(mpi),
DIMENSION(:),
INTENT(OUT) :: nbkrow
589 INTEGER(mpi) :: ichunk
592 INTEGER(mpi) :: igrpf
593 INTEGER(mpi) :: igrpl
594 INTEGER(mpi) :: iproc
595 INTEGER(mpi) :: ioffb
596 INTEGER(mpi) :: ioffg
604 INTEGER(mpi) :: irfrst
605 INTEGER(mpi) :: irlast
608 INTEGER(mpl) :: length
610 INTEGER(mpl) :: noffi
611 INTEGER(mpl),
PARAMETER :: two=2
612 INTEGER(mpi),
DIMENSION(:,:),
ALLOCATABLE :: rowBlocksToGroups
613 INTEGER(mpi),
DIMENSION(:),
ALLOCATABLE :: blockCounter
614 INTEGER(mpi),
DIMENSION(:),
ALLOCATABLE :: groupList
624#ifdef SCOREP_USER_ENABLE
625 scorep_user_region_by_name_begin(
"pbsbits", scorep_user_region_type_common)
627 nd=npgrp(
n+1)-npgrp(1)
628 mb=(nd+
nac-1)/ibsize+1
630 length=int(mb,mpl)*int(
nthrd,mpl)
631 CALL mpalloc(blockcounter,length,
'PBBITS: block counter')
632 length=int(
n,mpl)*int(
nthrd,mpl)
633 CALL mpalloc(grouplist,length,
'PBBITS: group list')
637 CALL mpalloc(rowblockstogroups,two,length,
'mapping row blocks to par. groups (I)')
638 rowblockstogroups(:,:)=0
643 DO WHILE (igrpf <
n .AND. npgrp(igrpf+1) <= ir)
646 rowblockstogroups(1,i)=igrpf
648 DO WHILE (igrpl <
n .AND. npgrp(igrpl+1) < ir)
651 rowblockstogroups(2,i)=igrpl
663 irfrst=ibsize*(ib-1)+1
669 blockcounter(ioffb+1:ioffb+mb)=0
670 DO i=rowblockstogroups(1,ib),rowblockstogroups(2,ib)
671 noffi=int(i-1,mpl)*int(2*
n+2-i,mpl)/2
678 grouplist(ioffg+ngrp)=j
687 DO ir=max(irfrst,npgrp(i)),min(irlast,npgrp(i+1)-1)
691 DO jc=max(ir,npgrp(grouplist(ioffg+j))),npgrp(grouplist(ioffg+j)+1)-1
694 blockcounter(ioffb+jb)=blockcounter(ioffb+jb)+1
705 blockcounter(ioffb+jb)=blockcounter(ioffb+jb)+1
717 IF (blockcounter(ioffb+j) > 0)
THEN
718 nnzero=nnzero+blockcounter(ioffb+j)
720 nbkrow(ib)=nbkrow(ib)+1
738#ifdef SCOREP_USER_ENABLE
739 scorep_user_region_by_name_end(
"pbsbits")
743 WRITE(*,*)
'PBSBITS: number of used elements', nnzero
744 WRITE(*,1000)
'fraction of used elements', 200.0*real(nnzero,mps)/real(nd+
nac,mps)/real(nd+
nac+1,mps)
745 WRITE(*,*)
'PBSBITS: block size', ibsize
746 WRITE(*,*)
'PBSBITS: number of (used) blocks', nblock
747 WRITE(*,1000)
'fraction of used storage ', 100.0*real(ibsize*ibsize+1,mps)*real(nblock,mps)/real(2*nnzero,mps)
7481000
FORMAT(
' PBSBITS: ',a,f7.2,
' %')
766 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
767 INTEGER(mpi),
INTENT(IN) :: ibsize
768 INTEGER(mpl),
DIMENSION(:),
INTENT(IN) :: nsparr
769 INTEGER(mpl),
DIMENSION(:),
INTENT(OUT) :: nsparc
771 INTEGER(mpi) :: ichunk
774 INTEGER(mpi) :: igrpf
775 INTEGER(mpi) :: igrpl
776 INTEGER(mpi) :: iproc
777 INTEGER(mpi) :: ioffb
778 INTEGER(mpi) :: ioffg
786 INTEGER(mpi) :: irfrst
787 INTEGER(mpi) :: irlast
791 INTEGER(mpl) :: length
793 INTEGER(mpl) :: noffi
794 INTEGER(mpl),
PARAMETER :: two=2
795 INTEGER(mpi),
DIMENSION(:,:),
ALLOCATABLE :: rowBlocksToGroups
796 INTEGER(mpi),
DIMENSION(:),
ALLOCATABLE :: blockCounter
797 INTEGER(mpi),
DIMENSION(:),
ALLOCATABLE :: groupList
803#ifdef SCOREP_USER_ENABLE
804 scorep_user_region_by_name_begin(
"pblbits", scorep_user_region_type_common)
806 nd=npgrp(
n+1)-npgrp(1)
807 mb=(nd+
nac-1)/ibsize+1
809 length=int(mb,mpl)*int(
nthrd,mpl)
810 CALL mpalloc(blockcounter,length,
'PBBITS: block counter')
811 length=int(
n,mpl)*int(
nthrd,mpl)
812 CALL mpalloc(grouplist,length,
'PBBITS: group list')
816 CALL mpalloc(rowblockstogroups,two,length,
'mapping row blocks to par. groups (I)')
817 rowblockstogroups(:,:)=0
822 DO WHILE (igrpf <
n .AND. npgrp(igrpf+1) <= ir)
825 rowblockstogroups(1,i)=igrpf
827 DO WHILE (igrpl <
n .AND. npgrp(igrpl+1) < ir)
830 rowblockstogroups(2,i)=igrpl
841 irfrst=ibsize*(ib-1)+1
847 blockcounter(ioffb+1:ioffb+mb)=0
848 DO i=rowblockstogroups(1,ib),rowblockstogroups(2,ib)
849 noffi=int(i-1,mpl)*int(2*
n+2-i,mpl)/2
856 grouplist(ioffg+ngrp)=j
865 DO ir=max(irfrst,npgrp(i)),min(irlast,npgrp(i+1)-1)
869 DO jc=max(ir,npgrp(grouplist(ioffg+j))),npgrp(grouplist(ioffg+j)+1)-1
872 blockcounter(ioffb+jb)=blockcounter(ioffb+jb)+1
883 blockcounter(ioffb+jb)=blockcounter(ioffb+jb)+1
896 IF (blockcounter(ioffb+j) > 0)
THEN
916#ifdef SCOREP_USER_ENABLE
917 scorep_user_region_by_name_end(
"pblbits")
921 WRITE(*,*)
'PBLBITS: column list constructed ',nsparr(mb+1)-nsparr(1),
' words'
939 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
940 INTEGER(mpl),
DIMENSION(:),
INTENT(OUT) :: nsparr
942 INTEGER(mpi) :: ichunk
950 INTEGER(mpl) :: nparc
952 INTEGER(mpl) :: noffi
956 nd=npgrp(
n+1)-npgrp(1)
968 noffi=int(i-1,mpl)*int(2*
n+2-i,mpl)/2
983 DO ir=npgrp(i),npgrp(i+1)-1
999 nsparr(ir+1)=npar+nparc
1009 nsparr(i+1)=nsparr(i+1)+nsparr(i)
1013 nsparr(i+1)=nsparr(i)+1
1015 ntot=nsparr(nd+
nac+1)-nsparr(1)
1018 WRITE(*,*)
'PRBITS: number of diagonal elements',nd+
nac
1019 WRITE(*,*)
'PRBITS: number of used elements',ntot
1020 WRITE(*,1000)
'fraction of used elements', 200.0*real(ntot,mps)/real(nd+
nac,mps)/real(nd+
nac+1,mps)
10211000
FORMAT(
' PRBITS: ',a,f6.2,
' %')
1038 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
1039 INTEGER(mpl),
DIMENSION(:),
INTENT(IN) :: nsparr
1040 INTEGER(mpl),
DIMENSION(:),
INTENT(OUT) :: nsparc
1042 INTEGER(mpi) :: ichunk
1052 INTEGER(mpl) :: noffi
1053 INTEGER(mpl) :: noffr
1057 nd=npgrp(
n+1)-npgrp(1)
1068 noffi=int(i-1,mpl)*int(2*
n+2-i,mpl)/2
1070 DO ir=npgrp(i),npgrp(i+1)-1
1078 DO ic=max(ir,npgrp(j)),npgrp(j+1)-1
1090 noffr=
ndimb+int(ir-1,mpl)*int(
nac/
bs+1,mpl)+1
1116 WRITE(*,*)
'PCBITS: column list constructed ',nsparr(nd+
nac+1)-nsparr(1),
' words'
1131 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
1132 INTEGER(mpl),
DIMENSION(4),
INTENT(OUT) :: ndims
1134 INTEGER(mpi) :: nwcp(0:1)
1135 INTEGER(mpi) :: irgn(2)
1136 INTEGER(mpi) :: inr(2)
1138 INTEGER(mpl) :: noffi
1141 INTEGER(mpi) :: last
1142 INTEGER(mpi) :: lrgn
1143 INTEGER(mpi) :: next
1146 INTEGER(mpi) :: icount
1147 INTEGER(mpi) :: kbfw
1156 IF (
ibfw > 1) kbfw=2
1160 noffi=int(i-1,mpl)*int(i,mpl)*int(
ibfw,mpl)/2
1181 IF (icount > 0) ndims(1)=ndims(1)+1
1183 IF (icount >=
ireqpe)
THEN
1185 IF (icount <=
isngpe) next=2
1186 inr(next)=inr(next)+npgrp(j+1)-npgrp(j)
1187 IF (next /= last)
THEN
1188 irgn(next)=irgn(next)+1
1195 IF (inr(jp) > 0)
THEN
1200 IF ((nwcp(1) < nwcp(0)).OR.
iextnd > 0)
THEN
1204 ndims(2) =ndims(2) +nwcp(icp)
1205 ndims(jp+2)=ndims(jp+2)+nwcp(0)*(npgrp(i+1)-npgrp(i))
1225 INTEGER(mpi),
DIMENSION(:),
INTENT(IN) :: npgrp
1226 INTEGER(mpl),
DIMENSION(:,:),
INTENT(IN) :: nsparr
1227 INTEGER(mpi),
DIMENSION(:),
INTENT(OUT) :: nsparc
1234 INTEGER(mpl) :: ndiff
1235 INTEGER(mpl) :: noffi
1236 INTEGER(mpl) :: noffj
1242 INTEGER(mpi) :: ichunk
1243 INTEGER(mpi) :: next
1244 INTEGER(mpi) :: last
1256 noffi=int(i-1,mpl)*int(i,mpl)*int(
ibfw,mpl)/2
1261 ndiff=(nsparr(1,n1+1)-kl)*(npgrp(i+1)-npgrp(i))-(nsparr(2,n1+1)-l1)
1269 IF (ndiff == 0)
THEN
1270 DO k=npgrp(j),npgrp(j+1)-1
1278 nsparc(kl)=int(ll-l1,mpi)
1283 ll=ll+(npgrp(j+1)-npgrp(j))
1297 m=int(mod(noffj,int(
bs,mpl)),mpi)+jb
1302 noffi=int(j-1,mpl)*int(j,mpl)*int(
ibfw,mpl)/2
1303 l=noffi/
bs+j+noffj/
bs
1306 IF (ndiff == 0)
THEN
1307 DO k=npgrp(j),npgrp(j+1)-1
1315 nsparc(kl)=int(ll-l1,mpi)
1320 ll=ll+(npgrp(j+1)-npgrp(j))
1327 IF (ndiff /= 0)
THEN
1329 nsparc(kl)=int(ll-l1,mpi)
1340 WRITE(*,*)
'SPBITS: sparse structure constructed ',nsparr(1,n1),
' words'
1341 WRITE(*,*)
'SPBITS: dimension parameter of matrix',nsparr(2,1)
1343 WRITE(*,*)
'SPBITS: index of last used location',nsparr(2,n1)
1345 WRITE(*,*)
'SPBITS: index of last used double',nsparr(2,n1/2)
1346 WRITE(*,*)
'SPBITS: index of last used single',nsparr(2,n1)
1362 INTEGER(mpi),
INTENT(IN) :: in
1364 INTEGER(mpl) :: noffd
1370 noffd=int(
n2,mpl)*int(
n2-1,mpl)/2
1372 mb=int(4.0e-6*real(
ndimb2,mps),mpi)
1375 WRITE(*,*)
'CLBMAP: dimension of bit-map',
ndimb2 ,
'(',mb,
'MB)'
1377 WRITE(*,*)
'CLBMAP: dimension of bit-map',
ndimb2 ,
'(< 1 MB)'
1393 INTEGER(mpi),
INTENT(IN) :: im
1394 INTEGER(mpi),
INTENT(IN) :: jm
1399 INTEGER(mpi) :: noffj
1400 INTEGER(mpl) :: noffi
1408 noffi=int(i-1,mpl)*int(i-2,mpl)/2
1410 l=noffi/
bs+i+noffj/
bs
1427 INTEGER(mpi),
INTENT(IN) :: ngroup
1428 INTEGER(mpi),
DIMENSION(:,:),
INTENT(IN) :: npgrp
1429 INTEGER(mpi),
DIMENSION(:),
INTENT(OUT) :: npair
1432 INTEGER(mpl) :: noffi
1442 npair(i)=npair(i)+npgrp(2,i)-1
1443 noffi=int(i-1,mpl)*int(i-2,mpl)/2
1447 IF (btest(
bitmap(l),m))
THEN
1449 npair(i)=npair(i)+npgrp(2,j)
1450 npair(j)=npair(j)+npgrp(2,i)
1473 INTEGER(mpi),
INTENT(IN) :: ipgrp
1474 INTEGER(mpi),
INTENT(OUT) :: npair
1475 INTEGER(mpi),
DIMENSION(:),
INTENT(OUT) :: npgrp
1478 INTEGER(mpl) :: noffi
1479 INTEGER(mpi) :: noffj
1487 noffi=int(i-1,mpl)*int(i-2,mpl)/2
1492 IF (btest(
bitmap(l+noffj/
bs),mod(noffj,
bs)))
THEN
1500 noffi=int(i-1,mpl)*int(i-2,mpl)/2
1502 IF (btest(
bitmap(l+noffj/
bs),mod(noffj,
bs)))
THEN
subroutine pcbits(npgrp, nsparr, nsparc)
Analyze bit fields.
subroutine ndbits(npgrp, ndims, nsparr, ihst)
Analyze bit fields.
subroutine clbits(in, jreqpe, jhispe, jsngpe, jextnd, idimb, ispc)
Calculate bit (field) array size, encoding.
subroutine plbits(in, inar, inac, idimb)
Calculate bit field array size (PARDISO).
subroutine spbits(npgrp, nsparr, nsparc)
Create sparsity information.
subroutine irbits(i, j)
Fill bit fields (counters, rectangular part).
subroutine clbmap(in)
Clear (additional) bit map.
subroutine inbmap(im, jm)
Fill bit map.
subroutine ckbits(npgrp, ndims)
Check sparsity of matrix.
subroutine ggbmap(ipgrp, npair, npgrp)
Get paired (parameter) groups from map.
subroutine prbits(npgrp, nsparr)
Analyze bit fields.
subroutine gpbmap(ngroup, npgrp, npair)
Get pairs (statistic) from map.
subroutine pblbits(npgrp, ibsize, nsparr, nsparc)
Analyze bit fields.
subroutine pbsbits(npgrp, ibsize, nnzero, nblock, nbkrow)
Analyze bit fields.
subroutine inbits(im, jm, inc)
Fill bit fields (counters, triangular part).
subroutine hmpent(ih, x)
entry flt.pt.
integer(mpi) n2
matrix size (map)
integer(mpi) ireqpe
min number of pair entries
integer(mpl) ndimb2
dimension for bit map
integer(mpi) ibfw
bit field width
integer(mpi) iextnd
flag for extended storage (both 'halves' of sym.
integer(mpi) n
matrix size (counters, sparse, triangular part)
integer(mpi), parameter bs
number of bits in INTEGER(mpi)
integer(mpi) nspc
number of precision for sparse global matrix (1=D, 2=D+f)
integer(mpi) nar
additional rows (counters, sparse, rectangular part)
integer(mpi) isngpe
upper bound for pair entry single precision storage
integer(mpi), dimension(:), allocatable bitmap
fit field map for global parameters pairs (measurements)
integer(mpi) mxcnt
max value for bit field counters
integer(mpi) nac
additional columns (counters, sparse, rectangular part)
integer(mpi) nthrd
number of threads
integer(mpl) ndimb
dimension for bit (field) array
integer(mpi), dimension(:), allocatable bitfieldcounters
fit field counters for global parameters pairs (tracks)
(De)Allocate vectors and arrays.