9 |
|
|
10 |
|
Roland Schregle (roland.schregle@{hslu.ch, gmail.com}) |
11 |
|
(c) Fraunhofer Institute for Solar Energy Systems, |
12 |
< |
Lucerne University of Applied Sciences & Arts |
12 |
> |
supported by the German Research Foundation (DFG) |
13 |
> |
under the FARESYS project. |
14 |
|
(c) Lucerne University of Applied Sciences and Arts, |
15 |
< |
supported by the Swiss National Science Foundation (SNSF, #147053) |
15 |
> |
supported by the Swiss National Science Foundation (SNSF #147053). |
16 |
> |
(c) Tokyo University of Science, |
17 |
> |
supported by the JSPS KAKENHI Grant Number JP19KK0115. |
18 |
|
====================================================================== |
19 |
|
|
20 |
|
$Id$ |
100 |
|
printf("-apD %f\t\t\t\t# predistribution factor\n", preDistrib); |
101 |
|
printf("-apM %d\t\t\t\t\t# max predistrib passes\n", maxPreDistrib); |
102 |
|
#if 1 |
103 |
< |
/* Kept for backwards compat, will be gradually phased out by -lD, -lr */ |
103 |
> |
/* Kept for backwards compat, will be gradually phased out by -ld, -lr */ |
104 |
|
printf("-apm %ld\t\t\t\t# limit photon bounces\n", photonMaxBounce); |
105 |
|
#endif |
106 |
< |
puts("-apo mod\t\t\t\t# photon port modifier"); |
107 |
< |
puts("-apO file\t\t\t\t# photon ports from file"); |
106 |
> |
puts("-apo+ mod\t\t\t\t# photon port modifier"); |
107 |
> |
puts("-apO+ file\t\t\t\t# photon ports from file"); |
108 |
|
printf("-apP %f\t\t\t\t# precomputation factor\n", finalGather); |
109 |
|
printf("-apr %d\t\t\t\t\t# random seed\n", randSeed); |
110 |
|
puts("-aps mod\t\t\t\t# antimatter sensor modifier"); |
118 |
|
printf(clobber ? "-fo+\t\t\t\t\t# force overwrite\n" |
119 |
|
: "-fo-\t\t\t\t\t# do not overwrite\n"); |
120 |
|
#ifdef PMAP_EKSPERTZ |
121 |
< |
/* NU STUFF for Ze Exspertz! */ |
121 |
> |
/* (Formerly) NU STUFF for Ze Exspertz! */ |
122 |
|
printf("-ld %.1f\t\t\t\t\t# limit photon distance\n", photonMaxDist); |
123 |
|
printf("-lr %ld\t\t\t\t# limit photon bounces\n", photonMaxBounce); |
124 |
|
#endif |
129 |
|
colval(cextinction,BLU)); |
130 |
|
printf("-mg %.2f\t\t\t\t# scattering eccentricity\n", seccg); |
131 |
|
#if NIX |
132 |
< |
/* Multiprocessing on NIX only */ |
132 |
> |
/* Multiprocessing on NIX only; so tuff luck, Windoze Weenies! */ |
133 |
|
printf("-n %d\t\t\t\t\t# number of parallel processes\n", nproc); |
134 |
|
#endif |
135 |
|
printf("-t %-9d\t\t\t\t# time between reports\n", photonRepTime); |
140 |
|
|
141 |
|
int main (int argc, char* argv []) |
142 |
|
{ |
143 |
< |
#define check(ol, al) if (argv [i][ol] || \ |
144 |
< |
badarg(argc - i - 1,argv + i + 1, al)) \ |
145 |
< |
goto badopt |
146 |
< |
|
143 |
> |
#define check(ol, al) if ( \ |
144 |
> |
argv [i][ol] || badarg(argc - i - 1,argv + i + 1, al) \ |
145 |
> |
) goto badopt |
146 |
> |
|
147 |
> |
/* Evaluate boolean option, setting var accordingly */ |
148 |
|
#define check_bool(olen, var) switch (argv [i][olen]) { \ |
149 |
< |
case '\0': var = !var; break; \ |
150 |
< |
case 'y': case 'Y': case 't': case 'T': \ |
151 |
< |
case '+': case '1': var = 1; break; \ |
152 |
< |
case 'n': case 'N': case 'f': case 'F': \ |
153 |
< |
case '-': case '0': var = 0; break; \ |
154 |
< |
default: goto badopt; \ |
155 |
< |
} |
149 |
> |
case '\0': \ |
150 |
> |
var = !var; break; \ |
151 |
> |
case 'y': case 'Y': case 't': case 'T': case '+': case '1': \ |
152 |
> |
var = 1; break; \ |
153 |
> |
case 'n': case 'N': case 'f': case 'F': case '-': case '0': \ |
154 |
> |
var = 0; break; \ |
155 |
> |
default: \ |
156 |
> |
goto badopt; \ |
157 |
> |
} |
158 |
> |
|
159 |
> |
/* Evaluate trinary option, setting bits v1 and v2 in var accordingly */ |
160 |
> |
#define check_tri(olen, v1, v2, var) switch (argv [i][olen]) { \ |
161 |
> |
case '\0': case '+': \ |
162 |
> |
var = v1; break; \ |
163 |
> |
case '-': \ |
164 |
> |
var = v2; break;\ |
165 |
> |
case '0': \ |
166 |
> |
var = v1 | v2; break; \ |
167 |
> |
default: \ |
168 |
> |
goto badopt; \ |
169 |
> |
} |
170 |
|
|
171 |
< |
int loadflags = IO_CHECK | IO_SCENE | IO_TREE | IO_BOUNDS, rval, i, j, n; |
172 |
< |
char **portLp = photonPortList, **sensLp = photonSensorList, |
173 |
< |
**amblp = NULL; |
174 |
< |
struct stat pmstat; |
171 |
> |
int loadflags = IO_CHECK | IO_SCENE | IO_TREE | IO_BOUNDS, |
172 |
> |
rval, i, j, n; |
173 |
> |
char **portLp = photonPortList, **sensLp = photonSensorList, |
174 |
> |
**amblp = NULL, sbuf [MAXSTR], portFlags [2] = "\0\0"; |
175 |
> |
struct stat pmstat; |
176 |
|
|
177 |
|
/* Global program name */ |
178 |
|
progname = fixargv0(argv [0]); |
381 |
|
|
382 |
|
case 'o': /* Photon port */ |
383 |
|
case 'O': |
384 |
< |
check(4, "s"); |
384 |
> |
/* Check for bad arg and length, taking into account |
385 |
> |
* default forward orientation if none specified, in |
386 |
> |
* order to maintain previous behaviour */ |
387 |
> |
check(argv [i][4] ? 5 : 4, "s"); |
388 |
> |
/* Get port orientation flags */ |
389 |
> |
check_tri( |
390 |
> |
4, PMAP_PORTFWD, PMAP_PORTBWD, portFlags [0] |
391 |
> |
); |
392 |
> |
|
393 |
|
if (argv [i][3] == 'O') { |
394 |
|
/* Add port modifiers from file */ |
395 |
< |
rval = wordfile(portLp, |
396 |
< |
MAXSET - (portLp - photonPortList), |
397 |
< |
getpath(argv [++i], |
398 |
< |
getrlibpath(), R_OK)); |
395 |
> |
rval = wordfile( |
396 |
> |
portLp, MAXSET - (portLp - photonPortList), |
397 |
> |
getpath(argv [++i], getrlibpath(), R_OK) |
398 |
> |
); |
399 |
|
if (rval < 0) { |
400 |
< |
sprintf(errmsg, |
401 |
< |
"cannot open photon port file %s", |
402 |
< |
argv [i]); |
400 |
> |
sprintf( |
401 |
> |
errmsg, "cannot open photon port file %s", |
402 |
> |
argv [i] |
403 |
> |
); |
404 |
|
error(SYSTEM, errmsg); |
405 |
|
} |
406 |
< |
portLp += rval; |
406 |
> |
/* HACK: append port orientation flags to every |
407 |
> |
* modifier; note this requires reallocation */ |
408 |
> |
for (; rval--; portLp++) { |
409 |
> |
j = strlen(*portLp); |
410 |
> |
if (!(*portLp = realloc(*portLp, j + 2))) { |
411 |
> |
sprintf( |
412 |
> |
errmsg, |
413 |
> |
"cannot allocate photon port modifiers" |
414 |
> |
" from file %s", argv [i] |
415 |
> |
); |
416 |
> |
error(SYSTEM, errmsg); |
417 |
> |
} |
418 |
> |
strcat(*portLp, portFlags); |
419 |
> |
} |
420 |
|
} |
421 |
|
else { |
422 |
< |
/* Add port modifier from next arg, mark end with |
423 |
< |
* NULL */ |
424 |
< |
*portLp++ = savqstr(argv [++i]); |
422 |
> |
/* Append port flags to port modifier, add to |
423 |
> |
* port list and mark of end list with NULL */ |
424 |
> |
strcpy(sbuf, argv [++i]); |
425 |
> |
strcat(sbuf, portFlags); |
426 |
> |
*portLp++ = savqstr(sbuf); |
427 |
|
*portLp = NULL; |
428 |
|
} |
429 |
|
break; |