36
37
40
41
42
43#include "implicit_f.inc"
44
45
46
47
48
49
50#include "com01_c.inc"
51#include "com04_c.inc"
52#include "scr17_c.inc"
53#include "scr03_c.inc"
54#include "units_c.inc"
55#include "warn_c.inc"
56#include "param_c.inc"
57#include "remesh_c.inc"
58#include "sphcom.inc"
59
60
61
62 my_real x(nb_points),y(nb_points)
63 INTEGER NB_POINTS,INPUT_SIZE_X,INPUT_SIZE_Y, INPUT_CURVE_TYPE
64 my_real input_x_minvalue, input_x_maxvalue, input_y_minvalue, input_y_maxvalue
65 CHARACTER*1 INPUT_SYMBOL
66 CHARACTER(*) INPUT_TXT_X, INPUT_TXT_Y
67
68 OPTIONAL :: input_size_x, input_size_y, input_x_minvalue, input_y_minvalue,
69 . input_x_maxvalue, input_y_maxvalue, input_symbol,
70 . input_curve_type, input_txt_x, input_txt_y
71
72
73
74 CHARACTER(len=60) :: FMTA
75 INTEGER I,J,II,CURVE(NB_POINTS),SIZE_X,SIZE_Y,CURVE_TYPE,COORDX,COORDY,LENA
76 my_real incr_x,incr_y,x_minvalue, x_maxvalue, y_minvalue, y_maxvalue
77 CHARACTER(LEN=NCHARLINE) :: CHAR(100)
78 CHARACTER(LEN=NCHARLINE) :: CHAR1(100)
79 CHARACTER(LEN=NCHARLINE) :: CHAR2
80 CHARACTER(LEN=NCHARLINE) :: TXT_X
81 CHARACTER(LEN=NCHARLINE) ::
82 CHARACTER*1 SYMBOL
83 INTEGER, DIMENSION(:,:), ALLOCATABLE :: GRID
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 IF ( .NOT. PRESENT(input_size_x)) THEN
106 size_x = 100
107 ELSE
108 size_x = input_size_x
109 ENDIF
110
111 IF ( .NOT. PRESENT(input_size_y)) THEN
112 size_y = 30
113 ELSE
114 size_y = input_size_y
115 ENDIF
116
117 IF ( .NOT. PRESENT(input_x_minvalue)) THEN
118 x_minvalue = ep20
119 DO i=1,nb_points
120 x_minvalue =
min(x(i),x_minvalue)
121 ENDDO
122 ELSE
123 x_minvalue = input_x_minvalue
124 ENDIF
125
126 IF ( .NOT. PRESENT(input_y_minvalue)) THEN
127 y_minvalue = ep20
128 DO i=1,nb_points
129 y_minvalue =
min(y(i),y_minvalue)
130 ENDDO
131 ELSE
132 y_minvalue = input_y_minvalue
133 ENDIF
134
135 IF ( .NOT. PRESENT(input_x_maxvalue)) THEN
136 x_maxvalue = -ep20
137 DO i=1,nb_points
138 x_maxvalue =
max(x(i),x_maxvalue)
139 ENDDO
140 ELSE
141 x_maxvalue = input_x_maxvalue
142 ENDIF
143
144 IF ( .NOT. PRESENT(input_y_maxvalue)) THEN
145 y_maxvalue = -ep20
146 DO i=1,nb_points
147 y_maxvalue =
max(y(i),y_maxvalue)
148 ENDDO
149 ELSE
150 y_maxvalue = input_y_maxvalue
151 ENDIF
152
153 IF ( .NOT. PRESENT(input_symbol)) THEN
154 symbol(1:1) = '#'
155 ELSE
156 symbol(1:1) = input_symbol(1:1)
157 ENDIF
158
159 IF ( .NOT. PRESENT(input_curve_type)) THEN
160 curve_type = 0
161 ELSE
162 curve_type = input_curve_type
163 ENDIF
164
165 IF ( .NOT. PRESENT(input_txt_x)) THEN
166 txt_x = ''
167 ELSE
168 txt_x = ''
169 txt_x(1:len_trim(input_txt_x)) = input_txt_x(1:len_trim(input_txt_x))
170 ENDIF
171
172 IF ( .NOT. PRESENT(input_txt_y)) THEN
173 txt_y = ''
174 ELSE
175 txt_y = ''
176 txt_y(1:len_trim(input_txt_y)) = input_txt_y(1:len_trim(input_txt_y))
177 ENDIF
178
179 char=''
180 char1=''
181 char2=''
182 curve(1:nb_points) = 0
183 incr_x = (x_maxvalue-x_minvalue)/(size_x-1)
184 incr_y = (y_maxvalue-y_minvalue)/(size_y-1)
185
186 ALLOCATE(grid(size_x,size_y))
187 DO j = 1, size_y
188 DO i = 1, size_x
189 grid(i,j) = 0
190 ENDDO
191 ENDDO
192
193 IF(curve_type == 0)THEN
194 DO i=1,nb_points
195 coordx =
min(size_x,
max(1,int((x(i) - x_minvalue)/incr_x)))
196 coordy =
min(size_y,
max(1,int((y(i) - y_minvalue)/incr_y)))
197 grid(coordx,coordy) = 1
198 ENDDO
199 ELSEIF(curve_type == 1)THEN
200 DO i=1,nb_points
201 coordx =
min(size_x,
max(1,int((x(i) - x_minvalue)/incr_x)))
202 coordy =
min(size_y,
max(1,int((y(i) - y_minvalue)/incr_y)))
203 DO j=1,coordy
204 grid(coordx,j) = 1
205 ENDDO
206 ENDDO
207 ENDIF
208
209 DO j = 1, size_y
210 char(j)= " "
211 ENDDO
212 DO J = 1, SIZE_Y
213 DO I = 1, SIZE_X
214 IF( GRID(I,SIZE_Y+1-J) == 1) CHAR(J)(I:I)= SYMBOL(1:1)
215 ENDDO
216 ENDDO
217
218 DEALLOCATE(GRID)
219
220 IF(PRESENT(INPUT_TXT_Y)) THEN
221 WRITE(IOUT,'(12X,A)') TXT_Y(1:LEN_TRIM(TXT_Y))
222 ENDIF
223
224 WRITE(IOUT,'(19X,A)') '^'
225 WRITE(IOUT,'(19X,A,A)') '|',CHAR(1)(1:SIZE_X)
226 WRITE(IOUT,'(9X,F7.3,1X,A,A,A)') Y_MAXVALUE,'--','|',CHAR(2)(1:SIZE_X)
227 DO I = 3,SIZE_Y-1
228 WRITE(IOUT,'(19X,A,A)') '|',CHAR(I)(1:SIZE_X)
229 ENDDO
230 WRITE(IOUT,'(9X,F7.3,1X,A,A,A)') Y_MINVALUE,'--','|',CHAR(SIZE_Y)(1:SIZE_X)
231
232 DO II = 1,SIZE_X+2
233 CHAR2(II:II) = '-'
234 ENDDO
235 CHAR2(SIZE_X+2:SIZE_X+3) = '>'
236 IF(PRESENT(INPUT_TXT_X) ) THEN
237 CHAR2(SIZE_X+4:SIZE_X+3+LEN_TRIM(TXT_X)) = TXT_X(1:LEN_TRIM(TXT_X))
238 ENDIF
239
240 LENA = LEN_TRIM(CHAR2)
241 WRITE(IOUT,'(20X,A)') CHAR2(1:LENA)
242
243 CHAR2 = ' '
244 CHAR2(1:1)= '|'
245 CHAR2(SIZE_X:SIZE_X)= '|'
246 LENA = LEN_TRIM(CHAR2)
247 WRITE(IOUT,'(20X,A)') CHAR2(1:LENA)
248
249 IF (SIZE_X <= 10) THEN
250 FMTA='(14X,1PG11.3,5X,1PG11.3)'
251 ELSEIF (SIZE_X <= 20) THEN
252 FMTA='(14X,1PG11.3,8X,1PG11.3)'
253 ELSEIF (SIZE_X <= 30) THEN
254 FMTA='(14X,1PG11.3,18X,1PG11.3)'
255 ELSEIF (SIZE_X <= 40) THEN
256 FMTA='(14X,1PG11.3,28X,1PG11.3)'
257 ELSEIF (SIZE_X <= 50) THEN
258 FMTA='(14X,1PG11.3,38X,1PG11.3)'
259 ELSEIF (SIZE_X <= 60) THEN
260 FMTA='(14X,1PG11.3,48X,1PG11.3)'
261 ELSEIF (SIZE_X <= 70) THEN
262 FMTA='(14X,1PG11.3,58X,1PG11.3)'
263 ELSEIF (SIZE_X <= 80) THEN
264 FMTA='(14X,1PG11.3,68X,1PG11.3)'
265 ELSEIF (SIZE_X <= 90) THEN
266 FMTA='(14X,1PG11.3,78X,1PG11.3)'
267 ELSE
268 FMTA='(14 X,1PG11.3,85X,1PG11.3)'
269 ENDIF
270
271 WRITE(IOUT,FMT=FMTA) X_MINVALUE,X_MAXVALUE
272
273 WRITE(IOUT,*) ' '
274 WRITE(IOUT,*) ' '
275
276 RETURN
integer, parameter ncharline