Author 
Topic 

Sven
Germany
10 Posts 
Posted  Mar 19 2020 : 12:24:32

Hello together,
I am right now working on RLC extraction of PCBs. So far most of it works with FastHenry. But I do have some troubles with customized groundplanes.
As I read in the documentation you can only create rectangular planes and cut some holes into them. But I often use polygons in EAGLE for example to create ground planes with more than four edges.
So I'd like to ask you, if there is a possibilty to create groundplanes in different sizes apart from rectangular.
Thank you very much for your help in advance.
Best Sven 

Enrico
543 Posts 
Posted  Mar 20 2020 : 12:01:14

Hi Sven,
you can actually create rectangular planes and cut holes on the sides, so that you modify the shape of the plane itself. For instance, if you want a L shaped ground plane, you can cut out a rectangular hole in one quadrant.
The source code may even be modified adding customized hole shapes (e.g. if you want a triangular hole), it had been created with hooks to ease this task. Of course this requires some coding (btw this is one of the services we can provide in terms of customization).
The only rule you MUST respect for a ground plane is not to divide it into two or more nonconnected areas, e.g you should not split a ground plane in two.
If you need more complex shapes, another option (but more impacting in terms of model creation) is to use different ground planes and stick them together exposing the nodes at the sides and connect them through .equiv statements.
Last resort you have is using a 'manually' created ground plane, i.e. in your input file you define all the segments that compose the ground plane. Unfortunately while this approach works there is a huge drawback if the plane is composed by a large number of segments. FastHenry must find all the paths for the meshes connecting the ports. If you use a ground plane, the algorithm for doing that within the plane is relatively simple (including the presence of holes). If you specify a large array of perpendicular segments instead you need to find all the paths and this is not an O(N) problem. This impacts specifically the preconditioner.
Another option is instead using VoxHenry. This works for any shape but you are constrained by the granularity of the voxels you define (the voxel is the 3D equivalent of a pixel, i.e. a cube). At present VoxHenry is not so evolved as FastHenry but the Octave/Matlab version is fully available and we have the beta version of the C++ code. If you are interested please contact me privately (see 'contact us' page), we can discuss the options on how we can support you if you are interested in consultancy.
Best Regards, Enrico



Sven
Germany
10 Posts 
Posted  Mar 20 2020 : 18:40:05

Hello Enrico,
again: thank you very much for your reply.
OK, this might work in my application. In order to cut holes into the plane I already use the holes directive. I just add further holes in order to cut out the outer shapes.
BTW: How do I best choose the values for seg1 and seg2?
Best Sven 


Enrico
543 Posts 
Posted  Mar 23 2020 : 15:49:14

Hello Sven,
the values for seg1 and seg2 depend on your frequency of application. Please see the User's manual that you can find in the embedded online help in the Windows version, or on our page ht*ps://w*w.fastfieldsolvers.com/documentation.htm (replace the * with the correct characters, this is an antispam measure).
Best Regards, Enrico



Sven
Germany
10 Posts 
Posted  Mar 27 2020 : 13:26:01

Hello Enrico,
I already searched through the documentation but the only thing about segmentation I encounter is the segmentation of segments (with nhinc and nwinc). So do I need to set the minimum size of a segment in a groundplane through the same procedure as for the elements?
Or do I get something wrong?
Sven 


Enrico
543 Posts 
Posted  Mar 28 2020 : 18:09:50

Hi Sven,
for the ground plane there is no 'nwinc' and 'nhinc' has a special use, as reported in the user's guide:
quote: nhinc and rh can be used to specify a number of filaments for discretization of each segment along the thickness (See Section 1.3.2). This could be used for modelling nonuniform current across the thickness. If nhinc is omitted, the value of 1 is usedregardless of the .Default setting. If rh is omitted, the default value is used.
The number of segments you use for discretizing the ground plane depend on how accurately you need to model the 2D current flow in the ground plane. This is important to accurately model the proximity effect; you should use segments of similar dimension to the structures that are nearby the ground plane. In doubt, you can visualize the current flow (this unfortunately is not straightforward as of today, as requires you to output a vector file and use SciLab or MatLab/Octave to see the current flows; see the manual for the examples at low and high frequency). The nhinc parameter is instead related to the skin depth.
Best Regards, Enrico



Sven
Germany
10 Posts 
Posted  May 02 2022 : 19:39:59

Hello Enrico,
after quite some time I am again working again on the RCL extraction of PCBs. In the meantime I already published two conference papers on this issue if you're interested in that.
So once again I am working with ground planes and the discretization of ground planes is still something I don't really get my head around. Maybe you could help me out again.
My thinking goes as follows: If I use Nodes and connect them with Elements I can use nwinc and nwinc for simulating the skin and proximity effects. This is all clear. But how do I calculate the segmentation/discretization of a uniform plane properly?
Take the following example of a wire that is 100 mm in length and 10 mm in width. The discretization is (here arbitrarily) set to nwinc=100 nhinc=10 (it would have been calculated correctly according to the skin effect formula). Now I want to "convert" that wire to a plane using the Gcommand. It is the same length and width.
Would it be?:  nhinc_Wire = nhinc_Plane = 10 , because it is handled in the same way?  there is no nwincstatement for planes?  seg1 (along the "wire") at least =1, if it is "just a wire"?  seg2=100 ??  that should be incorrect because nwinc/nhinc discretisizes the wire according to rh and rw (see Figure 2 in the User Guide). seg1 and seg2 "discretisize" linearly (see Figure 4)?
Furthermore I tried to visualize the current flow in the ground plane using MATLAB, but I couldn't get the examples to work. I started using the examples e. g. "together.ing" with the corresponding command "d grids" (and "x trace1") and tried the commands from page 35 fo the user guide (PDFpage 40), but the command "print together_DC.ps" does not work. There is no .psfile exported from FastHenry.
Many thanks again for your great help on my work beforehand! Sven
====================================================================== * EXAMPLE * one wire with the width of 10 mm and length of 100 mm .units mm N1 x=0 y=0 z=0 N2 x=100 y=0 z=0
E1 N1 N2 w=10 h=1 nwinc=100 nhinc=10
* a plane with the same dimensions G1 x1=0 y1=0 z1=0 + x2=100 y2=0 z2=0 + x3=100 y3=10 z3=0 + thick=1 + seg1=??? + seg2=??? + nhinc=10??? *as in the wire example? + rh=2??? *as the standard value? ======================================================================



Enrico
543 Posts 
Posted  May 05 2022 : 19:12:21

Hi Sven,
happy to hear from you again.
quote: In the meantime I already published two conference papers on this issue if you're interested in that.
Yes please, I am interested
quote: Now I want to "convert" that wire to a plane using the Gcommand. It is the same length and width.
Would it be?:  nhinc_Wire = nhinc_Plane = 10 , because it is handled in the same way?  there is no nwincstatement for planes?  seg1 (along the "wire") at least =1, if it is "just a wire"?  seg2=100 ??  that should be incorrect because nwinc/nhinc discretisizes the wire according to rh and rw (see Figure 2 in the User Guide). seg1 and seg2 "discretisize" linearly (see Figure 4)?
I think you got most of the points. In general, when you have a 'wire', you are interested in the skin depth that is 'happening' from 'every direction', as the wire has a height to width ratio that is not too big. Now, when you have instead a plane, you usually consider the skin effect only along the depth; while on the plane itself you are more concerned about the proximity effects, i.e. the current crowding 'under' nearby conductors. So it would not make too much sense to discretize every segment into an exponential mesh of filaments; it makes instead sense to discretize the plane along the x and y (relative) directions depending on the size of the nearby conductors, while applying the filaments only along the depth.
In the end, you need to consider that there is no 'real' difference between segments and filaments; meaning that everything is filaments for FastHenry. If a segment is not discretized, it is a filament per se. Breaking up a segment into filaments is convenient for you as a user when defining the input file and is convenient for FastHenry as it 'knows' that all the filaments share a common node. But you may as well 'emulate' the filaments using solid segments and .equiv all the end nodes; this is much less efficient for FastHenry when calculating the current meshes but in the end it does not change the impedance results. The same happens with the ground planes. You may create your own plane laying down a mesh of segments. However this would be *a lot* less efficient as you create a large number of possible current meshed that FastHenry need to explore to build up the matrix. If FastHenry 'knows' this is a plane, it can perform the operation much more efficiently.
Now, how can you properly simulate proximity effects if you are forced to an uniform mesh when creating the plane? This is exactly the reason why nonuniform planes were added to FastHenry. Unfortunately they are not too user friendly, but are quite flexible. You need to check the second manual for details about the input format, plus there are some examples in the samples directory.
quote: Furthermore I tried to visualize the current flow in the ground plane using MATLAB, but I couldn't get the examples to work.
Which version of FastHenry are you using? We modified FastHenry2 at a certain stage to output SciLab compatible files; anyway you need either MatLab or SciLab for visualization. Octave can do in place of MatLab. I must say that last time I did it the visualization in Octave is not so nice. In general this feature is not user friendly at all and requires some tweaks on the user side.
Best Regards, Enrico



Sven
Germany
10 Posts 
Posted  Jun 09 2022 : 16:40:14

Hello Enrico,
thank you very much for your reply.
I will send you the papers by mail.
I already read the second manual for the nonuniform planes but the main reason I stuck to the "standard"planes is, that i need to customize the shape of the plane which I am doing with the holesdirective. Am I correct that I cannot customize the shape of the nonuniform shapes or did I get something wrong?
To be clear about the planes: When I create a plane it is created using a mesh of segments. The manual does describe it pretty good. But won't there be any proximity effects between each segment (for example in Figure 4 where the width is onethird of the actual width)?
For the Matlab problems. I recently reinstalled FastModel and I am currently running it in version 3.0.1 FastHenry2 is 3.6.2 I am using Matlab R2021b
Best Sven



Enrico
543 Posts 
Posted  Jul 01 2022 : 18:03:34

Hi Sven,
after reviewing the papers (reporting the citations here for the interested reders),
S. Fießer, U. Schwalbe, "Analyzing and optimizing the switching behavior of power electronics by automated PCB parasitics extraction of the critical path", IEEE 23rd European Conference on Power Electronics and Applications (EPE'21 ECCE Europe), 2021
S. Fießer, U. Schwalbe, "Automated PCB Parasitics Extraction from EDA Tools for Power Electronics Design Support", International Exhibition and Conference for Power Electronics, Intelligent Motion, Renewable Energy and Energy Management, 2021
I think I see your point. Your understanding is correct, nonuniform planes do not foresee the possibility of cutting holes, for how they are implemented today. You'd need to modify the code  but actually the way nonuniform ground planes are defined, cutting holes would break the meshes. So this is probably not the way to go.
About proximity; FastHenry considers all the interactions between all filaments and the proximity and skin effects are the results of those interactions. In the case of the gnd plane, you will notice current crowding where, intuitively speaking, the current is 'trying', at sufficient high frequency, to reduce as much as possible the current loop.
Best Regards, Enrico




Topic 


