SURFEX v8.1
General documentation of Surfex
gbyte_mf.F
Go to the documentation of this file.
1  SUBROUTINE gbyte_mf(KSOURC,KDEST,KOFSET,KBYTSZ)
2  USE parkind1, ONLY : jprb
3  USE yomhook , ONLY : lhook, dr_hook
4  USE lfi_precision
5 !*****
6 !*
7 !* FUNCTION: GET A SINGLE BIT FIELD FROM KSOURC INTO KDEST
8 !*
9 !* INPUT : KSOURC(1)= WORD CONTAINING START OF BIT FIELD
10 !* KDEST = TARGET WORD
11 !* KOFSET = OFFSET IN BITS FOR START OF THE FIELD
12 !* KBYTSZ = LENGTH OF FIELD IN BITS
13 !*
14 !* OUTPUT : KSOURC,KOFSET,KBYTSZ UNCHANGED
15 !* KDEST CONTAINS FIELD RIGHT JUSTIFIED
16 !*
17 !* AUTHOR : M.MIQUEU 08/1981 (REWRITTEN FROM J.MARTELLET'S)
18 !*
19 !*****
20 !
21  IMPLICIT NONE
22 !
23  INTEGER (KIND=JPLIKM) :: KOFSET
24  INTEGER (KIND=JPLIKM) :: KBYTSZ
25  INTEGER (KIND=JPLIKB) :: KDEST
26 !
27  INTEGER (KIND=JPLIKB) :: KSOURC (2)
28 !
29  INTEGER (KIND=JPLIKM) :: INBPW, ISH1
30 !
31  REAL(KIND=JPRB) :: ZHOOK_HANDLE
32  IF (lhook) CALL dr_hook('GBYTE_MF',0,zhook_handle)
33  inbpw=64
34  ish1=kofset+kbytsz-inbpw
35 !
36  IF(ish1.LE.0) THEN
37 !
38 !
39 ! BYTES DO NOT SPAN WORDS
40 !
41 !
42  ish1=-ish1
43 !
44 !
45  kdest=ibits(ksourc(1),ish1,kbytsz)
46 !
47  ELSE
48 !
49 ! BYTE SPANS WORDS
50 !
51 !
52  kdest=ior( &
53  & ishft( &
54  & ibits(ksourc(1),0,inbpw-kofset) &
55  & , ish1 ) &
56  & , &
57  & ibits(ksourc(2),inbpw-ish1,ish1) &
58  & )
59 !
60 !
61 !
62  ENDIF
63 !
64  IF (lhook) CALL dr_hook('GBYTE_MF',1,zhook_handle)
65  ENDSUBROUTINE gbyte_mf
subroutine gbyte_mf(KSOURC, KDEST, KOFSET, KBYTSZ)
Definition: gbyte_mf.F:2
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15