This is a follow up to a question I asked a few years ago about calculating the total irradiation on a pedestrian in an outdoor space.
For one single pedestrian position and a full year I do the following (based on Greg suggestion):
# <combined.rad> # Combined ground and sky vault for calculating cylindrical irradiance # Start by telling rfluxmtx to generate a single coefficient for the ground: #@rfluxmtx h=u void glow groundglow 0 0 4 .8 1.1 .8 0 groundglow source ground 0 0 4 0 0 -1 180 # Now, tell rfluxmtx to generate a set of Tregenza sky patches using Y for "north/up": #@rfluxmtx h=r1 u=+Y void glow sky_glow 0 0 4 1 1 1 0 sky_glow source sky 0 0 4 0 0 1 180
Generate sky matrix (only once);
gendaymtx weather.wea > sky.mtx
I then generate random sample points on an ideal cylinder:
cnt 2 | rcalc -e 'HT:2;RAD:0.2' \ -e 'rrad=RAD*sqrt(rand(.836*recno+.238));phi=2*PI*rand(-.3582*recno+.861);' \ -e '$1=rrad*cos(phi);$2=rrad*sin(phi);$3=HT;$4=0;$5=0;$6=1' > samps.txt cnt 40 | rcalc -e 'HT:2;RAD:0.2' \ -e 'rht=HT*rand(.571*recno-.7633);phi=2*PI*rand(-.6716*recno-.1023)' \ -e '$1=RAD*cos(phi);$2=RAD*sin(phi);$3=rht;$4=cos(phi);$5=sin(phi);$6=0' >> samps.txt
rfluxmtx -I+ -c 42 -y 1 -ab 2 - combined.rad shadow_mask_materials.rad shadow_mask_geometry.rad < samps.txt > daycoef.mtx
And finally multiply
dctimestep daycoef.mtx sky.mtx > annual.out
The last three operations need to be repeated for each one of the positions considered. This number can be as high as 20,000 in my case. I have timed the execution and it takes around 0.65s per position. For 20,000 positions this is around 3.6 hours.
real 0m0.626s user 0m0.584s sys 0m0.035s
From what I understand, I should be able to speed it up by using binary io and, I think, not writing to disk all the intermediate files, but I am struggling to write the correct command. If I try
rfluxmtx -I+ -c 42 -y 1 -ab 2 - combined.rad shadow_mask_materials.rad shadow_mask_geometry.rad < samps.txt | dctimestep sky.mtx > annual.out
I get the error
fatal - unexpected column count in header
What am I doing wrong? Is this the right approach or do you have any advice?