Calculate contribution from surface ensemble to sun points as receiver

Dear RADIANCE community,

In my work I am trying to derive surrogate models that are suitable for optimization-based control concepts. For this, I always sample a scene in n Fibonacci distributed sun points. So far I do this with rcontrib, where I consider the contributions of sensor points to the sun points. The current script looks like this:
######################################################################################
echo ::Generating scene octree::
oconv mat.rad geo.rad sunLights.rad > scene.oct

echo ::Running rcontrib for direct sun::
rcontrib -I+ -V+ -ab 0 -y 25 -t 5 -dc 1 -dt 0 -dj 0 -faa -M sunNames.txt scene.oct < sensors.txt > dirr.mtx

echo ::Converting direct sun results to irradiance::
rmtxop -faa -c 0.333333333 0.333333333 0.333333334 -t dirr.mtx > dirrFin.txt

echo ::Running rcontrib for combined (diffuse + direct) sun simulations::
rcontrib -I+ -V+ -ab 6 -ad 25000 -lw 4.0000e-05 -y 25 -t 5 -dc 1 -dt 0 -dj 0 -faa -M sunNames.txt scene.oct < sensors.txt > tot.mtx

echo ::Converting total sun results to irradiance::
rmtxop -faa -c 0.333333333 0.333333333 0.333333334 -t tot.mtx > totFin.txt

echo ::Simulation(s) complete::
######################################################################################

The files mat.rad, geo.rad, sunLights.rad, sunNames.txt and sensors.txt are available here. I have created a simple PV facade scene with Grasshopper.

With those commands I get all contributions from all sensors to all suns as desired. However, I am not really interested in the local resolution but only in the integral quantity on a surface.

Now my questions:

  • Which RADIANCE commands can I use to directly and fastly determine the contribution from “simplePVplane_ef32f6f3” to all sun points?
  • Is this possible with rcontrib or do I need rfluxmtx? What would the command look like?
  • How does it look if I want to determine the contributions of a surface which itself consists of many sub-surfaces, e.g. triangle mesh?

Kind regards

Simon Weber, M.Sc.
Research Associate

Institute for Acoustics and Building Physics
Pfaffenwaldring 7
70569 Stuttgart
Germany

Tel: +49 711 685 66301
E-Mail: [email protected]
Website: http://www.iabp.uni-stuttgart.de
ORCID

Hi Simon,

The rfluxmtx may be helpful in computing the average irradiance contribution over surfaces. Your “sender” scene file would contain a directed comment such as:

#@rfluxmtx h=u
# followed by scene primitives, all using the same material modifier…

You would collect all the polygons/triangles associated with a particular PV surface into this sender file. (Sorry for the confusing nomenclature – in this case, we are referring to the backwards ray-tracing process, “sender” means the origin of rays, not light source, and the corresponding “receiver” file contains your suns, where the rays end up.) The average surface normal is used as the direction for an irradiance calculation per “receiver.”

In your case, the receiver file would include all of your solar sources and a similar “h=u” line at the top. The rfluxmtx calculation would need to be repeated for each PV surface with a different “sender” file and the same set of suns in the “receiver” file.

If you don’t wish to employ rfluxmtx, you need to distribute your calculation points such that their spacing density is uniform over the sampled area of interest, then you could filter the output through the “total -m” utility to compute your averages. Dividing the output into the desired sample subset is a separate problem. For example, if every surface consists of 16 sample positions, you could pass the rcontrib output into:

total -16 -m

I hope this helps.
-Greg

Hi Greg,

As always, I have great respect for your rapid response time. Many thanks for that.
I have changed the bash script as follows:
###############################################
echo ::Running rfluxmtx for direct sun::
rfluxmtx -I+ -V+ -ab 0 -t 5 -dc 1 -dt 0 -dj 0 sender.rad receivers.rad scene.rad > dirr.mtx

echo ::Converting direct sun results to irradiance::
rmtxop -faa -c 0.333333333 0.333333333 0.333333334 -t dirr.mtx > dirrFin.txt

echo ::Running rfluxmtx for combined (diffuse + direct) sun simulations::
rfluxmtx -I+ -V+ -ab 6 -ad 25000 -lw 4.0000e-05 -t 5 -dc 1 -dt 0 -dj 0 sender.rad receivers.rad -i scene.oct > tot.mtx

echo ::Converting total sun results to irradiance::
rmtxop -faa -c 0.333333333 0.333333333 0.333333334 -t tot.mtx > totFin.txt

echo ::Simulation(s) complete::
###############################################
Are the commands and attributes OK?

The material primitives of the sender and receiver surfaces are contained in the sender.rad and receivers.rad respectively. Does that work? Or should they be contained in the scene.rad?

Do I have to add “u=Z” to “#@rfluxmtx h=u”, or is that the default value?

Do I then get the values in the integral unit “Watt”?

Kind regards
Simon
PS: I updated the files here.

Hi Simon,

This looks very good – I think you mostly have what you need, except that -I doesn’t work with rfluxmtx. I’ll explain that part at the end during the discussion of units.

Yes, the sender file should contain the desired PV mesh geometry using a single modifier, whose only purpose is really to group them together for sampling. (The reason for sender and receiver files’ similar syntax is that a receiver file in one rfluxmtx run may be a sender in another.) The receiver file then contains all of your suns.

The up vector is not needed for the “h=u” sampling, since everything is summed considering only the cosine and the azimuth orientation is irrelevant, but it is needed for the other sampling types. It does no harm to specify it if you wish. (Similarly, the “-dc 1” and “-dt 0” options are set by rfluxmtx and rcontrib and need not be specified.)

The output of “rfluxmtx -V+” using “#@rfluxmtx h=u” is the average irradiance over pi for the projected surface of your sender geometry, where the orientation for projection is the area-averaged surface normal. The -I+ and -i+ options are not supported by rfluxmtx with sender surfaces. So, multiply the result by pi to get irradiance in watts/m^2 as averaged over your sender surface. Multiply again by the projected sender surface area to get total incident flux in watts.

Best,
-Greg

Hi Greg,

i updated all files on github.
The bash script looks like this:
##############
echo ::Generating scene octree::
oconv mat.rad geo.rad > scene.oct

echo ::Running rfluxmtx for direct sun::
rfluxmtx -V+ -ab 0 -t 5 -dj 0 sender.rad receivers.rad -i scene.oct > dirr.mtx

echo ::Converting direct sun results to irradiance::
rmtxop -faa -c 0.333333333 0.333333333 0.333333334 -t dirr.mtx > dirrFin.txt

echo ::Running rfluxmtx for combined (diffuse + direct) sun simulations::
rfluxmtx -V+ -ab 6 -ad 25000 -lw 4.0000e-05 -t 5 -dj 0 sender.rad receivers.rad -i scene.oct > tot.mtx

echo ::Converting total sun results to irradiance::
rmtxop -faa -c 0.333333333 0.333333333 0.333333334 -t tot.mtx > totFin.txt

echo ::Simulation(s) complete::
#################
Additionally, I added the geometry of the sender polygon and all suns to geo.rad and their materials to mat.rad.

The simulation runs, but the resulting file dirrFin.txt contains only one entry instead of a vector of shape (1000,).

What am I doing wrong?

Kind regards
Simon

Sorry, I forgot to mention that each separate “receiver,” or sun in your case, needs a unique modifier for this to work in rfluxmtx, since that modifier gets passed to rcontrib to create the vector.

You still want to put them all together in one receiver file, however.

Cheers,
-Greg

Hi Greg,

i updated only the receivers.rad file the bash script is the same.

The receivers.rad now contains individual material modifiers for every source primitive and starts with:
##########
#@rfluxmtx h=u
void light al_88.460_az_270.000 0 0 3 15000000.0 15000000.0 15000000.0
al_88.460_az_270.000 source al_88.460_az_270.000src 0 0 4 0.02688065595580519 0.0 0.9996386498807385 0.533
void light al_87.010_az_047.508 0 0 3 15000000.0 15000000.0 15000000.0
al_87.010_az_047.508 source al_87.010_az_047.508src 0 0 4 -0.038464400847338556 -0.03523654200686536 0.9986385111614982 0.533

#######

Didn’t you say that the must be grouped together by one material modifier in the senders and receivers file?

The simulation gives me empty .mtx files. Do i need the -M sunNames.txt attribute to differentiate all suns from each other?

Kind regards
Simon

Hi Greg,

could it be that I have the same problem, with hitting the MAXRCARG=10000 limit as discussed here.

If I try it with two suns it gives me two results. But its much slower. Is there a way to speed up without -n option? How can i adjust the MAXRCARG attribute? Maybe its enough to have only 500 or 1000?

Kind regards
Simon

Hi Simon,

I did say that you need to use a single modifier for the sender file. Receiver files don’t have this limitation.

And yes, you could be hitting the command argument limit in rfluxmtx. How many receivers do you have? Does rfluxmtx report an error like “rfluxmtx: too many arguments?” The limit is set with the MAXRCARG macro in src/util/rfluxmtx.c, but it is not much smaller than the system limit on command arguments, so I’m not sure you can increase it much before you run into other problems. You can try increasing it to 26000, which would max out close to the ultimate command-line limits with 9-character words.

Cheers,
-Greg

P.S. rfluxmtx always puts the words into the command line with separate -m options.

Hi Greg,

the reason for my endeavor is to analyze the angle-dependent behavior of a solar thermal quantity. The method is an alternative to the Klems matrix layer calculation. I have prepared a second simple example of a shoebox room. It contains a simple window.

Shoebox

I would like to determine the solar thermal absorption and transmission into the room in order to calculate the shgc value according to ISO 52022-3
To do this, I need a total of 4 transmitting surface ensembles. These are shown here with an extrusion of 1m around the window position for better visualization. In reality I would use a value of 0.01m or lower.

Sender 1

Sender 2

Sender 3

Sender 4

I have uploaded all geometry, material, sender and receivers files as well as the respective bashscripts here.

The scripts works with receivers96 but not with receiversAll. If i choose one receiver sun more the simulation doesn’t even give me an output. The simulation time is dependent on the attribute (-c) but not the successful execution.

In total i would like to investigate at least 1000 suns not only 96 at once. How is that possible?

kr
Simon

When I look at the result totFin.txt:
##############
#?RADIANCE
rmtxop -faa -c 0.333333333 0.333333333 0.333333334 -t tot.mtx
oconv -f -i scene.oct receivers96.rad

rcontrib -fo+ -V+ -ab 6 -ad 25000 -lw 4.0000e-05 -t 5 -dj 0 -fda -c 100 -bn 1 -b if(-Dx*-0.0268807-Dy0-Dz-0.999639,0,-1) -m al_88.460_az_270.000 -bn 1 -b if(-Dx0.0384644-Dy0.0352365-Dz*-0.998639,0,-1) -m al_87.010_az_047.508 -bn 1 -b if(-Dx*-0.00600487-Dy*-0.0684224-Dz*-0.997638,0,-1) -m al_86.062_az_185.016 -bn 1 -b if(-Dx*-0.0498483-Dy0.0650183-Dz-0.996638,0,-1) -m al_85.301_az_322.523 -bn 1 -b if(-Dx0.0918732-Dy-0.0162511-Dz*-0.995638,0,-1) -m al_84.647_az_100.031 -bn 1 -b if(-Dx*-0.0872597-Dy*-0.0555075-Dz*-0.994638,0,-1) -m al_84.064_az_237.539 -bn 1 -b if(-Dx0.0292374-Dy0.108762-Dz*-0.993638,0,-1) -m al_83.533_az_015.047 -bn 1 -b if(-Dx0.0558258-Dy-0.107489-Dz*-0.992638,0,-1) -m al_83.043_az_152.554 -bn 1 -b if(-Dx*-0.121223-Dy0.0442706-Dz-0.991638,0,-1) -m al_82.585_az_290.062 -bn 1 -b if(-Dx0.126191-Dy0.0520898-Dz*-0.990637,0,-1) -m al_82.154_az_067.570 -bn 1 -b if(-Dx*-0.06086-Dy*-0.130054-Dz*-0.989637,0,-1) -m al_81.744_az_205.078 -bn 1 -b if(-Dx*-0.0449889-Dy0.143432-Dz-0.988637,0,-1) -m al_81.354_az_342.585 -bn 1 -b if(-Dx0.135629-Dy-0.0785998-Dz*-0.987637,0,-1) -m al_80.981_az_120.093 -bn 1 -b if(-Dx*-0.159134-Dy*-0.0349853-Dz*-0.986637,0,-1) -m al_80.623_az_257.601 -bn 1 -b if(-Dx0.0971276-Dy0.138154-Dz*-0.985637,0,-1) -m al_80.277_az_035.109 -bn 1 -b if(-Dx0.0224401-Dy-0.173168-Dz*-0.984637,0,-1) -m al_79.944_az_172.616 -bn 1 -b if(-Dx*-0.137763-Dy0.116107-Dz-0.983636,0,-1) -m al_79.621_az_310.124 -bn 1 -b if(-Dx0.185384-Dy0.0076662-Dz*-0.982636,0,-1) -m al_79.307_az_087.632 -bn 1 -b if(-Dx*-0.135218-Dy*-0.13456-Dz*-0.981636,0,-1) -m al_79.003_az_225.140 -bn 1 -b if(-Dx0.0090461-Dy0.19563-Dz*-0.980636,0,-1) -m al_78.706_az_002.648 -bn 1 -b if(-Dx0.128643-Dy-0.154157-Dz*-0.979636,0,-1) -m al_78.417_az_140.155 -bn 1 -b if(-Dx*-0.203766-Dy0.0274164-Dz-0.978636,0,-1) -m al_78.135_az_277.663 -bn 1 -b if(-Dx0.172631-Dy0.120112-Dz*-0.977636,0,-1) -m al_77.860_az_055.171 -bn 1 -b if(-Dx*-0.0471671-Dy*-0.209663-Dz*-0.976635,0,-1) -m al_77.590_az_192.679 -bn 1 -b if(-Dx*-0.109081-Dy0.19036-Dz-0.975635,0,-1) -m al_77.326_az_330.186 -bn 1 -b if(-Dx0.213212-Dy-0.0680205-Dz*-0.974635,0,-1) -m al_77.068_az_107.694 -bn 1 -b if(-Dx*-0.207077-Dy*-0.0956751-Dz*-0.973635,0,-1) -m al_76.814_az_245.202 -bn 1 -b if(-Dx0.089697-Dy0.214326-Dz*-0.972635,0,-1) -m al_76.565_az_022.710 -bn 1 -b if(-Dx0.0800394-Dy-0.22253-Dz*-0.971635,0,-1) -m al_76.321_az_160.217 -bn 1 -b if(-Dx*-0.21294-Dy0.111915-Dz-0.970635,0,-1) -m al_76.080_az_297.725 -bn 1 -b if(-Dx0.236481-Dy0.0623356-Dz*-0.969634,0,-1) -m al_75.844_az_075.233 -bn 1 -b if(-Dx*-0.134393-Dy*-0.209012-Dz*-0.968634,0,-1) -m al_75.612_az_212.741 -bn 1 -b if(-Dx*-0.0427433-Dy0.248711-Dz-0.967634,0,-1) -m al_75.383_az_350.248 -bn 1 -b if(-Dx0.202527-Dy-0.156848-Dz*-0.966634,0,-1) -m al_75.158_az_127.756 -bn 1 -b if(-Dx*-0.259019-Dy*-0.0214592-Dz*-0.965634,0,-1) -m al_74.936_az_265.264 -bn 1 -b if(-Dx0.179001-Dy0.193495-Dz*-0.964634,0,-1) -m al_74.717_az_042.772 -bn 1 -b if(-Dx*-0.00130361-Dy*-0.267224-Dz*-0.963634,0,-1) -m al_74.501_az_180.280 -bn 1 -b if(-Dx*-0.181952-Dy0.200575-Dz-0.962634,0,-1) -m al_74.288_az_317.787 -bn 1 -b if(-Dx0.273167-Dy-0.0253171-Dz*-0.961633,0,-1) -m al_74.077_az_095.295 -bn 1 -b if(-Dx*-0.2213-Dy*-0.167959-Dz*-0.960633,0,-1) -m al_73.870_az_232.803 -bn 1 -b if(-Dx0.05034-Dy0.276713-Dz*-0.959633,0,-1) -m al_73.665_az_010.311 -bn 1 -b if(-Dx0.151604-Dy-0.240913-Dz*-0.958633,0,-1) -m al_73.462_az_147.818 -bn 1 -b if(-Dx*-0.27775-Dy0.0761198-Dz-0.957633,0,-1) -m al_73.262_az_285.326 -bn 1 -b if(-Dx0.259163-Dy0.132998-Dz*-0.956633,0,-1) -m al_73.064_az_062.834 -bn 1 -b if(-Dx*-0.102395-Dy*-0.276192-Dz*-0.955633,0,-1) -m al_72.869_az_200.342 -bn 1 -b if(-Dx*-0.112278-Dy0.275809-Dz-0.954632,0,-1) -m al_72.675_az_337.849 -bn 1 -b if(-Dx0.271977-Dy-0.128895-Dz*-0.953632,0,-1) -m al_72.484_az_115.357 -bn 1 -b if(-Dx*-0.290626-Dy*-0.089603-Dz*-0.952632,0,-1) -m al_72.294_az_252.865 -bn 1 -b if(-Dx0.155348-Dy0.265073-Dz*-0.951632,0,-1) -m al_72.107_az_030.373 -bn 1 -b if(-Dx0.0651526-Dy-0.303404-Dz*-0.950632,0,-1) -m al_71.921_az_167.880 -bn 1 -b if(-Dx*-0.255472-Dy0.181476-Dz-0.949632,0,-1) -m al_71.738_az_305.388 -bn 1 -b if(-Dx0.313954-Dy0.0391275-Dz*-0.948632,0,-1) -m al_71.556_az_082.896 -bn 1 -b if(-Dx*-0.207003-Dy*-0.243196-Dz*-0.947631,0,-1) -m al_71.375_az_220.404 -bn 1 -b if(-Dx*-0.0117463-Dy0.322104-Dz-0.946631,0,-1) -m al_71.197_az_357.911 -bn 1 -b if(-Dx0.228291-Dy-0.231657-Dz*-0.945631,0,-1) -m al_71.020_az_135.419 -bn 1 -b if(-Dx*-0.327706-Dy0.0167558-Dz-0.944631,0,-1) -m al_70.844_az_272.927 -bn 1 -b if(-Dx0.255168-Dy0.210832-Dz*-0.943631,0,-1) -m al_70.671_az_050.435 -bn 1 -b if(-Dx*-0.0461297-Dy*-0.330635-Dz*-0.942631,0,-1) -m al_70.498_az_187.943 -bn 1 -b if(-Dx*-0.19092-Dy0.277275-Dz-0.941631,0,-1) -m al_70.327_az_325.450 -bn 1 -b if(-Dx0.330789-Dy-0.0761137-Dz*-0.94063,0,-1) -m al_70.158_az_102.958 -bn 1 -b if(-Dx*-0.297728-Dy*-0.168681-Dz*-0.93963,0,-1) -m al_69.990_az_240.466 -bn 1 -b if(-Dx0.106437-Dy0.328092-Dz*-0.93863,0,-1) -m al_69.823_az_017.974 -bn 1 -b if(-Dx0.144265-Dy-0.316287-Dz*-0.93763,0,-1) -m al_69.657_az_155.481 -bn 1 -b if(-Dx*-0.322498-Dy0.13682-Dz-0.93663,0,-1) -m al_69.493_az_292.989 -bn 1 -b if(-Dx0.33273-Dy0.117846-Dz*-0.93563,0,-1) -m al_69.330_az_070.497 -bn 1 -b if(-Dx*-0.16698-Dy*-0.313983-Dz*-0.93463,0,-1) -m al_69.168_az_208.005 -bn 1 -b if(-Dx*-0.0896209-Dy0.346849-Dz-0.933629,0,-1) -m al_69.008_az_345.512 -bn 1 -b if(-Dx0.302553-Dy-0.196632-Dz*-0.932629,0,-1) -m al_68.848_az_123.020 -bn 1 -b if(-Dx*-0.358456-Dy*-0.0598051-Dz*-0.931629,0,-1) -m al_68.690_az_260.528 -bn 1 -b if(-Dx0.22549-Dy0.288243-Dz*-0.930629,0,-1) -m al_68.533_az_038.036 -bn 1 -b if(-Dx0.0286331-Dy-0.367383-Dz*-0.929629,0,-1) -m al_68.377_az_175.543 -bn 1 -b if(-Dx*-0.271113-Dy0.253271-Dz-0.928629,0,-1) -m al_68.222_az_313.051 -bn 1 -b if(-Dx0.373486-Dy-0.00364407-Dz*-0.927629,0,-1) -m al_68.068_az_090.559 -bn 1 -b if(-Dx*-0.279699-Dy*-0.251253-Dz*-0.926629,0,-1) -m al_67.915_az_228.067 -bn 1 -b if(-Dx0.0367613-Dy0.376644-Dz*-0.925628,0,-1) -m al_67.763_az_005.575 -bn 1 -b if(-Dx0.228777-Dy-0.304506-Dz*-0.924628,0,-1) -m al_67.612_az_143.082 -bn 1 -b if(-Dx*-0.376761-Dy0.0704414-Dz-0.923628,0,-1) -m al_67.462_az_280.590 -bn 1 -b if(-Dx0.327433-Dy0.203826-Dz*-0.922628,0,-1) -m al_67.313_az_058.098 -bn 1 -b if(-Dx*-0.104398-Dy*-0.373769-Dz*-0.921628,0,-1) -m al_67.165_az_195.606 -bn 1 -b if(-Dx*-0.176568-Dy0.348236-Dz-0.920628,0,-1) -m al_67.018_az_333.113 -bn 1 -b if(-Dx0.367625-Dy-0.138336-Dz*-0.919628,0,-1) -m al_66.872_az_110.621 -bn 1 -b if(-Dx*-0.366685-Dy*-0.147192-Dz*-0.918627,0,-1) -m al_66.726_az_248.129 -bn 1 -b if(-Dx0.171958-Dy0.358316-Dz*-0.917627,0,-1) -m al_66.582_az_025.637 -bn 1 -b if(-Dx0.11591-Dy-0.38257-Dz*-0.916627,0,-1) -m al_66.438_az_163.144 -bn 1 -b if(-Dx*-0.345857-Dy0.204964-Dz-0.915627,0,-1) -m al_66.295_az_300.652 -bn 1 -b if(-Dx0.395697-Dy0.0829542-Dz*-0.914627,0,-1) -m al_66.153_az_078.160 -bn 1 -b if(-Dx*-0.237055-Dy*-0.33029-Dz*-0.913627,0,-1) -m al_66.011_az_215.668 -bn 1 -b if(-Dx*-0.0485766-Dy0.405898-Dz-0.912627,0,-1) -m al_65.871_az_353.175 -bn 1 -b if(-Dx0.311687-Dy-0.267934-Dz*-0.911626,0,-1) -m al_65.731_az_130.683 -bn 1 -b if(-Dx*-0.413025-Dy*-0.0130448-Dz*-0.910626,0,-1) -m al_65.592_az_268.191 -bn 1 -b if(-Dx0.297312-Dy0.290148-Dz*-0.909626,0,-1) -m al_65.454_az_045.699 -bn 1 -b if(-Dx*-0.0233592-Dy*-0.416957-Dz*-0.908626,0,-1) -m al_65.316_az_183.207 -bn 1 -b if(-Dx*-0.2658-Dy0.324909-Dz-0.907626,0,-1) -m al_65.179_az_320.714 -bn 1 -b if(-Dx0.417599-Dy-0.060341-Dz*-0.906626,0,-1) -m al_65.043_az_098.222 -bn 1 -b if(-Dx*-0.350455-Dy*-0.238797-Dz*-0.905626,0,-1) -m al_64.908_az_235.730 -bn 1 -b if(-Dx0.097597-Dy0.414883-Dz*-0.904625,0,-1) -m al_64.773_az_013.238 -y 1

SOFTWARE= RADIANCE 5.4 2023-11-05 LBNL (5.4.4ee32974b1)

CAPDATE= 2025:04:03 11:23:01

GMT= 2025:04:03 09:23:01

Applied 1x3 component transform
NROWS=96
NCOLS=1
NCOMP=1
FORMAT=ascii

1.244509000000000e+01
1.257628000000000e+01
1.012480000000000e+01
1.271219000000000e+01

####################
There is a huge string after the rcontrib directive. Is that the error? Because it exceeds the MAXRCARG parameter? According to Word, the rcontrib input has a character length of 7720 including spaces.

Hi Simon,

What system are you running this on? The limit for command-line length on most Unix systems is around 260KB, so I don’t think you are running up against that. You are also not close to the limit on word count, which is at least 4096 on all Unix systems I know of. I am not sure what limit you are hitting, but the lack of an error message implies that it is some system limit, rather than something Radiance is constraining you to. You are certainly well below the default 10000 command-line word limit in rfluxmtx. (There is no limit on character count from Radiance.)

Whatever the cause of this, it seems like an inefficient way to perform the calculation. You are really stretching the application area rfluxmtx was intended for. At this point, I would really recommend you return to rcontrib and create your own samples for that, using the -M option that is better suited to really long lists of identically-treated receivers/suns. Since your origin surfaces are rectangular, generating uniform ray samples is really quite simple with cnt and rcalc. I am happy to give you tips on that if you need them.

Cheers,
-Greg

P.S. You might also wish to reconsider subdividing the sky using Reinhart or Shirley-Chiu, which bins rays hitting the sky at random instead of your long list of suns. It’s a less deterministic result, but probably faster and simpler in the end.

Hi Greg,

I’m running the simulations on windows.

I’ll try both and see whats faster and more accurate. I thought it should work, because a bsdf also contains a kind of contributions from multiple senders to receiver surfaces, isn’t it?

The receiver should be a source surface. With (-dj 0) I get directly the value of the incidence operator.

Maybe we can talk about that at the RADIANCE workshop this year. I already send a brief application to Prof. Wienold. I will gladly send you a more detailed proposal.

kr
Simon

Hi Greg,

If I’d use a simple sender polygon and set the attribute (-c 100), would I get the same result via rfluxmtx as if I’d distribute 100 sensors uniformly on the polygon and determine the mean contribution via rcontrib (-c 1) results? Every other attribute would be equal.

Kind regards
Simon

Hi Simon,

I guess Windows has some more modest system limits than Unix, which I suppose should not surprise anyone.

Regarding your sampler, you would need to repeat your sample point 100 times for -c 100, and the usual practice is to distribute them over the surface to best average any local shading that is going on. If you don’t have any geometry facing your sample surface, then it doesn’t matter where you origin points are.

Happy to discuss this further at the workshop. I would like to understand your purpose more clearly.

Cheers,
-Greg