 Welcome to my talk. My name is Thorsten Dibich and I want to talk today about OpenEMS. And most importantly, of course, what it is, actually, because I'm not sure if you are familiar with it or not. Let's see if this works. Doesn't look like it. Okay, so here's the outline of the talk, so I will start talking about what it actually is. A little bit about the interface, because that is, I guess, most important for the most people in this room. And then I will give a short status and outlook. So what is OpenEMS? So OpenEMS is a free solver, of course, for electric magnetic fields. So you have magnetic fields, electric fields. And what you can do with that is you can simulate RF devices. For example, antennas or filters, transmission lines, everything like this. Also radar cross-sections of devices, even up to optical devices. So if you have an optical device, you can also do that. Everything that's pretty much electromagnetic is possible. OpenEMS uses the FT-TD method, which stands for finer differences in time domain, because if you look at the Maxwell equations, it's pretty much only derivatives in time and in space. And what you can do is you can just model this into a computer using finite differences. And if you do it one time step after another, then you have these finite differences in time domain, and that's what this method is. I'm not going to go into more details about this method. There's lots of information out there. It's actually very basic or very fundamental method, which is well known for, I don't know, 50 years already. OpenEMS uses an Octave or MATLAB interface. So you have a scripting interface, which can be very low level, so you can do very basic stuff with it, or it has a lot of functions that are very high level. I will show this in a moment. That is the interface. There's also a Python interface, but which one is very young yet, so it's not complete. And unfortunately also only for Linux at this time. So Linux and Windows are fully supported, except for the Python interface yet. What's also important, I think, is that the user has a full control over the simulation. That's not available, for example, in a lot of other tools, that you can really control everything about the simulation. And what I find very important, and the most users find very important, it has a lot of tutorials and examples, so you can have a look. Maybe this antenna, I take it and take it as a baseline for what I want to do. It always helps a lot, I think. Here's a very long list about a few features I won't go into every aspect. Which is important, this first one, maybe it's in Cartesian and cylindrical coordinates, fully three-dimensional. So I think cylindrical coordinates, FT-TDI, I think this is the only tool available at all, commercially or free. But, of course, 99% of the people are only interested in Cartesian coordinates. But the cylindrical coordinates are actually the reason why it exists in the first place, because when I wanted to do what I wanted to do, I needed to do it in cylindrical coordinates, and there was none. So I had to do this, and that's the reason why it exists in the first place. You can create models with cubes, cylinders, polygons and all those primitives, if you want to, but you can also import other CID data, mostly in STL format, for example, for three-dimensional models. You can have SMD, lumped elements like resistors, capacitors, can include it already in the simulation. There's a small circuit simulator included as an octave, pretty much functionality, very basic, but you can also export a touchstone included in your favorite circuit simulator, if you want to. It has support for human body models. Again, that's what I needed at the time. You can have dispersive materials, which means frequency-dependent materials, to some extent. You can have a look at all the fields in time domain and at certain frequencies if you dump them onto your disk, which you have to be careful to not fill it in no time. You can do remote simulation, so you can set up your simulation on your computer and send the working task over the internet to wherever you want to to get the results back later, which is also very nice. What would a typical script working script look like? Usually you have some header, some constants and everything. You have your FTTD setup part. What pulse do I want to set up for excitation? And what is the boundary conditions? Then you talk about the CID model, so I import some structure or I define it myself using the interface. And then you set up your FTTD mesh, which is, I think, the most important step but also the one with the most experience needed because I think the CID part, it's clear, it's easy, but to get the meshing right is important and difficult. You have to have experience there. You set up maybe some dumps that you want to do, so your fields, what you want to record. You run the simulation and you do your post-processing and figure creation, but I think the best way is I will quickly show it, a very simple example. It's one of the tutorials. I hope you can read it. Maybe I can increase this a little bit and I can't, but you can see here in the top part there are some setups. As I said, some constants defined here and then you have here the FTTD setup with your pulse, which pulse you want to set up your boundary conditions. Then here you can see I set up the mesh. Again, this is a tutorial that is also online, so you can have a closer look at it if you want to. The important part is the smooth mesh lines that you have a smooth mesh. Then down here is pretty much the part where you set up your structure. So you can see I define a material, which is the Rogers material substrate, and I define it as a box, which is just a cube pretty much for my substrate, and that's it already. So I have my substrate, and here I define a metal, which is going to be my trace, and then I have my MSL ports, which is doing the very high level. So you're doing the trace of the line, it's doing the excitation, it takes care of the voltage and current probes, and all that is included here. Of course, you have to read a little bit how this interface works, but then it's really one line, and again, because of all the tutorials, it's usually, oh, where did you do it? Oh, there, and I can see how it works. That's how you do it usually. I set up some dumps. This is this part here, and then I write the file and have my tool to view the structure, and then I run it. And here in the bottom part, I have only the plotting. So this is a small filter, it's 90 lines of Python code documentation, and if you just run this script, then you can see first of, you can see the structure. This is the tool to view it. You can see here your line, and if you look from top, let me hide the Rogers material, and you can also see a little bit the mesh, how it is more dense for your line and a little bit less dense in the surrounding, but you also have to make sure there are enough lines in the free space for the wave. So at least 15 lines per wavelength is kind of the rule of thumb here, but where there's more detail, you need more lines. And if you close this one, then it will run. So you can see a few information here. So the time step is 0.2 round about picoseconds, a very small time step, of course. The excitation is about 0.8 nanoseconds, because it's a 7 gigahertz pulse. It's very short, of course. And then you can see that it's running. It should be around 40 seconds here. What you can see, the excitation is about 5,000 time steps. So it's already done now. And so now the energy should go down. It has to, of course, dissipate somewhere. And once it's dissipated, the simulation stops, and OpenEMS will create a figure. So now it's close to minus 50 dB, so the energy is very low now. And it's finished. Then you get the S-parameters. So you can see that, for example, here it's 3.6 gigahertz. This filter is completely blocking everything. And if you use another tool, ParaView, then you can even visualize how that would look. So you see the wave hitting this stop, and it's going to be reflected partially, of course, only. And again, it repeats on a loop here. So that's what it would look like. So you can have really deep insight what is going on. This is, of course, a very simple example. No, let's start again. No. Okay. Some more examples maybe. This is a simple antenna, a patch antenna, very basic. You see the radiation pattern here. And this blue, no, this colorful ball here, showing which direction it's radiating. You can do the same thing in cylindrical coordinates. So you see it's bent because it's in cylindrical shape. You can do helix antennas, for example. You have a metal base plate and just a wire wound it around some substrate, maybe some, yeah. And then you get a pattern like this. Or if that's not enough gain for your Wi-Fi antenna, you can do it 4 by 4. And then you have 16 elements, so you can gain high-directivity Wi-Fi antenna if you want. So you can simulate that. Or maybe an example. Again, the reason why OpenEMX exists because I wanted to do magnetic resonance imaging antenna design. And so you can see an example of very simple loop coils to use for an MRI. So you can create magnetic fields with those at 300 megahertz to get MRI images. And what OpenEMX can do is, of course, for example, look at the SAR. So the specific absorption rate. So red or white means hot. So more energy is being absorbed by the tissue. And darker means less energy is absorbed. You can actually see that the skull bones here is darker because it's less conductive. So it absorbs less heat. While the skin is closer to the antenna, it absorbs more. Or here even the spinal fluid is more conductive, so it absorbs more. You can even see the differences between the different grey matter and white matter of your brain, for example. So you can do this simulation as well. But maybe for you, more interesting is also PCB antennas. A simple example here. This USB dongle from Texas Instrument, I think. I modeled it after the specifications you can see the OpenEMX model. Of course, all the PCB part is a bit sketchy. It's only a metal plate here in my example. But what I could conform is, for example, that this target frequency of Wi-Fi networks, but it also showed very clearly that the matching of the antennas highly dependent on the size of the PCB have pretty much everything. So it's important to do a simulation, in my opinion, because you will need a matching network. You see here one. Because you have to match your antenna. Otherwise, it will not work as good as it should be. And so simulations like this is important. And that brings me to the second part of this talk, which is interfacing. So what I mean by this? We have this electric magnetic solver, OpenEMX, for example. And you all know a lot of PCB editors, designers. And it would be nice to combine those, I think. So you have the capability to simulate trace PCB antennas, to simulate filters, transmission lines, for example, like in this example from a spectrum analyzer, where you see a lot of filter here, would be nice to just put an export to OpenEMX, for example, and do a simulation and it doesn't work in the frequency I want. But the problem is that this link between these two worlds, electromagnetic simulation and PCB simulation or PCB design, in my opinion, is very weak and that could be improved on. There are some tools that already do this or try to do this. So the first one I want to introduce here is Hype2Math, which is quite a long time ago already, that it was developed and is still active supported. So it converges the hyperlink format, which is a commercial format, into a script that OpenEMX can run. So whatever packages can export this format, you can use this tool to convert it to OpenEMX pretty much. There are also a few examples with it, so you can see how it works. It's already shipped with OpenEMX, so if you download it, it's already included. There is this PCB R&D editor, which is also a PCB editor. These guys are also working on an exporter to OpenEMX. So I will show that in a moment also. And then there's also a very young, very new project PCB model gen, which is a user that created this one, posted on the OpenEMX forum. I haven't looked at it too closely yet, but it looks very promising. The idea is to import or to convert keycard PCB files to use with OpenEMX. But again, maybe the keycard guys should have a closer look at it and see how it works. And of course, I will also try to have a closer look at it. Some examples from these tools. For example, Hype To Mud. This is a hairpin filter. You can see already the exported model to OpenEMX. You can see the results on the right. If you look at the mesh closely, you can see that here's a bit dense mesh here too. But here in the middle, it could be a little bit denser. And so you can see that, well, the frequency is of course okay, but it's a little bit not sharp, so as it should be, I think. In the next example, it's the same example, but used PCB R&D to do the export. The mesh is not shown, but I had a look at the mesh, and that one looked very nice. And you can already see the difference. It's the same frequency, but it looks already a bit better. So you have very nice flat plateau there that looks very good. So it already works to some extent. That is very good. But the ultimate goal, of course, the dream, let's say, would be to have the capability to design your PCB in KeyCAD or whatever favorite tool you want, maybe enrich it with some 3D models, like housing or whatever you want. Combine those into an OpenEMX model, do your RF simulation and from what you've learned there maybe go back to your design or maybe you first plug in a circuit simulation with Cooks or whatever circuit simulator you want to use and maybe then go back to your design and somehow iterate through here to really get your device to do what you want and to give it the best performance possible. Yeah, the project status. So OpenEMX is around for 10 years now and it's quite mature, I would say. It has a lot of advanced FTT features, like dispersive models, cylindrical coordinates and human body models. I don't know if any other free software can have the human body models included too. The human body models, of course, are not freely available, so you have to have a license to have those. But for example, if you do research, that's usually not an issue. If you do commercial work, it's a little bit more difficult to get them, but if you do research for example, public funded research, it's usually not a problem to get them. There's of course, as in every free open source project, there's always something to do. My to-do list very high up is to improve the documentation and to extend it also to get the Python interface a little bit more finished and usable. And of course, continue what I've just talked about, this interfacing to other tools like EDA tools and CUT tools to get that working a little bit better. And of course, always open for new features in FTTD or maybe improvements in terms of the speed of the engine. That's all, of course, very nice. In any case, here's a really further reading, so a lot of pages you can look at. OpenMSDE would be the first place to look at to download the software to get instructions how to install it. On Linux, it's pretty much instructions how to compile the source code. On Windows, it's just a zip file extracted, you're done. The forum, if you have questions or want support, I try to always answer questions within 24 hours, something like this. Usually I get it done that fast. But in any case, it's free, it's open source, so give it a try, run a tutorial, run an example, and with that, thank you for your attention. Questions? What would it take if I want to extract a full board? I have to label all the parts and run the extraction and match it or how would it approach? The question would be how to export the structure and what do you need? You want to extract this category matrix for a full board, for instance, and we see the integrity analysis, the relationship between the pins. The question is what do you have to do if you want to have a full board with all pins and everything exported and analyzed? The first thing is, of course, to extract your model. Let's clear all the traces, for example, as polygons and substrates is easy. Then what you need to do is for each pin, let's say you have to have a port, and this port one has to be excited or the other has to be passive like port one, S3 one, S4 one, and so on. Then you have to excite all the other ones, like port two, and then you get port S12, 22, and so on. So you have to iterate through all of these ports. That's what you have to do. If you have one port, that's one simulation. If you have two ports, that's already two simulations and so on. Of course, you can define, okay, I'm not interested in the excitation of that port, so you can keep it passive all the time. You can reduce it, but that's pretty much export your structure and then put ports wherever you need them and do the simulations. Then you can export a touchstone, for example, with all this information and run it in your circuit simulator, for example. Yeah? Can it be misused for thermal simulation? Have it been used for thermal simulation? No. I think it could be, the question was can you use it for thermal simulation? It's not included. No. Particularly at the SAR, so you would have the information how to heat up your structure, for example, but there's no thermal solver included. No. The question is if it supports lossy materials like ferrites. It supports losses. Yes. Either by just applying conductivity to the structure or by using the dispersive models. Ferrites is a different story because it's quite complicated. If you don't have a hysteresis, it's possible, which is non-linear. So if it's linear material, yes, you can do it. So you have magnetic materials with losses. And you can, of course, also use dispersive models for a drudder or a d-bye or anything like this, but not with hysteresis. That's not possible. Everything that's linear, yes, everything that's non-linear, no. Back there is one. The human body models are not the question is about the human body models, where to get them and if you can purchase them or if they are included. They are, of course, not included. You have to get them from wherever you exist. The Ithiat Zurich, for example, has a lot of human body models and you can make a contract and NDA. I don't know what's required, again, it's a long time ago, so that you can get what OpenMMS comes with is, for example, a tool that can convert these models, can read them and convert them into a model that OpenMMS can understand. Pretty much a voxelized HDF-5 file that you can read, which you can create yourself if you want to, so you could create your own body model if you like. But there's a tool to convert it. It's not included. That would not be allowed, no. You have to get them from somewhere else. So the question... Yeah, the question is if there is a visualization tool to cut through your fields and your data and so on. What I use is this software, ParaView which is also open source. It uses VTK and has a QT GUI. You can do millions of filters if you go up here. It's already, this is a warp filter and a calculator. So you have this list of filters that you can... So you can do everything that I think you can do everything what you want. The tool is very complicated, but for me it was clear I don't want to redo something that's already that nice. So this tool has its own learning curve for sure, but I'm pretty sure you can do everything your heart would desire. You can do everything like, the question is, is there a more high level interface to do arrays and phase shifting and stuff like this. Since it's a scripting interface, it's very easy. If you have one antenna and you want an array, you make one or two, four loops with your antenna or your PCB for your antenna inside and then you have your array. And if you want to have a phase shift for each of these arrays, then in this loop you define the time delay for each and every port and then you have your phase array pretty much. You cannot do a phase in time domain because it's time domain, but you have a time shift which is translated pretty much for one frequency in a corresponding frequency or a phase shift. Perhaps a weird question, but I'm working on this fencing system with your fence, so you hit somebody and I wonder if can I use this tool to simulate how a signal would propagate from one person to the sword to a second person. The question is, while fencing you mean if somebody walks through an EM signal a sword and you try to hit somebody and he has his body conducting and could you use this tool to simulate your help in the... So the question is if you have RF sword and you touch somebody with it can you simulate that? Interesting question. Yes, I think so. It depends on the frequency of the signal. FTTD is not very accurate for very low frequencies, so I don't know which frequency you are thinking about, but if everything is very large you can also go down the frequency a little bit, but it highly depends on the frequency of course, and including the entire body model with everything in the mesh that's not going to be a fast simulation let's say like this, it's going to take a couple of hours to simulate I guess, it depends. Does it also work for lightsabers? Lightsabers. You can do optics with it, yes? Again? How low you can get with the frequency? It depends on the size of the model. You have to remember that the time step depends on the mesh, the mesh depends on your structure, so if your structure is very detailed the mesh is very fine, the time step is very small, and if you have a small time step and a very low frequency, low frequency means long pulse and then you have to simulate very very long so that all depends on one another. You can of course, like this one, I used a pulse with 7 gigahertz bandwidth so DC was included but if you would analyze at that very low frequencies the resolution is not very good because you don't have very much data there. You get some results but the accuracy is not as detailed, let's say.