| 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; |