ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/gen/gendaymtx.c
(Generate patch)

Comparing ray/src/gen/gendaymtx.c (file contents):
Revision 2.14 by greg, Fri May 30 00:00:54 2014 UTC vs.
Revision 2.26 by greg, Fri Apr 28 16:07:34 2017 UTC

# Line 86 | Line 86 | static const char RCSid[] = "$Id$";
86   #include <string.h>
87   #include <ctype.h>
88   #include "rtmath.h"
89 + #include "rtio.h"
90 + #include "resolu.h"
91   #include "platform.h"
92   #include "color.h"
93 + #include "resolu.h"
94  
95   char *progname;                                                         /* Program name */
96   char errmsg[128];                                                       /* Error message buffer */
# Line 319 | Line 322 | main(int argc, char *argv[])
322          int     dir_is_horiz;           /* direct is meas. on horizontal? */
323          float   *mtx_data = NULL;       /* our matrix data */
324          int     ntsteps = 0;            /* number of rows in matrix */
325 +        int     step_alloc = 0;
326          int     last_monthly = 0;       /* month of last report */
327 +        int     inconsistent = 0;       /* inconsistent options set? */
328          int     mo, da;                 /* month (1-12) and day (1-31) */
329          double  hr;                     /* hour (local standard time) */
330          double  dir, dif;               /* direct and diffuse values */
# Line 370 | Line 375 | main(int argc, char *argv[])
375                          rhsubdiv = atoi(argv[++i]);
376                          break;
377                  case 'c':                       /* sky color */
378 +                        inconsistent |= (skycolor[1] <= 1e-4);
379                          skycolor[0] = atof(argv[++i]);
380                          skycolor[1] = atof(argv[++i]);
381                          skycolor[2] = atof(argv[++i]);
382                          break;
383                  case 'd':                       /* solar (direct) only */
384                          skycolor[0] = skycolor[1] = skycolor[2] = 0;
385 <                        if (suncolor[1] <= 1e-4)
385 >                        if (suncolor[1] <= 1e-4) {
386 >                                inconsistent = 1;
387                                  suncolor[0] = suncolor[1] = suncolor[2] = 1;
388 +                        }
389                          break;
390                  case 's':                       /* sky only (no direct) */
391                          suncolor[0] = suncolor[1] = suncolor[2] = 0;
392 <                        if (skycolor[1] <= 1e-4)
392 >                        if (skycolor[1] <= 1e-4) {
393 >                                inconsistent = 1;
394                                  skycolor[0] = skycolor[1] = skycolor[2] = 1;
395 +                        }
396                          break;
397                  case 'r':                       /* rotate distribution */
398                          if (argv[i][2] && argv[i][2] != 'z')
# Line 391 | Line 401 | main(int argc, char *argv[])
401                          break;
402                  case '5':                       /* 5-phase calculation */
403                          nsuns = 1;
404 <                        fixed_sun_sa = 6.797e-05;
404 >                        fixed_sun_sa = PI/360.*atof(argv[++i]);
405 >                        if (fixed_sun_sa <= 0) {
406 >                                fprintf(stderr, "%s: missing solar disk size argument for '-5' option\n",
407 >                                                argv[0]);
408 >                                exit(1);
409 >                        }
410 >                        fixed_sun_sa *= fixed_sun_sa*PI;
411                          break;
412                  default:
413                          goto userr;
414                  }
415          if (i < argc-1)
416                  goto userr;
417 +        if (inconsistent)
418 +                fprintf(stderr, "%s: WARNING: inconsistent -s, -d, -c options!\n",
419 +                                progname);
420          if (i == argc-1 && freopen(argv[i], "r", stdin) == NULL) {
421                  fprintf(stderr, "%s: cannot open '%s' for input\n",
422                                  progname, argv[i]);
# Line 460 | Line 479 | main(int argc, char *argv[])
479                  double          sda, sta;
480                                          /* make space for next time step */
481                  mtx_offset = 3*nskypatch*ntsteps++;
482 <                mtx_data = resize_dmatrix(mtx_data, ntsteps, nskypatch);
482 >                if (ntsteps > step_alloc) {
483 >                        step_alloc += (step_alloc>>1) + ntsteps + 7;
484 >                        mtx_data = resize_dmatrix(mtx_data, step_alloc, nskypatch);
485 >                }
486                  if (dif <= 1e-4) {
487                          memset(mtx_data+mtx_offset, 0, sizeof(float)*3*nskypatch);
488                          continue;
# Line 515 | Line 537 | main(int argc, char *argv[])
537                  printf("NROWS=%d\n", nskypatch);
538                  printf("NCOLS=%d\n", ntsteps);
539                  printf("NCOMP=3\n");
540 <                fputformat(getfmtname(outfmt), stdout);
540 >                fputformat((char *)getfmtname(outfmt), stdout);
541                  putchar('\n');
542          }
543                                          /* patches are rows (outer sort) */
# Line 534 | Line 556 | main(int argc, char *argv[])
556                          break;
557                  case 'f':
558                          for (j = 0; j < ntsteps; j++) {
559 <                                fwrite(mtx_data+mtx_offset, sizeof(float), 3,
559 >                                putbinary(mtx_data+mtx_offset, sizeof(float), 3,
560                                                  stdout);
561                                  mtx_offset += 3*nskypatch;
562                          }
# Line 545 | Line 567 | main(int argc, char *argv[])
567                                  ment[0] = mtx_data[mtx_offset];
568                                  ment[1] = mtx_data[mtx_offset+1];
569                                  ment[2] = mtx_data[mtx_offset+2];
570 <                                fwrite(ment, sizeof(double), 3, stdout);
570 >                                putbinary(ment, sizeof(double), 3, stdout);
571                                  mtx_offset += 3*nskypatch;
572                          }
573                          break;
# Line 931 | Line 953 | int CalcSkyParamFromIllum()
953                  /* Convert illuminance to irradiance */
954                  index = GetCategoryIndex();
955                  diff_irrad = diff_illum / CalcDiffuseIllumRatio(index);
956 <                dir_irrad = dir_illum / CalcDirectIllumRatio(index);
956 >                dir_irrad = CalcDirectIllumRatio(index);
957 >                if (dir_irrad > 0.1)
958 >                        dir_irrad = dir_illum / dir_irrad;
959          
960                  /* Calculate sky brightness and clearness */
961                  sky_brightness = CalcSkyBrightness();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines