108 |
|
double solar_rad; /* Solar radiance */ |
109 |
|
double sun_zenith; /* Sun zenith angle (radians) */ |
110 |
|
int input = 0; /* Input type */ |
111 |
+ |
int output = 0; /* Output type */ |
112 |
|
|
113 |
|
extern double dmax( double, double ); |
114 |
|
extern double CalcAirMass(); |
331 |
|
goto userr; |
332 |
|
} |
333 |
|
break; |
334 |
+ |
case 'O': /* output type */ |
335 |
+ |
switch (argv[i][2]) { |
336 |
+ |
case '0': |
337 |
+ |
output = 0; |
338 |
+ |
break; |
339 |
+ |
case '1': |
340 |
+ |
output = 1; |
341 |
+ |
break; |
342 |
+ |
default: |
343 |
+ |
goto userr; |
344 |
+ |
} |
345 |
+ |
if (argv[i][3]) |
346 |
+ |
goto userr; |
347 |
+ |
break; |
348 |
|
case 'm': /* Reinhart subdivisions */ |
349 |
|
rhsubdiv = atoi(argv[++i]); |
350 |
|
break; |
525 |
|
fprintf(stderr, "%s: done.\n", progname); |
526 |
|
exit(0); |
527 |
|
userr: |
528 |
< |
fprintf(stderr, "Usage: %s [-v][-d|-s][-r deg][-m N][-g r g b][-c r g b][-o{f|d}] [tape.wea]\n", |
528 |
> |
fprintf(stderr, "Usage: %s [-v][-d|-s][-r deg][-m N][-g r g b][-c r g b][-o{f|d}][-O{0|1}] [tape.wea]\n", |
529 |
|
progname); |
530 |
|
exit(1); |
531 |
|
fmterr: |
584 |
|
|
585 |
|
/* Limit sky brightness */ |
586 |
|
if (sky_brightness < 0.01) |
587 |
< |
sky_brightness = 0.01; |
587 |
> |
sky_brightness = 0.01; |
588 |
|
|
589 |
|
/* Calculate illuminance */ |
590 |
|
index = GetCategoryIndex(); |
597 |
|
index = CalcSkyParamFromIllum(); |
598 |
|
} |
599 |
|
|
600 |
+ |
if (output == 1) { /* hack for solar radiance */ |
601 |
+ |
diff_illum = diff_irrad * WHTEFFICACY; |
602 |
+ |
dir_illum = dir_irrad * WHTEFFICACY; |
603 |
+ |
} |
604 |
+ |
|
605 |
|
if (bright(skycolor) <= 1e-4) { /* 0 sky component? */ |
606 |
|
memset(parr, 0, sizeof(float)*3*nskypatch); |
607 |
|
return; |
821 |
|
double sz_cubed; /* Sun zenith angle cubed */ |
822 |
|
|
823 |
|
/* Calculate sun zenith angle cubed */ |
824 |
< |
sz_cubed = pow(sun_zenith, 3.0); |
824 |
> |
sz_cubed = sun_zenith*sun_zenith*sun_zenith; |
825 |
|
|
826 |
|
return ((diff_irrad + dir_irrad) / diff_irrad + 1.041 * |
827 |
|
sz_cubed) / (1.0 + 1.041 * sz_cubed); |
852 |
|
double CalcDirectIrradiance() |
853 |
|
{ |
854 |
|
return CalcDiffuseIrradiance() * ((sky_clearness - 1.0) * (1 + 1.041 |
855 |
< |
* pow(sun_zenith, 3.0))); |
855 |
> |
* sun_zenith*sun_zenith*sun_zenith)); |
856 |
|
} |
857 |
|
|
858 |
|
/* Calculate sky brightness and clearness from illuminance values */ |