9 USE yomhook
,ONLY : lhook, dr_hook
10 USE parkind1
,ONLY : jprb
12 INTERFACE assignment (=)
21 CHARACTER(LEN=*),
DIMENSION(:),
INTENT(IN) :: hstr
22 REAL,
DIMENSION(SIZE(HSTR)),
INTENT(OUT) :: kout
24 CHARACTER(LEN=8),
DIMENSION(:),
ALLOCATABLE :: ytemp
25 CHARACTER(LEN=4),
DIMENSION(:),
ALLOCATABLE :: ytemp2
26 REAL(KIND=JPRB) :: zhook_handle
28 IF (lhook) CALL dr_hook(
'MODE_CHAR2REAL:CHAR_TO_REAL',0,zhook_handle)
29 SELECT CASE(len(hstr(1)))
32 IF (little_endian_arch) then
33 ALLOCATE(ytemp(isize))
35 ytemp(ji)(1:1) = hstr(ji)(8:8)
36 ytemp(ji)(2:2) = hstr(ji)(7:7)
37 ytemp(ji)(3:3) = hstr(ji)(6:6)
38 ytemp(ji)(4:4) = hstr(ji)(5:5)
39 ytemp(ji)(5:5) = hstr(ji)(4:4)
40 ytemp(ji)(6:6) = hstr(ji)(3:3)
41 ytemp(ji)(7:7) = hstr(ji)(2:2)
42 ytemp(ji)(8:8) = hstr(ji)(1:1)
44 kout = transfer(ytemp,1.0_8,isize)
47 kout = transfer(hstr,1.0_8,isize)
52 IF (little_endian_arch)
THEN
53 ALLOCATE(ytemp2(isize))
55 ytemp2(ji)(1:1) = hstr(ji)(4:4)
56 ytemp2(ji)(2:2) = hstr(ji)(3:3)
57 ytemp2(ji)(3:3) = hstr(ji)(2:2)
58 ytemp2(ji)(4:4) = hstr(ji)(1:1)
60 kout = transfer(ytemp2,1.0_4,isize)
63 kout = transfer(hstr,1.0_4,isize)
67 IF (little_endian_arch) then
68 kout = ichar(hstr(:)(2:2))+256*ichar(hstr(:)(1:1))
70 kout = ichar(hstr(:)(1:1))+256*ichar(hstr(:)(2:2))
78 kout(:) = ichar(hstr(:))
84 CALL
abor1_sfx(
'MODE_CHAR2REAL: CONVERSION ERROR IN READ_DIRECT SUBROUTINE')
86 IF (lhook) CALL dr_hook(
'MODE_CHAR2REAL:CHAR_TO_REAL',1,zhook_handle)
subroutine abor1_sfx(YTEXT)
subroutine char_to_real(KOUT, HSTR)