Releases: G1OJS/NECBOL
v3.2.3 fixes #8 NEC error monitoring
v3.2.2 - fixes #18
fixed #18 - set_wire_conductivity does nothing since version 3.0.0
V3.2.0 adds ability to colour objects in wireframe viewer
NECBOL v3.1.3 now available with pip
Version 3.0.0 laid the foundation for upcoming features including frequency sweeps, VSWR bandwidth optimisation, multi-model comparisons, and more advanced optimisation targets.
A key goal here is to have a single function for a given purpose, that you can use with no arguments if defaults are fine, but refine many features with optional arguments. Most if not all functions now operate directly on the model dataset, so there's no need to extract and remember parameters to pass to plotting routines etc.
Minor improvements:
- Added wire thickness to wire frame viewer - can be turned off / modified with optional arguments n_strands and alpha.
- Added wire_diameter_{units} as optional argument to the thin_sheet component. Wire diameter isn't critical for the dielectric sheet model and is set to a default value, but users might want to set this for a conducting wire mesh.
- Added optional taper_factor to helix (multiply radius by factor linearly applied as z increases from 0 to helix length)
- Deleted TO_DO and captured in GitHub issues
Objectives
- moving towards allowing several concurrent models in the same file
- preparing for detailed comparison of results, extraction of scattered fields from objects, delta dB plots etc
- moving towards adding a frequency sweep feature and add VSWR bandwidth as an optimisation target
- moving towards allowing gain parameters computed over a range of angles as optimiser targets (e.g. max vertical gain, min gain in a specified direction, front to back ratio)
- simplifying and automating gain pattern resolution and range settings
Key updates are to model 'global parameter' setting and plotting / data analysis functions. (see auto-generated docs and change history for more detail)
V3.0.0
Version 3 makes some changes to various functions to enable:
- moving towards allowing several concurrent models in the same file
- preparing for detailed comparison of results, extraction of scattered fields from objects, delta dB plots etc
- moving towards adding a frequency sweep feature and add VSWR bandwidth as an optimisation target
- moving towards allowing gain parameters computed over a range of angles as optimiser targets (e.g. max vertical gain, min gain in a spefified direction, front to back ratio)
- simplifying and automating gain pattern resolution and range settings
The detailed changes are listed below.
Gain point and Angular range and resolution functions
- set_gain_point(azimuth, elevation),
- set_gain_hemisphere_1deg(),
- set_gain_sphere_1deg(),
- set_gain_az_arc(azimuth_start, azimuth_stop, nPoints, elevation)
These are now all replaced by:
- set_gain_point(azimuth_deg, elevation_deg)
- set_angular_resolution(az_step_deg, el_step_deg)
The last function works intelligently with ground specification to determine whether a full sphere or half sphere is requested.
start_geometry function
No longer needed
Load placement functions
- place_parallel_RLC_load(......) and
- place_series_RLC_load(......)
are replaced by
- place_RLC_load(...... load_type = 'series'|'parallel', ............)
Simple model results parameters
- h_gain(),
- v_gain(),
- tot_gain(),
- vswr(Z0 = 50)
are replaced by
- get_gains_at_gain_point(model) and
- vswr(model, Z0 = 50)
Results plotting functions
- plot_gain(pattern_data, elevation_deg, component, polar=True)
is replaced by
-
plot_pattern_gains(model)
which is intended as a flexible plot which can overlay several field components -
read_radiation_pattern() is no longer needed as a user function
Wire Frame viewer functions
- show_wires_from_file(file_path, ex_tag, color='blue', title = "3D Viewer")
is replaced by
- show_wires_from_file(model)
which avoids the need to pass ex_tag and get details of load tag numbers from the model
Thin Sheet Model
The positional argument 'sigma' is removed. If used to create a conducting sheet, the conductivity is either perfect or as specied in the global 'set_wire_conductivity(sigma)' function. This model still requires validation for the production of a thin dielectric sheet.
Clarify user API and simplify import
- non-user functions identified with _name
- docu-lite set to ignore _name when producing user-facing docs
- import statements simplified to "from necbol import *"
Clearer identification of user API
- non-user functions identified with _name
- docu-lite set to ignore _name when producing user-facing docs
- import statements simplified
Upgrade wire connection code to handle grids cleanly
Changes forced by 'stretching test case' of building a model of a car passenger cell with a handheld transmitter inside. This requires meshed grids to connect cleanly, which requires 0,1,2,3 or 4 edges to be left 'open' and requires changes to the wire connection decision functions:
Revised sheet grid model to
thin_sheet(self, model, sigma, epsillon_r, force_odd = True, close_start = True, close_end = True, close_bottom = True, close_top = True, enforce_exact_pitch = True, **dimensions)
where:
- force_odd forces an odd number of wires, ensuring one central z wire and one central y wire cross at x=0, to make attaching other objects easier
- the four 'close_' parameters determine whether or not the edges are 'sealed' with a final wire (if True) or not (if False) so that the grid can be joined to other grids without wires overlapping:
- close_end = True completes the grid with a final end z wire at y = length/2
- close_start = True starts the grid with a z wire at y = -length/2
- close_top = True completes the grid with a y wire at z = height/2
- close_bottom = True starts the grid with a y wire at z = -height/2
- enforce_exact_pitch: if True, length and height are adjusted to fit an integer number of grid cells of the specified pitch. If False, length and height remain as specified and the grid pitch in Y and Z is adjusted to fit the number of grid cells calculated from the grid pitch and force_odd value. Behaviour prior to V2.0.3 was enforce_exact_pitch.
"point_should_connect_to_wire" now also checks if wire to be connected is near a segment boundary, and preserves the wire (doesn't split it) if true
V2.0.2 Revised grid model, add example, revise plotting
Revised sheet grid model to
thin_sheet(self, model, sigma, epsillon_r, force_odd = True, close_end = True, **dimensions)
where
force_odd forces an odd number of wires, ensuring one central z wire and one central y wire cross at x=0, to make attaching other objects easier
close_end creates a final end z wire - use close_end=False to allow copying and joining meshes together without wires overlapping
model now has height symmetric around zero (as was the case for width)
Created example of dipole with capacity end points for loading, using the grid model
Updated plotting functions a little (gain range)
V2.0.1 Add azimuth pattern plotting + fixes to sheet grid component
Add azimuth pattern plotting
Fix .nec file write format issue and nSegs issue in writing sheet model grid
Create example of dipole with nearby sheet
Allow model to be updated after nec_write & nec_run, to allow easier A/B comparisons (see dipole with sheet example)