necpp 1.8.2__tar.gz → 2.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. {necpp-1.8.2 → necpp-2.2.1}/MANIFEST.in +1 -1
  2. {necpp-1.8.2/necpp.egg-info → necpp-2.2.1}/PKG-INFO +2 -1
  3. {necpp-1.8.2 → necpp-2.2.1}/README.md +1 -0
  4. {necpp-1.8.2 → necpp-2.2.1}/example/antenna_util.py +1 -0
  5. {necpp-1.8.2 → necpp-2.2.1}/example/different_material.py +1 -0
  6. {necpp-1.8.2 → necpp-2.2.1}/example/impedance_plot.py +1 -0
  7. {necpp-1.8.2 → necpp-2.2.1}/example/monopole.py +1 -0
  8. {necpp-1.8.2 → necpp-2.2.1}/example/optimized.py +1 -0
  9. {necpp-1.8.2 → necpp-2.2.1/necpp.egg-info}/PKG-INFO +2 -1
  10. {necpp-1.8.2 → necpp-2.2.1}/necpp.egg-info/SOURCES.txt +1 -1
  11. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/c_evlcom.cpp +76 -36
  12. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/c_evlcom.h +5 -0
  13. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/c_geometry.cpp +137 -163
  14. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/c_geometry.h +13 -0
  15. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/common.h +5 -6
  16. necpp-2.2.1/necpp_src/src/config.h.in +10 -0
  17. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/matrix_algebra.cpp +13 -264
  18. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/matrix_algebra.h +2 -14
  19. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/misc.cpp +64 -8
  20. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/misc.h +2 -0
  21. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_context.cpp +68 -48
  22. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_output.cpp +19 -4
  23. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_output.h +3 -0
  24. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_structure_currents.cpp +12 -14
  25. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_structure_currents.h +4 -0
  26. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/safe_array.h +1 -1
  27. {necpp-1.8.2 → necpp-2.2.1}/pyproject.toml +2 -1
  28. {necpp-1.8.2 → necpp-2.2.1}/setup.py +4 -2
  29. {necpp-1.8.2 → necpp-2.2.1}/tests/test_multiple_sc_cards.py +1 -0
  30. necpp-1.8.2/necpp_src/config.h +0 -70
  31. {necpp-1.8.2 → necpp-2.2.1}/LICENCE.txt +0 -0
  32. {necpp-1.8.2 → necpp-2.2.1}/necpp.egg-info/dependency_links.txt +0 -0
  33. {necpp-1.8.2 → necpp-2.2.1}/necpp.egg-info/top_level.txt +0 -0
  34. {necpp-1.8.2 → necpp-2.2.1}/necpp.py +0 -0
  35. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/example/test.py +0 -0
  36. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/AntennaInput.h +0 -0
  37. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/BaseInput.h +0 -0
  38. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/CurrentInput.h +0 -0
  39. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/PowerBudget.h +0 -0
  40. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/RadiationInput.h +0 -0
  41. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/XGetopt.cpp +0 -0
  42. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/XGetopt.h +0 -0
  43. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/c_ggrid.cpp +0 -0
  44. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/c_ggrid.h +0 -0
  45. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/c_plot_card.cpp +0 -0
  46. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/c_plot_card.h +0 -0
  47. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/electromag.cpp +0 -0
  48. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/electromag.h +0 -0
  49. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/libNEC.cpp +0 -0
  50. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/libnecpp.h +0 -0
  51. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/math_util.h +0 -0
  52. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec2cpp.h +0 -0
  53. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_card_parser.h +0 -0
  54. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_context.h +0 -0
  55. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_debug.h +0 -0
  56. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_exception.cpp +0 -0
  57. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_exception.h +0 -0
  58. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_ground.cpp +0 -0
  59. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_ground.h +0 -0
  60. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_radiation_pattern.cpp +0 -0
  61. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_radiation_pattern.h +0 -0
  62. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_results.cpp +0 -0
  63. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_results.h +0 -0
  64. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/nec_wire.h +0 -0
  65. {necpp-1.8.2 → necpp-2.2.1}/necpp_src/src/typesafe_stdint.h +0 -0
  66. {necpp-1.8.2 → necpp-2.2.1}/necpp_wrap.c +0 -0
  67. {necpp-1.8.2 → necpp-2.2.1}/setup.cfg +0 -0
@@ -1,7 +1,7 @@
1
1
  include LICENCE.txt
2
2
 
3
3
  include necpp_src/src/*.h
4
- include necpp_src/config.h
4
+ include necpp_src/src/config.h.in
5
5
 
6
6
  include necpp_src/example/test.py
7
7
  include example/*.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: necpp
3
- Version: 1.8.2
3
+ Version: 2.2.1
4
4
  Summary: Python Antenna Simulation Module (nec2++) C-style interface
5
5
  Author-email: Tim Molteno <tim@physics.otago.ac.nz>
6
6
  License-Expression: GPL-3.0-only
@@ -17,6 +17,7 @@ Description-Content-Type: text/markdown
17
17
  License-File: LICENCE.txt
18
18
  Dynamic: license-file
19
19
 
20
+ <!-- Copyright (c) 2008-2026 Tim Molteno (tim@elec.ac.nz) -->
20
21
  # python-necpp: Antenna simulation in python
21
22
 
22
23
  This module allows you to do antenna simulations in Python using the nec2++ antenna
@@ -1,3 +1,4 @@
1
+ <!-- Copyright (c) 2008-2026 Tim Molteno (tim@elec.ac.nz) -->
1
2
  # python-necpp: Antenna simulation in python
2
3
 
3
4
  This module allows you to do antenna simulations in Python using the nec2++ antenna
@@ -1,3 +1,4 @@
1
+ # Copyright (c) 2008-2026 Tim Molteno (tim@elec.ac.nz)
1
2
  #
2
3
  # Some antenna utility functions
3
4
  #
@@ -1,3 +1,4 @@
1
+ # Copyright (c) 2008-2026 Tim Molteno (tim@elec.ac.nz)
1
2
  from necpp import *
2
3
  import math
3
4
 
@@ -1,3 +1,4 @@
1
+ # Copyright (c) 2008-2026 Tim Molteno (tim@elec.ac.nz)
1
2
  #
2
3
  # Plot of reflection coefficient vs antenna length for a fixed base height.
3
4
  #
@@ -1,3 +1,4 @@
1
+ # Copyright (c) 2008-2026 Tim Molteno (tim@elec.ac.nz)
1
2
  #
2
3
  # Simple vertical monopole antenna simulation using python-necpp
3
4
  # pip install necpp
@@ -1,3 +1,4 @@
1
+ # Copyright (c) 2008-2026 Tim Molteno (tim@elec.ac.nz)
1
2
  #
2
3
  # Automatically tune antenna
3
4
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: necpp
3
- Version: 1.8.2
3
+ Version: 2.2.1
4
4
  Summary: Python Antenna Simulation Module (nec2++) C-style interface
5
5
  Author-email: Tim Molteno <tim@physics.otago.ac.nz>
6
6
  License-Expression: GPL-3.0-only
@@ -17,6 +17,7 @@ Description-Content-Type: text/markdown
17
17
  License-File: LICENCE.txt
18
18
  Dynamic: license-file
19
19
 
20
+ <!-- Copyright (c) 2008-2026 Tim Molteno (tim@elec.ac.nz) -->
20
21
  # python-necpp: Antenna simulation in python
21
22
 
22
23
  This module allows you to do antenna simulations in Python using the nec2++ antenna
@@ -14,7 +14,6 @@ necpp.egg-info/PKG-INFO
14
14
  necpp.egg-info/SOURCES.txt
15
15
  necpp.egg-info/dependency_links.txt
16
16
  necpp.egg-info/top_level.txt
17
- necpp_src/config.h
18
17
  necpp_src/example/test.py
19
18
  necpp_src/src/AntennaInput.h
20
19
  necpp_src/src/BaseInput.h
@@ -32,6 +31,7 @@ necpp_src/src/c_ggrid.h
32
31
  necpp_src/src/c_plot_card.cpp
33
32
  necpp_src/src/c_plot_card.h
34
33
  necpp_src/src/common.h
34
+ necpp_src/src/config.h.in
35
35
  necpp_src/src/electromag.cpp
36
36
  necpp_src/src/electromag.h
37
37
  necpp_src/src/libNEC.cpp
@@ -186,7 +186,7 @@ void c_evlcom::gshank( nec_complex start, nec_complex dela, complex_array& sum,
186
186
  if (den < denm)
187
187
  den=denm;
188
188
  a1=q1[i][j]-a1;
189
- amg=fabs(real(a1)+fabs(imag(a1)));
189
+ amg=fabs(real(a1))+fabs(imag(a1));
190
190
  if (amg > den)
191
191
  {
192
192
  brk = true;
@@ -563,54 +563,52 @@ void c_evlcom::evlua( nec_complex *erv, nec_complex *ezv,
563
563
  gshank(cp1,delta,ans,6,sum,0,bk,bk);
564
564
  rmis=m_rho*(real(m_ck1)-m_ck2);
565
565
 
566
- bool jump = false;
567
- if ( (rmis >= 2.*m_ck2) && (m_rho >= 1.e-10) )
568
- {
569
- if (m_zph >= 1.e-10)
570
- {
571
- bk=nec_complex(-m_zph,m_rho)*(m_ck1-cp3);
572
- rmis = -real(bk)/fabs(imag(bk));
573
- if (rmis > 4.*m_rho/m_zph)
574
- jump = true;
575
- }
576
-
577
- if ( false == jump )
578
- {
579
- /* integrate up between branch cuts, then to + infinity */
580
- cp1=m_ck1- nec_complex(0.1,+0.2);
581
- cp2=cp1+.2;
582
- bk=nec_complex(0.,del);
583
- gshank(cp1,bk,sum,6,ans,0,bk,bk);
584
- m_contour_a=cp1;
585
- m_contour_b=cp2;
586
- rom1(6,ans,1);
587
- for (int i = 0; i < 6; i++ )
588
- ans[i] -= sum[i];
589
-
590
- gshank(cp3,bk,sum,6,ans,0,bk,bk);
591
- gshank(cp2,delta2,ans,6,sum,0,bk,bk);
592
- }
593
-
594
- jump = true;
595
- } /* if ( (rmis >= 2.*m_ck2) || (m_rho >= 1.e-10) ) */
596
- else
566
+ bool jump;
567
+ if ( (rmis < 2.*m_ck2) || (m_rho < 1.e-10) )
568
+ jump = true;
569
+ else if ( m_zph < 1.e-10 )
597
570
  jump = false;
598
-
571
+ else
572
+ {
573
+ bk=nec_complex(-m_zph,m_rho)*(m_ck1-cp3);
574
+ rmis = -real(bk)/fabs(imag(bk));
575
+ if (rmis > 4.*m_rho/m_zph)
576
+ jump = true;
577
+ else
578
+ jump = false;
579
+ }
580
+
599
581
  if ( false == jump )
582
+ {
583
+ /* integrate up between branch cuts, then to + infinity */
584
+ cp1=m_ck1- nec_complex(0.1,+0.2);
585
+ cp2=cp1+.2;
586
+ bk=nec_complex(0.,del);
587
+ gshank(cp1,bk,sum,6,ans,0,bk,bk);
588
+ m_contour_a=cp1;
589
+ m_contour_b=cp2;
590
+ rom1(6,ans,1);
591
+ for (int i = 0; i < 6; i++ )
592
+ ans[i] -= sum[i];
593
+
594
+ gshank(cp3,bk,sum,6,ans,0,bk,bk);
595
+ gshank(cp2,delta2,ans,6,sum,0,bk,bk);
596
+ }
597
+ else
600
598
  {
601
599
  /* integrate below branch points, then to + infinity */
602
600
  for (int i = 0; i < 6; i++ )
603
601
  sum[i] = -ans[i];
604
-
602
+
605
603
  rmis=real(m_ck1)*1.01;
606
604
  if ( (m_ck2+1.) > rmis )
607
605
  rmis=m_ck2+1.;
608
-
606
+
609
607
  bk=nec_complex(rmis,.99*imag(m_ck1));
610
608
  delta=bk-cp3;
611
609
  delta *= del/abs(delta);
612
610
  gshank(cp3,delta,ans,6,sum,1,bk,delta2);
613
- } /* if ( false == jump ) */
611
+ }
614
612
 
615
613
  ans[5] *= m_ck1;
616
614
 
@@ -841,3 +839,45 @@ void hankel( nec_complex z, nec_complex *h0, nec_complex *h0p )
841
839
  }
842
840
 
843
841
 
842
+
843
+ /* Numerical integration convergence tests used by Sommerfeld integration. */
844
+
845
+ void test(
846
+ nec_float f1r, nec_float f2r, nec_float *tr,
847
+ nec_float f1i, nec_float f2i, nec_float *ti,
848
+ nec_float dmin )
849
+ {
850
+ static nec_float _min_val = 1.0e-37;
851
+
852
+ nec_float den = fabs( f2r);
853
+ nec_float temp_tr = fabs( f2i);
854
+
855
+ if( den < temp_tr)
856
+ den = temp_tr;
857
+ if( den < dmin)
858
+ den = dmin;
859
+
860
+ if( den < _min_val) {
861
+ *tr = 0.0;
862
+ *ti = 0.0;
863
+ return;
864
+ }
865
+
866
+ *tr= fabs((f1r - f2r)/ den);
867
+ *ti= fabs((f1i - f2i)/ den);
868
+ }
869
+
870
+ nec_float test_simple( nec_float f1r, nec_float f2r, nec_float dmin )
871
+ {
872
+ static nec_float _min_val = 1.0e-37;
873
+
874
+ nec_float den = fabs(f2r);
875
+
876
+ if( den < dmin)
877
+ den = dmin;
878
+ if (den < _min_val) {
879
+ return 0.0;
880
+ }
881
+
882
+ return fabs((f1r - f2r) / den);
883
+ }
@@ -61,3 +61,8 @@ private:
61
61
  /*! \brief Flag to select Bessel or Hankel function form (was jh) */
62
62
  bool m_bessel_flag;
63
63
  };
64
+
65
+ /* Numerical integration convergence tests (used by Sommerfeld integration) */
66
+ void test(nec_float f1r, nec_float f2r, nec_float *tr, nec_float f1i,
67
+ nec_float f2i, nec_float *ti, nec_float dmin);
68
+ nec_float test_simple( nec_float f1r, nec_float f2r, nec_float dmin );