Con las transformaciones de esfuerzos generadas los elementos faltantes por crear son las ondas de esfuerzos como tal. Como se mencionó al momento de seleccionar el método mediante el cual se desarrollaría el modelo, las ondas son la razón principal por la cual se trabaja con la programación orientada a objetos. Ahora bien, se deben tener en cuenta cuáles son las principales características que tienen las ondas, estas se presentan a continuación:
• Dirección • Magnitud • Posición • Velocidad
36
Es importante resaltar que la dirección de la onda, al ser un análisis de comportamiento lineal, se va a comportar de manera semi booleana. Así pues, solo tendrá dos posibilidades de valor 0 o 1. Este método permite saber si la onda viaja de derecha a izquierda o al contrario a lo largo de la geometría. En este caso el desplazamiento positivo, de izquierda a derecha, se considera como 0, y por consiguiente el 1 identifica el desplazamiento como negativo (de derecha a izquierda).
Con las propiedades mencionadas se puede evaluar el comportamiento general de las ondas, y se conoce en cada tiempo de evaluación las condiciones a las que está sometida cada una de estas. Ahora bien, tal como se crearon las clases de la familia de capas es necesario generar el entorno en el cual se van a crear y almacenar cada una de las ondas. Como primera instancia se tiene la clase Onda que almacena como clase principal todas las características anteriormente mencionadas. En este caso a diferencia de la clase Material la clase Onda tiene en su definición métodos4 que permiten modelar el comportamiento de la onda, dichos métodos se discutirán posteriormente.
Con la clase principal definida se continúa creando una subclase que permita almacenar las ondas de tipo Onda. Para lo anterior, se construye la clase wave que en si cumple como objetivo la creación de la matriz de objetos tipo onda. Al inicializar esta subclase se crean otras tres propiedades adicionales de suma importancia para el análisis del modelo, estas se presentan a continuación:
pos = [] %Vector para almacenar la posición
magn = [] %Vector para almacenar la magnitud
t = [] %Vector para almacenar el tiempo
Como se evidencia en la forma de escribir las propiedades, estas son vectores vacíos a la hora de ser inicializados. Dichos vectores cumplen la función de almacenar información a medida que avanza la simulación en el tiempo. Aparentemente el vector tiempo es
4 Método: Un método representa una función de un objeto perteneciente a la clase, es decir, tiene el
comportamiento característico de las funciones en programación estructurada, sin embargo, es una función que solo cumple el objeto como tal. En este caso se tiene el método avanza de la clase Onda que en sí es un comportamiento característico del objeto onda y no requiere evaluarse con una función externa. [10]
37
redundante, pero si se considera la posibilidad de generación de nuevas ondas a medida que hay transmisión en superficies libres de ondas, los tiempos de creación no serán los mismos y se obtienen resultados erróneos a la hora de generar gráficas del comportamiento respecto al tiempo.
Por otra parte, es necesario inicializar en la clase wave todos lo métodos definidos en su clase madre, en este caso clase Onda. Para el caso particular de las ondas solo se tiene un método para modelar su comportamiento y es el de avanza. Inicialmente se consideraron muchos más métodos como cambio de dirección, reflexión, transmisión y demás comportamientos de la onda, sin embargo, al momento de evaluar el comportamiento conjunto se obtenían inconvenientes para evaluar las condiciones. Así pues, el método avanza se compone del simple cambio de posición de la onda, determinado por la velocidad de onda y el delta de tiempo.
Después de tener bien definido el entorno en el cual se generan las ondas, se prosigue con la creación de las mismas a partir de las líneas de código. Como etapa inicial, tal como se realizó en el caso de las capas, se debe crear la matriz ondas que tiene la libertad de crecer en cualquiera de sus parámetros de forma. Aparte de está matriz se necesita una función que vaya creando y almacenando las ondas, por ende, se construye la función NuevaOnda que permite mediante parámetros de entrada generar una onda en una capa en particular.
ondas = wave(1); %crea la matriz de objetos tipo onda
ondas = NuevaOnda(ondas,capas,capas(1,1).c, capas(1,1).fin,1,esfuerzo); %crea la onda incidente 1
En el código se tienen dos líneas: la creación de la matriz y la de una nueva onda, en este caso la onda incidente para la capa 1. Los parámetros de entrada a la función NuevaOnda son en su orden la matriz de ondas, la matriz de capas, la velocidad de onda de la capa (mm/μs), la posición inicial5 (mm), la dirección de la onda (0/1) y la magnitud de la onda (Pa). En el ejemplo presentado se tiene la creación de la onda incidente para la bala, por lo
5 En este caso la posición inicial de la onda la determina el final de la capa, dado que en el caso de la bala el
impacto se da en su superficie final. Este concepto se utiliza con frecuencia cuando ya hay generación de las ondas en el tiempo.
38
que se denotan las propiedades de la primera capa como parámetros, la dirección de onda negativa y la magnitud del esfuerzo como el esfuerzo incidente.
A diferencia de la matriz de capas que tiene restringidas sus dimensiones a las de un vector fila, la matriz de ondas puede crecer en filas y columnas a como de lugar. Lo anterior con el fin de organizar las ondas en sus respectivas capas y numerarlas a medida que se generan. Así pues, al crear una onda la función NuevaOnda busca en qué capa se encuentra definida la onda y además cuantas ondas ya pertenecen a la misma capa, así puede crearse la onda al final de la lista de ondas de la misma capa. Con este esquema de organización de las ondas se logra atribuir un mismo número de columna a las ondas y a las capas en las matrices, lo que facilita considerablemente la manipulación de la información al correr el código de la simulación.