• No se han encontrado resultados

Explicación de cada clase

5 Acoplador en guía

6.1 Explicación de cada clase

6.1.1

FDTD.java

FDTD.java es el núcleo del algoritmo. Contiene todas las referencias al PML, fuente, parámetros S, etc de la simulación. Es donde está escrito el bucle temporal por lo que es desde donde se llama a las demás clases. En un primer momento está clase era mucho más grande y se fue adelgazando paulatinamente llevando parte de sus rutinas a clases aparte a medida que crecía.

6.1.2

PML.java

En esta clase se guardan todos los arrays y variables relacionados con el PML. Puesto que las fronteras PML se establecen en un principio y no se prevé que se vayan a cambiar dinámicamente en optimizaciones, el cambio de las características de las fronteras debe hacerse en el constructor de la clase.

La forma de utilizar la clase es crear el objeto, asignar al núcleo el objeto mediante el set() del núcleo y a continuación llamar al método que inicializa las variable en el PML. Una vez inicializado el algoritmo llamará al núcleo para modificar los códigos convolucionales.

6.1.3

Complex.java

Es una clase que representa a un número complejo con todas sus operaciones asociadas. La clase en si contiene al número complejo, es decir no es una clase con métodos estáticos, un ejemplo de utilización sería:

Complex a = new Complex(1.0 , 2.0) Complex b= new Complex(1.4, 3.4); Complex div =a.divididedby(b);

6.1.4

Constants.java

Esta clase contiene en variables estáticas los valores de constantes físicas como pueden ser la velocidad de la luz, la permitividad y permeabilidad del vacío, el número pi…

6.1.5

FFT.java

Clase que vale para calcular la FFT de secuencias. Básicamente en el núcleo se crea un objeto de esta clase y cada vez que se quiere una FFT se le llama. El algoritmo utilizado es del tipo recursivo (O(Nlog2(N)), no es el más eficiente en memoria y carga, pero sí el más legible y fácil de implementar.

78

6.1.6

NFTFF.java

Este interfaz representa el objeto que se encarga de transformar el campo cercano en campo lejano. Se usa una interfaz en lugar del propio objeto en si porque la implementación cambia un poco según si se quiere el diagrama en un corte en θ, en φ o en 3D. De esta forma se puede instanciar un objeto NFTFF en la rutina principal sin necesidad de saber qué tipo de corte es.

6.1.7

NFTFF3.java

A modo de ejemplo se presenta la implementación 3D del near to far field. El uso de estas clases en la rutina principal es el siguiente. Primero se inicializa con los datos de tiempo máximo, direcciones theta y phi y frecuencias de interés. A continuación mediante setters se establecen las coordenadas de la caja de radiación, el área que se utiliza para el puerto… Dentro de la rutina principal hay que incluir un trozo de código que compruebe si hay algún NFTFF asociado y si lo hay ejecutar un paso en la actualización. Finalmente una vez que la simulación FDTD ha terminado hay que llamar a los métodos finalNFTFF(), timeToFrequency() y ouput() o outputFrequency() según se quiera.

6.1.8

2DPlot.java

Esta clase contiene varios métodos para guardar datos en 2D. Entre estos datos están los campos en cada una de las componentes en un plano especificado, el campo en una única región concreta, el mallado en la estructura…

Su uso es muy simple, se crea un objeto Record2D en el lanzador pasándole una referencia del propio kernell para que pueda acceder a él sin restricciones. Al crear el objeto hay que especificarle una frecuencia o periodo de salvado y cada vez que se llame a un método de salvado se comprobará si el instante en el que se ejecuta es módulo cero con el periodo de salvado para guardar la información en fichero.

6.1.9

Record1D.java

Esta clase se encarga de contener arrays temporales e ir almacenando muestras en cada paso de la simulación.

6.1.10

Mesh.java

Mesh.java es un interfaz que representa al mallador, es decir, al objeto físico a simular. Al utilizar una interfaz podemos instanciar en el núcleo a un único mallador que a su vez tendrá varias implementaciones como dipolos, guías de onda, guías de onda ranuradas...

El único método que debe implementar un objeto que implemente el interfaz además el constructor es el método mesh() que será llamado por el núcleo para asignar materiales a los arrays espaciales del núcleo.

79

6.1.11

SParameters.java

Esta clase se encarga de leer las muestras de las presimulaciones (necesarias para comparar señales como se explicó anteriormente), almacenar los arrays temporales de las señales en cada paso de la simulación, calcular los parámetros S usando FFTs y guardar los parámetros en ficheros txt.

6.1.12

Source.java

Esta clase contiene diversos tipos de señales temporales. Se inicializa en el núcleo y se la llama cada vez que se quiere una muestra nueva de la señal de entrada.

6.1.13

Launcer.java

Launcher se encarga de las rutinas necesarias para lanzar la simulación, en un primer momento se hacia todo en el método main del núcleo pero debido a que es único que cambia entre simulación y simulación cuando se hace el setup se decidió aislarlo para poder controlarlo más fácilmente.

6.1.14

LauncerIni.java

Igual que Launcher normal solo que es usado para hacer únicamente la presimulación para luego comparar señales.

6.1.15

Optimizer.java

Esta clase es la pasarela entre el paquete optimizador del MIT y la propia simulación. Lo fundamentral de esta clase es como se traducen la posición de ranuras y offset (por ejemplo) en bits para pasárselos al optimizador. También define la función de gol a partir de los parámetros S calculados en cada paso.

Documento similar