NCEPLIBS-w3emc 2.12.0
Loading...
Searching...
No Matches
w3fp10.f
Go to the documentation of this file.
1C> @file
2C> @brief Printer contour subroutine.
3C> @author Ralph Jones @date 1989-09-08
4
5C> Prints a two-dimensional grid of any shape, with
6C> contouring, if desired. Grid values are scaled according to
7C> to constants specified by the programer, rounded, and printed
8C> as 4,3, or 2 digit integers with sign, the sign marking the
9C> grid position of the printed number. If contouring is requested,
10C> bessel's interpolation formula is used to optain the contour lines.
11C> Contours are indicated by alphabetic characters ranging from a to
12C> h or numeric characters from 0 to 9. Contour origin and interval
13C> are specified by the programmer in terms of printed values.
14C>
15C> ### Program History Log
16C> Date | Programmer | Comments
17C> -----|------------|---------
18C> 1989-09-08 | Ralph Jones | Initial
19C> 1992-05-02 | Ralph Jones | Convert to cray cft77 fortran, add save.
20C>
21C> @param[in] RDATA Real array of grid data to be printed.
22C> @param[in] KTBL Integer array with shape of array.
23C> @param[in] CNST Real array of four elements, used in
24C> scaling for printing and contouring.
25C> @param[in] TITLE Is a array of 132 characters or less of
26C> hollerith data, 1st char. must be blank.
27C> printed at bottom of the map.
28C> @param[in] KRECT 1 if grid is rectangular, 0 otherwise.
29C> @param[in] KCONTR 1 for contouring , 0 otherwise.
30C> @param[in] LINEV 0 is for 6 lines per vertical inch,
31C> non-zero 8 lines per vertical inch.
32C> @param[in] IWIDTH Number of characters in print line,
33C> 132 is standard printer.
34C>
35C> Return conditions: Normal subroutine return, unless number of rows is
36C> greater than 200, prints error message and exits.
37C>
38C> @note Special version of w3fp05(), 1st point is upper left hand
39C> corner. Written on request of peter chase because some
40C> grib fields can start with the upper left hand corner
41C> as the 1st point of a grid.
42C>
43C> @author Ralph Jones @date 1989-09-08
44 SUBROUTINE w3fp10(RDATA,KTBL,CNST,TITLE,KRECT,KCONTR,
45 & LINEV,IWIDTH)
46C
47 REAL CNST(4)
48 REAL RDATA(*)
49 REAL RWA(28)
50 REAL RWB(28)
51 REAL RWC(28)
52 REAL RWD(28)
53 REAL VDJA(29)
54 REAL VDJB(28)
55 REAL VDJC(28)
56C
57 INTEGER TITLE(33)
58 INTEGER KRLOC(200)
59 INTEGER KTBL(*)
60 INTEGER OUTPUT
61 INTEGER PAGNL
62 INTEGER PAGNR
63 INTEGER PAGN3
64 INTEGER PCCNT
65 INTEGER PCFST
66 INTEGER PGCNT
67 INTEGER PGCNTA
68 INTEGER PGFST
69 INTEGER PGFSTA
70 INTEGER PGMAX
71C
72 LOGICAL DONE
73 LOGICAL LCNTR
74 LOGICAL RECT
75C
76 CHARACTER*1 KALFA(16)
77 CHARACTER*1 KALPH(20)
78 CHARACTER*1 KHASTR
79 CHARACTER*1 KHBLNK
80 CHARACTER*1 KHDOLR
81 CHARACTER*1 KHMNS
82 CHARACTER*1 KHPLUS
83 CHARACTER*1 KHRSTR
84 CHARACTER*1 KHTBL(10)
85 CHARACTER*1 KLINE(126)
86 CHARACTER*1 KLINES(132)
87 CHARACTER*1 KNUMB(20)
88C
89 equivalence(crmx,vdja(29))
90 equivalence(kline(1),klines(8))
91 equivalence(vdjc(1),rwa(1))
92C
93C ... THE VALUE CRMX IS MACHINE DEPENDENT, IT SHOULD BE
94C ... SET TO A VALUE A LITTLE LESS THAN THE LARGEST POSITIVE
95C ... FLOATING POINT NUMBER FOR THE COMPUTER.
96C
97 SAVE
98C> The value CRMX is machine dependent, it should be
99C> set to a value a little less than the largest positive
100C> floating point number for the computer.
101 DATA crmx /10.e70/
102 DATA kalfa /'A',' ','B',' ','C',' ','D',' ','E',' ','F',
103 & ' ','G',' ','H',' '/
104 DATA khastr/'*'/
105 DATA khblnk/' '/
106 DATA khdolr/'$'/
107 DATA khmns /'-'/
108 DATA khplus/'+'/
109 DATA khrstr/'1'/
110 DATA khtbl /'0','1','2','3','4','5','6','7','8','9'/
111
112C> LIMNRW is limit on number of rows allowed and is dimension of KRLOC
113 DATA limnrw/200/
114 DATA knumb /'0',' ','1',' ','2',' ','3',' ','4',' ',
115 & '5',' ','6',' ','7',' ','8',' ','9',' '/
116 DATA output/6/
117 DATA r5 /.2/
118 DATA r50 /.02/
119C
120 8000 FORMAT (1h0,10x,44herror from w3fp10 ... number of rows in your,
121 & 9h array = ,i4,24h which exceeds limit of ,i4)
122 8100 FORMAT ( 1ht)
123 8200 FORMAT ( 1hs)
124 8300 FORMAT ( 1h ,/,1h ,/,1h )
125 8400 FORMAT ( 1h ,/,1h )
126 8500 FORMAT ( 132a1)
127 8600 FORMAT ( 33a4)
128C
129C COMPUTE VALUES FOR PRINTER WIDTH
130C
131 IF (iwidth.GE.132.OR.iwidth.LE.0) pgmax = 25
132 IF (iwidth.GE.1.AND.iwidth.LE.22) pgmax = 3
133 IF (iwidth.GT.22.AND.iwidth.LT.132) pgmax = (iwidth-7) / 5
134 lw = (pgmax * 5 + 7) / 4
135 pagn3 = pgmax + 3
136 vdja(pagn3+1) = crmx
137 mxpg = pgmax * 5 + 7
138C
139 IF (linev .NE. 0) THEN
140C
141C ...OTHERWISE LINEV IS NON-ZERO, SO 8 LINES/INCH IS DESIRED...
142C
143 linate = 1
144 r4 = 0.250
145 r32 = 0.03125
146 con2 = 10.0
147 nbtwn = 3
148C
149 ELSE
150C
151 linate = 2
152 r4 = 0.33333333
153 r32 = 1.0 / 18.0
154 con2 = 6.0
155 nbtwn = 2
156 ENDIF
157C
158 pgcnta = 0
159 pgfsta = 0
160 rect = .false.
161 done = .false.
162 kz = 0
163 kza = 1000
164 a = cnst(1)
165 kca = 2 * (1 - krect)
166C
167C TO SET NO. OF DIGITS TO BE PRINTED
168C WHICH IS A FUNCTION OF THE TENS POSITION IN KCONTR
169C
170 nodig = iabs(kcontr/10)
171 nodig = 3 - nodig
172C
173C WHERE C(NODIG) + 1 IS NO. OF DIGITS TO BE PRINTED
174C
175 IF (nodig.LT.1 .OR. nodig.GT.3) nodig = 3
176C
177C ANY OUT-OF-RANGE WILL GET 4 DIGITS
178C
179 lcntr = .false.
180 nconq = iabs(mod(kcontr,10))
181 IF (nconq .EQ. 0) GO TO 400
182 IF (nconq .LE. 2) GO TO 300
183C
184C OTHERWISE RESET NCONQ
185C
186 nconq = 0
187 GO TO 400
188C
189 300 CONTINUE
190 lcntr = .true.
191C
192C WITH NCONQ = 1 FOR LETTERS,AND = 2 FOR NUMBERS IN CONTOUR BANDS
193C
194 400 CONTINUE
195 IF (nconq .NE. 2) THEN
196C
197C OTHERWISE SET AS LETTERS
198C
199 kcow = 16
200 DO 500 j = 1,kcow
201 kalph(j) = kalfa(j)
202 500 CONTINUE
203C
204 ELSE
205C
206 kcow = 20
207 DO 700 j = 1,kcow
208 kalph(j) = knumb(j)
209 700 CONTINUE
210C
211 ENDIF
212C
213 radj = 4 * kcow
214 kd = 1
215C
216C *** SET UP TABLE OF INDICES CORRESPONDING TO FIRST ITEM IN EACH ROW
217C *** THIS IS KRLOC
218C *** PICK OUT SIZE AND ROW NUMBER OF LARGEST ROW (KCMX AND KCLMX)
219C *** KZA LEFT-JUSTIFIES MAP IF ALL ROWS HAVE COMMON MINIMAL OFFSET
220C
221 IF (ktbl(1 ).NE.(-1)) THEN
222C
223C *** ONE-DIMENSIONAL FORM
224C
225 ktf = 3
226 kza = 0
227 imin = ktbl(2)
228 jmin = ktbl(3)
229 jmax = ktbl(3) + ktbl(1) - 1
230 nrws = ktbl(1)
231 IF (nrws .GT. limnrw) THEN
232 WRITE (output,8000) nrws , limnrw
233 RETURN
234 ENDIF
235 kc = 1
236C
237 DO 1000 j = 1,nrws
238 krloc(j) = kd
239 IF (ktbl(kc+4) + ktbl(kc+3).LE.kz ) GO TO 900
240 kclmx = j
241 imax = ktbl(kc+4) + ktbl(kc+3)
242 kz = imax
243 kcmx = krloc(j) + ktbl(kc+4)
244 900 CONTINUE
245 kd = kd + ktbl(kc+4)
246 kc = kc + kca
247 1000 CONTINUE
248C
249 ELSE
250C
251C *** TWO-DIMENSIONAL FORM
252C *** THE TWO-DIMENSIONAL FORM IS COMPILER-DEPENDENT
253C *** IT DEPENDS ON THE TWO-DIMENSIONAL ARRAY BEING STORED COLUMN-WISE
254C *** THAT IS, WITH THE FIRST INDEX VARYING THE FASTEST
255C
256 imin = ktbl(6)
257 jmin = ktbl(7)
258 nrws = ktbl(5)
259 IF (nrws .GT. limnrw) THEN
260 WRITE (output,8000) nrws , limnrw
261 RETURN
262 ENDIF
263C
264 jmax = ktbl(7) + ktbl(5) -1
265 kc = 1
266 DO 1500 j = 1,nrws
267 krloc(j) = ktbl(2) * (ktbl(4)-nrws+j-1) + ktbl(kc+7) + 1
268 IF (ktbl(kc+7) + ktbl(kc+8).LE.kz) GO TO 1400
269 imax = ktbl(kc+7) + ktbl(kc+8)
270 kz = imax
271 kcmx = krloc(j) + ktbl(kc+8)
272 kclmx = j
273 1400 CONTINUE
274 IF (ktbl(kc+7).LT.kza) kza = ktbl(kc+7)
275 kc = kc + kca
276 1500 CONTINUE
277 imax = imax - kza
278 ktf = 7
279 ENDIF
280C
281 pagnl = 0
282 pagnr = pgmax
283 IF (.NOT.lcntr) GO TO 1700
284 adc = (cnst(1) - cnst(4)) / cnst(3) + radj
285 bc = cnst(2) / cnst(3)
286C
287C *** PRINT I-LABELS ACROSS TOP OF MAP
288C
289 1700 CONTINUE
290C
291C *** WHICH PREPARES CDC512 PRINTER FOR 8 LINES PER INCH
292C
293 IF (linate.EQ.1) WRITE (output,8100)
294C
295C ...WHICH PREPARES PRINTER FOR 6 LINES PER INCH
296C
297 IF (linate.EQ.2) WRITE (output,8200)
298 klines(1) = khrstr
299 kbr = 1
300 GO TO 6900
301C
302 1800 CONTINUE
303 IF (.NOT.lcntr) GO TO 2000
304C
305C *** INITIALIZE CONTOUR WORKING AREA
306C
307 DO 1900 j = 1,pagn3
308 rwc(j) = crmx
309 rwd(j) = crmx
310 1900 CONTINUE
311C
312C *** SET UP CONTOUR DATA AND PAGE LIMITERS FOR FIRST TWO ROWS
313C
314 2000 CONTINUE
315 kra = 1
316 kc = ktf + 1
317 kbr = 2
318 GO TO 5900
319C
320 2100 CONTINUE
321 kra = 2
322 kc = kc + kca
323 kbr = 3
324 GO TO 5900
325C
326 2200 CONTINUE
327 kr = 0
328C
329C *** TEST IF THIS IS LAST PAGE
330C
331 IF (imax.GT.pgmax-1) GO TO 2300
332 lmr = imax * 5 + 2
333 done = .true.
334C
335C *** DO LEFT J-LABELS
336C
337 2300 CONTINUE
338 jcurr = jmin
339C
340 2400 CONTINUE
341 kr = kr + 1
342 kra = kr + 2
343 kc = kc + kca
344 kta = mod(jcurr,10)
345 ktb = mod(jcurr,100)/10
346 ktc = mod(jcurr,1000)/100
347 IF (kr .EQ. 1 .OR. (.NOT. lcntr)) GO TO 2500
348 GO TO 2600
349C
350 2500 CONTINUE
351 IF (linate.EQ.1) WRITE (output,8300)
352 IF (linate.EQ.2) WRITE (output,8400)
353C
354 2600 CONTINUE
355 klines(2) = khplus
356 klines(1) = khblnk
357 IF (jcurr.LT.0) klines(2) = khmns
358 kta = iabs(kta)
359 ktb = iabs(ktb)
360 ktc = iabs(ktc)
361 IF (ktc .EQ. 0) GO TO 2700
362 klines(3) = khtbl(ktc+1)
363 klines(4) = khtbl(ktb+1)
364 klines(5) = khtbl(kta+1)
365 GO TO 2800
366C
367 2700 CONTINUE
368 klines(3) = khtbl(ktb+1)
369 klines(4) = khtbl(kta+1)
370 klines(5) = khblnk
371C
372 2800 CONTINUE
373 DO 2900 j = 6,mxpg
374 klines(j) = khblnk
375 2900 CONTINUE
376 IF (.NOT.done) GO TO 3000
377C
378C *** DO RIGHT J-LABELS IF LAST PAGE OF MAP
379C
380 kline(lmr) = klines(2)
381 kline(lmr+1) = klines(3)
382 kline(lmr+2) = klines(4)
383 kline(lmr+3) = klines(5)
384C
385C *** FETCH AND CONVERT GRID VALUES TO A1 FORMAT FOR WHOLE LINE
386C
387 3000 CONTINUE
388 krx = krloc(kr)
389 klx = 5 * pgfst + 1
390 IF (pgcnt.EQ.0) GO TO 4000
391 DO 3800 kk = 1,pgcnt
392 temp = rdata(krx) * cnst(2) + a
393 ktemp = abs(temp) + 0.5
394 kline(klx) = khplus
395 IF (temp.LT.0.0) kline(klx) = khmns
396 GO TO (3300,3200,3100),nodig
397 3100 CONTINUE
398 kta = mod(ktemp,10000)/1000
399C
400 3200 CONTINUE
401 ktb = mod(ktemp,1000)/100
402C
403 3300 CONTINUE
404 ktc = mod(ktemp,100)/10
405 ktd = mod(ktemp,10)
406 GO TO (3400,3500,3600),nodig
407C
408 3400 CONTINUE
409 kline(klx+1) = khtbl(ktc+1)
410 kline(klx+2) = khtbl(ktd+1)
411 GO TO 3700
412C
413 3500 CONTINUE
414 kline(klx+1) = khtbl(ktb+1)
415 kline(klx+2) = khtbl(ktc+1)
416 kline(klx+3) = khtbl(ktd+1)
417 GO TO 3700
418C
419 3600 CONTINUE
420 kline(klx+1) = khtbl(kta+1)
421 kline(klx+2) = khtbl(ktb+1)
422 kline(klx+3) = khtbl(ktc+1)
423 kline(klx+4) = khtbl(ktd+1)
424C
425 3700 CONTINUE
426 klx = klx + 5
427 krx = krx + 1
428 3800 CONTINUE
429C
430C *** FOLLOWING CHECKS FOR POLE POINT AND INSERTS PROPER CHARACTER.
431C
432 IF (jcurr.NE.0) GO TO 4000
433 IF (imin.LT.(-25).OR.imin.GT.0) GO TO 4000
434 kx = -imin
435 IF (kx.LT.pgfst.AND.kx.GT.pgcnt+pgfst) GO TO 4000
436 kx = 5 * kx
437 IF (kline(kx+1).EQ.khmns) GO TO 3900
438 kline(kx) = khdolr
439 GO TO 4000
440C
441 3900 CONTINUE
442 kline(kx+1) = khastr
443C
444C *** PRINT LINE OF MAP DATA
445C
446 4000 CONTINUE
447 WRITE (output,8500) (klines(ii),ii=1,mxpg)
448 krloc(kr) = krx
449 jcurr = jcurr + 1
450C JCURR = JCURR + JRWMP
451C
452C *** TEST BOTTOM OF MAP
453C
454 IF (kr.EQ.nrws) GO TO 5700
455C
456C *** SET UP CONTOUR DATA AND PAGE LIMITERS FOR NEXT ROW
457C
458 kbr = 4
459 GO TO 5900
460C
461 4100 CONTINUE
462 IF (.NOT.lcntr) GO TO 2400
463C
464C *** DO CONTOURING
465C
466 DO 4200 jj = 1,mxpg
467 klines(jj) = khblnk
468 4200 CONTINUE
469C
470C *** VERTICAL INTERPOLATIONS
471C
472 DO 4700 kk = 1,pagn3
473 IF (rwb(kk).LT.crmx.AND.rwc(kk).LT.crmx) GO TO 4300
474 vdjb(kk) = crmx
475 vdjc(kk) = crmx
476 GO TO 4600
477C
478 4300 CONTINUE
479 IF (rwa(kk).LT.crmx.AND.rwd(kk).LT.crmx) GO TO 4400
480 vdjc(kk) = 0.
481 GO TO 4500
482C
483 4400 CONTINUE
484 vdjc(kk) = r32*(rwa(kk)+rwd(kk)-rwb(kk)-rwc(kk))
485C
486 4500 CONTINUE
487 vdjb(kk) = r4*(rwc(kk)-rwb(kk)-con2*vdjc(kk))
488C
489 4600 CONTINUE
490 vdja(kk)=rwb(kk)
491C
492 4700 CONTINUE
493C
494C ...DO 2 OR 3 ROWS OF CONTOURING BETWEEN GRID ROWS...
495C
496 DO 5600 ll = 1,nbtwn
497 DO 4800 kk = 1,pagn3
498 vdjb(kk) = vdjc(kk) + vdjb(kk)
499 vdja(kk) = vdjb(kk) + vdja(kk)
500 4800 CONTINUE
501C
502C ...WHERE VDJA HAS THE INTERPOLATED VALUE FOR THIS INTER-ROW
503C *** HORIZONTAL INTERPOLATIONS
504C
505 hdc = 0.0
506 IF (vdja(1).GE.crmx) GO TO 4900
507 hdc = r50*(vdja(4)+vdja(1)-vdja(2)-vdja(3))
508C
509 4900 CONTINUE
510 kxb = 0
511 DO 5200 kk = 1,pgmax
512 IF (vdja(kk+1).GE.crmx) GO TO 5100
513 hda = vdja(kk+1)
514 IF (vdja(kk+2).GE.crmx) GO TO 5500
515 IF (vdja(kk+3).GE.crmx) hdc = 0.0
516 hdb = r5 * (vdja(kk+2) - vdja(kk+1) - 15.0 * hdc)
517C
518C *** COMPUTE AND STORE CONTOUR CHARACTERS, 5 PER POINT
519C
520 khda = hda
521 kdb = iabs(mod(khda,kcow))
522 kline(kxb+1) = kalph(kdb+1)
523 DO 5000 jj = 2,5
524 hdb = hdb + hdc
525 hda = hda + hdb
526 khda = hda
527 kdb = iabs(mod(khda,kcow))
528 kxa = kxb + jj
529 kline(kxa) = kalph(kdb+1)
530 5000 CONTINUE
531 hdc = r50*(vdja(kk+4)+vdja(kk+1)-vdja(kk+2)-vdja(kk+3))
532 IF (vdja(kk+4).GE.crmx) hdc = 0.0
533C
534 5100 CONTINUE
535 kxb = kxb + 5
536C
537 5200 CONTINUE
538C
539 5300 CONTINUE
540 WRITE (output,8500) (klines(ii),ii=1,mxpg)
541 DO 5400 kk = 1,mxpg
542 klines(kk) = khblnk
543 5400 CONTINUE
544 GO TO 5600
545C
546 5500 CONTINUE
547 khda = hda
548 kdb = iabs(mod(khda,kcow))
549 kline(kxb+1) = kalph(kdb+1)
550 GO TO 5300
551C
552 5600 CONTINUE
553 GO TO 2400
554C
555 5700 CONTINUE
556 IF (linate.EQ.1) WRITE (output,8300)
557 IF (linate.EQ.2) WRITE (output,8400)
558 klines(1) = khblnk
559C
560C *** PRINT I-LABELS ACROSS BOTTOM OF PAGE
561C
562 kbr = 5
563 GO TO 6900
564C
565 5800 CONTINUE
566 IF (linate.EQ.1) WRITE (output,8300)
567 IF (linate.EQ.2) WRITE (output,8400)
568C
569C *** PRINT TITLE
570C
571 WRITE (output,8600) (title(ii),ii=1,lw)
572C
573C *** TEST END OF MAP
574C
575 IF (krloc(kclmx).EQ.kcmx) RETURN
576C
577C *** ADJUST PAGE LINE BOUNDARIES
578C
579 IF (imax.GT.pgmax) imax = imax - pgmax
580 imin = ka
581 pagnl = pagnl + pgmax
582 pagnr = pagnr + pgmax
583 GO TO 1700
584C
585C *** ROUTINE TO PRE-STORE ROWS FOR CONTOURING AND COMPUTE LINE LIMITERS
586C
587 5900 CONTINUE
588 pgfst = pgfsta
589 pgcnt = pgcnta
590 IF (kra.GT.nrws) GO TO 6800
591 krfst = ktbl(kc) - kza
592 krcnt = ktbl(kc+1)
593 kfx = krloc(kra)
594 IF (rect) GO TO 6100
595 IF (krfst-pagnl.LE.(-1)) GO TO 6400
596 pcfst = krfst - pagnl + 1
597 IF (pcfst.GE.pagn3) GO TO 6700
598 pgfsta = pcfst-1
599 pccnt = min(pagnr-krfst+2,krcnt)
600 IF (pgfsta.EQ.0) GO TO 6600
601 pgcnta = min(pagnr-krfst,krcnt)
602 IF (pgcnta.GT.0) GO TO 6000
603 pgcnta = 0
604 GO TO 6100
605C
606 6000 CONTINUE
607 rect = krect.EQ.1.AND.pgcnta.LE.krcnt
608C
609 6100 CONTINUE
610 IF (.NOT.lcntr) GO TO (1800,2100,2200,4100,5800) kbr
611 DO 6200 kk = 1,pagn3
612 rwa(kk) = rwb(kk)
613 rwb(kk) = rwc(kk)
614 rwc(kk) = rwd(kk)
615 rwd(kk) = crmx
616 6200 CONTINUE
617C
618 IF (pccnt.EQ.0) GO TO (1800,2100,2200,4100,5800) kbr
619 kpc = pcfst + 1
620 DO 6300 kk = 1,pccnt
621 rwd(kpc) = rdata(kfx) * bc + adc
622 kfx = kfx + 1
623 kpc = kpc + 1
624 6300 CONTINUE
625 GO TO (1800,2100,2200,4100,5800) kbr
626C
627 6400 CONTINUE
628 pcfst = 0
629 pgfsta = 0
630 kfx = kfx - 1
631 pccnt = krfst + krcnt - pagnl + 1
632 IF (pccnt.LT.pagn3) GO TO 6500
633 pccnt = pagn3
634 pgcnta = pgmax
635 GO TO 6100
636C
637 6500 CONTINUE
638 IF (pccnt.GT.0) GO TO 6600
639 pgcnta = 0
640 pccnt = 0
641 GO TO 6100
642C
643 6600 CONTINUE
644 pgcnta = min(pgmax,krcnt+krfst-pagnl)
645 GO TO 6100
646C
647 6700 CONTINUE
648 pgcnta = 0
649C
650 6800 CONTINUE
651 pccnt = 0
652 GO TO 6100
653C
654C *** ROUTINE TO PRINT I-LABELS
655C
656 6900 CONTINUE
657 DO 7000 kk = 2,mxpg
658 klines(kk) = khblnk
659 7000 CONTINUE
660C
661 kk = 1
662 ka = imin
663 lbl = min(imax,pgmax)
664C
665 DO 7300 jj = 1,lbl
666 kline(kk) = khplus
667 IF (ka.LT.0) kline(kk) = khmns
668 kta = iabs(mod(ka,100)) / 10
669 ktb = iabs(mod(ka,10))
670 ktc = iabs(mod(ka,1000)) / 100
671 IF (ktc .EQ. 0) GO TO 7100
672 kline(kk+1) = khtbl(ktc+1)
673 kline(kk+2) = khtbl(kta+1)
674 kline(kk+3) = khtbl(ktb+1)
675 GO TO 7200
676C
677 7100 CONTINUE
678 kline(kk+1) = khtbl(kta+1)
679 kline(kk+2) = khtbl(ktb+1)
680C
681 7200 CONTINUE
682 kk = kk + 5
683 ka = ka + 1
684C
685 7300 CONTINUE
686C
687 WRITE (output,8500) (klines(ii),ii=1,mxpg)
688C
689 GO TO (1800,2100,2200,4100,5800) kbr
690C
691 7400 CONTINUE
692 RETURN
693C
694 END
subroutine w3fp10(rdata, ktbl, cnst, title, krect, kcontr, linev, iwidth)
Prints a two-dimensional grid of any shape, with contouring, if desired.
Definition w3fp10.f:46