SURFEX v8.1
General documentation of Surfex
mode_write_cover_tex.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! ##########################
7 ! ##########################
8 !
9 !-------------------------------------------------------------------------------
10 !
11 !
12 USE yomhook ,ONLY : lhook, dr_hook
13 USE parkind1 ,ONLY : jprb
14 !
15 CONTAINS
16 !
17 !-------------------------------------------------------------------------------
18 !
19 FUNCTION nb (PX,KMAX) RESULT (KNB)
20 !
21 IMPLICIT NONE
22 !
23 REAL, INTENT(IN) :: PX ! real
24 INTEGER, INTENT(IN), OPTIONAL :: KMAX
25 INTEGER :: KNB !
26 !
27 INTEGER :: IMAX ! maximum number of decimals
28 INTEGER :: IX
29 INTEGER :: JK
30 INTEGER :: IDEC,IINT
31 REAL(KIND=JPRB) :: ZHOOK_HANDLE
32 !
33 IF (lhook) CALL dr_hook('MODE_WRITE_COVER_TEX:NB',0,zhook_handle)
34 imax=2
35 IF (PRESENT(kmax)) imax=kmax
36 !
37 iint=0
38 !
39 
40 DO jk=0,8
41  IF ( int(px/10**jk+1.e-7)/=0 ) iint=iint+1
42 END DO
43 !
44 DO jk=1,4
45  ix=int(px*10**imax+1.e-7)
46  IF (ix==0) THEN
47  imax=imax+1
48  ELSE
49  EXIT
50  END IF
51 END DO
52 IF (ix==0) imax=2
53 !
54 idec=imax
55 !
56 DO jk=1,imax
57  IF ( ix == nint(ix/float(10**jk))*10**jk ) THEN
58  idec=idec-1
59  END IF
60 END DO
61 !
62 knb=max(iint,1)+idec+1
63 knb=knb+1
64 IF (lhook) CALL dr_hook('MODE_WRITE_COVER_TEX:NB',1,zhook_handle)
65 !
66 END FUNCTION nb
67 !
68 !-------------------------------------------------------------------------------
69 !
70 FUNCTION nbt (PX,KMAX) RESULT (KNBT)
71 !
72 IMPLICIT NONE
73 !
74 REAL, INTENT(IN) :: PX ! real
75 INTEGER, INTENT(IN), OPTIONAL :: KMAX
76 INTEGER :: KNBT !
77 !
78 INTEGER :: IMAX ! maximum number of decimals
79 INTEGER :: IX
80 INTEGER :: JK
81 INTEGER :: IDEC,IINT
82 REAL(KIND=JPRB) :: ZHOOK_HANDLE
83 !
84 IF (lhook) CALL dr_hook('MODE_WRITE_COVER_TEX:NBT',0,zhook_handle)
85 imax=2
86 IF (PRESENT(kmax)) imax=kmax
87 !
88 iint=0
89 !
90 DO jk=0,8
91  IF ( int(px/10.**jk+1.e-7)/=0 ) iint=iint+1
92 END DO
93 !
94 DO jk=1,4
95  ix=int(px*10**imax+1.e-7)
96  IF (ix==0) THEN
97  imax=imax+1
98  ELSE
99  EXIT
100  END IF
101 END DO
102 IF (ix==0) imax=2
103 !
104 idec=imax
105 !
106 DO jk=1,imax
107  IF ( ix == nint(ix/float(10**jk))*10**jk ) THEN
108  idec=idec-1
109  END IF
110 END DO
111 !
112 knbt=max(iint+idec+1,2)
113 knbt=knbt+1
114 IF (lhook) CALL dr_hook('MODE_WRITE_COVER_TEX:NBT',1,zhook_handle)
115 !
116 END FUNCTION nbt
117 !
118 !-------------------------------------------------------------------------------
119 !
120 FUNCTION dec (PX,KMAX) RESULT (KDEC)
121 !
122 IMPLICIT NONE
123 !
124 REAL, INTENT(IN) :: PX ! real
125 INTEGER, INTENT(IN), OPTIONAL :: KMAX
126 INTEGER :: KDEC ! number of decimals of PX
127 !
128 INTEGER :: IMAX ! maximum number of decimals
129 INTEGER :: IX
130 INTEGER :: JK
131 REAL(KIND=JPRB) :: ZHOOK_HANDLE
132 !
133 IF (lhook) CALL dr_hook('MODE_WRITE_COVER_TEX:DEC',0,zhook_handle)
134 imax=2
135 IF (PRESENT(kmax)) imax=kmax
136 !
137 !
138 DO jk=1,4
139  ix=int(px*10**imax+1.e-7)
140  IF (ix==0) THEN
141  imax=imax+1
142  ELSE
143  EXIT
144  END IF
145 END DO
146 IF (ix==0) imax=2
147 !
148 kdec=imax
149 !
150 DO jk=1,imax
151  IF ( ix == nint(ix/float(10**jk))*10**jk ) THEN
152  kdec=kdec-1
153  END IF
154 END DO
155 IF (lhook) CALL dr_hook('MODE_WRITE_COVER_TEX:DEC',1,zhook_handle)
156 !
157 !
158 END FUNCTION dec
159 !-------------------------------------------------------------------------------
160 SUBROUTINE hline(KTEX,GLINE,I)
161 !
162 IMPLICIT NONE
163 !
164 INTEGER, INTENT(IN) :: KTEX ! logical unit
165 LOGICAL, INTENT(INOUT) :: GLINE ! flag to write one line
166 INTEGER, INTENT(IN) :: I ! line number
167 REAL(KIND=JPRB) :: ZHOOK_HANDLE
168 
169  IF (lhook) CALL dr_hook('MODE_WRITE_COVER_TEX:HLINE',0,zhook_handle)
170  IF ((i==3 .OR. i== 7 .OR. i== 9 .OR. i==15 .OR. i== 23 .OR. i== 24 &
171  .OR. i== 28 .OR. i== 33 .OR. i==47 .OR. i== 66 .OR. i== 79 &
172  .OR. i== 87 .OR. i==104 .OR. i==122 .OR. i==123 .OR. i==125 &
173  .OR. i==161 .OR. i==173 .OR. i==176 .OR. i==181 .OR. i==186 &
174  .OR. i==191 .OR. i==197 .OR. i==198 .OR. i==207 .OR. i==214 &
175  .OR. i==219 .OR. i==225 .OR. i==229 .OR. i==232 .OR. i==235 &
176  .OR. i==241 .OR. i==243 )&
177  .AND. gline ) THEN
178  WRITE(ktex,*) '\hline'
179  gline=.false.
180  END IF
181 IF (lhook) CALL dr_hook('MODE_WRITE_COVER_TEX:HLINE',1,zhook_handle)
182 END SUBROUTINE hline
183 !-------------------------------------------------------------------------------
184 END MODULE mode_write_cover_tex
subroutine hline(KTEX, GLINE, I)
integer function nb(PX, KMAX)
integer function nbt(PX, KMAX)
integer, parameter jprb
Definition: parkind1.F90:32
integer function dec(PX, KMAX)
logical lhook
Definition: yomhook.F90:15