Geometria_1D.hpp
Ir a la documentación de este archivo.
1 // Clase para generar una geometría en una dimensión //
3 // //
4 // Análisis y Diseño y Programación: //
5 // //
6 // Nombre: Antonio Carrillo Ledesma //
7 // E-mail: acl@www.mmc.geofisica.unam.mx //
8 // Página: http://www.mmc.geofisica.unam.mx/acl //
9 // //
10 // //
11 // Este programa es software libre. Puede redistribuirlo y/o modificarlo //
12 // bajo los términos de la Licencia Pública General de GNU según es //
13 // publicada por la Free Software Foundation, bien de la versión 2 de //
14 // dicha Licencia o bien (según su elección) de cualquier versión //
15 // posterior. //
16 // //
17 // Este programa se distribuye con la esperanza de que sea útil, pero SIN //
18 // NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL implícita o sin //
19 // garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la //
20 // Licencia Pública General de GNU para más detalles. //
21 // //
22 // Debería haber recibido una copia de la Licencia Pública General junto //
23 // con este programa. Si no ha sido así, escriba a la Free Software //
24 // Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU. //
25 // //
26 // //
28 
29 
30 #ifndef __Geometria_1D__
31 #define __Geometria_1D__
32 
33 #include "Geometria.hpp"
34 
35 
36 
38 
43 class Geometria_1D : public Geometria
44 {
45 
46 public:
47 
50  {
51  // Dimension 1D
52  DIM = 1;
53  // Numero de nodos por elemento
54  NNE = 2;
55  // Numero máximo de elementos que son soporte de un nodo
56  NMESN = 2;
57 
58  Dominio.redimensiona(2,2);
60  }
61 
62 
64  void inicializa(MatrizDensa *dm, int part)
65  {
66  dm->copia(&Dominio);
67  Particion.asigna(0,part);
68  N_N = part;
69  N_E = part - 1;
71  }
72 
73 
74 
76 
78  void regresaNodosExternos(int *arr, int nd)
79  {
80  nd = 2;
81  arr[0] = 0;
82  arr[1] = N_N - 1;
83  }
84 
86 
87  void marcaNodosExternos(int mc)
88  {
89  estableceNumeroNodo(0,mc);
90  estableceNumeroNodo(N_N - 1,mc);
91  numeraNodos();
92  }
93 
95 
96  void marcaPrimerNodo(int mc)
97  {
98  estableceNumeroNodo(0,mc);
99  numeraNodos();
100  }
101 
103 
104  void marcaUltimoNodo(int mc)
105  {
106  estableceNumeroNodo(N_N - 1,mc);
107  numeraNodos();
108  }
109 
111 
113  ldouble tamanoElemento(int el)
114  {
115  return (retornaValorNodo(el,0) - retornaValorNodo(el-1,0));
116  }
117 
119 
121  int coordenadasDentroDominio(ldouble *coor)
122  {
123  if (coor[0] < (Dominio.retorna(0,0) - TOLERANCIA_NODO)) return 0;
124  if (coor[1] > (Dominio.retorna(1,0) + TOLERANCIA_NODO)) return 0;
125  return 1;
126  }
127 
129 
131  void coordenadasElemento(int el, ldouble *x);
132 
135  {
136 #ifdef __Double__
137  printf("\n\nDominio: (%f,%f)\n\n",Dominio.retorna(0,0),Dominio.retorna(1,0));
138 #else
139  printf("\n\nDominio: (%Lf,%Lf)\n\n",Dominio.retorna(0,0),Dominio.retorna(1,0));
140 #endif
141  }
142 
143 
144 };
145 
146 #endif
void estableceNumeroNodo(int nodo, int n)
Establece la numeracion de los nodos.
Definition: Geometria.hpp:233
Clase para generar una geometría en una dimensión
Definition: Geometria_1D.hpp:43
int NNE
Numero de nodos por elemento.
Definition: Geometria.hpp:94
ldouble retornaValorNodo(int nodo, int Xi)
Retorna la coordenada especificada del nodo.
Definition: Geometria.hpp:164
MatrizDensa Dominio
Dominio de la geometria.
Definition: Geometria.hpp:65
int NMESN
Numero máximo de elementos que son soporte de un nodo.
Definition: Geometria.hpp:97
virtual void generaGeometria(void)=0
Genera la geometria.
Geometria_1D(void)
Costructor de la clase.
Definition: Geometria_1D.hpp:49
int DIM
Dimension a trabajar.
Definition: Geometria.hpp:91
virtual void copia(Matriz *a)
Copia el contenido de la matriz a la matriz pasada como parámetro.
Definition: Matriz.cpp:371
Clase para el trabajar con matrices densas de punto flotante.
Definition: MatrizDensa.hpp:44
#define TOLERANCIA_NODO
Definition: Geometria.hpp:37
void numeraNodos(void)
Numera nodos, (< 0) conocido, (>=0) desconocido.
Definition: Geometria.cpp:117
void visualizaCoordenadasDominio(void)
Visualiza coordenadas del dominio.
Definition: Geometria_1D.hpp:134
void marcaUltimoNodo(int mc)
Marca el ultimo nodo con el valor MC.
Definition: Geometria_1D.hpp:104
void inicializa(MatrizDensa *dm, int part)
Inicializa la geometria.
Definition: Geometria_1D.hpp:64
void asigna(const int col, const int val)
Asigna el valor val a la columna col.
Definition: VectorInt.hpp:202
Clase base para generar una geometria.
Definition: Geometria.hpp:59
void redimensiona(int nren, int ncol)
Constructor de la clase.
Definition: MatrizDensa.hpp:118
void marcaNodosExternos(int mc)
Marca los nodos externos con el valor MC.
Definition: Geometria_1D.hpp:87
ldouble tamanoElemento(int el)
Regresa el tamaño del elemento indicado.
Definition: Geometria_1D.hpp:113
void marcaPrimerNodo(int mc)
Marca el primer nodo con el valor MC.
Definition: Geometria_1D.hpp:96
void coordenadasElemento(int el, ldouble *x)
Regresa la coordenada del elemento.
Definition: Geometria_1D.cpp:35
int N_N
Numero de nodos.
Definition: Geometria.hpp:85
void redimensiona(int ncol)
Redimensiona el tamaño del vector.
Definition: VectorInt.hpp:140
ldouble retorna(const int ren, const int col)
Retorna el valor del renglon y columna solicitado.
Definition: MatrizDensa.hpp:156
VectorInt Particion
Particion del dominio.
Definition: Geometria.hpp:68
int N_E
Numero de elementos.
Definition: Geometria.hpp:88
int coordenadasDentroDominio(ldouble *coor)
Indica si la coordenada pasada esta dentro del dominio.
Definition: Geometria_1D.hpp:121
void regresaNodosExternos(int *arr, int nd)
Regresa los nodos externos en un arreglo ARR de tamaño ND.
Definition: Geometria_1D.hpp:78