cloudy trunk
Loading...
Searching...
No Matches
plot.cpp
Go to the documentation of this file.
1/* This file is part of Cloudy and is copyright (C)1978-2013 by Gary J. Ferland and
2 * others. For conditions of distribution and use see copyright notice in license.txt */
3/*plot master routine to generate some sort of plot */
4#include "cddefines.h"
5#include "iterations.h"
6#include "called.h"
7#define IHI 59
8#define IWID 121
9#include "input.h"
10#include "rfield.h"
11#include "trace.h"
12#include "radius.h"
13#include "geometry.h"
14#include "opacity.h"
15#include "dense.h"
16#include "hcmap.h"
17#include "plot.h"
18
20
21/*pltcon generate plot of continuum array */
22STATIC void pltcon(long int np,
23 const char *chCall);
24
25/*pltmap generate plot of heating and cooling map */
26STATIC void pltmap(long int np,
27 const char *chCall);
28
29/*pltopc generate plot of local gas opacity */
30STATIC void pltopc(long int np,
31 const char *chCall);
32
33/* this is the base routine that actually makes the plots, called by above */
34STATIC void pltr(realnum[],realnum[],long,double,double,double,double,
35 char,char*,long,bool);
36
37
38void plot(const char *chCall)
39{
40 long int np;
41
42 DEBUG_ENTRY( "plot()" );
43
44 /* return if this is not the last iteration, or a plot not required,
45 * or we are not speaking */
46 if( !plotCom.lgPlotON || !called.lgTalk )
47 {
48 return;
49 }
50
51 if( !iterations.lgLastIt && (strcmp(chCall,"FIRST") != 0) )
52 {
53 return;
54 }
55
56 /* loop over all the requested plots */
57 for( np=0; np < plotCom.nplot; np++ )
58 {
59 /* series of tests to determine which type of plot we will do */
60 if( strcmp(plotCom.chPType[np]," MAP") == 0 )
61 {
62 /* thermal map */
63 pltmap(np,chCall);
64 }
65 else if( strcmp(plotCom.chPType[np] ,"CONT") == 0 ||
66 strcmp(plotCom.chPType[np] ,"CRAW") == 0 ||
67 strcmp(plotCom.chPType[np] ,"DIFF") == 0 ||
68 strcmp(plotCom.chPType[np] ,"REFL") == 0 ||
69 strcmp(plotCom.chPType[np] ,"EMIT") == 0 ||
70 strcmp(plotCom.chPType[np] ,"CPHT") == 0 ||
71 strcmp(plotCom.chPType[np] ,"OUTW") == 0 )
72 {
73 /* this is a contiuum plot of some kind */
74 pltcon(np,chCall);
75 }
76
77 else if(
78 strcmp(plotCom.chPType[np] ,"OPAA") == 0 ||
79 strcmp(plotCom.chPType[np] ,"OPAS") == 0 ||
80 strcmp(plotCom.chPType[np] ,"OPAT") == 0 )
81 {
82 /* absorption, scattering, or total opacity */
83 pltopc(np,chCall);
84 }
85 else
86 {
87 fprintf( ioQQQ, " PLOT type=%4.4s not known. STOP\n",
88 plotCom.chPType[np] );
90 }
91 }
92
93 return;
94}
95
96/*pltcon generate plot of continuum array */
97
99 long int np,
100 const char *chCall)
101{
102 char chSymPlt2[3],
103 chXtitle[23];
104 char chSym,
105 chSymPlt1;
106 long int i;
107 double contin,
108 ymin2;
109 static double xmax,
110 xmin,
111 ymax,
112 ymin;
113 static realnum *y/*[rfield.nupper]*/,
114 *y2/*[rfield.nupper]*/;
115
116 DEBUG_ENTRY( "pltcon()" );
117
118 if( strcmp(chCall,"FIRST") == 0 )
119 {
120 return;
121 }
122
123 xmin = rfield.anulog[0];
124 xmin = MAX2((double)plotCom.pltxmn[np],xmin);
125 xmax = rfield.anulog[rfield.nflux-1];
126 xmax = MIN2(xmax,(double)plotCom.pltxmx[np]);
127
128 if( plotCom.lgPltTrace[np] )
129 {
130 fprintf( ioQQQ, " XMIN, XMAX=%12.4e%12.4e NFLUX=%4ld\n",
131 xmin, xmax, rfield.nflux );
132 }
133
134 if( strcmp(plotCom.chPType[np],"REFL") == 0 && geometry.lgSphere )
135 {
136 fprintf( ioQQQ, " Reflected continuum not computed when SPHERE set.\n" );
137 return;
138 }
139
140 y = (realnum*)MALLOC((size_t)rfield.nupper*sizeof(realnum) );
141 y2 = (realnum*)MALLOC((size_t)rfield.nupper*sizeof(realnum) );
142
143 /* these will be the default symbols for first and second plot */
144 chSymPlt1 = '.';
145 strcpy( chSymPlt2, "o " );
146 ymin = FLT_MAX;
147 ymin2 = FLT_MAX;
148 ymax = -FLT_MAX;
149 for( i=0; i < rfield.nflux; i++ )
150 {
151 if( (double)rfield.anulog[i] > xmin && (double)rfield.anulog[i] < xmax )
152 {
153 if( strcmp(plotCom.chPType[np],"CONT") == 0 )
154 {
155 y[i] = (realnum)log10(MAX2(rfield.flux_total_incident[0][i]/rfield.widflx[i]*
156 rfield.anu2[i],1e-37));
157 /* >>chng 01 jul 13, add rfield.ConEmitReflec[0][i] */
158 contin = rfield.flux[0][i] + rfield.ConEmitOut[0][i]*geometry.covgeo + rfield.ConEmitReflec[0][i];
159 y2[i] = (realnum)MAX2((contin/rfield.widflx[i]+(rfield.outlin[0][i]+rfield.outlin_noplot[i])/
160 rfield.anu[i]*geometry.covgeo)*
161 rfield.anu2[i]*radius.r1r0sq,1e-37);
162 y2[i] = (realnum)log10(y2[i]);
163 }
164 else if( strcmp(plotCom.chPType[np],"CPHT") == 0 )
165 {
166 /* plot continuum as photons */
167 y[i] = (realnum)log10(MAX2(rfield.flux_total_incident[0][i]/rfield.widflx[i],
168 1e-37));
169 contin = rfield.flux[0][i] + rfield.ConEmitOut[0][i]*geometry.covgeo/rfield.widflx[i];
170 y2[i] = (realnum)MAX2((contin+(rfield.outlin[0][i]+rfield.outlin[0][i])/rfield.anu[i]*
171 geometry.covgeo)* radius.r1r0sq,1e-37);
172 y2[i] = (realnum)log10(y2[i]);
173 }
174 else if( strcmp(plotCom.chPType[np],"REFL") == 0 )
175 {
176 /* plot "reflected" continuum from last zone only */
177 y[i] = (realnum)log10(MAX2((rfield.ConEmitReflec[0][i]/rfield.widflx[i]+
178 rfield.reflin[0][i])*rfield.anu2[i],1e-37));
179 y2[i] = y[i];
180 }
181 else if( strcmp(plotCom.chPType[np],"EMIT") == 0 )
182 {
183 /* plot "emitted" continuum from both sides of cloud */
184 y[i] = (realnum)log10(MAX2(
185 ((rfield.ConEmitReflec[0][i]+rfield.ConEmitOut[0][i])/
186 rfield.widflx[i]+
187 (rfield.outlin[0][i]+rfield.outlin_noplot[i]+rfield.reflin[0][i])/rfield.anu[i] )*
188 rfield.anu2[i],1e-37));
189 y2[i] = y[i];
190 }
191 else if( strcmp(plotCom.chPType[np],"OUTW") == 0 )
192 {
193 /* plot outward and attenuated incident continuum */
194 chSymPlt1 = 'i';
195 y[i] = (realnum)log10(MAX2(rfield.flux[0][i]*opac.opacity_abs[i],
196 1e-37));
197 strcpy( chSymPlt2, "o " );
198 y2[i] = (realnum)log10(MAX2((rfield.outlin[0][i]+rfield.outlin_noplot[i]+rfield.ConEmitOut[0][i])*
199 opac.opacity_abs[i],1e-37));
200 }
201 else if( strcmp(plotCom.chPType[np],"DIFF") == 0 )
202 {
203 /* plot "diffuse" continuum from last zone only */
204 y[i] = (realnum)log10(MAX2(rfield.ConEmitLocal[nzone][i]*rfield.anu2[i]/
205 rfield.widflx[i],1e-37));
206 y2[i] = y[i];
207 }
208 else if( strcmp(plotCom.chPType[np],"CRAW") == 0 )
209 {
210 y[i] = (realnum)log10(MAX2(rfield.flux_total_incident[0][i],1e-37));
211 y2[i] = (realnum)MAX2((rfield.flux[0][i]+
212 rfield.otscon[i]+rfield.otslin[i]+rfield.outlin[0][i]+rfield.outlin_noplot[i]+
213 rfield.ConEmitOut[0][i])*radius.r1r0sq,1e-37);
214 y2[i] = (realnum)log10(y2[i]);
215 }
216
217 if( y[i] > -36.9 )
218 {
219 ymin = MIN2(ymin,(double)y[i]);
220 }
221
222 if( y2[i] > -36.9 )
223 {
224 ymin2 = MIN2(ymin2,(double)y2[i]);
225 }
226
227 ymax = MAX2(ymax,(double)y[i]);
228 ymax = MAX2(ymax,(double)y2[i]);
229 }
230 }
231
232 if( trace.lgTrace )
233 {
234 fprintf( ioQQQ, " PLOT called for the first time, YMAX, MIN=%10.2e%10.2e\n",
235 ymax, ymin );
236 }
237
238 /* lower min by at most 5 dex below peak */
239 ymin2 = MAX3(ymax-5.,-35.,ymin2);
240
241 /* make sure there is room at the bottom */
242 ymin = MIN3(ymin2,ymin,ymax-1.);
243
244 /* emitted continuum is thermal, so goes to zero */
245 if( strcmp(plotCom.chPType[np],"EMIT") == 0 )
246 {
247 ymin = MAX2(ymin,ymax-4.);
248 }
249
250 if( plotCom.lgPltTrace[np] )
251 {
252 fprintf( ioQQQ, " YMAX, MIN=%14.4e%14.4e Npnts=%4ld\n",
253 ymax
254 , ymin, rfield.nflux );
255 }
256 strcpy( chXtitle, "Log(nu fnu) vs LOG(nu)" );
257
258 chSym = chSymPlt1;
259
260 pltr(rfield.anulog,y,rfield.nflux,xmin,xmax,ymin,ymax,chSym,chXtitle
261 ,1,plotCom.lgPltTrace[np]);
262
263 chSym = chSymPlt2[0];
264
265 pltr(rfield.anulog,y2,rfield.nflux,xmin,xmax,ymin,ymax,chSym,chXtitle
266 ,3,plotCom.lgPltTrace[np]);
267
268 free( y );
269 free( y2 );
270 return;
271}
272
273/*pltmap generate plot of heating and cooling map */
274
276 long int np,
277 const char *chCall)
278{
279 char chXtitle[23];
280 static bool lgTlkSav;
281 char chSym;
282
283 long int i;
284
285 static double xmax,
286 xmin,
287 ymax,
288 ymin;
289
290 DEBUG_ENTRY( "pltmap()" );
291
292 if( strcmp(chCall,"FIRST") == 0 )
293 {
294 return;
295 }
296
297 lgTlkSav = called.lgTalk;
298 called.lgTalk = false;
299 hcmap.lgMapBeingDone = true;
300 hcmap.RangeMap[0] = (realnum)pow((realnum)10.f,plotCom.pltxmn[np]);
301 hcmap.RangeMap[1] = (realnum)pow((realnum)10.f,plotCom.pltxmx[np]);
302 map_do(ioQQQ, " map");
303 called.lgTalk = lgTlkSav;
304
305 for( i=0; i < hcmap.nmap; i++ )
306 {
307 hcmap.temap[i] = (realnum)log10(hcmap.temap[i]);
308 }
309
310 xmin = MIN2(hcmap.temap[0],hcmap.temap[hcmap.nmap-1]);
311 xmin = MAX2((double)plotCom.pltxmn[np],xmin);
312 xmax = MAX2(hcmap.temap[0],hcmap.temap[hcmap.nmap-1]);
313 xmax = MIN2(xmax,(double)plotCom.pltxmx[np]);
314
315 if( plotCom.lgPltTrace[np] )
316 {
317 fprintf( ioQQQ, " xmin, xmax=%12.4e%12.4e nmap=%4ld\n",
318 xmin, xmax, hcmap.nmap );
319 }
320
321 ymin = FLT_MAX;
322 ymax = -FLT_MAX;
323
324 for( i=0; i < hcmap.nmap; i++ )
325 {
326 if( (double)hcmap.temap[i] > xmin && (double)hcmap.temap[i] < xmax )
327 {
328 hcmap.hmap[i] = (realnum)log10(MAX2(hcmap.hmap[i],1e-35));
329 hcmap.cmap[i] = (realnum)log10(MAX2(hcmap.cmap[i],1e-35));
330 if( hcmap.cmap[i] > -34. )
331 {
332 ymin = MIN3(ymin,hcmap.hmap[i],hcmap.cmap[i]);
333 }
334 else
335 {
336 ymin = MIN2(ymin,(double)hcmap.hmap[i]);
337 }
338 ymax = MAX3(ymax,hcmap.hmap[i],hcmap.cmap[i]);
339 }
340 }
341
342 if( trace.lgTrace )
343 {
344 fprintf( ioQQQ, " PLOT called for the first time, YMAX, MIN=%10.2e%10.2e\n",
345 ymax, ymin );
346 }
347
348 if( plotCom.lgPltTrace[np] )
349 {
350 fprintf( ioQQQ, " YMAX, MIN=%14.4e%14.4e Npnts=%4ld\n",
351 ymax, ymin, hcmap.nmap );
352 }
353
354 chSym = 'H';
355 strcpy( chXtitle, "heating - cooling v te" );
356
357 pltr(hcmap.temap,hcmap.hmap,hcmap.nmap,xmin,xmax,ymin,ymax,chSym,
358 chXtitle,1,plotCom.lgPltTrace[np]);
359
360 chSym = 'C';
361
362 pltr(hcmap.temap,hcmap.cmap,hcmap.nmap,xmin,xmax,ymin,ymax,chSym,
363 chXtitle,3,plotCom.lgPltTrace[np]);
364
365 return;
366}
367
368/*pltopc generate plot of local gas opacity */
370 long int np,
371 const char *chCall)
372{
373 char chXtitle[23];
374 char chSym;
375 long int i;
376 double arg1,
377 arg2;
378 static double xmax,
379 xmin,
380 ymax,
381 ymin;
382 static realnum *y/*[rfield.nupper]*/,
383 *y2/*[rfield.nupper]*/;
384
385 DEBUG_ENTRY( "pltopc()" );
386
387 if( strcmp(chCall,"FIRST") == 0 )
388 {
389 return;
390 }
391
392 y = (realnum*)MALLOC((size_t)rfield.nupper*sizeof(realnum) );
393 y2 = (realnum*)MALLOC((size_t)rfield.nupper*sizeof(realnum) );
394
395 xmin = rfield.anulog[0];
396 xmin = MAX2((double)plotCom.pltxmn[np],xmin);
397 xmax = rfield.anulog[rfield.nflux-1];
398 xmax = MIN2(xmax,(double)plotCom.pltxmx[np]);
399
400 if( plotCom.lgPltTrace[np] )
401 {
402 fprintf( ioQQQ, " XMIN, XMAX=%12.4e%12.4e NFLUX=%4ld\n",
403 xmin, xmax, rfield.nflux );
404 }
405
406 ymin = FLT_MAX;
407 ymax = -FLT_MAX;
408
409 for( i=0; i < rfield.nflux; i++ )
410 {
411 if( strcmp(plotCom.chPType[np],"OPAA") == 0 )
412 {
413 /* absorption opacity */
414 arg1 = opac.opacity_abs_savzon1[i];
415 arg2 = opac.opacity_abs[i];
416 }
417
418 else if( strcmp(plotCom.chPType[np],"OPAS") == 0 )
419 {
420 /* scattering opacity */
421 arg1 = opac.opacity_sct_savzon1[i];
422 arg2 = opac.opacity_sct[i];
423 }
424
425 else if( strcmp(plotCom.chPType[np],"OPAT") == 0 )
426 {
427 /* total opacity */
428 arg1 = opac.opacity_abs_savzon1[i] + opac.opacity_sct_savzon1[i];
429 arg2 = opac.opacity_abs[i] + opac.opacity_sct[i];
430 }
431
432 else
433 {
434 /* this cannot happen since type was set to one of above */
435 fprintf( ioQQQ, " pltopc type=%4.4s not known. STOP\n",
436 plotCom.chPType[np] );
438 }
439
440 y[i] = (realnum)log10(MAX2(arg1/dense.gas_phase[ipHYDROGEN],1e-35));
441 y2[i] = (realnum)log10(MAX2(arg2/dense.gas_phase[ipHYDROGEN],1e-35));
442
443 if( (double)rfield.anulog[i] > xmin && (double)rfield.anulog[i] < xmax )
444 {
445 ymin = MIN3(ymin,y[i],y2[i]);
446 ymax = MAX3(ymax,y[i],y2[i]);
447 }
448 }
449
450 if( trace.lgTrace )
451 {
452 fprintf( ioQQQ, " PLOT called for the first time, YMAX, MIN=%10.2e%10.2e\n",
453 ymax, ymin );
454 }
455
456 /* lower min by factor of 10 to show absorption in next plot */
457 ymin = MAX2(ymin-1.,-35.);
458 ymax += 1.;
459 if( plotCom.lgPltTrace[np] )
460 {
461 fprintf( ioQQQ, " YMAX, MIN=%14.4e%14.4e Npnts=%4ld\n",
462 ymax, ymin, rfield.nflux );
463 }
464
465 strcpy( chXtitle, "Log(opacity) vs log(n)" );
466
467 chSym = '.';
468 pltr(rfield.anulog,y,rfield.nflux,xmin,xmax,ymin,ymax,chSym,chXtitle
469 ,1,plotCom.lgPltTrace[np]);
470
471 chSym = 'o';
472 pltr(rfield.anulog,y2,rfield.nflux,xmin,xmax,ymin,ymax,chSym,chXtitle
473 ,3,plotCom.lgPltTrace[np]);
474
475 free(y);
476 free(y2);
477 return;
478}
479
480/*pltr core plotting routine for generating line printer plots */
481
483 /* the x-axis */
484 realnum x[],
485 /* the y-axi */
486 realnum y[],
487 /* number of points */
488 long int npnts,
489 /* mins and maxs, log of min and max of x-axis */
490 double xmin,
491 double xmax,
492 double ymin,
493 double ymax,
494 /* plot symbol */
495 char chSym,
496 char *chXtitle,
497 long int itim,
498 bool lgTrace)
499{
500 static char chPage[59][122];
501
502 long int i,
503 ix,
504 iy,
505 j,
506 nc;
507
508 /* the max number of decades we can plot */
509# define NDECAD 18
510
511 static long int jpnt[NDECAD],
512 lowx,
513 lx;
514
515 static double xdec,
516 xinc,
517 ydown,
518 yinc;
519
520 /* this is log of smallestnumer in following set */
521 const realnum xAxisMin = -8.f;
522
523 static char chLab[NDECAD][5]={"1E-8","1E-7","1E-6","1E-5",
524 "1E-4",".001","0.01"," 0.1"," 1 ",
525 " 10 "," 100","1000","1E4 ","1E5 ","1E6 ","1E7 ","1E8 ","1E9 "};
526
527 DEBUG_ENTRY( "pltr()" );
528
529 /* ITIM=1, first call, =2 intermediate calls, =3 for last call*/
530 if( itim == 1 )
531 {
532 /* first call, set left border of plot and clear out array */
533 for( i=1; i < IHI; i++ )
534 {
535 chPage[i][0] = 'l';
536 for( j=1; j < IWID; j++ )
537 {
538 chPage[i][j] = ' ';
539 }
540 }
541
542 /* centered label for plot */
543 strcpy( chPage[1], " " );
544 strcat( chPage[1], chXtitle );
545 strcat( chPage[1], input.chTitle );
546
547 /* one dex increments in x and y marked special */
548 i = 1;
549 ydown = 0.;
550 yinc = (realnum)(IHI-2)/(ymax - ymin);
551 nc = 0;
552
553 while( i <= IHI && nc < 200 )
554 {
555 chPage[i-1][1] = '-';
556 ydown += yinc;
557 i = (long)(ydown + 1);
558 nc += 1;
559 }
560
561 /* bottom increments of plot */
562 for( i=0; i < IWID; i++ )
563 {
564 chPage[IHI-1][i] = '-';
565 }
566
567 if( xmin < xAxisMin )
568 {
569 fprintf(ioQQQ," plts: xmin is less than min value in array\n");
571 }
572 /* LX is pointer to label for number in x-axis in chLab */
573 if( xmin < 0. )
574 {
575 lx = (long)(4.999-fabs(xmin));
576 /* lx is the offset within the array of x-axis values */
577 /* >>chng 99 jun 11 change to allow any min value of x-axis */
578 lx = (long)(fabs(xAxisMin)-0.001-fabs(xmin));
579 lx = MAX2(0,lx);
580 /* this is lowest decade on plot */
581 xdec = -floor(fabs(xmin)+1e-5);
582 }
583 else
584 {
585 double aa;
586 lx = (long)MAX2(0.,4.+xmin);
587 /* lx is the offset within the array of x-axis values */
588 lx = (long)MAX2(0.,4.+xmin);
589 /* >>chng 99 jun 11 change to allow any min value of x-axis */
590 aa = fabs(xAxisMin);
591 lx = (long)MAX2(0., aa-1. + xmin );
592 xdec = floor(xmin+1e-5);
593 }
594
595 lowx = lx + 1;
596 xinc = (realnum)(IWID-1)/(xmax - xmin);
597 i = (long)MAX2(1.,(xdec-xmin)*xinc+1.);
598 nc = 0;
599
600 while( i < IWID && nc < 100 )
601 {
602 chPage[IHI-2][i - 1] = 'l';
603
604 /* fix position of x labels */
605 lx = MIN2(lx+1,NDECAD);
606
607 /* slight offset to center label */
608 jpnt[lx-1] = MAX2(0,i-3);
609 jpnt[lx-1] = MIN2((long)IWID-4,jpnt[lx-1]);
610 xdec += 1.;
611 i = (long)MAX2(1.,(xdec-xmin)*xinc+1.);
612 nc += 1;
613 }
614 }
615
616 /* everything falls down through here */
617 /* now fill in data, symbol is chSym */
618 for( i=0; i < npnts; i++ )
619 {
620 if( (double)x[i] > xmin && (double)x[i] < xmax )
621 {
622 iy = (long)(IHI - MAX2(y[i]-ymin,0.)*yinc);
623 iy = MAX2(1,iy);
624 ix = (long)((x[i] - xmin)*xinc + 1);
625
626 if( lgTrace )
627 {
628 fprintf( ioQQQ, " x, y, ix, iy=%7.3f%7.3f%4ld%4ld\n",
629 x[i], y[i], ix, iy );
630 }
631 chPage[iy-1][ix - 1] = chSym;
632 }
633 }
634
635 if( itim == 3 )
636 {
637 /* make the plot */
638 fprintf( ioQQQ, "1\n" );
639 for( i=1; i < IHI; i++ )
640 {
641 fprintf( ioQQQ, " %121.121s\n", chPage[i] );
642 }
643
644 /* now put on label for X-axis */
645 for( i=0; i < IWID; i++ )
646 {
647 chPage[0][i] = ' ';
648 }
649
650 for( i=lowx-1; i < lx; i++ )
651 {
652 /* copy the four char of the numeric string */
653 strncpy(chPage[0]+jpnt[i] , chLab[i+1] , 4);
654 }
655 fprintf( ioQQQ, " %121.121s\n", chPage[0] );
656 }
657 return;
658}
t_called called
Definition called.cpp:5
long int nzone
Definition cddefines.cpp:14
FILE * ioQQQ
Definition cddefines.cpp:7
#define STATIC
Definition cddefines.h:97
#define MAX3(a, b, c)
Definition cddefines.h:787
#define MIN2
Definition cddefines.h:761
#define MALLOC(exp)
Definition cddefines.h:501
#define MIN3(a, b, c)
Definition cddefines.h:766
#define EXIT_FAILURE
Definition cddefines.h:140
#define cdEXIT(FAIL)
Definition cddefines.h:434
float realnum
Definition cddefines.h:103
#define MAX2
Definition cddefines.h:782
const int ipHYDROGEN
Definition cddefines.h:305
#define DEBUG_ENTRY(funcname)
Definition cddefines.h:684
t_dense dense
Definition dense.cpp:24
t_geometry geometry
Definition geometry.cpp:5
t_hcmap hcmap
Definition hcmap.cpp:21
void map_do(FILE *io, const char *chType)
Definition hcmap.cpp:23
t_input input
Definition input.cpp:12
t_iterations iterations
Definition iterations.cpp:5
t_opac opac
Definition opacity.cpp:5
STATIC void pltopc(long int np, const char *chCall)
Definition plot.cpp:369
void plot(const char *chCall)
Definition plot.cpp:38
#define IWID
Definition plot.cpp:8
#define IHI
Definition plot.cpp:7
t_plotCom plotCom
Definition plot.cpp:19
STATIC void pltcon(long int np, const char *chCall)
Definition plot.cpp:98
#define NDECAD
STATIC void pltr(realnum[], realnum[], long, double, double, double, double, char, char *, long, bool)
STATIC void pltmap(long int np, const char *chCall)
Definition plot.cpp:275
t_radius radius
Definition radius.cpp:5
t_rfield rfield
Definition rfield.cpp:8
t_trace trace
Definition trace.cpp:5