option, after downloading check if .ghuser files are blocked (right click -> "Properties" and select "Unblock"). Then paste them in File->Special Folders->User Object Folder. You can download the example files from here. They act in similar way, Ladybug Photovoltaics components do: we pick a surface, and get an answer to a question: "How much thermal energy, for a certain number of persons can my roof, building facade... generate if I would populate them with Solar Water Heating collectors"? This information can then be used to cover domestic hot water, space heating or space cooling loads:
Components enable setting specific details of the system, or using simplified ones. They cover analysis of domestic hot water load, final performance of the SWH system, its embodied energy, energy value, consumption, emissions... And finding optimal system and storage size. By Dr. Chengchu Yan and Djordje Spasic, with invaluable support of Dr. Willian Beckman, Dr. Jason M. Keith, Jeff Maguire, Nicolas DiOrio, Niraj Palsule, Sargon George Ishaya and Craig Christensen. Hope you will enjoy using the components! References: 1) Calculation of delivered energy: Solar Engineering of Thermal Processes, John Wiley and Sons, J. Duffie, W. Beckman, 4th ed., 2013. Technical Manual for the SAM Solar Water Heating Model, NREL, N. DiOrio, C. Christensen, J. Burch, A. Dobos, 2014. A simplified method for optimal design of solar water heating systems based on life-cycle energy analysis, Renewable Energy journal, Yan, Wang, Ma, Shi, Vol 74, Feb 2015
2) Domestic hot water load: Modeling patterns of hot water use in households, Ernest Orlando Lawrence Berkeley National Laboratory; Lutz, Liu, McMahon, Dunham, Shown, McGrue; Nov 1996. ASHRAE 2003 Applications Handbook (SI), Chapter 49, Service water heating
3) Mains water temperature Residential alternative calculation method reference manual, California energy commission, June 2013. Development of an Energy Savings Benchmark for All Residential End-Uses, NREL, August 2004. Solar water heating project analysis chapter, Minister of Natural Resources Canada, 2004.
4) Pipe diameters and pump power: Planning & Installing Solar Thermal Systems, Earthscan, 2nd edition
5) Sun postion and POA irradiance, the same as for Ladybug Photovoltaics (Michalsky (1988), diffuse irradiance by Perez (1990), ground reflected irradiance by Liu, Jordan (1963))
6) Optimal system and storage tank size: A simplified method for optimal design of solar water heating systems based on life-cycle energy analysis, Renewable Energy journal, Yan, Wang, Ma, Shi, Vol 74, Feb 2015.…
azione parametrica e generativa attraverso Grasshopper, plug-in di programmazione visuale per Rhinoceros 3D (uno dei più diffusi modellatori NURBS per l‘architettura e il design). Il workshop mira a gestire e sviluppare il rapporto tra informazione e geometria lavorando sui sistemi ad involucro in condizioni specifiche.La discretizzazione di superfici (pannellizazione Nurbs o Mesh), la modellazione delle geometrie attraverso informazioni (siano esse provenienti da analisi ambientali, mappe o database) e l’estrazione e la gestione di queste informazioni, richiede la comprensione di strutture di dati al fine di gestire completamente processo che va dalla progettazione alla costruzione.I partecipanti impareranno come costruire e sviluppare strutture di dati parametrici per informare geometrie ‘data-driven’ e come estrarre le informazioni rilevanti da tali modelli per il processo di costruzione.
Modulo 2 – Il workshop, volto a promuovere le nuove tecnologie digitali di supporto alla progettazione e alla fabbricazione, esplorerà l’integrazione tra design e prototipazione tramite processi di stampa 3d di materiale ceramico al fine di comprenderne allo stesso tempo sia il comportamento del materiale che i vincoli e le opportunità offerte dall’utilizzo di tali tecnologie.Infatti utilizzando grasshopper ed una macchina a controllo numerico i partecipanti apprenderanno le modalità per la generazione parametrica dei modelli e la creazione del codice per la loro prototipazione (Gcode creato direttamente in Grasshopper). Il workshop darà quindi ai partecipanti la possibilità di testare direttamente i loro elaborati digitali stampandoli in modo da comprendere come le informazioni articolate tramite tali strumenti di design producano specifici effetti sia morfologici che estetici.…
ut in the next few days.
I've found getting really good handling of static vs kinetic friction to be a pain though.
Distinguishing between collisions and resting contact generally becomes more complicated than it might first appear.
If the collision with the mesh or ground is 'hard' I project the particle positions, so they can never penetrate, and reverse the component of their velocity normal to the surface (multiplied by the restitution factor). This means that whenever you have some structure of springs resting on a hard surface, there is usually still some tiny imperceptible bouncing. This makes it hard to properly apply static friction (which would zero the tangential velocity if the tangential force was below some threshold and it is not already sliding), because particles are generally not perfectly on the surface, even when apparently at rest. Obviously it's not good to have friction affecting things that aren't touching the surface.
This is the origin of the 'settle' parameter in the settings. The idea was that when the motion of a particle normal to the surface drops below that limit, it will be totally zeroed, and the particle becomes properly resting on the surface. I never really like having to use these kind of weird ad hoc fixes though.
Alternatively, if the collision is 'soft' I use a spring-like force to push particles out of the ground/mesh.
This can cause problems because in many cases you just want a simple constraint that they never go below ground level, and there is a limit to how stiff you can make these spring-like forces.
The advantage though, is that because any particle resting 'on' the ground/surface will actually be slightly below/inside it, and one can use this to decide whether to apply contact friction.
With bouncing collisions, it is a little simpler. There is just the question of what to do with the velocity component tangential to the surface. See the bottom comment by me here, for more on the 'tumble' setting:
http://www.grasshopper3d.com/video/kangaroo-traction-test
So you see, it is challenging to get one consistent model that will give correct behaviour for all cases (eg a simple static 'leaning ladder' type problem, a bouncing particle, and vehicle wheel traction), without having several of these odd seeming and non-intuitive settings.
…
Added by Daniel Piker at 11:11am on October 18, 2012
m is different from email spam.
Email spammers want you to buy their product. You are the target of the ad contained in each email spam you receive. Comment/web spammers want your readers to buy their product. You (the blogger, author, moderator) are not the target.
2. Web spammers are social engineers.
Email spammers write messages to get your attention. Comment spammers write messages to escape your attention. They want you to believe they are real bloggers, real people, writing real comments, so you’ll approve the comment and publish it on your site. They use flattery, appeal to your good nature, and simply lie in order to convince you to give them the benefit of the doubt.
3. Web spammers are basically advertising on your blog..
..and they're keeping all of the profits. They’re not even asking your permission first. Right now someone is offering to sell links from your blog to anyone willing to pay a few dollars (or a few cents). If your blog is well known, it may even be listed by name, with backlinks for sale at a set price.
4. It’s all about the backlinks.
Web spammers are selling links from your blog to their clients. They do this to game the search engines and trick your readers into visiting dubious web sites. Their clients are sometimes seemingly harmless, but are often peddling fake pills, porn, scams and malware. Sometimes they’ll use “buffer sites” – that is, innocent looking web pages intended to disguise the fact that they’re really advertising something more sinister.
5. Spammers employ humans.
Not all spam is delivered by spambots. Spammers are increasingly using humans to write and post comments by hand. Typically they are exploiting low-paid workers in internet cafes, schools and factories. Sometimes they are viral marketers paid to promote a new product. Either way they are trying to exploit your blog for their profit – and hoping to do it without you noticing.
…
Added by Danny Boyes at 4:51am on October 24, 2013
he results are accurate enough.Good to go!Current working directory is set to: C:\002_VIDEO\02_UNI\TU_GRAZ\01_DISSERTATION\02_RESEARCH\08_POMODORO\01_SIMULATION_MODEL/03_HONEYBEE\VF_00\gridBasedSimulation\start cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineRuntime error (IndexOutOfRangeException): index out of range: 0Traceback: line 271, in script…
is set to: C:\002_VIDEO\02_UNI\TU_GRAZ\01_DISSERTATION\02_RESEARCH\08_POMODORO\01_SIMULATION_MODEL/03_HONEYBEE\VF_00\gridBasedSimulation\start cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get Commandlinestart cmd /c C:\Users\paratufello\AppData\Roaming\Ladybug\unnamed\annualSimulation\unnamed_7_DS.batWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineWMIC PROCESS get CommandlineRuntime error (IndexOutOfRangeException): index out of range: 0Traceback: line 271, in script…
dy for a wall where we want to analyze its openings. I made a parametric wall that then get's analyzed with different geometries and the idea was just to leave it there for the weekend as it morphed through different iterations. However, after successfully running a test simulation on my pc (just with one iteration), it fails to run the same test on the workplace computer. Any help would be greatly apprecated! Here is the following error:
Sorry! But the number of available CPUs on your machine is 4.
Honeybee set the number of CPUs to 4.
Grid-based Radiance simulation
The component is checking ad, as, ar and aa values. This is just to make sure that the results are accurate enough.
Good to go!
Current working directory is set to: C:\ladybug\Parametric_Shading_Wall\psw_z0.25_t.025_y.2_r90_m3_lux\gridBasedSimulation\
Failed to read the results!
rtrace: fatal - (psw_z0.25_t.025_y.2_r90_m3_lux_RAD.oct): truncated octree
rtrace: fatal - (psw_z0.25_t.025_y.2_r90_m3_lux_RAD.oct): truncated octree
rtrace: fatal - (psw_z0.25_t.025_y.2_r90_m3_lux_RAD.oct): truncated octree
rtrace: fatal - (psw_z0.25_t.025_y.2_r90_m3_lux_RAD.oct): truncated octree
Runtime error (PythonException): Failed to read the results!
rtrace: fatal - (psw_z0.25_t.025_y.2_r90_m3_lux_RAD.oct): truncated octree
rtrace: fatal - (psw_z0.25_t.025_y.2_r90_m3_lux_RAD.oct): truncated octree
rtrace: fatal - (psw_z0.25_t.025_y.2_r90_m3_lux_RAD.oct): truncated octree
rtrace: fatal - (psw_z0.25_t.025_y.2_r90_m3_lux_RAD.oct): truncated octree
PS. It says to see line 336…
ed file and code below:
Color ColorAt(Mesh mesh, int faceIndex, double t0, double t1, double t2, double t3) { // int rc = -1; var color = Rhino.Display.Color4f.Black;
if( mesh.VertexColors.Count != 0) { // test to see if face exists if( faceIndex >= 0 && faceIndex < mesh.Faces.Count ) { /// Barycentric quad coordinates for the point on the mesh /// face mesh.Faces[FaceIndex].
/// If the face is a triangle /// disregard T[3] (it should be set to 0.0).
/// If the face is /// a quad and is split between vertexes 0 and 2, then T[3] /// will be 0.0 when point is on the triangle defined by vi[0], /// vi[1], vi[2]
/// T[1] will be 0.0 when point is on the /// triangle defined by vi[0], vi[2], vi[3].
/// If the face is a /// quad and is split between vertexes 1 and 3, then T[2] will /// be -1 when point is on the triangle defined by vi[0], /// vi[1], vi[3]
/// and m_t[0] will be -1 when point is on the /// triangle defined by vi[1], vi[2], vi[3].
MeshFace face = mesh.Faces[faceIndex];
// Collect data for barycentric evaluation. Color p0, p1, p2;
if(face.IsTriangle) { p0 = mesh.VertexColors[face.A]; p1 = mesh.VertexColors[face.B]; p2 = mesh.VertexColors[face.C]; } else { if( t3 == 0 ) { // point is on subtriangle {0,1,2} p0 = mesh.VertexColors[face.A]; p1 = mesh.VertexColors[face.B]; p2 = mesh.VertexColors[face.C]; } else if( t1 == 0 ) { // point is on subtriangle {0,2,3} p0 = mesh.VertexColors[face.A]; p1 = mesh.VertexColors[face.C]; p2 = mesh.VertexColors[face.D]; //t0 = t0; t1 = t2; t2 = t3; } else if( t2 == -1 ) { // point is on subtriangle {0,1,3} p0 = mesh.VertexColors[face.A]; p1 = mesh.VertexColors[face.B]; p2 = mesh.VertexColors[face.D]; //t0 = t0; //t1 = t1; t2 = t3; } else { // point must be on remaining subtriangle {1,2,3} p0 = mesh.VertexColors[face.B]; p1 = mesh.VertexColors[face.C]; p2 = mesh.VertexColors[face.D]; t0 = t1; t1 = t2; t2 = t3; } }
/** double r = t0 * p0.FractionRed() + t1 * p1.FractionRed() + t2 * p2.FractionRed(); double g = t0 * p0.FractionGreen() + t1 * p1.FractionGreen() + t2 * p2.FractionGreen(); double b = t0 * p0.FractionBlue() + t1 * p1.FractionBlue() + t2 * p2.FractionBlue();
ON_Color color; color.SetFractionalRGB(r, g, b);
unsigned int abgr = (unsigned int)color; rc = (int) ABGR_to_ARGB(abgr); **/ var c0 = new Rhino.Display.Color4f(p0); var c1 = new Rhino.Display.Color4f(p1); var c2 = new Rhino.Display.Color4f(p2); float s0 = (float) t0; float s1 = (float) t1; float s2 = (float) t2;
float R = s0 * c0.R + s1 * c1.R + s2 * c2.R; float G = s0 * c0.G + s1 * c1.G + s2 * c2.G; float B = s0 * c0.B + s1 * c1.B + s2 * c2.B; color = new Rhino.Display.Color4f(R, G, B, 1); } } return color.AsSystemColor(); }
…
Introduzione a Grasshopper", il primo manuale su Grasshopper.
.
I corsi PLUG IT nascono dalla volontà di promuovere le nuove tecnologie digitali di supporto alla progettazione e condividere il know-how maturato attraverso ricerca, collaborazione con i più importanti studi di architettura e pubblicazioni internazionali.
.
Verranno introdotte le nozioni base di Grasshopper approfondendo le metodologie della progettazione parametrica e le tecniche di modellazione algoritmica per la generazione di forme complesse. Il corso è rivolto a studenti e professionisti con esperienza minima nella modellazione 3D e si articolerà in lezioni teoriche ed esercitazioni.
. Argomenti trattati:
- Introduzione alla progettazione parametrica: teoria, esempi, casi studio - Grasshopper: concetti base, logica algoritmica, interfaccia grafica - Nozioni fondamentali: componenti, connessioni, data flow
- Funzioni matematiche e logiche, serie, gestione dei dati - Analisi e definizione di curve e superfici
- Definizione di griglie e pattern complessi - Trasformazioni geometriche, paneling - Attrattori, image sampler
- Data tree: gestione di dati complessi - Digital fabrication: teoria ed esempi - Nesting: scomposizione di oggetti tridimensionali in sezioni piane per macchine CNC
.
Verrà rilasciato un attestato finale.
.
Ulteriori info e programma completo su: www.arturotedeschi.com e su www.edizionilepenseur.it…
ay how many valid permutations exist.
But allow me to guesstimate a number for 20 components (no more, no less). Here are my starting assumptions:
Let's say the average input and output parameter count of any component is 2. So we have 20 components, each with 2 inputs and 2 outputs.
There are roughly 35 types of parameter, so the odds of connecting two parameters at random that have the same type are roughly 3%. However there are many conversions defined and often you want a parameter of type A to seed a parameter of type B. So let's say that 10% of random connections are in fact valid. (This assumption ignores the obvious fact that certain parameters (number, point, vector) are far more common than others, so the odds of connecting identical types are actually much higher than 3%)
Now even when data can be shared between two parameters, that doesn't mean that hooking them up will result in a valid operation (let's ignore for the time being that the far majority of combinations that are valid are also bullshit). So let's say that even when we manage to pick two parameters that can communicate, the odds of us ending up with a valid component combo are still only 1 in 2.
We will limit ourselves to only single connections between parameters. At no point will a single parameter seed more than one recipient and at no point will any parameter have more than one source. We do allow for parameters which do not share or receive data.
So let's start by creating the total number of permutations that are possible simply by positioning all 20 components from left to right. This is important because we're not allowed to make wires go from right to left. The left most component can be any one of 20. So we have 20 possible permutations for the first one. Then for each of those we have 19 options to fill the second-left-most slot. 20×19×18×17×...×3×2×1 = 20! ~2.5×1018.
We can now start drawing wires from the output of component #1 to the inputs of any of the other components. We can choose to share no outputs, output #1, output #2 or both with any of the downstream components (19 of them, with two inputs each). That's 2×(19×2) + (19×2)×(19×2-1) ~ 1500 possible connections we can make for the outputs of the first component. The second component is very similar, but it only has 18 possible targets and some of the inputs will already have been used. So now we have 2×(18×2-1) + (18×2-1)×(18×2-1) ~1300. If we very roughly (not to mention very incorrectly, but I'm too tired to do the math properly) extrapolate to the other 18 components where the number of possible connections decreases in a similar fashion thoughout, we end up with a total number of 1500×1300×1140×1007×891×789×697×...×83×51×24×1 which is roughly 6.5×1050. However note that only 10% of these wires connect compatible parameters and only 50% of those will connect compatible components. So the number of valid connections we can make is roughly 3×1049.
All we have to do now is multiply the total number of valid connection per permutation with the total number of possible permutations; 20! × 3×1049 which comes to 7×1067 or 72 unvigintillion as Wolfram|Alpha tells me.
Impressive as these numbers sound, remember that by far the most of these permutations result in utter nonsense. Nonsense that produces a result, but not a meaningful one.
EDIT: This computation is way off, see this response for an improved estimate.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
Added by David Rutten at 12:06pm on March 15, 2013