SURFEX v8.1
General documentation of Surfex
decfp_mf.F
Go to the documentation of this file.
1  SUBROUTINE decfp_mf (PFVAL,KEXP,KMANT)
2  USE parkind1, ONLY : jprb
3  USE yomhook , ONLY : lhook, dr_hook
4  USE lfi_precision
5 !
6 !********************************************************************
7 !*
8 !* NAME : DECFP
9 !*
10 !* FUNCTION : DECODE GRIB CODE REPRESENTATION TO
11 !* FLOATING POINT NUMBER.
12 !*
13 !* INPUT : KEXP - 8 BIT SIGNED EXPONENT
14 !* KMANT - 24 BIT MANTISSA
15 !*
16 !* OUTPUT : PFVAL - FLOATING POINT NUMBER
17 !* KEXP - UNCHANGED
18 !* KMANT - UNCHANGED
19 !*
20 !* JOHN HENNESSY , ECMWF , 15TH APRIL 1985
21 !*
22 !* Modified by Jean CLOCHARD, February 1990, to comply with "DOCTOR",
23 !* and to get a more straight-forward code.
24 !*
25 !********************************************************************
26 !
27  IMPLICIT NONE
28 !
29  INTEGER (KIND=JPLIKM) :: KEXP
30  INTEGER (KIND=JPLIKM) :: KMANT
31 !
32  REAL (KIND=JPDBLD) :: PFVAL
33 !
34  REAL (KIND=JPDBLD) :: ZC16
35 !
36  SAVE zc16
37  DATA zc16 / 16.0_jpdbld /
38 !
39 ! Direct decoding, depending on sign bit, included in KEXP.
40 !
41 !
42  REAL(KIND=JPRB) :: ZHOOK_HANDLE
43  IF (lhook) CALL dr_hook('DECFP_MF',0,zhook_handle)
44  IF (kexp.LT.128) THEN
45  pfval = kmant*(zc16**(kexp-70))
46  ELSE
47  pfval = -kmant*(zc16**(kexp-198))
48  ENDIF
49 !
50 !
51  IF (lhook) CALL dr_hook('DECFP_MF',1,zhook_handle)
52  ENDSUBROUTINE decfp_mf
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine decfp_mf(PFVAL, KEXP, KMANT)
Definition: decfp_mf.F:2