I wonder for which kinds of shapes are the principal curvature lines equivalent to the principal stress lines? Would this lead to a new class of "optimal surfaces"?
It works with a sphere, but maybe only because every direction is principal....
Hello Daniel,
Well, in some cases they seem to coincide. You can notice this if you compare the two last images.(one is principal curvutures ans the othe principal stresses). It is an interesting issue though, i'll superimpose the two in different surfaces and see what is coming out.
What are the loading conditions for this scenario?
The thing I always get hung up on is that stress lines are determined by the loads, supports, and geometry, whereas curvature lines depend on geometry only. So by changing loading conditions, you can get a different set of stress lines for a given surface. Which kind of means that given a surface, and some arbitrary load/support conditions, the stress lines and curvature lines should almost never coincide....unless there's some special relationship. Which I don't understand.
Spoke to Paul a couple of weeks ago about finding some code that will do streamlines automatically with equal density, and he told me you were doing similar things at the moment - turns out quite similar in fact! We are doing an exhibition in the office foyer of some slab designs much like Nervi's, if you're in London soon let me know and come and have a look.
As with the sawapan stuff, if the self-weight of the material is quite considerable compared to the imposed loads the result can be quite misleading - especially for prinicpal 'bending' stress directions as opposed to in-plane ones. How are your loads defined? Is it just self-weight?
Anyway, hope you're well - we should meet up again soon for a beer.
Have you checked out CGAL's streamline placement? It's a 2d algorithm, but if you work in UV coordinates and use local tangent planes, it should work...
I wonder if there's a way to influence 2d parameter space so that each coordinate is representative of R3 embedding space in terms of point spacing (a kind of morphed grid). This way the 'Farthest point seeding strategy' could avoid streamline bunching when translating from parameter space to R3.
it seems like the principal stresss problem is of great interest lately!
I think you are looking into surface reparametrization (N. Ray- Periodic Global Parametrization) , Michalatos' and P. Winslows' work on principal stress plotting in mailnly based on that .
Mine is based only on self weight . Indeed, you get funny results even if you use the outer layer stresses(which include bending) from the self weight case to plot the trajectories. I'm generating some images for my thesis, i'll send you some that illustrate this case when i'm done.
When is the exhibition? I'm currently in Cyprus writing my thesis. I'll be back by the end of august . We should arrange for the beer when i'm back !
Very interesting discussion. This is something I've also been fascinated by for some time.
For generating evenly spaced streamlines of certain 2D fields I found a way that I could split the vector field into a pair of scalar fields and contour them to get nice conformal grids:
While this presents some of its own challenges related to multi-valued functions, it sidesteps many of the usual issues with vector field integration and streamline placement.
I've been wondering if one could find a way to apply a similar technique to plotting principal curvatures and stresses on curved surfaces.
However, the way this technique works is dependent on the particular characteristics of the field I was looking at (potential flow). Splitting and contouring general vector fields in this way does not produce the same results.
What I'm wondering is what would happen if you were to use Helmholtz-Hodge decomposition to separate the field into curl-free and divergence free parts.
I think one could then take the curl-free part and apply the same contouring technique as I used with my rheotomic surfaces. I'm not sure yet exactly how the resulting conformal grid would relate to the principal stress field, but it might be interesting to try.
Incidentally, on a related note - I remember seeing several years ago a book of Nervi's writings translated into English which had few pages at the end where he talked briefly about mutually perpendicular systems of curved lines and why they are interesting, along with some of his hand sketches of a few such systems. I've not been able to track the book down since. Can anyone give me a title ?
Wouldn't you then get two sets of integral curves (although very nicely spaced - that paper is great!) from one 2d vector field (say the max curvature directions)? As opposed to the composition of the integral curves of two 2d vectors fields (both the max and min directions)?
Incidentally, the only equation I could find with both the stress tensor and the curvature tensor (Riemann) was Einstein's field equations.
Very interesting stuff, I'm currently looking into doing something similar and was just wondering how you managed to derive your streamlines for this project. Did you create a custom script? Do you know of any FEA software out there that is capable of doing it? I looked into the CGAL algorithm listed below but it's a bit beyond my basic scripting abilities. I recently discovered that matlab has a few functions for deriving streamlines of 2d and 3d vector fields. Do you think that would be the best way to go about it? I was thinking I could use Oasys GSA to do the analysis and export the vector field in a text file and then bring it into Matlab to derive the streamlines. Sorry for all the questions!
The principal stress data was derived from Robot Structural and the streamlines were plotted in GH using custom scripts. I'm not aware of the matlab functions but I'm sure there's some way you can do it by obtaining stress data from GSA as well. You can link GH and GSA using their API. You can find some examples here : http://geometrygym.blogspot.com/.
The above work is part of my masters thesis which is not completely finished yet. I would gladly share the process with you when it is done though. I will keep you posted on this!
This is just pure amazing, I would love to know how to do something like this. I am new to robot api, and quite familiar with sap api. new to grasshopper. My aim to link GH with robot and a genetic algorithm in matlab. do you think that is possible ? any ideas how to start ? thanks
I have read your paper----Interactive Structural Analysis and Form finding---for several times.
Most part of the paper i can understand and do some relative works relative it.
in this paper you said "
A series of algorithmic routines were developed to plot the principal stress trajectories on a free form surface following the analysis output "
however, i search for quite a long time ,there is very little algorithmic routines excpet the one you present. can you give me more information where to find Material about these
algorithmic on the plot the principal stress trajectories on a free form surface!
i know this is not very clear in the paper, i'm intending to write something specifically about the plotting algorithm soon. The process i followed however is quite simple and it is summarized in these paragraphs, copied from the paper you read :
"The stress data had first needed to be mapped on each of the planar surface generated in GH. Starting from an arbitrary face in the mesh group, curves were drawn following each of the direction of the principal stress vector field. When a curve (which becomes a trajectory after the initial step) met a face edge, an intersection occurred which was crucial in determining the next step and the preferred face at which the plotting would restart. A precise intersection routine was formed in order to facilitate this.
Because the finite element analysis only returned one pair of stress results per triangle, there are sharp changes in direction at the triangle edges between adjacent faces. For that issue to be addressed, smoothing algorithms were developed that were able to choose the best possibleprincipal route taking in account the set of principal vectors in four directions (including the exact opposite values of stresses) and the previously plotted trajectory. fig9"
So what it is basically doing, it's starting off drawing an SDL line from an arbitrary face in the mesh which has as a starting point the center of the face, direction each of the principal vector returned from the FE analysis and infinite length. When that line intersects an edge a new starting point is found and the same process is followed until reaching another end of the surface or until a new intersection is not found.
First of all - great work. I will be trying to read through your RSA component and understand it for real, then I'll try and write it in the new Rhino Python language (Let's see if it works), because that is the language I'm used to.
But for now I wanna try and plot the principal tension stress curvatures/trajectories on a concrete element. As far as I can tell, the options in the GH definition are only to get the stress values (MPa) back from RSA to GH, don't you need the angle/direction of the "stress vectors" in order to calculate these trajectories on the surface?
How would I do this? Do I need to change the code in the component? Or do you have another def I could look into? I have read your paper on this, but I am not sure how to obtain what I want still.
i don't know if you are familiar with robot at all, but at the FE results window there are several types of options. In the component that i posted in my website i used the "Detailed" class ...FiniteElements.Detailed which corresponds to Robot's detailed results Tab in the UI. If instead you use the "Principal" Class you'll get access to the principal tab. If i remember well the parameter is Principal.SAL in C# which returns an angle between the local x axis and the the 1st principal direction. This vectors have a projection in a global direction which you will have to sort out by defining a projection plane. You can refer to my publications and the software manual for more details.
Daniel Hambleton
It works with a sphere, but maybe only because every direction is principal....
Jul 26, 2010
Odysseas Georgiou
Well, in some cases they seem to coincide. You can notice this if you compare the two last images.(one is principal curvutures ans the othe principal stresses). It is an interesting issue though, i'll superimpose the two in different surfaces and see what is coming out.
Jul 26, 2010
Daniel Hambleton
The thing I always get hung up on is that stress lines are determined by the loads, supports, and geometry, whereas curvature lines depend on geometry only. So by changing loading conditions, you can get a different set of stress lines for a given surface. Which kind of means that given a surface, and some arbitrary load/support conditions, the stress lines and curvature lines should almost never coincide....unless there's some special relationship. Which I don't understand.
Jul 26, 2010
John Harding
Spoke to Paul a couple of weeks ago about finding some code that will do streamlines automatically with equal density, and he told me you were doing similar things at the moment - turns out quite similar in fact! We are doing an exhibition in the office foyer of some slab designs much like Nervi's, if you're in London soon let me know and come and have a look.
As with the sawapan stuff, if the self-weight of the material is quite considerable compared to the imposed loads the result can be quite misleading - especially for prinicpal 'bending' stress directions as opposed to in-plane ones. How are your loads defined? Is it just self-weight?
Anyway, hope you're well - we should meet up again soon for a beer.
John
Jul 28, 2010
Daniel Hambleton
Jul 28, 2010
John Harding
I wonder if there's a way to influence 2d parameter space so that each coordinate is representative of R3 embedding space in terms of point spacing (a kind of morphed grid). This way the 'Farthest point seeding strategy' could avoid streamline bunching when translating from parameter space to R3.
Does that make any sense!?
Jul 28, 2010
Odysseas Georgiou
I'm fine, how are you?
it seems like the principal stresss problem is of great interest lately!
I think you are looking into surface reparametrization (N. Ray- Periodic Global Parametrization) , Michalatos' and P. Winslows' work on principal stress plotting in mailnly based on that .
Mine is based only on self weight . Indeed, you get funny results even if you use the outer layer stresses(which include bending) from the self weight case to plot the trajectories. I'm generating some images for my thesis, i'll send you some that illustrate this case when i'm done.
When is the exhibition? I'm currently in Cyprus writing my thesis. I'll be back by the end of august . We should arrange for the beer when i'm back !
Jul 29, 2010
Daniel Piker
Very interesting discussion. This is something I've also been fascinated by for some time.
For generating evenly spaced streamlines of certain 2D fields I found a way that I could split the vector field into a pair of scalar fields and contour them to get nice conformal grids:

While this presents some of its own challenges related to multi-valued functions, it sidesteps many of the usual issues with vector field integration and streamline placement.I've been wondering if one could find a way to apply a similar technique to plotting principal curvatures and stresses on curved surfaces.
However, the way this technique works is dependent on the particular characteristics of the field I was looking at (potential flow). Splitting and contouring general vector fields in this way does not produce the same results.
What I'm wondering is what would happen if you were to use Helmholtz-Hodge decomposition to separate the field into curl-free and divergence free parts.
I think one could then take the curl-free part and apply the same contouring technique as I used with my rheotomic surfaces. I'm not sure yet exactly how the resulting conformal grid would relate to the principal stress field, but it might be interesting to try.
Incidentally, on a related note - I remember seeing several years ago a book of Nervi's writings translated into English which had few pages at the end where he talked briefly about mutually perpendicular systems of curved lines and why they are interesting, along with some of his hand sketches of a few such systems. I've not been able to track the book down since. Can anyone give me a title ?
Jul 29, 2010
Daniel Hambleton
Incidentally, the only equation I could find with both the stress tensor and the curvature tensor (Riemann) was Einstein's field equations.
Jul 29, 2010
Matt Schmid
Very interesting stuff, I'm currently looking into doing something similar and was just wondering how you managed to derive your streamlines for this project. Did you create a custom script? Do you know of any FEA software out there that is capable of doing it? I looked into the CGAL algorithm listed below but it's a bit beyond my basic scripting abilities. I recently discovered that matlab has a few functions for deriving streamlines of 2d and 3d vector fields. Do you think that would be the best way to go about it? I was thinking I could use Oasys GSA to do the analysis and export the vector field in a text file and then bring it into Matlab to derive the streamlines. Sorry for all the questions!
All the best,
Matt
Aug 23, 2010
Odysseas Georgiou
Sorry for not replying earlier.
The principal stress data was derived from Robot Structural and the streamlines were plotted in GH using custom scripts. I'm not aware of the matlab functions but I'm sure there's some way you can do it by obtaining stress data from GSA as well. You can link GH and GSA using their API. You can find some examples here : http://geometrygym.blogspot.com/.
The above work is part of my masters thesis which is not completely finished yet. I would gladly share the process with you when it is done though. I will keep you posted on this!
Aug 31, 2010
Amin Ghali
Hi Odysseas,
This is just pure amazing, I would love to know how to do something like this. I am new to robot api, and quite familiar with sap api. new to grasshopper. My aim to link GH with robot and a genetic algorithm in matlab. do you think that is possible ? any ideas how to start ? thanks
Jun 5, 2011
zhushunlai
Jun 28, 2011
zhushunlai
Hi Odysseas,
I have read your paper----Interactive Structural Analysis and Form finding---for several times.
Most part of the paper i can understand and do some relative works relative it.
in this paper you said "
A series of algorithmic routines were developed to plot the principal stress trajectories on a free
form surface following the analysis output "
however, i search for quite a long time ,there is very little algorithmic routines excpet the one you present. can you give me more information where to find Material about these
algorithmic on the plot the principal stress trajectories on a free form surface!
thank you very much!
Dec 23, 2011
Odysseas Georgiou
Zhushunlai,
i know this is not very clear in the paper, i'm intending to write something specifically about the plotting algorithm soon. The process i followed however is quite simple and it is summarized in these paragraphs, copied from the paper you read :
"The stress data had first needed to be mapped on each of the planar surface generated in GH. Starting from an arbitrary face in the mesh group, curves were drawn following each of the direction of the principal stress vector field. When a curve (which becomes a trajectory after the initial step) met a face edge, an intersection occurred which was crucial in determining the next step and the preferred face at which the plotting would restart. A precise intersection routine was formed in order to facilitate this.
Because the finite element analysis only returned one pair of stress results per triangle, there are sharp changes in direction at the triangle edges between adjacent faces. For that issue to be addressed, smoothing algorithms were developed that were able to choose the best possible principal route taking in account the set of principal vectors in four directions (including the exact opposite values of stresses) and the previously plotted trajectory. fig9"
So what it is basically doing, it's starting off drawing an SDL line from an arbitrary face in the mesh which has as a starting point the center of the face, direction each of the principal vector returned from the FE analysis and infinite length. When that line intersects an edge a new starting point is found and the same process is followed until reaching another end of the surface or until a new intersection is not found.
Hope this helps,
Odysseas
Dec 25, 2011
Rasmus Holst
Hi Odysseas.
First of all - great work. I will be trying to read through your RSA component and understand it for real, then I'll try and write it in the new Rhino Python language (Let's see if it works), because that is the language I'm used to.
But for now I wanna try and plot the principal tension stress curvatures/trajectories on a concrete element. As far as I can tell, the options in the GH definition are only to get the stress values (MPa) back from RSA to GH, don't you need the angle/direction of the "stress vectors" in order to calculate these trajectories on the surface?
How would I do this? Do I need to change the code in the component? Or do you have another def I could look into? I have read your paper on this, but I am not sure how to obtain what I want still.
I hope that you want to help.
Thanks
Rasmus
Mar 1, 2012
Odysseas Georgiou
Hey Rasmus,
i don't know if you are familiar with robot at all, but at the FE results window there are several types of options. In the component that i posted in my website i used the "Detailed" class ...FiniteElements.Detailed which corresponds to Robot's detailed results Tab in the UI. If instead you use the "Principal" Class you'll get access to the principal tab. If i remember well the parameter is Principal.SAL in C# which returns an angle between the local x axis and the the 1st principal direction. This vectors have a projection in a global direction which you will have to sort out by defining a projection plane. You can refer to my publications and the software manual for more details.
Hope this helps,
Odysseas
Mar 1, 2012
Rasmus Holst
Hi.
Thanks. You are right... the tab is crosses instead of detailed, but I'm not sure how to refer to the stresses in this tab?
Could it be:
FeRes = str.Results.FiniteElems.Crosses(FeParams);
elresult = 0.0;
if (Result == 0) elresult = FeRes.Stresses;
?
Or am I missing a point?
Cheers Rasmus
Mar 8, 2012