SURFEX v7.3
General documentation of Surfex
|
00001 SUBROUTINE DECFP_MF (PFVAL,KEXP,KMANT) 00002 USE PARKIND1, ONLY : JPRB 00003 USE YOMHOOK , ONLY : LHOOK, DR_HOOK 00004 C 00005 C******************************************************************** 00006 C* 00007 C* NAME : DECFP 00008 C* 00009 C* FUNCTION : DECODE GRIB CODE REPRESENTATION TO 00010 C* FLOATING POINT NUMBER. 00011 C* 00012 C* INPUT : KEXP - 8 BIT SIGNED EXPONENT 00013 C* KMANT - 24 BIT MANTISSA 00014 C* 00015 C* OUTPUT : PFVAL - FLOATING POINT NUMBER 00016 C* KEXP - UNCHANGED 00017 C* KMANT - UNCHANGED 00018 C* 00019 C* JOHN HENNESSY , ECMWF , 15TH APRIL 1985 00020 C* 00021 C* Modified by Jean CLOCHARD, February 1990, to comply with "DOCTOR", 00022 C* and to get a more straight-forward code. 00023 C* 00024 C******************************************************************** 00025 C 00026 #include "precision.h" 00027 C 00028 INTEGER KEXP, KMANT 00029 C 00030 REAL (KIND=JPDBLR) PFVAL 00031 C 00032 REAL (KIND=JPDBLR) ZC16 00033 C 00034 SAVE ZC16 00035 DATA ZC16 / 16. / 00036 C 00037 C Direct decoding, depending on sign bit, included in KEXP. 00038 C 00039 C 00040 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00041 IF (LHOOK) CALL DR_HOOK('DECFP_MF',0,ZHOOK_HANDLE) 00042 IF (KEXP.LT.128) THEN 00043 PFVAL = KMANT*(ZC16**(KEXP-70)) 00044 ELSE 00045 PFVAL = -KMANT*(ZC16**(KEXP-198)) 00046 ENDIF 00047 C 00048 C 00049 IF (LHOOK) CALL DR_HOOK('DECFP_MF',1,ZHOOK_HANDLE) 00050 END