SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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
integer function nbt(PX, KMAX)
integer function dec(PX, KMAX)
integer function nb(PX, KMAX)
subroutine hline(KTEX, GLINE, I)