. since there are going to be multiple units facing different directions, each unit will be calculated differently based of their respective plane.
The following screenshots can explain the situation a little better
So Lets say the vector is pointing from the operating unit to the position of the sun, an the plane underneath is where I would like to measure the angle from
this second picture shows how each unit should function, so the measured angle doesn't exceed 90 degrees. what I did is zeroed the z value for the sun position to get a project vector. The problem with this solution is that it only works for XY planes, where I need to have a lot of planes that are specific for each unit and its orientation.
Help would be much appreciated…
problem is that the values of the isocurves are plotted not always in the same way: sometime parallel to the curves, sometime perpendicular.
In the following case, for example, i would like to turn the values of 90°(to get them parallel to the curves).
in order to have something like this:
How can i do that (without baking them)??
Thanks in advance
Claudia…
mplex the models are. If we are running multi-room E+ studies, that will take far longer to calculate.
Rhino/Grasshopper = <1%
Generating Radiance .ill files = 88%
Processing .ill files into DA, etc. = ~2%
E+ = 10%
Parallelizing Grasshopper:
My first instinct is to avoid this problem by running GH on one computer only. Creating the batch files is very fast. The trick will be sending the radiance and E+ batch files to multiple computers. Perhaps a “round-robin” approach could send each iteration to another node on the network until all iterations are assigned. I have no idea how to do that but hope that it is something that can be executed within grasshopper, perhaps a custom code module. I think GH can set a directory for Radiance and E+ to save all final files to. We can set this to a local server location so all runs output to the same location. It will likely run slower than it would on the C:drive, but those losses are acceptable if we can get parallelization to work.
I’m concerned about post-processing of the Radiance/E+ runs. For starters, Honeybee calculates DA after it runs the .ill files. This doesn’t take very long, but it is a separate process that is not included in the original Radiance batch file. Any other data manipulation we intend to automatically run in GH will be left out of the batch file as well. Consolidating the results into a format that Design Explorer or Pollination can read also takes a bit of post-processing. So, it seems to me that we may want to split up the GH automation as follows:
Initiate
Parametrically generate geometry
Assign input values, material, etc.
Generate radiance/ E+ batch files for all iterations
Calculate
Calc separate runs of Radiance/E+ in parallel via network clusters. Each run will be a unique iteration.
Save all temp files to single server location on server
Post Processing
Run a GH script from a single computer. Translate .ill files or .idf files into custom metrics or graphics (DA, ASE, %shade down, net solar gain, etc.)
Collect final data in single location (excel document) to be read by Design Explorer or Pollination.
The above workflow avoids having to parallelize GH. The consequence is that we can’t parallelize any post-processing routines. This may be easier to implement in the short term, but long term we should try to parallelize everything.
Parallelizing EnergyPlus/Radiance:
I agree that the best way to enable large numbers of iterations is to set up multiple unique runs of radiance and E+ on separate computers. I don’t see the incentive to split individual runs between multiple processors because the modular nature of the iterative parametric models does this for us. Multiple unique runs will simplify the post-processing as well.
It seems that the advantages of optimizing matrix based calculations (3-5 phase methods) are most beneficial when iterations are run in series. Is it possible for multiple iterations running on different CPUs to reference the same matrices stored in a common location? Will that enable parallel computation to also benefit from reusing pre-calculated information?
Clustering computers and GPU based calculations:
Clustering unused computers seems like a natural next step for us. Our IT guru told me that we need come kind of software to make this happen, but that he didn’t know what that would be. Do you know what Penn State uses? You mentioned it is a text-only Linux based system. Can you please elaborate so I can explain to our IT department?
Accelerad is a very exciting development, especially for rpict and annual glare analysis. I’m concerned that the high quality GPU’s required might limit our ability to implement it on a large scale within our office. Does it still work well on standard GPU’s? The computer cluster method can tap into resources we already have, which is a big advantage. Our current workflow uses image-based calcs sparingly, because grid-based simulations gather the critical information much faster. The major exception is glare. Accelerad would enable luminance-based glare metrics, especially annual glare metrics, to be more feasible within fast-paced projects. All of that is a good thing.
So, both clusters and GPU-based calcs are great steps forward. Combining both methods would be amazing, especially if it is further optimized by the computational methods you are working on.
Moving forward, I think I need to explore if/how GH can send iterations across a cluster network of some kind and see what it will take to implement Accelerad. I assume some custom scripting will be necessary.…
e it as the same type. It refers to a different type definition apparently.
Error:
error: [A]MassPix cannot be cast to [B]MassPix. Type A originates from '7ea7fec0-99c5-49a8-ae80-af752ac2be94, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadFrom' at location 'C:\Users\pnourian\AppData\Local\Temp\7ea7fec0-99c5-49a8-ae80-af752ac2be94.dll'. Type B originates from 'fd0b2126-e10f-49de-9fc9-5504405d4135, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadFrom' at location 'C:\Users\pnourian\AppData\Local\Temp\fd0b2126-e10f-49de-9fc9-5504405d4135.dll'. (line: 82)
This is the case:
in component A:
Private Sub RunScript(ByVal x As Object, ByVal y As Object, ByRef A As Object) Dim kjh As New MassPix(2.1, 2.3, 4, 5) A = kjh End Sub
'<Custom additional code> Public Class MassPix Private x As Double Private y As Double Private S As Integer Private K As Integer Sub New(xu As Double, yv As Double, SZ As Integer, KL As Integer) x = Xu y = yv s = Sz k = Kl End Sub End Class '</Custom additional code> End Class
and in component B:
Private Sub RunScript(ByVal x As Object, ByVal y As Object, ByRef A As Object) Dim ABC As MassPix = CType(x, MassPix)
End Sub
'<Custom additional code> Public Class MassPix Private x As Double Private y As Double Private S As Integer Private K As Integer Sub New(xu As Double, yv As Double, SZ As Integer, KL As Integer) x = Xu y = yv s = Sz k = Kl End Sub End Class '</Custom additional code> End Class
the file is attached
ANY HELP IS VERY MUCH APPRECIATED! …
till quite rough.
I went through your attached log but it seems to be a successful run, perhaps the error log wasn't attached. In any case, I believe we have identified this issue. The goal of the update fvSchemes component was to apply schemes to finalized meshes in an automatic way. While this is useful for new users it is also a dangerous thing to do in CFD studies.
The component works by relating mesh quality to the mesh non-orthogonality, which the checkMesh component reports. While non-orthogonality is one of the important criteria of mesh quality it does present difficulties on some kind of meshes, especially like the simple cases that BF has been meshing so far.
The example case of simple box buildings in a wind tunnel above for instance will appear as a good quality case for even the lowest of cell-count meshes, simply because it is an orthogonal geometry. That means that checkMesh will probably report low values (imagine an empty blockMesh of 10m blocks has a non-orthogonality of 0) which in turn means that higher order schemes might be paired with actually low quality meshes. This I believe is causing problems.
I posted a possible solution to this here https://github.com/mostaphaRoudsari/Butterfly/issues/57. The idea is that Buttefly provides additional options to the users, enabling them to choose between first-order (faster, more robust, but lower quality schemes) and second-order (slower, less robust, but more accurate) schemes depending on mesh quality, stage of assessment, etc. In cases like the above mesh quality a first-order scheme might provide a better option. To test this I am attaching an fvSchemes file you can use by replacing yours in the /system folder of the case.
As a note however, I would like to stress there is so much that a tool like Butterfly can provide in this area. Meshing is a quite complicated and demanding part of the process, involving a lot of trial and error. Sometimes the problem is just the mesh and not the solution options (GIGO stands true in CFD as well). It does however get easier with experience. The safe advice is the simplest one: when changing solution options doesn't help, refine mesh and run again.
Kind regards,
Theodore.…
Integer = 0 To 9
val *= 2
lst.Add(val)
Next
Since val is a ValueType, when we assign it to the list we actually put a copy of val into the list. Thus, the list contains the following memory layout:
[0] = 2
[1] = 4
[2] = 8
[3] = 16
[4] = 32
[5] = 64
[6] = 128
[7] = 256
[8] = 512
[9] = 1024
Now let's assume we do the same, but with OnLines:
Dim ln As New OnLine(A, B)
Dim lst As New List(Of OnLine)
For i As Integer = 0 To 9
ln.Transform(xform)
lst.Add(ln)
Next
When we declare ln on line 1, it is assigned an address in memory, say "24 Bell Ave." Then we modify that one line over and over, and keep on adding the same address to lst. Thus, the memory layout of lst is now:
[0] = "24 Bell Ave."
[1] = "24 Bell Ave."
[2] = "24 Bell Ave."
[3] = "24 Bell Ave."
[4] = "24 Bell Ave."
[5] = "24 Bell Ave."
[6] = "24 Bell Ave."
[7] = "24 Bell Ave."
[8] = "24 Bell Ave."
[9] = "24 Bell Ave."
To do this properly, we need to create a unique line for every element in lst:
Dim lst As New List(Of OnLine)
For i As Integer = 0 To 9
Dim ln As New OnLine(A, B)
ln.Transform(xform)
lst.Add(ln)
Next
Now, ln is constructed not just once, but whenever the loop runs. And every time it is constructed, a new piece of memory is reserved for it and a new address is created. So now the list memory layout is:
[0] = "24 Bell Ave."
[1] = "12 Pike St."
[2] = "377 The Pines"
[3] = "3670 Woodland Park Ave."
[4] = "99 Zoo Ln."
[5] = "13a District Rd."
[6] = "2 Penny Lane"
[7] = "10 Broadway"
[8] = "225 Franklin Ave."
[9] = "420 Paper St."
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
Added by David Rutten at 6:26am on September 9, 2010
ino Mc Neel, autore di "Architettura Parametrica - 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. INFO E PRENOTAZIONI: http://www.arturotedeschi.com/wordpress/?p=2888…
Series“, è il corso più seguito in Italia sulla modellazione parametrica, giunto al nono anno consecutivo di attivazione. Plug it fornirà ai partecipanti un’effettiva padronanza delle più avanzate tecniche di modellazione digitale, approfondendo le metodologie della modellazione algoritmica e parametrica nel campo dell’architettura e del design del prodotto. Il corso è rivolto a studenti e professionisti dei settori della progettazione architettonica, design, moda e gioielleria, con esperienza minima nel disegno CAD bidimensionale (acquisita su qualsiasi piattaforma software) e si articolerà in lezioni teoriche frontali ed esercitazioni guidate.
_
FORM FINDING STRATEGIES | Livello Intermedio | Analisi ambientale ed ottimizzazione della forma
Form Finding Strategies è il secondo step del percorso formativo in tre fasi “AAD Workshop Series“. Il workshop intende esplorare le possibilità di generazione di forme efficienti in relazione ad influenze esterne ed alle caratteristiche intrinseche della materia stessa. Analisi ambientale (input solari, termici ed acustici) ed analisi/ottimizzazione strutturale FEM saranno le principali metodologie utilizzate per raggiungere gli obiettivi di ricerca della forma. Saranno introdotti numerosi plug-ins tra cui: Weaverbird, Kangaroo, Geco/Ecotect, Ladybug, Millipede. Il corso si rivolge a studenti e professionisti con conoscenza base di Rhino e Grasshopper.
_
PERSPECTIVES | Livello Avanzato | Python coding e modellazione algoritmica avanzata
Il nuovo corso Perspectives proposto per la prima volta nel 2019 (ed ultimo step del percorso formativo in tre fasi “AAD Workshop Series) introdurrà gli studenti alla programmazione Python ed alla sua integrazione con Grasshopper. Verranno inoltre esplorate tecniche avanzate di generazione formale basate su iterazioni. Tra i principali plugins utilizzati: GhPython, Anemone, Hoopsnake, Plankton, MeshMachine, Pufferfish. Pensato come workshop innovativo sulle prospettive e sfide future del design computazionale, è rivolto a studenti e professionisti con esperienza in modellazione algoritmica con Grasshopper.
INFO ED ISCRIZIONI
…
rasshopper (only compatible with IRC5 controllers). I made some tests with kinect and phones and tablets and it works (so if you have a good position for your kinect you can already know when a user is too close to the robot and stop the execution or slow it), but due to controller limitations I am now working on a different way of sending and managing data to the robot to minimise the latency of the system.
Galapagos will not allow you to switch between configurations and toolpaths, since configurations are computed by the IK solver and managed by several informations in the code, that can only be overrided or changed depending on the interpolation you use (MoveJ/MoveL/MoveAbsJ etc.). And once again, some configurations are not reachable depending on the rotation domains of certain joints (4th one for example) or also because linear interpolations cannot work for targets necessiting more than 90° of rotation. HAL computes by default the most "accessible" configurations in order to minimize 4th axis flip (which is a pain), and the next update will have a fix to allow to count the laps you do with the joints allowing more than 360° of rotation in order to prevent to reach the max values (otherwise the robot is locked and the application is stopped), there is a little bug on the 6th axis on the current version. IMHO these questions are much more important to solve for the design of your application than the approximaton of the workspace (it is very easy to measure the max radius of rotation, and singularities can always been reached using moveAbsJ).
By the way, all those things are not exactly trivial to solve (some are with the new verson of HAL, but not all of them), so depending on how far you need to go, I hope you don't have a deadline soon...…
eople use different methods and components was the way that I learnt most of what I know (and it might solve parts of other's problems)! It's always apparent from forum posts that everything is work in progress.
The "divide curve" components gives you tangents (T) to the curve at the points you've made. You want the perpendicular (right angle) to the curve, so need to rotate this vector around point on the curve (P) by 90 degrees or Pi/2 Radians .
It seems you're finding your lengths as required, but then passing them through a unit Y vector - so they are only ever going to move in the Y direction. You need to use an "Amplitude" component with the perpendicular vectors from above and the lengths you've calculated.
Before sweeping you'll need to properly align the rectangles such that they are also perpendicular to the curve.
…
Added by Joe Allberry at 10:33am on August 4, 2015