--- ray/src/util/rfluxmtx.c 2021/12/15 01:38:50 2.54 +++ ray/src/util/rfluxmtx.c 2025/04/04 01:08:33 2.59 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rfluxmtx.c,v 2.54 2021/12/15 01:38:50 greg Exp $"; +static const char RCSid[] = "$Id: rfluxmtx.c,v 2.59 2025/04/04 01:08:33 greg Exp $"; #endif /* * Calculate flux transfer matrix or matrices using rcontrib @@ -41,6 +41,7 @@ char *shirchiufn = "disk2square.cal"; char *kfullfn = "klems_full.cal"; char *khalffn = "klems_half.cal"; char *kquarterfn = "klems_quarter.cal"; +char *ciefn = "cieskyscan.cal"; /* string indicating parameters */ const char PARAMSTART[] = "@rfluxmtx"; @@ -499,6 +500,14 @@ finish_receiver(void) calfn = kquarterfn; kquarterfn = NULL; binf = "kqbin"; nbins = "Nkqbins"; + } else if (!strcasecmp(curparams.hemis, "cie")) { + calfn = ciefn; ciefn = NULL; + sprintf(sbuf, "rNx=%g,rNy=%g,rNz=%g,Ux=%g,Uy=%g,Uz=%g,RHS=%c1", + curparams.nrm[0], curparams.nrm[1], curparams.nrm[2], + curparams.vup[0], curparams.vup[1], curparams.vup[2], + curparams.sign); + binv = "cbin"; + nbins = "Ncbins"; } else { fprintf(stderr, "%s: unrecognized hemisphere sampling: h=%s\n", progname, curparams.hemis); @@ -508,10 +517,10 @@ finish_receiver(void) sprintf(sbuf, "RHS=%c1", curparams.sign); params = savqstr(sbuf); } - if (!uniform & (curparams.slist->styp == ST_SOURCE)) { + if (!uniform) { SURF *sp; for (sp = curparams.slist; sp != NULL; sp = sp->next) - if (fabs(sp->area - PI) > 1e-3) { + if (sp->styp == ST_SOURCE && fabs(sp->area - PI) > 1e-3) { fprintf(stderr, "%s: source '%s' must be 180-degrees\n", progname, sp->sname); exit(1); @@ -1095,12 +1104,6 @@ add_recv_object(FILE *fp) } /* is it a new receiver? */ if ((st = surf_type(otype)) != ST_NONE) { - if (curparams.slist != NULL && (st == ST_SOURCE) ^ - (curparams.slist->styp == ST_SOURCE)) { - fputs(progname, stderr); - fputs(": cannot mix source/non-source receivers!\n", stderr); - return(-1); - } if (strcmp(thismod, curmod)) { if (curmod[0]) { /* output last receiver? */ finish_receiver(); @@ -1283,12 +1286,22 @@ main(int argc, char *argv[]) yrs = argv[++a]; na = 0; continue; - case 'c': /* number of samples */ - sampcnt = atoi(argv[++a]); - if (sampcnt <= 0) - goto userr; - na = 0; /* we re-add this later */ - continue; + case 'c': /* spectral sampling or count */ + switch (argv[a][2]) { + case 's': + na = 2; + break; + case 'w': + na = 3; + break; + case '\0': + sampcnt = atoi(argv[++a]); + if (sampcnt <= 0) + goto userr; + na = 0; /* we re-add this later */ + continue; + } + break; case 'I': /* only for pass-through mode */ case 'i': iropt = argv[a];