Release notes

From CUDOS
Jump to: navigation, search

See also New release notes


 

Latest news:

- elementary equation parser now implemented!

- improved c_infinity_v mode

- perturbation techniques and geometry tracking

- improved accuracy

- improved arrow representations of transverse fields, flicker-free animations

- high quality EPS format output in winfield


Latest changes:

fibre.exe 19/06/08 10:41  (v2.00.03.18)

winfield.exe 3/05/07 16:13:  (v2.00.03.15)

bfld.exe   3/05/07 16:13 (v2.00.01.12)

other 02/06/06 17:39



fibre

fibre 2.0.3.21 (10:41 19/06/08)

I fixed a bug which was leading to discontinuities of E_theta and H_theta for c_inf_v structures (due to a lack of normalization). I’m not entirely sure whether this bug also had impilaction for non c_inf_v structures (probably not). All versions since 2.0.3.14 could have been affected. I also improved  mode calculation for single coated inclusions, allowing to get fields inside the coating as well. However the matrices used for this computation are ill formulated (basically resulting from multiplying 0 by infinity) so that field continuity is far from perfect. The accuracy of neff is not in question, but modal fields for this case may be discontinuous (one single coated inclusion). There's clear room for improvement here.

fibre 2.0.3.20

Bug leading to access errors when loading two structures without loading bcf files fixed.

 

fibre 2.0.3.19

I fixed a bug in normalizing c vectors when using c representation. I haven’t thoroughly tested the bug fix though, especially for non c-inf-v cases!  (See version 2.0.3.21)

fibre 2.0.3.18 (18:34 22/10/2007)

I added a basic (yet very useful!) equation parser: for most parameters taking a numerical value, these can now be defined using simple formulas,
incorporating numeric constants or internal variables (see list below). Name of user defined materials can be used and return
the value of the refractive index at the currently defined lambda (ie lambda as defined at the point of
assignment using the equation in the parameter file). Constants can be integer, real or complex, all will be converted to complex numbers.
Operations allowed are +, -, *, / and exponentiation ^. Operations must be between 2 arguments, for more arguments
square brackets must be used. Each bracket must contain one operation between two elements (no more no less).
Examples that Work (assuming materials called Ag, ncore and nclad are defined)
n_width=[1.45+1.46]-0.0001
n_eff_0=Ag-0.1
upper right n_eff corner=Ag-(0.0,0.00001)
start_lambda=[[2*3.14159265358]/2.405]*[[[ncore^2]-[nclad^2]]^0.5]
Examples that don't work:
n_width=1.45+1.46-0.0001 ! operation of three elements, not delimited by brackets
start_lambda=[[2*3.14159265358]/2.405]*[[ncore^2-nclad^2]^0.5] ! the bracket with a difference of two squares contains 3 operations, not one.
 

Examples where this is particularly useful is running script to find modes at different wavelengths when material dispersion is included, or defining starting wavelengths for ARROW fibres.


Added two keywords for user defined output:
- user output file=filename defines the file to which user output will be written
- write=expression to write will write the expression. It will try to evaluate expression using the formula parser,
if it cannot be parsed it will just write the text. To avoid evaluation,  add a percent sign right after the =, eg
write=%n_eff_0 will write %n_eff_0. Given the limitations of the equation parser, write is quite useful to check that the equation parser did the right thing!


Internal variables are as defined in main.f90 or :
lambda, n_eff_0, n_width, num_n_points, num_ni_points , start_mode, stop_mode, det_mode_threshold
eigenvalue_threshold, condition_threshold, imag_precision_threshold, real_precision_threshold, lower_imag_threshold
upper_imag_threshold, lower_real_threshold, upper_real_threshold, minima_threshold, number_of_points, number_of_points_between_logs
start_width, start_lambda, stop_lambda, mode_class_number, mode_ordinal_number, order, cladding_order, cladding index
matrix_index, jacket_index, cylinder_index, cylinder_radius, pitch, Number of rings (Nr), cladding_radius
jacket_radius, missing_rings(MNr), central cylinder radius, central cylinder refractive index, start diameter
stop diameter, start pitch, stop pitch, central cylinder order, num_n_points_2, num_ni_points_2, ell_sub
ell_xacc, ell_mb, ell_steps, ell_hppc, ell_nextra, accuracy goal, theta, phi, psi
integral resolution, acceptable_accuracy
 

fibre 2.0.3.17 (11:40 18/05/07)

fixed bug in c_inf_v mode-> modes are scanned from start_mode to stop_mode, no longer from 0 to order.
This is for compatibility with dispersion calculation. start_mode and stop_mode are set automatically by loading bcf file; when set manually start_mode can now be 0.
This may cause errors when used with symmetries other than c_inf_v. The automatically generated file name radix for 'make dispersion parameter file'
now contains the whole initial file name radix. corrected missing lambda^2 in numerator of sellmeier expansion in report_material (which writes the equation in results file.
 

fibre 2.0.3.16:

decoupled the equations of different orders for the c_infinity_v case (and also removed useless renormalization in that case)
now modes from m=0 to order are scanned and mode solved separately for all these. Computationally a bit stupid given the implementation, but *much* more reliable.
 

fibre 2.0.3.15:

added the renormalization to the c_inf_v case, but doesn't seem to do much at all,
maybe a very slight improvement in the wijngaard test.
 

fibre 2.0.3.14 (20:00 01/04/2007):

- added perturbation method (J. M. Fini, Opt. Express), for tracking with changing geometry and changing wavelength (symmetry and number of cylinders must be the same between initial
and final structure; i haven't implemented it for c_infty_v symmetry).

- Additional keywords:

track with perturbation: follows the mode (as defined by load bcf file) from start_lambda to stop_lambda and from the initial structure (as defined by load bcf file) to the perturbed structure

load perturbed structure: loads a perturbed structure. The perturbed structure should have same number of cylinders as the unperturbed one, same symmetries, cylinders numbered the same way, not include material dispersion. Each cylinder between the perturbed and unperturbed structure should have same order parameter, same representation and have same shape (coated/elliptic/circular).

step scaling= frequency|wavelength . makes steps even in frequency or in wavelength (default is wavelength) when using track with perturbation keyword. This doesn't affect what happesn for the dispersion keyword.

 

 

- gave access to a few more values of keywords in parameter files:  accuracy_goal, acceptable_accuracy,n_eff_0,n_width

- relaxed the maximum value for n_width to (200,200), which comes useful for plasmonic modes

- parameters are not checked thoroughly by the software and some random behaviour can be expected if parameters are not the way they should be

- added a keyword "acceptable accuracy": if accuracy goal us not reached and the modified Broyden algorythm fails, but acceptable accuracy has been reached then eigenvalues will be computed. If hits result in an acceptable mode (eg eigenvalue below eigenvalue threshold) then the mode will be accepted as such. Otherwise, the zooming algorithm is started.

- fixed bug stopping from finding modes with neff>n_max (eg surface plasmon modes): this may lead to strange behaviour near n_max, i'll have to look into that.

- fixed bug in dealing with NaNs (use to generate random detmap files and no error message)

- implemented normalization as suggested by Chris Poulton. Accuracy of the fields (bcf/fbb files) is dramatically improved, modes can be found iwth higher order values, and with Wijngaard test
down to less than 1e-9 (Thanks, Chris!)

fibre 2.0.3.13 (11:20 8/09/06):

Fixed a bug resulting in wrong 'a' coefficients around ellipses, which made wijngaard tests impossible (fields (when local expansions was unchecked) and neff values were already correct with that bug though)

fibre 2.0.3.12 (17:41 6/09/06):

fixed a couple of major bugs occurring for elliptic inclusions - These bugs occurred during the merger of the major version of the cudos mof utilities and the version of them which had been adapted specifically for ellipses - all results published using the software are correct, since fortunately enough since the occurrence of the bug which prompted its correction no one has used the bugged version of the software. Further the rotation of the scattering matrices for secondary elliptic inclusions was erroneous as well - this at least must have been a recent bug (post Sam's work) since errors generated were very obvious.
 

fibre 2.0.3.11 (06/06/06 12:26):

fixed a bug causing access violation error when no minimum was found in map. fixed a bug setting Im(neff)=0 in 1d mbroyden when the region of acceptable values did not include Im(neff)=0.

fibre 2.0.3.10:

changed the way illegal values for bessel functions are treated: instead of aborting the program, NaN are generated, and a warning is issued. This avoids interruption of long batch processes, but may cause rare unpredictable behaviour.

fibre 2.0.3.9: fixed a bug causing access error for some cladding materials

fibre 2.0.3.8: (hopefully) fixed the NaN problem randomly occuring in C representation

fibre 2.0.3.7: fixed a memory leak for scattering simulations (diffract.f90)

fibre 2.0.3.6: added 3 keywords:

write bcf files=.true.|.false. (default .true.)
write fbb files=.true.|.false. (default .true.)
write ser files=.true.|.false. (default .true.)

enables/disables logging of bcf/fbb/ser files.

I also increased the size of string coding the number for modes  (wavelengths, geometries, diffraction angle points) to 6 digits. Previous limits to the number of points (eg for dispersion) remain.

fibre.exe v. 2.0.3.5

identified and Improved incompatibility problem with batchfield.

fibre.exe v. 2.0.3.4

Fixed a bug causing write error when using silica (in savepos, due to the structure of the coating variable).
Fixed bug in zrrefine causing abort when region defined negatively.
Changed formulation for w fibres, making it more stable; now works (almost) as well with b and c formulations;
c formulation seems to be best for w fibres now.


fibre v.2.0.3.3:

Changed position of find_max_order in load_bcf_file routine, since it was called before pos was defined.


fibre 2.0.3.2:

changed sellmeier equation for n and epsilon as a function of lambda :=sum_n B_n*\lambda^2/(\lambda^2-lambda_n^2)
 

fibre.exe v.2.0.3.1:

 added coated cylinder/shell core inclusion geometry capabilities.
File format (pos, bcf, fbb) has changed.
No additional keywords
fixed a bug leading in lack of information when dispersion failed
fixed a bug causing erroneous fields in cladding (esp) for diffraction calculations


fibre.exe v.2.0.2.3:

Added basic capabilities for randomizing the structure:
New keywords:

    -randomize position=standard_deviation (absolute)

    -randomize size=standard_deviation (relative)

The randomization is done within the current class of symmetry.
Fixed a problem in newton.f90 : zooming algorithm kept refining even though region was smaller than accuracy goal
 

Fibre.exe 2.0.2.2:

fixed the definition of the scattering cross section. It is now accurate and absolute.
 

fibre.exe 2.0.2.1:

fixed minor outputs issues, added number of
points between log function to angle list
 

fibre.exe 2.0.1.8:

fixed:
- num_ni_points2.eq.0 or aimag(neff_t(1)).eq 0 condition for second wavelength point in dispersion with
no initial wavelength was wrong (resulting in division by zero for bounds of Broyden algorithm)
- The fa array wasn't set to zero for single cylinder with no jacket/no cladding in compute_mode.f90, leading to erroneous field representation when using "local expansions" in winfield.

known bugs in this version:

- fa coefficients and other matrix/cladding/jacket FB coefficients are wrong for a single cylinder.
- possibility of endless loop in newtown: check n1_s and n2_s updates.


fibre.exe  v.2.0.1.7


- fixed a bug in the modified broyden algorithm: when decreasing the step size,
it wasn't checked whether the step was smaller than accuracy_goal, so that a lot of unrequired determinants
were computed before the algorithm realized it wouldn't converge. Further this bug interfered with
the readjustment of the eigenvalue threshold (eigenvalues were not computed after the broyden algorithm
failed, even when the two previous steps were less than accuracy_goal appart).
However, in fixing it I might have introduced a possibility for an endless loop
(to be confirmed) in rare occasions.
 

fibre.exe (21/09/05 12:19, v.2.00.02.00)

I added the possibility of computing scattering patterns and associated quantities (cross sections etc.). At the moment only scattering from a single cylinder is possible. The bcf and fbb formats have changed; I haven't updated batchfield yet so that bcf and fbb files produced by the new fibre can not be processed by batchfield. 

At the moment the software can calculate the field scattered from a single, uncoated cylinder, and no symmetries can be taken into account (most often there are none anyway), with the incident field being a plane wave (or approximation thereof, which resembles more a Gaussian beam than a plane wave). The software also calculates the scattering cross section and the quantity \rho_fb defined by White et al in Opt. Lett. 27 (22) pp 1977-1979 Eq. (2). The software can process a list of different incident angles and wavelengths in one go.

New keywords are:

load angle file=filename : loads a file containing the list of wavelength and incident angles to be used. The format of the file should be 4 space separated columns containing lambda, theta, phi, delta with lambda the wavelength, theta, phi and delta the incidence and polarization angles as defined in Fig. 1.

Fig 1: Incident angle convention (Fig from Centeno et al JOSA A vol 17, pp. 320-327)

If a single angle and wavelength are of interest, the parameters can also be defined with the following keywords:

theta=angle

phi=angle

delta=angle

and the wavelength being defined by the usual 'lambda' keyword. Note that angles are to be real.

integral resolution=numserpoints defines the number of points to be used in the integral for \rho_fb, as well as the number of points on which the differential cross section is to be computed. This keyword is mandatory before the simulation can be used. A synonym is numserpoints.

The simulation is started by the keyword diffract.

The software writes a bcf/fbb file per line of the angle file, as well as a *_ser.txt file containing the angular differential cross section. The unique  *_rhofb.txt file contains a list of wavelength (col 2) theta, phi, delta (col 3-5) rho_fb as defined by White et al (col 6) and scattering cross sections for E and H - in most papers the corss-section is the sum of both. Cross sections are in arbitrary (yet self consistent) units.

 An example (the one from White et al's paper) can be found in the diffract sample folder.

fibre.exe (21/07/05 14:40, v.2.00.01.08)

- I fixed a major bug causing unnecessary computations of the determinant in the modified Broyden algorithm and stopping eigenvalue threshold to be reset automatically - which in turn caused too many calls of the zooming algorithm. This bug was introduced in v2.00.01.02 when I added the accuracy goal keyword. Having corrected this bug, I also discovered that in very rare cases the code could enter an infinite loop (rather the loop will stop after a while, but the code will stop and no mode will be found). Let me know if you something like that.

- Fixed a a couple of minor bugs: First, when computing a dispersion curve with no initial wavelengths points, and the effective indices for the first two computed wavelength steps have zero imaginary part, the code would fail to find a mode for the third wavelength step. Second, a bug resulting in erroneous Fourier-Bessel coefficients in bcf files for structures with a single cylinder using no symmetry rather than C infinity v symmetries. Both bugs are now fixed, but doing so I discovered that Fourier Bessel coefficients for structures with a single cylinder and a cladding and/or jacket are erroneous in the matrix, cladding and jacket regions.

fibre.exe v.2.00.01.07: no release

fibre.exe (09/06/05 18:07, v.2.00.01.06)

- I fixed a bug cuasing weird behaviour when n_eff is close to one of the refractive index values of the structure.

- I added the possibility of defining user defined materials using a simple polynomial expansion. See also winfield

fibre.exe (05/04/05 17:09, v.2.00.01.05)

- Full implementation of C∞v symmetry when computing modes of a single cylinder surrounded or not by a cladding and/or jacket. Modes of such a structure are also classified into TE, TM, HE and EH modes, according to E. Snitzer (J. Opt. Soc. Am. 51 pp.491-498, 1961) (this is accurate for a single cylinder and for core modes of structures with a cladding/jacket, but not for cladding modes, where this classification doesn't apply in the same way). Details below.

- Added keywords to generate parameter files and gnuplot files for automating the computation of dispersion curves for all modes, and plot them with gnuplot. The new keywords are make dispersion parameter file and make gnuplot file, discussed below.

- Further, I corrected a few details concerning the implementation of accuracy goal. Some problems arose because of inconsistencies between how small the accuracy goal could be compared to real_precision_threshold and the way numerical derivatives are computed. I corrected that, although there still seems to be a few inconsistencies between mode searches on the real axis and in the complex plane.

For fibres with C∞v  symmetry:

In structure files, the number defining the symmetry properties (3rd line) must be set to 10000.
The cylinder's symcat parameter (the number just after the permittivity) must be set to 10.
Winfield version 2.00.01.03 and above fully support C∞v  symmetries, so it's probably easier to use the structure editor to define your structure files.

The order parameter for the cylinder and the cladding/jacket (gorder parameter) should have the same value, and determine the maximum first subscript in the standard mode classification (the m in HEmn) for which modes will be sought.

In the parameter file, start mode and stop mode should be set to 1.
accuracy goal should be set to a small value, such as 1e-13, down to 3e-14.
eigenvalue threshold should be set to large values (up to 0.999).

The mode table file has a slightly different format when using  C∞v: First column indicates the type of mode (EH/HE/TE/TM), second column indicates the first subscript in the standard mode classification (the m in HEmn), the third column indicates the number of the mode (which corresponds to the order it has been found by using the software, but does by no means correspond to the second subscript n). The subsequent columns are unchanged.

HE and EH modes are degenerate, they will appear twice in the mode table file. However, only one bcf/fbb file will be written.

Since symmetry properties are now used, the degeneracy problem discussed for version 2.00.01.03 can now only occur for accidental degeneracy.  Note that the mode equation is not separated for different m, so accidental degeneracy between modes with different m can happen.

- The new keywords:

  • make dispersion parameter file=filename is to be used when searching for modes (search modes keyword). It creates a file called filename which can be used (with minor manual changes requried) as a parameter file to compute the dispersion of all modes found. For each mode found, it writes three lines into the file, such as

load bcf file=sif_L0000CivM001.bcf
file name radix=CivM001
load=MACRO

where the first line loads the bcf file associated with the mode found, the second line defines the file name radix to be used for the files output during the dispersion calculations (based on the extension in the bcf file; in passing note that when using C∞v, the suffix Civ is used instead of the mode class number), and the third line loads the macro file that will perform the dispersion calculation. To compute the dispersion curves of all the modes you found with search modes, just copy paste the content of the file created with make dispersion parameter file, search and replace MACRO by the name of the macro file which contains the instuctions to compute dispersion curves, and run fibre with that parameter file. You can also change the file name radix if you prefer other file names.

  • make gnuplot file=filename is to be used when computing a series of dispersion curves, such as eg with a parameter file created using make dispersion parameter file. It creates a file containing instructions that can be used by gnuplot to plot all dispersion curves in one plot; for each dispersion curve computed, it writes a line looking like:

    replot 'CivM001_d_DISP_C01M000_disp.dat' with lines

To be able to use that file with gnupot, you'll just have to change the first "replot" into a "plot", and load the file with gnuplot.

An example for the use of those two keywords, and of C∞v  symmetry, is in the folder "automated dispersion and c infinity v example". The folder contains the structure file for the structure of the step index fibre used in Snyder and Love (Fig. 12-4), and a parameter file to compute all modes. The subfolder "dispersion" contains the bcf files as produced by fibre using the previous parameter file, the macro file "doit.txt", and a parameter file obtained by copy-pasting the file produced by the make dispersion parameter file keyword.

A further minor change is that the file name radix is no longer equivalent to the structure file name. If no file name radix is defined in the parameter file (file name radix keyword), the name of the structure file will be used, otherwise file names will be based on the defined file name radix.

Further, I changed the way the monitor file is 'flushed', ie how often the content is copied from the internal buffer to the actual file: The monitor file is no longer updated in 'real-time'. Also, error messages of similar nature (eg "broyden algorithm insufficient while computing dispersion curve"  at different wavelengths) are now written only once (per dispersion curve) in the error file, and if verbose is set to false the number of lines of the determinant map computed while in the zooming algorithm are no longer written to the verbose file (the repeating 0/4, 1/4 etc.).  This leads to dramatic improvement in the speed of simulations for easy structures (such as step index fibres), for which most of the time was spent writing to files.

fibre.exe (21/03/05 19:12, v.2.00.01.04)

- compared to v.2.00.01.03 released earlier today: just one major bug fix which made almost any dispersion computation impossible. Also note that the start_width parameter is now updated automatically during a dispersion simulation, as soon as three wavelengths and associated values of the effective index are available. A summary of how start_width is used:

                - When computing a dispersion curve from one single data point (one bcf file loaded, or just one initial n_eff region given): start_width determines the region of effective index in which the second point of the dispersion curve will be computed: the corners n1 and n2 of the region are given by

n1,2=n_eff(given wavelength)+-n_width/2

with

n_width=Re(start_width) + i*Im(start_width)*Im(n_eff_0).

In other words the real part and the imaginary part of start_width are the absolute real width and relative imaginary width of the region centered on the first point.

Once the second point has been computed, start_width is adjusted according to the slope of the dispersion curve:

If the mode has real n_eff then

start_width=200*|Re(n_eff(second wavelength)-n_eff(first wavelength)|

otherwise

start_width=800*|Re(n_eff(second wavelength)-n_eff_t(first wavelength)| + 1600*i*  |Im(n_eff(second wavelength)-n_eff(first wavelength))/Im(n_eff(first wavelength))| .

The numerical factors are to compensate for the fact that the second wavelength is much closer to the first wavelength than the third. (lambda_2=lambda_1+(lambda_2-lambda_1)/100).

This value of start_width is kept for the third wavelength, and then is adjusted so that the two corners of the region in which to search for a mode are given by

    - the value of n_eff for the previous point,

    - the extrapolated value of n_eff for the next point.

This gives a good bracketing of the expected value of n_eff for the current point.

                - When two ore more points are given, then start_width is ignored, and the corners of the region in which to search for a mode are given by

    - the value of n_eff for the previous point,

    - the extrapolated value of n_eff for the next point.

 

- Irrelevant note, just for the record: Among other changes I made recently there's notably a better estimate of the numerical derivative in the root finding algorithm, which should lead to faster convergence. In previous (pre 2.00.01.02) versions, the derivative also somewhat depended on the value of lower_imag_threshold. This is no longer the case.

fibre.exe (21/03/05 14:23, v.2.00.01.03)

- Fixed a bug sometimes causing results inconsistent with the accuracy goal set in parameter files. Also one important note about the accuracy goal: when no symmetries are used and the mode is degenerate (or almost degenerate), roots are unlikely to be found if the accuracy goal is set to values lower than 1e-7. This is because in the case of a degenerate mode the local minimum of the magnitude of the determinant is a parabolic one, so that abs(det(M(n_eff))) ~ (n_eff-n_eff_0)^2, and a shift of 1e-7 is n_eff will result in a change of the function's value lower than machine precision. This notably applies when searching for modes of a single cylindre (eg. step index fibre), where no symmetries can be used in the current code's implementation. Setting a too small accuracy goal will cause the code to try to refine the mode, sometimes it will work, sometimes it will fail (and say so), but in any case it will be rather lengthy.

- I added a keyword load which loads a file and executes the commands in it before continuing to execute the rest of the parameter file. This basically enables to use macros in parameter files. Say for example you have computed several modes at one wavelength, and now want the dispersion cruves for all those modes. You can put all the relevant parameters and action keywords for computing the dispersion in a file (eg macro.txt), and in the parameter file just load the bcf file of each mode followed by a call to the macro. When doing so be careful with default filenames, since the filename of dispersion files are based on the structure file, not on the mode file. You'll probably find the keyword 'file name radix' useful. The keyword to exit a macro and return to the previous file (original parameter file or another macro) is exit. There can be up to 40 imbrications of macro calls. Recursively calling a macro will most likely not work.

- I have started implementing the possibility to assign values to keywords from other keywords (soon you'll also be able to define variables, and to do elementary maths with them). At the moment it's very limited and the only thing you can do is assign the starting wavelength value for dispersion computations using the current wavelength value:

start lambda=lambda

This is actually useful when computing several dispersion curves on an arbitrary range when you have modes computed at different wavelengths: loading the bcf sets lambda to the wavelength at which the bcf file was computed, so by using the above statement in a macro file you won't have to worry about setting start_wavelength to the appropriate value for each bcf file.

A minor change being a consequence of the possibility of having macros: execution of the program is no longer stopped when the program fails to find a mode at some stage. Execution is just continued at the next line in the parameter or macro file, and an error message is written to error.txt.

I've put an example illustrating the above points in S:\most recent MOF Utils files\macro sample\ .

fibre.exe (09/03/05 11:12, v.2.00.01.02)

- Fixed a bug causing the software to abort just when a mode was found, when not using symmetries (in particular for a single inclusion).

- Updated the root finding algorithm, introducing a new keyword (accuracy goal) which makes life much easier when eigenvalue thresholds are unknown or variable, improves accuracy, and makes things slightly faster. The precision indicated in the result file does now correspond to the actual value of the precision reached (it appears in previous versions this was not always the case). See below.

- I added a monitoring function, using the monitor keyword. This writes information while refining roots in a less readable format than the verbose option, but in a format which can be readily used by plotting software. Helps to see what's going on in lengthy simulations. See below.

accuracy goal takes real values; recommended values are 1d-14 to 1d-6. The default value is 1d-6. The root finding algorithm will continue to refine the value of n_eff until its value is known with a precision better than accuracy goal; only then will it start to check whether eigen-values are small  enough, and continue to refine the root if necessary.

accuracy goal can be used in two ways:

    1. If accuracy goal is set to a small value (say, below 1d-12), the value of eigen_value_threshold basically becomes irrelevant, and can be set to a value as large as 1d-3; the algorithm will then consider that a root is found if its precision is good enough. Since it appears from observations in the last few months that the exact value of the eigenvalue (or determinant) at the root is in fact irrelevant, this way of finding roots should be preferred, although in some pathological cases it could in principle lead to artifact roots (I have yet to see one though). I recommend you set accuracy goal to 1d-13 to 1d-15 depending on the complexity of your problem (a very small value can lead to modes being skipped if the structure is complex), and let eigen_value_threshold be 1d-4 or so. You should also set real_precision_threshold to a value smaller than accuracy goal, but if you don't the software should do it for you.

    2. If accuracy goal is set to a larger value, but eigen_value_threshold is small (values as usual), the only thing accuracy goal does is to avoid to compute eigenvalues before a minimum accuracy is reached. This saves time, and is consistent with the way modes were found before this version.

Using the first method, I have observed that Wijngaard tests can improve by orders of magnitude compared to  previous versions; furthermore it eliminates the problem of knowing what kind of eigenvalue is acceptable. However too small values of accuracy goal can slow down simulations.  

- monitor takes a character string as argument, which is the name of the file information is going to be written into. The file consists of a sequence of lines containing the following information:

current operation, Re(neff1), Im(neff1), Abs(det1), Re(nb1), Im(nb1), Re(nb2), Im(nb2), abs(n2-n1)

each line corresponds to one iteration.

- current operation is either 1 or 2, depending on whether the current refinement is part of the outer (1) or inner (2) loop of the modified Broyden/zooming algorithm. I suggest you ignore that information.

- neff1 is the current estimate of n_eff

- nb1 and nb2 are the bounds of the region currently searched. These are given by the determinant map at first, and can then be modified if the zooming algorithm is used. A jump in nb1 or nb2 means either that a new starting point from the determinant is being used (new mode) or that the zooming algorithm has been used and has changed the region to be searched entirely; this can indicate that a mode has been missed and that the algorithm jumped to another mode, as it can just indicate that the first estimate was poor. Oscillating bounds indicate the zooming algorithm is unlikely to converge (whether there is a root or not remains unsure).

- n2 and n1 are either the last bounds (just after the zooming algorithm) or the last two estimates (after a Broyden algorithm). There difference gives the current precision in neff.

 

fibre.exe (08/03/05 12:10, v.2.00.01.01)

- Reintroduced the elliptical hole capabilities, which use Sam Campbell's extension to the code (based on S. Campbell et al "Differential multipole method for microstructured optical fibers, " J. Opt. Soc. Am. B 21 1919-1928).

- Output format of bcf and fbb files has changed. Now the a coefficients of the field expansions are written to the files as well. This enables further Wijngaard tests (which are essential for elliptical inclusions), and faster display with Winfield. Note that batchfield doesn't support the new file format at the moment.

The software can now compute modes of mofs with elliptic holes, defined by their major and minor radii (parameters radius and radius_b respectively) as well as the angle of the major axis  (ellipse_theta). The format of the parameter file does not change, but the relevant parameters in the list of inclusions are now enabled as soon as the shape parameter of that line is set to 1 (rather than 0, which indicates the inclusion is of circular cross-section). See position file format.  The latest version of winfield can edit structure files with elliptical inclusions. All types of symmetry should work with elliptical holes. The structure isn't checked thoroughly though, so make sure you have checked the structure with winfield before running lenghty simulations (especially angles of the ellipses' angles for ellipses on symmetry axes)... 

Additional parameters controlling the subroutine for computing the scattering matrix of non-circular inclusions are:

  • ell_nextra (integer): Defines how many extra multipoles are calculated and discarded
    when calculating the requested number of multipoles n. This is done because the maximum numerical error occurs in the highest multipoles. Default value: 0.
  • ell_hppc (integer): half the number of integration points used per theta cylce when calculating the Fourier coefficients of the components of the normal. Default value: 60.
  • ell_xacc (real): the accuracy to which the discontinuities will be found in the refractive index squared, which are used to calculate the Fourier steps - the number of integration steps Default value: 1d-5.
  • ell_steps (integer): The number of integration steps. Default value: 50.
  • ell_sub (real): The ratio m/r, where m is the number of subdivisions at radius r. This ratio is used by a subroutine finding the discontinuities at different radii, which keeps the ratio between the number of subdivision points a particular radius to the radius equal to this ratio. Default value: 50d0. As long as inclusions are ellipses and not user defined shapes (which are not yet implemented) this parameter doesn't need to be changed.
  • ell_mb (integer): the maximum number of discontinuities expected. This is only used to initialise arrays, and can be set to any number larger then the maximum number expected. Default value: 10. As long as inclusions are ellipses and not user defined shapes (which are not yet implemented) this parameter doesn't need to be changed.

The above description of the parameters are directly taken from Sam's comments in the code. For more information please refer to the above mentioned JOSA B and/or to Sam Campbell's honours thesis.
 

fibre.exe (3/12/04 12:15, v2.00.00.05)

- reintroduced the documented 'erase n_eff table' and 'delete n_eff table' keywords which had mysteriously disappeared at some stage between the public version and the internal version.

- added a 'load pitch list' keyword, which enables to track a mode with changing pitch, diameter, cladding inner and outer parameters, with data for these parameters being in a file (useful for calculating the local modes in a taper). The format of the pitch list file is

    pitch    diameter    cladding inner radius    cladding outer radius

A bcf file must be loaded to define the initial mode, with structural parameters close to the ones of the first line of the pitch list file. Some structural parameters must also be defined separately in the parameter file (MNr, Nr, order, refractive indices). This function is still experimental, and at the moment only works without cladding or jacket. The keyword to run the simulation is 'track with geometry'. If you want to use this function, you should probably ask me first.
 

- also I noted, but haven't corrected yet, a bug causing erroneous structures and fields when using 'convert to fini' with a central cylinder, and another one causing erroneous structures when defining a structure with NMr=0 (in both cases there are several additional virtual cylinders at the origin).

fibre.exe (7/10/04 20:12, v2.00.00.04)

- Fixed a bug which made dispersion computation when using structures with different order parameters virtually impossible.

fibre.exe (13/09/04 22:26, v2.00.00.03)

- fixed bug resulting in inconsistent version numbers in output files.

fibre.exe (03/09/04 15:56, v2.00.00.02)

- Added two keywords:

num_n_points_2 

and

num_ni_points_2,

 which are the same as num_n_points, num_ni_points but for the second wavelength step when computing dispersion curves starting from one point only. Default values are 50 and 4 (or 0 if start n_width=0 or Im(n_eff) of the first wavelength step is 0). If n_width=0 or Im(n_eff) of the first wavelength step is 0 and num_ni_points_2 is set to a non zero value, num_ni_points_2 is adjusted to 0. If computing more than one dispersion curve in a same parameter file, num_n_points_2 and num_ni_points_2 don't needed to be redefined for each dispersion curve, but if num_ni_points_2 is adjusted to zero it will stay at zero from one dispersion curve to the other unless it is redefined in the parameter file.

fibre.exe (no more distinction with fibre_ii.exe) 25/08/04 (12:54)

- New file format for bcf, fbb, and structure files (should be fully backwards compatible though). New bcf and structure files start with

new_version

followed, on the next line, by the version number. I'll try to define the version numbers in a consistent way from now on, starting from 2000001 (or v.2.00.00.01).

New position file format:

new_version
2000001
symmetry 
number of cylinders in irreducible sector
order !(for backwards compatibility, value ignored)
gorder
matrix epsilon
exterior epsilon
cladding inner radius, cladding outer radius
cladding epsilon
cylinder lines: r, theta, radius, epsilon, symcat, axis, material, shape, b_radius, ellipse_theta, order, representation

Except for the first two lines, the header is identical to the previous file format.

Regarding the cylinder defintions: the 6 first parameters are unchanged. Material (integer) is for future use. shape (integer), b_radius (real) and ellipse_theta (real) are for elliptical holes, these parameters are taken into account in the current version, set them to zero. Order (integer) and representation (integer) are described below. All parameters must be present on each line or the file won't be read. The old file format is still understood, but all structures defined and saved with the new version will be written using the new file format.

- The order parameter can now be defined for each cylinder individually. An additional keyword allows to define the order parameter for the central cylinder (if present) separately from other cylinders:

central cylinder order

which is used in the same way as the order or gorder keywords.

If you need more flexibility in defining different order parameters for different cylinders, you can either define the order parameter for each cylinder in the structure files by hand (it's now the 11th parameter on each line defining a cylinder), or use the updated structure editor of winfield.

Note that the suggest order keyword has not been updated, and will allocate the same order parameter to all inclusions.

This change is a major one, I had to update the entire structure of the software. As a consequences, lots of new bugs may have been introduced, please report them.

- The field representation for each cylinder can now be chosen (either internal (c coeffificients) or external (b coefficients) Fourier Bessel coefficients). This could prove useful for mofs having low and high index inclusions within the same structure. This is experimental at the moment, come and ask me if you're interested in using this alternate field representation. The field representation can be defined in the structure file (12th parameter on each line defining a cylinder, possible values are 0 [b representation, default] and 1 [c representation]). You can also define the field representation using Winfield's structure editor.

- Dispersion: When more than one mode is found for the second wavelength step, fibre now choses the one with n_eff closest to the previous one (in earlier versions, the mode with highest Re(n_eff) was arbitrarily chosen.)

- I tried to correct a bug I still haven't quite understood which caused the program to crash in undetermined circumstances (essentially when more than one small eigenvalue was found). It's better now, but I'm still working on that one.

fibre_ii.exe 06/08/04 16:25

I corrected a minor bug causing a file name error under certain circumstances when computing dispersion curves. Also it seems that yesterday's version didn't actually have the right compiler options, so that some inaccuracies in floating point operations could have occurred. 

 

fibre_ii.exe 05/08/04 17:09

 Major improvement: 3.5 x faster than previously for simulations concerning the fundamental mode, see below.

fibre_ii.exe is the same as below, but with:

 - consistency problems with the lahey compiled version fibre.exe should no longer exist, results are the same to +-1 last digit. From next week or so I will only use the intel compiler.

 - new symmetry classification according to JM Fini implemented. This enables to find the fundamental mode substantially quicker.

 To use Fini's symmetry classification, copy the finic6.txt file into your program files\cudos folder, and in your parameter file create/load your structure as usual, then use the keyword:

convert to fini 

this keyword converts the structure so that the irreducible sector is the one from Fini's classification, and loads the appropriate symmetry definitions.

Note that until further notice this works with C6v structures only.

Since the structure has been converted, you will need to save it with a file name different from the original file name, eg using

save structure=mystructure_fini.txt 

In Fini's classification there are 6 classes of symmetry:

1, degenerate with class 5
2, degenerate with class 4
3 non degenerate
4 degenerate with class 2 (eq. to class -2)
5 degenerate with class 1 (eq. to class -1)
6 non degenerate. (eq. to class 0)

For classes 1,2,4,5 Fibre will automatically find degenerate modes of the appropriate complementary symmetry class.

For the fundamental mode use

start mode=1 
stop mode=1

then run the simulation as usual. this is on average 3.5 times faster than using the McIsaac symmetry properties. Note that the resulting modal field distributions are different from the modes obtained when using McIsaac's classification, classes 3 and 4 in McIsaac are obtained through a superposition of classes 1 and 5 in Fini's classification.

Further, you'll need the latest release of winfield to be able to open the associated bcf/fbb files. Currently bfld can't deal with Fini's symmetry classification.

For modes other than the fundamental, Fini's classification can sometimes be slower than McIsaac's. This is the case for modes of class 1,2,7,8 in McIsaac's classification (so notably for the second and third mode).

For more information about Fini's symmetry classification, see J. Opt. Soc. Am. B. 21 (8), pp.1431-1436 (2004). (See: "fini Improved symmetry analysis of many-moded mof.pdf")

fibre.exe: 05/08/04 10:07

Corrects a bug which appeared in the previous version of fibre.exe: The bug caused an error when computing several dispersion curves in a same parameter file ("*** Error: bcf file for initializing dispersion refers to different structures.")

fibre_ii.exe: 30/07/04 09:54

This executable is the same as fibre.exe, but compiled with Intel Fortran compiler (as opposed to lahey). It is up to 10% faster, but may contain unknown compiler dependent bugs. I've tried it on a few examples and didn't find any bugs, but if you use it and find any suspicious behaviour, please let me know. The last two to three digits of numerical results (up to 5 last digits for the imaginary part of neff) may differ from results obtained through the Lahey compiled version, but this should be irrelevant.

fibre.exe: 29/07/04 19:37

I lifted the bugs on the limit on minima threshold, the overwriting of progress file and the problem with num_ni_points taking values between 1 and 3.


winfield:


winfield 2.0.3.15:

made winfield compatible with new cinfv mode, and fixed compatibility issue with precomputed fields with bfld
 

winfield 2.0.3.14:

corrected bug causing erroneous values of wijngaard tests for coated cylinders.

winfield 2.0.3.13 (31/10/2006 17:18)

I added various functionalities for the arrow representation:
- overlay of any component of the same field
- choice of arrow colours, including norm of the local transverse field, properly colourcoded
- skipping of points (arrow resolution can be different from background resolution)
- There still appears to be a small memory leak somewhere (memory usage seems to increase during animations, but not always ?!?)


winfield 2.0.3.12:

Fixed bug causing endless "out of range messages" when edit dialog opened with a cylinder lying outside the primary irreductible sector
- changed direction representation so that the arrows are now centered on the point where the fields were computed (rather than having an extremity there)
- fixed a bug cuasing multiple animation thread to be lounched
- improved drawing subroutins: faster and no more flickering, even for high res animations
- fixed local representation checkbox disabled bug
- added a frame per second slider in the representation options dialog
 

winfield 2.0.3.11 (31/08/06 13:20):

I added interpolation order (2 gives best results) and contour fill options for eps output, and removed a couple of minor bugs from eps output. Position files can now be converted to eps too.

winfield 2.0.3.10:

direct high quality eps output with adjustable resolution. Select save eps in the file menu and follow the prompts.  The calculated field is interpolated to obtain the required resolution.
The current colour scheme is used, cylinders are in white. (which is easy to edit, along with the line thickness, at the end of the generated postscript file).
 

winfield 2.0.3.9 (02/08/06 14:23):

removed opening bessel z values log file

winfield 2.0.3.8:

fixed a bfld compatibility bug which appeared in 2.0.3.6; fixed a bug causing wrong H_x and H_y (and H_r, H_theta) fields in the coatings since version 2.0.3.1

winfield 2.0.3.7:

 removed bugs from core/shell wijngaard test for all cylinders.

winfield 2.0.3.6:

 added wijngaard test at core/shell interface for coated cylinders.

winfield 2.0.3.4:

 fixed bcf opening problem for files from fibre v.>2.0.3.1

winfield 2.0.3.3:

changed sellmeier equation for n and epsilon as a function of lambda :=sum_n B_n*\lambda^2/(\lambda^2-lambda_n^2)

winfield 2.0.3.2:

 fixed direction representation (y was -y).

winfield v. 2.0.3.3:

changed sellmeier equation for n and epsilon as a function of lambda :=sum_n B_n*\lambda^2/(\lambda^2-lambda_n^2)
 

winfield v.2.0.3.4:

 fixed bcf opening problem for files from fibre v.>2.0.3.1

winfield 2.0.3.2:


fixed vector-direction representation (y was -y).

winfield 2.0.2.1

 Added scattered/incident only options in view menu.

 

winfield.exe 21/09/05 11:39 (v.2.00.02.00)

Added compatibility with new file format from fibre 2.00.02.00. Should be fully backwards compatible.

winfield.exe 09/06/05 18:43 (v.2.00.01.04)

Added compatibility with polynomial expansions for user defined materials of the type n=a0+a1*lambda+a2*lambda^2...

To use this feature (which requires fibre version 2.00.01.06 or greater), create a new material in the user defined material tab of the structure editor, and select n[lambda polynom] as the expansion type. Select the order of the polynom and type in the various coefficients a0..aN.   

winfield.exe 05/04/05 18:37 (v.2.00.01.03)

Added compatibility with C∞v  symmetry such as recognition of the type of mode (EH, HE, TE, TM), and more appropriate automatic settings for those file (eg. local expansion is not set as a default for files with C∞v  symmetry, and Wijngaard test options are set accordingly). The structure editor also supports C∞v  symmetry. 

Fixed a bug in the structure editor, which caused lattices created with the create lattice button to be flat ellipses.

winfield.exe (v.2.00.01.02) : was not released.

winfield.exe 08/03/05 12:09 (v2.00.01.01)

Added compatibility with elliptic inclusions, including for the structure editor.

Added the local representation check box (just below 'resolution'), which is enabled when new format .fbb abd .bcf files are read (these include the a coefficients of the expansion). Computing the fields with the local expansions is much faster, if less accurate far away from inclusions. With the local representation, the fields are 'accurate' only in circular regions centered around an inclusion not intersecting other inclusions. Notably, in most cases, the fields in large parts of the core are hence inaccurate.

Added a radio-button switch in the Wijngaard test group: when a coefficients are available, the Wijngaard test can now use either the local expansion (in terms of a and b) and the Wijngaard expansion (Local/Wijn checked), or the internal (in terms of internal c coefficients) and Wijngaard expansions (this is what previous versions used to do). Since the fields are continuous at the interfaces, differences should be minor between the two ways of performing the test, but in the case of elliptical inclusions no internal expansion is available, so the Wijngaard test should be done with the local expansions. This radio button affects the computation of single Wijngaard tests, as well as global ('check all') Wijngaard tests.

Note that fields inside the circle defined by the major diameter of ellipses are artificially set to zero.

winfield.exe 24/02/05 15:45 (v2.00.00.10)

- Added a detection of overlapping/touching cylinders, which are now coloured in green. Fixed a bug in the structure editor making it difficult to enter angles of the cylinders. The "about" dialog now shows the version number of the executable regardless of its location.

winfield.exe 03/12/04 13:45 (v2.00.00.09)

- fixed a bug resulting in inconsistent window sizes for certain windows versions when using 400x400 and 200x200 views. Also, the window size indicated in the dialog is now consistent with the number of pixels drawn (whereas it used to indicate the number of pixels drawn-1). This also fixes a bug whic resulted in a one pixel shift between interpolated and non-interpolated field plots.

winfield.exe 03/12/04 12:36 (v2.00.00.08)

- added a 'view' menu with 3 items:

        - rotate: to rotate the structure and fields with respect to the windows coordinates. The x,y,z axis are not changed, and the projection along x,y,z of the fields are done on these axes.

        - 400x400 view and 200x200 view: sets the window size to 400x400 pixels or 200x200 picels respectively.

- fixed a bug crashing the program when an un-existing file was opened

- fixed a couple of minor bugs and recompiled using other options (no
global optimization, no 'omit frame pointer', generic pentium instead of
PIV, maximize speed plus higher optimizations, multithread
library, increased stack size). Hopefully this will reduce the number
of spontaneous and unexplained crashes of the software.

winfield.exe 28/09/04 19:10 (v2.00.00.07)

- fixed the bug causing the 'Advanced tools' dialog to be inaccessible once opened and closed once.

- updated winfield to be compatible with latest bfld.exe.

- corrected a bug in the normalization of the norm of vectors (the norm of fields was erroneously divided by the square root of two: this wasn't noticeable using the default visualization options (using the extrema to fix the limits of the colour scale), but numerical values were inconsistent, eg |E_z| would have larger values than |E|.

- Tip: if you want to compare magnitudes of different components of the field (eg to see whether the mode is rather transverse or not, rather x or y polarized etc) select the field, then the norm of the field, check and uncheck 'use extremal values' in the colour options. Changing between the various components of the field will not change the colourscale and the relative magnitudes of the components can be compared directly. Note that since the magnetic field is scaled using Z_0, direct comparisons between  H (in fact K) and E are also possible.

- I also fixed a bug which could have been the cause to the yet to be understood random spontaneous shut-down of the software.

winfield.exe 27/09/04 17:11 (v2.00.00.06)

- fixed the problem concerning navigation between dialog controls using the tab key. (Bug fixed without doing anything but recompiling, so it's unclear what was going on and it might not be really fixed, let me know if it doesn't work)

winfield.exe 13/09/04 22:08 (v2.00.00.05)

- fixed a bug which caused winfield not to be able to open files coming from fibre with version number higher than 2.00.00.01.

- added an About window to check version information.

winfield.exe 02/09/04 15:00 (v2.00.00.04)

- Added show window button on the main dialog, which activates the field plot window and brings it to the front. Also when the field plot window is activated, pressing the d or D key will bring the associated dialog window to the front.

- Added interrupt button to interrupt current computation.

- Fixed bugs relating to Bloch transform display.

- Fixed bug relating to opening winfield by double-clicking on bcf/fbb files.

 

winfield.exe 26/08/04 (15:04) (v2.00.00.03)

- Structure editor: numerous bug fixes, including a bug resulting in erroneous structure files when using user defined material or silica. Files using Fini's symmetry classification can now be edited and written. The choice of material (silica, user defined, or constant refractive index) is now available for the cladding, the background and the jacket. I also fixed a(nother) bug causing winfield to crash in some rare cases when using interpolation. Winfield should no longer accept operations leading to empty structures (and as a consequence crashing the software).

- The shortcut to the My CUDOS MOF Files is now available in all open/save dialogs, at least with Windows XP.

winfield.exe 25/08/04 (18:37 (v2.00.00.02)

- Structure editor: fixed a bug resulting in NaN written instead of the alias of user defined materials.

winfield.exe 25/08/04 (12:54)

- Compatible with new fibre.exe (new file formats), and Stewart's local expansion format.

- Extended structure editor, exploiting fibre's new capabilities. In the menu, chose tools->Edit structure to open the structure editor. Everything works in there, but the user defined material section still contains a few bugs on which I'm working, also at the moment you can't define the background/cladding/jacket index to be a user defined material or silica (they have to have a constant refractive index). Once you have created/modified a structure, use the export button of the structure editor dialog to write it to a file. That file can then be used directly in fibre.exe.

Note that the structure file editor behaves a bit randomly if you start editing a structure loaded through a bcf file using a degenerate mode class or a mode using Fini's classification. Avoid doing so by loading the structure file itself, not a bcf/fbb file. Also at the momen you can't start a structure from scratch, you need to load a structure first and then start editing. If you delete all cylinders from the structure, winfield will crash. I'll fix all that soon.

- Again, because the order parameter can now be defined for each inclusion individually, I had to make a lot of changes in the software, increasing the chances of new bugs. I'm working on one of them causing the software to crash in undetermined (rare) circumstances when using interpolation. Please let me know of other bugs.

winfield.exe 06/08/04 (19:14):

I corrected the bug which caused an error when opening a bcf/fbb file by double clicking on it.

winfield.exe 05/08/04 (19:25):

Compatibility with Fini's symmetry classification added. The structure editor is getting closer to completion and should now be usable. To use it, either load a structure file, or with a loaded bcf file use the tools menu. Note that creating a lattice in the symmetry tab requires the structure to be of c6v symmetry.

Note that Winfield is now compiled with Intel Fortran, which shouldn't change anything for the user.

winfield.exe 21/07/04:

This version is compatible with the extended fbb format resulting from the new bfld, and has a few additional features (like changing the colour of the cylinders, computing all Wijngaard tests at once and visualizing them in a colour coded format (from green=good to red=bad). The total Bloch transform was a bit erroneous in the previous version, I corrected that as well (and now it looks the same as in bfld).

    New colour scales: You can now change the colour scale of the plots using 'load colour scale'. The colour scale files are compatible with winplot colour scale files, so you can use (almost) any .scl or .bscl file from your rsoft\rplotdir folder, or create new ones following the RSoft application note ANcolorScale.pdf


bfld:

v2.0.1.12:

fixed bug causing errors in preview field writing, fixed erroneous norm definition ('norm=matrix' was 'norm=all' and vice versa)
 

v2.0.1.11:

fixed bug causing wrong H_x,y,r,theta fields in coating.
 

v2.0.1.10:

added the field type coordinates, to write the x and y values corresponding to the points in matrix format output. Just add

field=coordinates
name=coordinate file name extension

Note that the software will add _x and _y to the file name extension you will give, for the x and y coordinates respectively.

I also fixed an allocation /deallocation issue when fbb files from different versions were treated within the same list of parameters.

v2.0.1.9:

increased format width of output values.
 

v2.0.1.8:

changed the preview format for compatibility with changing version of winfield
 

v2.0.1.7
updated to be able to cope with new file formats (coated cylinders and diffraction), however coating can't be drawn, and the behaviour for scattered fields should be checked.

Sellmeier has been updated according to changes in Fibre (for user defined sellmeier).

also includes slight optimization in field.f90, taken from winfield.
 

v2.0.1.6
- removed @even in beamprop real mode
- added capability of drawing cylinders for winplot (circles only, not ellipses).
 

v2.0.1.5
-fixed a few naming bugs with beam prop format
-added beam prop colour scale keyword
-added min/max setting with norm=none for beamprop format
-set width=0 automatically when using start_x etc

bfld.exe 18/07/05 21:14 (v2.00.01.04)

- Fixed a bug causing erroeneous fields when defining the viewport using start_x etc. in combination with user defined materials.

- Added compatibility with polynomial expansions for user defined material.

- Added un-normalized effective area and effective radius in the mode_table.dat file. To display it, use the updated version of the associated html file: mode_table_improved_2.html.

- Added another format for winplot:

format=beam prop real

which in combination with the usual field, part, comp, norm keywords writes two files (*.p00, *.m00)  readable by Winplot, containing solely the (real) value defined by the part keyword (not magnitude+phase as with format=beam prop).

- Fixed a bug interfering with user defined file name suffixes for the beam prop output format.

bfld.exe v2.00.01.02-3 were not released.

bfld.exe 05/04/05 19:40 (v2.00.01.01)

- bfld is now compatible with the new bcf/fbb file format (format since fibre v. 2.00.01.01).

- Added a keyword set min to zero, which defines the colour scales so that the minimum is zero, rather than the minimum value. This creates more consistent field plots for different modes and different field components.

bfld.exe 03/12/04 12:28 (v2.00.00.04)

- added 4 keywords to define the window in which the fields are computed:

    start_x, stop_x, start_y and stop_y.

Since some fields are undefined in (x,y)=(0,0), you should avoid setting start_x and start_y simultaneously to 0 (1e-8 or so for one of the two will do fine). Note that if you also define the width parameter within the parameter file, start_x etc. will be ignored.

- fixed a bug leading to wrong field plots (probably only with user
defined materials) in the release (but not debug) build of the
software (switched the omit frame pointers to NO in the project
properties -why did that cause a bug ???). Also fixed a bug causing a
format error when no field names/no other fields than preview where
required.
 

bfld.exe 29/09/04 23:27 (v2.00.00.03)

- Fixed a bug which appeared in v.2.00.00.01 due to switching from lahey to the intel compiler, and resulted in erroneous field plots.

- Updated HTML output capabilities to be consistent with the new parameter file format: The new mode_table.dat file contains the names of all field plot files (field plots still have to be converted from portable bitmaps to gif files manually though, eg using the free conversion software irfanview). The software also creates a file called 'add_this_line_to_index.html' containing a HTML line which should be inserted into the template mode_table_generic.html or mode_table_simple.html file (comments indicate where this line is to be inserted). Using Internet Explorer, you can then display the modes and their characteristics (wavelength, effective index, effective are etc.), sort the modes (click on the buttons at the top of the mode table) and navigate through them (click the file name to open the file with winfield). I added an example in the "bfld_sample" subdirectory. The sample was generated using the two .fbb files the folder contains and the bfldparam.txt file, using

bfld -l bfldparam.txt

and then converting all .ppm files into gif files using irfanview.

 

bfld.exe 29/09/04 15:11 (v2.00.00.02)

- Fixed a bug causing (in some cases) file names after the list keyword to be interpreted as keywords, so that no file would be processed.

bfld.exe 28/09/04 19:08 (v2.00.00.01)

- Added compatibility with Fini's symmetry classification and with new file format (file format as of fibre version > 2.00.00.01).

- Added more stack space, lack of stack space resulted in the program aborting in some cases.

- Started version control, this is the first version with a version number.

bfld.exe 21/07/04:

Exciting new features include:
- understandable parameter file format
- ability to write as many field, components, parts etc as you want
- takes bcf and fbb files
- saves the entire computed field into the fbb file, so that you don't need to recompute it in winfield
- output in beamprop and winplot compatible formats

the bfld parameter file now takes an entirely new format, similar to the fibre parameter files.


First, start with global keywords:

-resolution (integer): number of points in the field plots (optional, default value 75)

-bloch resolution (integer): number of points for the bloch transform (optional, default value 75)

-wijngaard resolution (integer): number of points for the wijngaard test (negative if cladding/jacket are to be ignored) (optional, default value -100). If set to 0, skips the wijngaard test (which saves time).

-width (real): width of the region on which the field plots are required (-1 for automatic width setting based on the cladding radius) (optional, default value -1)

-overwrite (.true. of .false.): if set to .true., overwrites the mode_table file without causing an error. (optional, default value .true.)

-genuine threshold (real): if the genuine test (based on symmetry) is above this threshold, the file is ignored (optional, default value 1e-8)

then write a list of the field, components, parts, and output format you want for each file.
To do so, you start with the field keyword:

field=E|K|S|Bloch|preview
E, K, S writes the E, K or S fields with subsequently defined sub parameters
Bloch writes the Bloch transform with subsequently defined sub parameters
preview (new exciting feature) adds the precomputed field to the .fbb file (requires the fourier bessel file to be a fbb file)

then define which component, part, norm, output format you want to use, using the following keywords:
-part=real|imag|phase|abs|logabs
uses the real or imaginary part, the phase, the magnitude or the log of the magnitude of the field component

-component=x|y|z|r|theta|norm
writes the specified x,y,z,r,theta or the norm of the field

-draw cylinders
if specified, draws the contour of the cylinders

-norm=all|none|matrix|cladding
normalizes the output values to
        -all : max value is 1
        -none : field normalized so that the carried power along z is one
        - matrix: max value in the region inside the cladding (ie matrix+cylinders) is 1
        - cladding: max value in the region inside the jacket (ie matrix+cylinders+cladding) is 1
note that if you need several components and their relative magnitudes, you'll have to use 'none' since for all others the relative magnitude between components is lost

-format=xyz|matrix|pbm|beam prop
output format: either list of xyz values (xyz), matrix of values (matrix), portable bitmap (pbm) or beam prop compatoble .m00/.p00 files (beam prop)
note that the draw cylinder option works only with pbm, and that the part keyword has no effect with the beam prop format

-name=text
adds text to the file name radix (defined by the input file without its extension) for the output file. (doesn't work with beam prop format yet). this keyword is optional, but if you don't use it you run the risk of overwriting existing files if you ask two different components/part/norm for the same field.

After you specified as many combination of the above keywords as you want, add the keyword
list
followed immediately on the next lien by the list of files you want to process (after the list keyword, no blank lines are allowed).

Example of parameter file:
! golbal parameters
resolution=75
bloch resolution=150
wijngaard resolution=-100

! this next line adds the precomputed fields to the fbb files
field=preview

! the next few lines ask bfld to write real(E_z) in a portable bitmap format, with the cylinders being outlined, in a file finishing with
! lin_rez.pbm
field=E
draw cylinders
component=z
norm=all
format=pbm
part=real
name=lin_rez.pbm

! the next few lines ask bfld to write log(abs(S-z)) in a portable bitmap format, without the cylinders being outlined, in a file finishing with
! logabs_sz.pbm
field=S
component=z
norm=all
name=logabs_sz.pbm
format=pbm
part=logabs

! next define the files to be processed
list
symhex_L0000C01M001.fbb
symhex_L0000C02M001.fbb
symhex_L0000C03M001.fbb
symhex_L0000C04M001.fbb

     


 

other:

02/06/2006 17:39: improved emacs interface (in emacs files): for parameter.txt file, ctrl c ctrl c runs fibre in low priority in emacs buffer, with folder specific emacs window title; ctrl c k k stops execution. Note that syntax highlighting needs to be updated for new keywords.

01/07/05 11:06 mode_table_imroved_2.html updated version of the file described below, displaying also the unnormalized values of the effective area and effective radius.

1/10/04 16:54 mode_table_imroved.html is a much better version of the generic HTML file for loading mode table. Data is now in one column on the left and the rest of the table consists of the field views.