Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
PROGRAM testlibcomp
IMPLICIT NONE
INTEGER, PARAMETER :: IDIMX = 2
INTEGER, PARAMETER :: IDIMY = 3
INTEGER, PARAMETER :: IDIMZ = 7
REAL(KIND=8),DIMENSION(IDIMX,IDIMY,IDIMZ) :: XORGTAB,XINTAB,XOUTTAB
INTEGER :: DATASIZE ! original size of array
INTEGER :: COMPSIZE ! size of compressed array
INTEGER :: JI
INTEGER :: INBELT,ITYPECOD
! Level 1 : constant level
XORGTAB(:,:,1) = -1.5
! Level 2 : 2 values in level
XORGTAB(:,:,2) = -10.4
XORGTAB(1,3,2) = -5.3
! Level 3 : 3 values in level
XORGTAB(:,:,3) = -8.2
XORGTAB(2,2,3) = 10.3
XORGTAB(1,3,3) = -9999.99
! Level 4 : normal
XORGTAB(:,:,4) = RESHAPE((/ (-(JI/1000.),JI=1,6) /),(/ IDIMX,IDIMY /))
! Level 5 : Min exclus
XORGTAB(:,:,5) = XORGTAB(:,:,4)
XORGTAB(2,1,5) = -5.5
! Level 6 : Max exclus
XORGTAB(:,:,6) = XORGTAB(:,:,4)
XORGTAB(2,2,6) = 10.8
! Level 7 : Min et Max exclus
XORGTAB(:,:,7) = XORGTAB(:,:,4)
XORGTAB(2,1,7) = -5.5
XORGTAB(2,2,7) = 10.8
XINTAB(:,:,:) = XORGTAB(:,:,:)
DATASIZE = IDIMX * IDIMY * IDIMZ
CALL COMPRESS_FIELD(XINTAB,IDIMX,IDIMY,DATASIZE,COMPSIZE)
PRINT *,"---> org size = ",DATASIZE,", comp size = ",COMPSIZE
! Now XINTAB is compressed
CALL GET_COMPHEADER(XINTAB,DATASIZE,INBELT,ITYPECOD)
IF (INBELT /= DATASIZE) THEN
PRINT *, "Fatal error in testlibcomp !"
STOP
END IF
CALL DECOMPRESS_FIELD(XOUTTAB,DATASIZE,XINTAB,COMPSIZE,ITYPECOD)
! XOUTTAB contains the uncompressed data
DO JI=1,IDIMZ
PRINT *,"Level ",JI
PRINT *," Original : ",XORGTAB(:,:,JI)
PRINT *," comp/uncomp : ",XOUTTAB(:,:,JI)
PRINT *," Difference : ",XORGTAB(:,:,JI)-XOUTTAB(:,:,JI)
END DO
END PROGRAM testlibcomp