SURFEX v8.1
General documentation of Surfex
gsbyte_mf.F
Go to the documentation of this file.
1  SUBROUTINE gsbyte_mf ( KS, KD, KOFF, KSIZE, KSKBTW, K, KBPW, &
2  & CDADIR, KLENG, KERR, KWORD, LDNEXT )
3  USE parkind1, ONLY : jprb
4  USE yomhook , ONLY : lhook, dr_hook
5  USE lfi_precision
6 !
7  IMPLICIT NONE
8  INTEGER (KIND=JPLIKM), PARAMETER :: JPSHOR=100
9 !
10 !
11  INTEGER (KIND=JPLIKM) :: KOFF
12  INTEGER (KIND=JPLIKM) :: KSIZE
13  INTEGER (KIND=JPLIKM) :: KSKBTW
14  INTEGER (KIND=JPLIKM) :: K
15  INTEGER (KIND=JPLIKM) :: KBPW
16  INTEGER (KIND=JPLIKM) :: KLENG
17  INTEGER (KIND=JPLIKM) :: KERR
18  INTEGER (KIND=JPLIKM) :: KWORD
19 !
20  INTEGER (KIND=JPLIKB) :: KS (*)
21  INTEGER (KIND=JPLIKB) :: KD (*)
22 !
23  LOGICAL :: LDNEXT
24 !
25  CHARACTER(LEN=1) :: CDADIR
26 !
27  INTEGER (KIND=JPLIKM) :: IWORD, IOFF, IOFF2
28  INTEGER (KIND=JPLIKB) :: IMASKS (128)
29 !
30  SAVE imasks
31 !
32  DATA imasks(2) / 0 /
33 !
34  REAL(KIND=JPRB) :: ZHOOK_HANDLE
35  IF (lhook) CALL dr_hook('GSBYTE_MF',0,zhook_handle)
36  kerr=0
37 !
38  IF (k.GT.0) THEN
39  ioff2=koff+(ksize+kskbtw)*k
40 !
41  IF (ldnext) THEN
42 !
43  iword=kword+ioff2/kbpw
44  ioff=mod(ioff2,kbpw)
45  ELSE
46  iword=kword+(ioff2-1)/kbpw
47  ioff=1+mod(ioff2-1,kbpw)
48  ENDIF
49  IF (iword.GT.kleng) THEN
50  kerr = -2
51  IF (cdadir.EQ.'D') THEN
52  WRITE (unit=*,fmt=*) &
53  &'GSBYTE - UNABLE TO PROCEED REQUESTED EXTRACTION FROM BIT STREAM:'
54  ELSE
55  WRITE (unit=*,fmt=*) &
56  &'GSBYTE - UNABLE TO PROCEED REQUESTED INSERTION INTO BIT STREAM:'
57  ENDIF
58  IF (ldnext) THEN
59  WRITE (unit=*,fmt='('' GSBYTE - NEXT WORD'',I9, &
60  & '' WOULD BE OUTSIDE ARRAY BOUNDS'',I9)') iword,kleng
61  ELSE
62  WRITE (unit=*,fmt='('' GSBYTE - LAST WORD'',I9, &
63  & '' WOULD BE OUTSIDE ARRAY BOUNDS'',I9)') iword,kleng
64  ENDIF
65  IF (lhook) CALL dr_hook('GSBYTE_MF',1,zhook_handle)
66  RETURN
67  ENDIF
68  ELSE
69  iword=kword
70  ioff=koff
71  ENDIF
72 ! Vector machines use preferably GSBITE_MF :
73 #if defined ( NECSX ) || defined ( VPP ) || defined ( CRAY )
74  IF (k.GT.jpshor.OR.k.LE.0) THEN
75  CALL gsbite_mf (ks,kd,koff,ksize,kskbtw,k,kbpw,imasks,cdadir)
76  ELSEIF (cdadir.EQ.'D') THEN
77  CALL gbytes_mf (ks,kd,koff,ksize,kskbtw,k)
78  ELSE
79  CALL sbytes_mf (ks,kd,koff,ksize,kskbtw,k)
80  ENDIF
81 #else
82  IF (cdadir.EQ.'D') THEN
83  CALL gbytes_mf (ks,kd,koff,ksize,kskbtw,k)
84  ELSE
85  CALL sbytes_mf (ks,kd,koff,ksize,kskbtw,k)
86  ENDIF
87 #endif
88 
89  kword=iword
90  koff=ioff
91  IF (lhook) CALL dr_hook('GSBYTE_MF',1,zhook_handle)
92  ENDSUBROUTINE gsbyte_mf
subroutine gsbyte_mf(KS, KD, KOFF, KSIZE, KSKBTW, K, KBPW,
Definition: gsbyte_mf.F:2
subroutine gsbite_mf(KS, KD, KSKST, KSIZE, KSKBTW, K, KBPW, KMASK, YADIR)
Definition: gsbite_mf.F:2
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine gbytes_mf(KS, KD, KSKIP1, KBSIZ, KSKIP2, KBYTES)
Definition: gbytes_mf.F:2
subroutine sbytes_mf(KD, KS, KSKIP1, KBSIZ, KSKIP2, KBYTES)
Definition: sbytes_mf.F:2