-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Understanding how primitives are picked up by mesh lines #31
Comments
Yes that the forum is down is a real big issue and I have no idea if it will ever return or the university will just scrap everything after the hacker attack... I'm thinking to maybe give the github discussions a test... As for your question: It is very valid and I can see how this is giving you trouble to understand. The answer will not be easy because it is deeply linked to the FDTD algorithm itself. First of, using only surface (STL) objects is not a really good idea because of how this all works ;) |
No it would pick up all blue dots that ate inside the STL and make these edges like a metal... And yes with (large) volumetric surface objects all is good. But if you e.g. have really thin sheets, then you might get into trouble that no edge centers are inside or at least not enough to form an EM tight metal surface... Yes unfortunate dielectrics are handled different once again, but usually are less of a problem because a very thin dielectric does not make much sense in the first place. So for these as well having rather bulky materials is a good idea... |
You ask so many (important!) stuff at once... I hope I can keep up, just re-ask if I don't ;)
As for dielectrics... It is probed with the same IsInside function but at different locations inside the voxel (cube created by the mesh line edges). Thus this usually is much less of an issue... |
Regarding (3), my main limitation is that I'm essentially only dealing with externally imported CAD files (STLs), and so to keep things as simple as possible (i.e. as long as you have a model of what the geometry looks like "in real life" as accurately as possible, meaning everything is a 3D shape), I'm hoping to make the mesh generation algorithm suitable for such realistic models... I guess it's partially a UX problem rather than a physical limitation, but that's the reason I wouldn't like to use 1D and 2D shapes, but would rather hope to adapt my mesher to arbitrary 3D shapes (I'm already very close!) :) As for the mesh resolution... Well, let's say the diameter of the wire is around 3 mm. I think a mesh length of about 1 mm ensures that the wire is covered by 2-3 mesh cells, and this is pretty reasonable considering that's roughly the mesh resolution you'd expect to see on a typical microstrip line... Guess I'll have to look at some image processing algorithms to figure out the best way to carry out this "pixelization" technique 😁 |
Well that is a very impressive list... Let's see how that all goes... I was thinking of re-implementing AppCSXCAD in pure python using the CSXCAD and openEMS python modules in combination with PyQt/PySide and vtk etc. But I'm still pondering about it. As for AVX-2: Maybe someday I will have a look into it, but unfortunately I do not expect much speedup. The engine is already 100% memory bandwidth bottle necked, faster computation does not help here much... I think there are better ways to reduce numerical overhead, we will see... |
Hi Thorsten, this is more of a question rather than a technical issue/bug, but since the forum is down at the moment, I thought I'd ask here (sorry for the long question - thought I'd try to be as thorough as possible 🙂):
I'm having a hard time understanding how openEMS "detects" shapes. Specifically, I'm only working with STLs that realistically represent the actual geometry model. E.g. a microstrip patch antenna will have a patch and ground plane microstrip thickness of 35 μm instead of being flat faces, and it is the goal of my mesh-generation algorithm to figure out precisely where to sample each mesh line.
While I've made quite a bit of progress on my automatic mesh-generation algorithm (which I'm hoping to contribute with), I've reached a point where I'm having a hard time understanding where certain mesh lines have to be placed on the model so that openEMS does not spit out
Warning: Unused primitive detected in property: ...
(which appears to be derived from here).Here's an example: let's say you're given a realistic model of a patch antenna (where all objects are 3D volumes; no 2D surfaces). Where exactly on the model must you place lines, so that all 3 shapes (patch, substrate and ground plane) are properly detected?
One solution would obviously sample a line on the edge of every shape (with possibly a few more lines on the substrate to sample its thickness). However, that would imply that you end up with extremely narrow cells for the PEC thickness (patch and ground plane), yielding a tiny timestep.
What I've observed that typically works is sampling a single line right in the middle of ~35 μm microstrip traces, like so:
But this creates a few minor problems when it comes to algorithmically handling this detection and midpoint resampling (though I've already partially achieved this). Other times, sampling a single line at the edge of a trace also works, but not always, and it is unclear to me when a primitive becomes "unused" due to poor line sampling. Could you please comment on how CSXCAD/openEMS handles that?
Other proprietary software (like CST in this case) appear to handle such cases by only sampling one edge of thin PEC traces (which is easier in terms of automatic mesh generation, but it's unclear how their "CSXCAD"-equivalent geometry engine handles the representation of thin traces):
I think something that might be useful is for openEMS to look at the content of a cell (not just the edge/line), and determine what material it should be set to. That way (unless you've set the priority of the primitive low enough to be dominated by another primitive), you would never see primitives become "unused", as there would always be cells occupying that particular material.
One idea I haven't tried is to fill up the entire model with a dummy material representing air/vacuum (ε_r = 1) and set a low priority, so that the metals and dielectrics would be above in priority, and thus detected? Any idea if this idea is sensible at all?
I've also had a similar issue where the ridges of a horn antenna model were thin, and the mesh could only pick it up in certain spots (not yielding an
Unusued primitive
error):But once I made the ridge thicker, it was properly picked up by the mesh:
Many thanks again for your time - really really appreciate it!
The text was updated successfully, but these errors were encountered: