CDFAM Berlin 2024 · Berlin · 7–8 May 2024

Perfect designs for imperfect AM

Abstract

Transcript

From the speaker’s corrected captions. Each timestamp opens the video at that moment.

Read the full transcript · 5,801 words

0:00 Okay, sorry for the delay here. So first, thanks a lot to Andreas for a fantastic and enthusiastic talk. I’m also one of the older guys in the field. I don’t know if I can manage to have the same energy as Andreas had it, but at least I will try. I will also say I had another title in the program. After an interview with Duann, I sort of decided to turn the attention a little bit to another direction, but I will come back to some of the stuff also. And I would also say I’m going to touch on some of the same things, and that Andreas was talking about from a slightly different viewpoint. So first of all, let me show some fantastic examples that you can find on the internet that I would call results of topology optimization.

And yesterday, the Renex oh sorry, I hear it a lot from the… okay, so yesterday the representative from the Raex company said, “keep it simple.” And I’m not sure if we haven’t already exceeded that, because if you look actually, when I searched for these examples, I searched with these keywords, and they all result in pictures that we see here. So actually, this all dates back from the original to poity optimization works that were done 35 years ago by Benu and Kikuchi.

So I have been fortunate to be a part of this development for many years, not from the very beginning, but like 5 years into it I started working in this field. And I’ve had the pleasure of contributing to many different things, like speed up of the codes, basic implementation aspects, manufacturing constraints, and extensions to different multiphysics and different new application areas. And again, like Andreas, I could spend days on on talking here, but I will sort of just highlight two things that are relevant to my talk today.

2:00 So first of all, we have been advocating interactive topolog optimization apps back since 2001, and I hope most of you have seen these apps. If not, then I invite you to download them on your iPhone. We have the 2D app and we have the 3D app for Topol optimization. I would say it’s almost addictive to sit and play with these apps. And what’s also interesting is that actually the 2D version to the left, that’s actually just a real time screen dump from my iPhone, so you can actually do this real time, change boundary conditions at passive domains, and all kinds of stuff. The movie to the right is the 3D app. It’s not it’s sped up a little bit, but even, I think, if I got a new iPad this would also be real time. So there’s a lot of fun playing with these, and I think it also al demonstrates how efficient gradient based topolog optimization actually is. So this was one aspect, and I’d say it’s also really hard to compete it with it if you don’t use gradients, or even if you want to use AI. And I will come back to that in a second.

3:16 The other application area we’ve been looking in is to push it towards very large structural design problems. And so six years ago, we were the first to do to Quality optimizing ation with more than 1 billion finite elements, or design variables actually. And so this is why we call it gigascale to poity optimization. So we did that for Boeing Triple 7 wing structure and showed potential weight savings there. And a couple of years later, we went to a bridge design. So from a suspension bridge here, we discoed the design with 2 billion design variables and 7 billion degrees of freedom, and we showed potential so we could save 30% % on the bridge deck itself, and with knock on effects, 20% of weight savings on the full bridge, or potentially we could then make longer span bridges and stuff like that. And that was in collaboration with civil engineers.

4:08 So these were both, I guess, success stories of what can be done in top poity optimization. What wasn’t so good is that the wing study required 1 million CPU hours on a super computer, and the bridge structure required 2 million CPU hours. And so obviously there’s room for improvement there, we would like to cut that down. And if you read a lot of the literature and read articles on the internet and stuff, then people would say, hey, this is a nice occasion actually many of the sites we get is from AI paper saying this stinks because it uses so much CPU power, let’s do this with AI and do it as a at a clip of a finger. I’m not sure this is the way to go, or actually I’m pretty way sure this is not the way to go. And why is that? Well, partly we are pte based optimizers here, so just providing training data for this is extremely expensive. We can also set up other things, but I will come back to that in a second.

5:11 But I will just refer you to a review paper that was done with my former PhD student Rebecca, who is sitting down here, and she dug really deep into the whole literature and topolog optimization using AI. And we divided it into five different areas: acceleration methods, reduction, postprocessing, design and diversity, and then what we could call the wet dream of topolog optimizers, directly to substitute standard density and based topolog optimization with AI.

5:45 And why doesn’t it work? I already said it’s expensive to generate data, but there are also other issues here. So, for example, if we generate a lot of training data, as Andreas said, well, AI is just an interpolation, so we are not going to go outside the training data. We may it designs inside that interpolate between different training data, but if we are optimizers, we don’t expect to get out there, and that’s really why we are here, right? We want to make the best possible use of materials and resources.

6:18 Other things are that actually the training data is disjunct. So you could say you have a very simple design problem, you just have a vertical load and you have three supports at the bottom. The optimized structure is just a vertical beam, but you make an epsilon peration of the direction of the load, and then suddenly the topolog changes, it needs a side bar also to support it. So how do you do interpolation in AI? And you actually get significant changes in the topology. And a final point is also that if you look at the images so from an image processing or image recognition perspective, these two designs at the bottom left, they are similar, but if you look closely, there are two pixels that are different, and those two pixels are detrimental for the mechanical behavior. So these are all things that sort of make it really hard for AI to compete with standard topology optimization.

7:16 We also, in the paper, advocated to make sort of a critical parameters know, what should you say evaluation of your your algorithms. And so we suggested, for example, this table, which had on the vertical axis it has the break, Break Even threshold so that’s a question, how many times do you have to do optimization to pay back the cost of training the network. And on the x-axis we have the generality score, so it means how sensitive is your trained network to changes in the parameter space, the input, the boundary conditions, and stuff like that.

7:57 And we see here what we call the direct design approaches, they are all up in the upper left corner, which is really bad. You need a lot of time before it pays off, and they are not general if you change boundary conditions or design domain, they are essentially dead. There might be some upscaling acceleration methods that do the job, but really you don’t want to be in this upper left corner. The actual slope of the lower part here we can discuss, but really you want something that is general, that works for all cases, and it shouldn’t be too expensive to train it.

8:35 There might be some cases where you can actually toate to be in the upper left corner, and that’s mostly if you’re not interested in optimization but rather to do some interpolation. So, for example, yesterday we had the carbon talk with the Sho so design, so there you could, in principle, make a big database of different force displacement curves obtained with different Lattis structures, and then you can train the network for your customer to make a customized shoe or something like that. But that’s not really optimization, it’s interpolation. So again, be critical in why you use AI.

So now, if it’s not to directly substitute topology optimization with AI, well then you could look into some of these other application areas. And so we listed those, we discussed those. Still, we didn’t really see any really convincing applications where AI makes a difference in topology optimization. We thought, at the time of writing the paper, that we had found one case here, which we call DEH homogenization, and in fact, as you will see later on, we found even better ways to do it than using AI. So I’ll come back to that in a second.

So what can we do to speed up and do gigascale topal optimization on iPads, potentially in the future? Well, our idea was to go back to the origins, back to the original work by Benu and Kikuchi, who use the so-called homogeneization approach. And Andreas has already explained what homogeneization is you take the micr structure and you derive some effective properties, and that makes simulations much easier. But also, based on a lot of math theory by Benu and Kikuchi, they knew the optimal micr structures. So if there’s just one load case, we know the optimal micr structure is one that’s oriented along the principal stress directions, and with two layers that are adapted to the principal stresses. And with that, they came up with these pretty ugly looking structures at the bottom here, and that looked so ugly that it was essentially forgotten for many years.

10:42 But the thing is, there’s actually a lot of information hidden there, because at every point in these struct ugly looking structures, there’s information about the optimal micros structure. And so really the thing is, just, we have to extract it. So we have to do So-Cal DEH homogenization to extract and get efficient methods. So we come back to that in a second, but just mention you to you that we know the optimals stiffness optimal micr structure. So in 2D, if there’s only one load case, it’s these perpendicular laminations there. If we have two or more load cases, we also know the optimal micro structures, they can be found analytically.

11:28 In 3D, interestingly, for one load case the optimal micr structure is sort of a square or rectangular hole structure, and it’s a closed wall cell. And if you have two or more load cases, there are more layers in different directions, up to six or seven actually, if you want symmetries and periodicity. But so this is an interesting point to make trust ltis structures are not optimal, they are in fact two to three times less stiff than and closed to allall structures. I’ll come back to that later on, but really there has to be good reasons to do trust ltis structures. Usually they are so bad that it would actually be better to do solid structures. For now, I’m going to talk about closed wall structures, and obviously, if you’re doing a powder based process there might be some issues there, but then you have to acknowledge that.

So what do we do here? Well, for the de homogenization, we do exactly what Benu and Kikuchi did 35 years ago. So we we have a core scale, we do a local optimization with three variables for this one loadcase problem, so the orientation and the lamination thicknesses. It gives us this mushy looking picture here. But then we have an intermediate step where we introduce two auxiliary fields with a special properties, that their gradient at any point corresponds to the direction of the composits that were from the homogenization solution. And so this is a dqu problem we have to solve.

12:58 Then, if we take cosiness to these fields there, we get these nice zebra patterns. And then, if we take those two zra patterns and reintroduce the lamination thicknesses and put them together, then we get these beautiful and highly optimal structures. They’re close to the theoretical optimum. And the nice thing is that, corresponding to a similar topal optimization procedure, we gain something between 100 and thousands of factors in CPU speed up. So this is an extremely efficient method.

And I can show you lots of pictures. These are some of the structures here, and you can sort of see that the form follows function here, right? This material is ideally oriented along the stress path all over. And interestingly also, we just have a few per performance decrease compared to the theoretical optimum that comes from the homogenization based solution. We get very close to to these, but at a fraction of the time.

14:10 Just to show you, with this was a single load case. This here is multiple loading cases, that’s also doing done by my other former PhD student Peter, who is here in the audience. And so this is a standard test case in the field. Here, five load cases we need to distribute, now three different lamination directions, there are formulas to do that. This is a homogenization based solution, again, with these mushy gray pictures as a reference.

14:34 We can do a toity optimization, just a crude Matlab implementation, with a very fine resolution, we can get a compliance that is just a few perent, or 1%, I think, above this theoretically optimum structure here, but it costs almost a full day of CPU time on a laptop PC. Now, with the DEH homogenization approach, this is just a computer graphics thing, we do the course optimization and then we map the structure to this anisotropic rank three structure. We get very similar compliance, just a few percent increase, and we do it within minutes.

15:16 And finally, if you say, okay, I insist, I want to have a triangular micr structure that we still can grade, well, we could do that also with the homogenization approach, it’s more efficient, we admit that, but it’s at the cost of another 10, 15% increase in the compliance, or decrease in the stiffness. So really you want to do these locally adapted micr structures to get the full benefit. And we also see here, it doesn’t really want the micro structure, it does it here for multiple loading cases, but if we just had one load case, it wouldn’t like the triangular micr structure at all. So this was in 2D.

15:54 Peter and co-workers have done the same thing in 3D, so we have solved the very famous G jet engine bracket. And with these layers, you can also start controlling how many layers you want to have locally, ideally the optimization just selects how many layers it wants, but you can also enforce to have three layers, for example, to get more stability, and I’ll will come back to that.

16:20 But so the disadvantage, of course, of having optimal close structures is also you don’t see the beautiful structures that are inside, and maybe that is a sales killer when we are in additive manufacturing, but that’s sort of another thing. So this works really nice, but it still takes some time. So this example here still runs for for some hours to to get these results.

16:45 I said before, we had thought that we had an idea of using AI to doing this DEH homogenization, it could be trained on artificial data, we actually showed we could do it more efficiently. But in that process, also in the process of writing the review paper, Rebecca and our colleagues in the computer graphics department came up with an a different idea to do this.

17:10 And so essentially, again, I cannot go into the full details, but it’s we’re using processes that are called something, procedural noise, from from computer graphics. These are extremely efficient ways to both make surface texture texturing, but also generate geometries, and essentially they are run on GPUs in a fraction of a second.

And the idea is the same, we we do the basic homogenization based top poity optimization, but then, instead of introducing these intermediate fields, we introduce so-called faers, or complex Gaper functions, and these are sort of small circular domains that have waves in them. They overlap with the neighbors, and in an intricate way they generate these sepra stripe patterns. So in the outside, these are not connected, there are different things, there are singularities when there’s divergence in the field. But with some ingenious post processing, Rebecca has turned this into something that always ensures connected structures and satisfactor sat satisying the links constraints and stuff like that.

18:16 And again, I’m not going to do all the details here, but it works also in 3D. We are submitting that paper very soon. But again, it’s a smart wave from computer graphics, and you actually don’t need to have the whole geometry in your computer, you can sort of do it layer-wise also during the manufacturing process. So this is a very nice approach.

And I just want to show you a couple of pictures here. So these are the DEH homogenization approach in 2D, you see they a little bit more organic, due to this not having a global field that controls it, but it’s more a local thing. But this is extremely efficient, as I said, so essentially it’s much cheaper than the topal optimization process itself. And this also leads to us approaching being able to do realtime multiscale DEH homogenization approaches for Topol optimization.

19:28 So we are going to publish, next week I think, when we are back from the conference, publish a mlot code that does this, that will be free for for download. And so we have this little lbam example that’s also often used. To the left, I show the homogeneization result, and in the right, in the middle picture, I will show you sort of the on the-fly DEH homogenization. So we are running a couple of Topol optimization iterations, and then at the same time we are generating these multiscale structures very efficiently using these this phaser approach.

19:39 And so, with this efficiency, we are hoping that maybe next year, if we danan makes the conference again, we can actually offer you an app that has this multiscale performance there. And well, also we do the same thing in 3D, and so here we actually doing this together with ntopology, or intop, in that platform, and that generates these very beautiful structures, and again highly efficient, and both from a mechanical perspective but also from a computational perspective. And well, you see the beauty of the structures, they are highly adapted to the local stress fields and stuff like that.

20:20 But still, probably some of you in the room are saying, hey, but they are closed wall struct, we don’t really like close born structures for manufacturability and other reasons. But I already alluded to it, but let me try with one slide here to sort of discuss and give you some more insight into why we need closed wall structures.

20:41 So we see it a lot here, we also seen it at this conference, that it’s tempting to use either open trust ltis structures or TPMS micro structures and stuff, and use them in your design. And then definitely they generate very beautiful structures, but sometimes it’s quite dangerous to take an already optimized design and then just substitute micr structure into it without actually doing additional verifications and optimizations. And why is that? Well, we can take a look.

21:14 So, sorry, for this graph is a little bit busy here, but it shows us the young modulus as a function of the relative density of our composite. And ideally, of course, to motivate micr structure, we want to have as high stiffness as possible for a given density, and we can achieve that with an anisotropic prop structure, like the yellow one I’m indicating. But the more banana shaped, or the more curved the thing is, the lower stiffness you have. And you will actually see, so if we are limiting ourselves to isotropic micr structures, then both the open cell isotropic ltis structure but also the TPMS structures, they have an extremely low stiffness for lower densities, and in fact they have as low as one six of the ideal stiffness.

22:01 And so this means, if you already take into account in the beginning of your optimization process that you want to realize your structure with trust latices or TPMS or other suboptimal micr structures, well then the optimization will not give you any micr structure, it will say it’s much better to do solid structures. So I think this is very important. So if you are light waiting, you’re not doing that with suboptimal micr structures. It gets already better if you use isotropic close wall cell structure, that’s a blue one, but very best is the rectangular structure where it’s oriented optimally along the stress directions.

22:45 And so I think this is very important to think about and realize when you are talking about lightweighting. So, of course, as I said also before, there could be other objectives, it could be the looks of it you want to emphasize, or it could be that you need a certain permeability for fluids or stuff like that, that that might motivate why you go for a lower stiffness, but it’s not stiffness alone. And another topic, so I’m just putting this warning sign, think about what you’re doing.

So one place where it might be advantageous to have micr structure is if you also think about stability or buckling of your micro of your structure. So these two pictures show, to the left this is a standard beam optimized standard tality optimization, it’s solid. To the right, we have a structure where we also optimized but insisted on having a fixed volume fraction of triangular isotropic micr structure. They have the same mass, but as I just said, the one to the right has suboptimal micr structure, which means that the compliance is 30% worse, it’s 30% % less stiff. So maybe we can tolerate that in this case, because it turns out that the buckling stability, so the ultimate load it can carry, that’s actually five times higher than the solid structure. So that might be a motivation, use micro structure to get better stability.

24:12 And Peter also has an example, where we took this is a famous 3D test case, lotted tower, where we have torsion on a on a box that is square in the bottom and circular in the top. And in that case, if we just have one layer micr structure, so this is the optimal one, we just have a shell like a pipe, but it has a very low buckling of resistance, because we will have these global buckling modes.

24:38 So if we there insist on micr structure, then we will again decrease the stiffness, but we will, in this case, increase the buckling, so the buckling will now be a local one, you see it sort of in the very button here somewhere. So this might be a reason for micr, but these were sort of lucky punches, we cannot always be sure. And actually, the top structure, the 2D ltis structure, it didn’t fail by global buckling, it failed by local buckling in the ltis structure. So this means we have to actually include that in the optimization. So let me just show that that’s worked by another PhD student.

25:16 So, a very simple buckling example, we have compression horizontal from both sides of our box here. If we do standard topal optimization for buckling resistance, we get a certain buckling factor, 6.17 here, we didn’t allow micr structure. Then we said, okay, now we allow micr structure, and it can grade the micr structure, but it’s a triangular isotropic one, then we get a slightly higher buling load. So that’s nice, that motivates hey, there is actually need for lce structuring here.

25:47 But if we de homogenize that, so we actually realize this structure by making the full analysis of it, it turns out that it’s buckling, it’s getting unstable in the ltis structure. So in this case here, we didn’t gain anything from lising again. So this means, as optimizers, as academics, as us, we have to include both the global and the local buckling in the topology optimization part.

26:13 And so that turns out to be pretty heavy. You have to do analysis of the micr structure, consider all possible buckling modes, so then you and for loads in different directions and all this stuff. So from that you can generate a buckling yield surface, as I’ve indicated here, for different volume fractions of the triangular micr structure. But that’s not enough, because the structure can fail by local buckling, but it could also fail by local plastic yielding, so you have to, on top of that, actually also compute the plastic yield surfaces here. So it becomes extremely expensive. So far, we have only done it in 2D, but we want to go to 3D.

26:54 But I will just show you a little 2D example again to make you think about Ling again. So the first design here, this is just this is again this lbam structure here, it’s designed with a topal optimization approach where we allow micro structure, so we allow isotropic triangular micr structure. But, as I said earlier, that is not needed, it’s not good for doing stiffness design alone. So if you’re just minimizing the compliance, we get this structure, and I’m sort of listing this is the reference structure, I’m listing the compliance, the buckling load, and then also the yield load for these structures.

27:33 Then we say, okay, let’s optimize this structure for buckling, and nicely, now we get a lot of gray area, meaning that there’s a triangular lce structure there, and we see that the compliance goes up by 25%, so stiffness decreases, but we gain a factor of 20 in global buckling, so that is extremely nice, right? But, and that’s sort of a side thing, the micr structure will yield, but let’s wait a second with that.

27:58 The problem here is also that in these low light gray regions, we have very low density of thin struts there. So if we actually optimize also to prevent local buckling, then we get this structure, and what you see here now is that we don’t have any low density regions anymore, we have fairly high density regions, because we want to avoid the local buckling. So now we still have 25% decrease in stiffness, but we still gained a factor of almost seven in B buckling, both local and global, but the structure will yield plastically before it it buckles.

28:41 So if you also add the yield constraint, we end up with this structure here that is actually a little bit better in compliance, keeps the buckling load and satisfies the yield stress also. But what we also see is, here ltis disappeared. So this is this also depend on depends on what material we are building in in. So the main message here is, it’s really difficult to work with lising, and you have to be critical also. Ltis is not just a nice way to do lightweighting, you may also create big accidents by introducing Ling. So keep that in mind, I hope you will think about it.

29:22 So we are still on the quest, we are going for Giga scale. So far, we do we can do the topology optimization using the homogen homogenization approach for the full wing structure, the colors here indicate where we have the different layers and laminates and stuff like that. The problem is, we are challenged still by actually generating the structures, and so we still have some issues in working with intop to try to generate the whole structure here, but I hope it will be possible in the future. And so our goal is really partly to do the de homogenization, but also in three 3D to include these yield surfaces and actually optimize local micr structures for buckling and stuff like that also. So this is some of the stuff that we are still working on.

30:02 I also want to mention a few other things that we are working on. So this slide is also showing, so to the left first, that this phaser based approach has a lot of potential, so definitely we can also do open cell latis structures with it, that’s not a problem, as optimizers we just don’t want to do it because they are not optimal. But we can also do all kinds of interesting surface texturing, and not just project simple layering, but also project more fancy structures, which I think might be interesting for for some of you guys.

30:40 Then we are looking into multiscale feature mapping, so instead of just having free designs, we have restricted design freedom, and we do that again with multiscale, that’s also Peter’s work. We’re doing all kinds of fun things, so thermal cloaking devices, and we are definitely looking into the tool optimization with uncertainties, you see this little gripping mechanism here. And we are doing all kinds of exciting stuff, doing really complex meatal kinematics, as you can see in the structure at the lower right, which sort of has a thing when we pull it it in one direction, first goes out then in, and in the other direction, it goes in and out first, and makes these very weird organic looking structures.

31:20 So, so we have lots of activities going on there. At the very end, and I actually maybe I could skip it because Andreas was alluding to it can the structures be too perfect? We do take multiple loading cases into account when we do the optimization, but we also assume here, and we know that in many cases ideal periodic structures give the theoretically optimal stiffness, but, and I don’t have the same nice pictures as Andrea’s had, reality is different, they never look the same when they have been through the 3D printing process.

31:58 And so our question is, that we are sort of getting a little bit more philosophical into, is will the optimal structure still be periodic if we know that it cannot be realized as a periodic one? So should we already introduce the randomness in the structure during the design process, such that it gets less sensitive to the manufacturing process and stuff like that? So these are some of the things we are looking at.

And for that, we also looking into into crack propagation. So, for example, we have a ltis structure here in the top, it’s a perfect KAG micro structure, and we see that the crack path is sort of making very straight lines. But it actually turns out, if we randomize that in a particular way, we will get a totally different crack path that actually consumes more energy. So there’s definitely some potential, but it’s a horrible to poity optimization problem to do, because the crack will go all kinds of directions when we optimize. But that’s why we are still here here we have challenges to do different optimization methods in academia.

33:01 So, with those, I will just sort of list a couple of topics to think about, and I hope I’ve made my points here, that you have to use AI or machine learning for the right purposes, and don’t oversell it. I don’t think it’s a good way to do topal optimization. If somebody have an an application, of r a paper, where you believe they beat standard optimiz ation methods, I would be really happy to discuss with you about it.

33:28 Then please also evaluate this break even versus generalizability issue, there. Is it really worth spending time on training AI if it’s never going to be used and is not generalizable? And also, I hope I convinced you that we have to look at lising and infill with critical eyes, because it’s not just an easy way to lightweight, you have to know what you’re doing when you do it.

And well, I’ve already listed, we have different challenges we are working on speed and interactivity also, and we’ve heard that several times here. We can do fantastic structures and fantastic designs, but it’s still challenging to actually verify them and and model them afterwards.

34:15 I will quote so s the from computer graphics, he had this paper where he says, we can build very complex structures that never existed in the computer before they actually started slicing, and so this is a fantastic deed. Our problem is, they need to exist in the computer before we can simulate them and later on optimize them. So this is what we’re challenging with.

34:38 And also, all the de homogenization stuff I showed you, that was projecting the structures to voxel based geometries, but we are working on sort of simplifying this process and directly projecting them to shell structures that then can be post optimized, and we can do much more efficient postprocessing of these.

35:01 So these are the words, maybe I’m selling sand to the wrong community here, by listing a lot of heavy papers here, but you are really welcome to contact us, speak to Peter and Rebecca if you heard something you like here today, and also contact us. And I know, I also been provoking a little bit with different viewpoints here, and I’m really happy to discuss it with you during breaks and stuff. So thank you very much for your attention.

More from CDFAM Berlin 2024

Computational Processes for Adaptive Biomechanics

Computational Processes for Adaptive Biomechanics

Jesus Marini Parissi · MoonrabbitX

Cognitive Design Systems

Cognitive Design Systems

Rhushik Matroja · Cognitive Design Systems

Generative DfAM in Footwear Industry

Generative DfAM in Footwear Industry

René Medel · Framas

Spherenes: A New Class of Minimal Surfaces

Spherenes: A New Class of Minimal Surfaces

Christian Waldvogel · Spherene

Process Automation for Engineers

Process Automation for Engineers

Daniel Siegel · Synera

Design Parts not Shapes

Design Parts not Shapes

Chelsea Cummings · The Barnes Global Advisors

Additive Flow

Additive Flow

Alexander Pluke · Additive Flow

Navasto – AI Accelerated Engineering

Navasto – AI Accelerated Engineering

Matthias Bauer · Navasto

Shape of Generative AI

Shape of Generative AI

Onur Yüce Gün · New Balance

Register for Updates and Discounts on CDFAM events.