1 #ifdef HAVE_STDLIB_H
2 #include <stdlib.h>
3 #endif
4 #include <stdio.h>
5 #include <math.h>
6 #include <errno.h>
7
8 #include "yagi.h"
9
10 #include <errno.h>
11 /* The function automatic_enhancement optimises only for the gain, by
12 adjusting the length of the reflector (A=-1), the driven(A=0) the
13 first director (A=1), second director (A=2 ) etc */
14
automatic_enhancement(struct flags flag,double frequency,double ** driven_data,double ** parasitic_data,int driven,int parasites,struct FCOMPLEX * voltage,struct FCOMPLEX * current,struct FCOMPLEX * input_impedance,double * v,double ** z,double ** A,double * b,int * indx,struct element_data * coordinates)15 void automatic_enhancement(struct flags flag, double frequency, double **driven_data, double **parasitic_data, int driven, int parasites, struct FCOMPLEX *voltage, struct FCOMPLEX *current, struct FCOMPLEX *input_impedance, double *v, double **z,double **A, double *b, int *indx, struct element_data *coordinates)
16 {
17 int elements,element;
18 double pin,E_fwd=0,H_fwd,max_gain=0.0,old_max=0.0;
19 elements=driven+parasites;
20 element=flag.Aflg-1000;
21 if(element > parasites-1)
22 {
23 fprintf(stderr,"You have set the option '-A%d', which will maximise gain using director number %d, but there are only %d directors\n", element,element, parasites-1);
24 exit(1);
25 }
26 if(element>0) /* optimise gain by adjusting a director */
27 {
28 parasitic_data[element+1][LENGTH]*=0.90;
29 max_gain=0.0;
30 old_max=0.0;
31 do{
32 parasitic_data[element+1][LENGTH]*=1.001;
33 solve_equations(frequency, driven, parasites, driven_data, parasitic_data, v, z, &pin, voltage, current, input_impedance, coordinates, A, b, indx);
34 gain(90.0,0.0,pin,1.0,coordinates,current,elements,&E_fwd,&H_fwd,frequency,frequency);
35 if(E_fwd>max_gain)
36 {
37 old_max=max_gain;
38 max_gain=E_fwd;
39 }
40 } while(E_fwd>old_max);
41 }
42 else if(element==-1) /* Optimise gain by adjeucting reflector */
43 {
44 parasitic_data[1][LENGTH]*=0.90;
45 max_gain=0.0;
46 old_max=0.0;
47 do{
48 parasitic_data[1][LENGTH]*=1.001;
49 solve_equations(frequency, driven, parasites, driven_data, parasitic_data, v, z, &pin, voltage, current, input_impedance, coordinates, A, b, indx);
50 gain(90.0,0.0,pin,1.0,coordinates,current,elements,&E_fwd,&H_fwd,frequency,frequency);
51 if(E_fwd>max_gain)
52 {
53 old_max=max_gain;
54 max_gain=E_fwd;
55 }
56 } while(E_fwd>old_max);
57 }
58 else if(element==0) /* Optimise gain by adjeucting driven-element */
59 {
60 driven_data[1][LENGTH]*=0.90;
61 max_gain=0.0;
62 old_max=0.0;
63 do{
64 driven_data[1][LENGTH]*=1.001;
65 solve_equations(frequency, driven, parasites, driven_data, parasitic_data, v, z, &pin, voltage, current, input_impedance, coordinates, A, b, indx);
66 gain(90.0,0.0,pin,1.0,coordinates,current,elements,&E_fwd,&H_fwd,frequency,frequency);
67 if(E_fwd>max_gain)
68 {
69 old_max=max_gain;
70 max_gain=E_fwd;
71 }
72 } while(E_fwd>old_max);
73 }
74 }
75