Geometria_3D.hpp
Ir a la documentación de este archivo.
1 // Clase base para generar una geometría en tres dimensiones //
3 // //
4 // Análisis y Diseño y Programación: //
5 // //
6 // Nombre: Antonio Carrillo Ledesma //
7 // E-mail: acl@www.mmc.igeofcu.unam.mx //
8 // Página: http://www.mmc.igeofcu.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 
31 #ifndef __Geometria_3D__
32 #define __Geometria_3D__
33 
34 #include "Geometria.hpp"
35 
36 
38 
43 class Geometria_3D : public Geometria
44 {
45 
46 public:
47 
50  {
51  size_t i;
52  Dominio.redimensiona(2,3);
54  }
55 
57 
61  int coordenadasDentroDominio(ldouble x, ldouble y, ldouble z)
62  {
63  if (x < (Dominio.retorna(0,0) - TOLERANCIA_NODO) || x > (Dominio.retorna(1,0) + TOLERANCIA_NODO) ) return 0;
64  if (y < (Dominio.retorna(0,1) - TOLERANCIA_NODO) || y > (Dominio.retorna(1,1) + TOLERANCIA_NODO) ) return 0;
65  if (z < (Dominio.retorna(0,2) - TOLERANCIA_NODO) || z > (Dominio.retorna(1,2) + TOLERANCIA_NODO) ) return 0;
66  return 1;
67  }
68 
69  // Retorna el numero de nodo que tiene coordenadas Coor, si no pertenece -1
74  int retornaNodoCoord(ldouble x, ldouble y, ldouble z);
75 
77 
81  inline void coordenadasNodo(int nd, ldouble &x, ldouble &y, ldouble &z)
82  {
83  x = ND->retorna(nd, 0);
84  y = ND->retorna(nd, 1);
85  z = ND->retorna(nd, 2);
86  }
87 
89 
93  inline void estableceValorCoordenadas(int nodo, ldouble x, ldouble y, ldouble z)
94  {
95  ND->asigna(nodo,0,x);
96  ND->asigna(nodo,1,y);
97  ND->asigna(nodo,2,z);
98  }
99 
101 
105  void coordenadasElemento(int el, ldouble *x, ldouble *y, ldouble *z);
106 
108 
109  inline int numeroMaximoNodosFrontera(void)
110  {
111  return ((2*Particion.retorna(0) + 2*Particion.retorna(1)) * Particion.retorna(2));
112  }
113 
115 
117  inline void coordenadasDominio(ldouble *ini, ldouble *fin)
118  {
119  ini[0] = Dominio.retorna(0,0);
120  ini[1] = Dominio.retorna(0,1);
121  ini[2] = Dominio.retorna(0,2);
122  fin[0] = Dominio.retorna(1,0);
123  fin[1] = Dominio.retorna(1,1);
124  fin[2] = Dominio.retorna(1,2);
125  }
126 
127  //~ /// Regresa los nodos externos en un arreglo ARR y numero ND
128  //~ /** @param arr Puntero a un arreglo de nodos
129  //~ @param nd Número de nodos */
130  //~ void Regresa_Nodos_externos(int *arr, int nd);
131 
132  //~ /// Marca los nodos externos con el valor MC
133  //~ /** @param mc Valor a usar de marca */
134  //~ void Marca_Nodos_Externos(int mc);
135 
136  //~ /// Retorna el numero y nodos adyacentes a un nodo dado
137  //~ /** @param nd Nodo a buscar
138  //~ @param nds Puntero a un arreglo de nodos
139  //~ @param nnds Número de nodos */
140  //~ int Retorna_Nodos_Adyacentes(int nd, int *nds, int nnds);
141 
142  //~ /// Calcula el tipo de nodo dentro del dominio positivo es desconocido, negativo es conocido (1) Interior , (2) cara, (3) Vertice
143  //~ void Calcula_tipo_nodo(void);
144 
147  {
148 #ifdef __Double__
149  printf("\nDominio: (%f,%f,%f) a (%f,%f,%f)\n\n",Dominio.retorna(0,0),Dominio.retorna(0,1),Dominio.retorna(0,2),Dominio.retorna(1,0),Dominio.retorna(1,1),Dominio.retorna(1,2));
150 #else
151  printf("\nDominio: (%Lf,%Lf,%Lf) a (%Lf,%Lf,%Lf)\n\n",Dominio.retorna(0,0),Dominio.retorna(0,1),Dominio.retorna(0,2),Dominio.retorna(1,0),Dominio.retorna(1,1),Dominio.retorna(1,2));
152 #endif
153  }
154 
155 };
156 
157 #endif
void coordenadasNodo(int nd, ldouble &x, ldouble &y, ldouble &z)
Retorna las coordenadas del nodo especificado.
Definition: Geometria_3D.hpp:81
void estableceValorCoordenadas(int nodo, ldouble x, ldouble y, ldouble z)
Establece las coordenadas del nodo.
Definition: Geometria_3D.hpp:93
ldouble retorna(const int ren, const int col)
Retorna valor almacenado en el renglon y la columna indicada.
Definition: MatrizTamanoVariable.hpp:119
Clase base para generar una geometria en 3D.
Definition: Geometria_3D.hpp:43
MatrizDensa Dominio
Dominio de la geometria.
Definition: Geometria.hpp:65
void visualizaCoordenadasDominio(void)
Visualiza coordenadas del dominio.
Definition: Geometria_3D.hpp:146
#define TOLERANCIA_NODO
Definition: Geometria.hpp:37
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 coordenadasDominio(ldouble *ini, ldouble *fin)
Retrona las coordenadas del dominio.
Definition: Geometria_3D.hpp:117
MatrizTamanoVariable * ND
Definition: Geometria.hpp:73
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
int retorna(const int col)
Retorna el valor de la columna col.
Definition: VectorInt.hpp:210
int retornaNodoCoord(ldouble x, ldouble y, ldouble z)
Definition: Geometria_3D.cpp:43
VectorInt Particion
Particion del dominio.
Definition: Geometria.hpp:68
Geometria_3D(void)
Constructor de la clase.
Definition: Geometria_3D.hpp:49
void coordenadasElemento(int el, ldouble *x, ldouble *y, ldouble *z)
Regresa las coordenadas del elemento.
Definition: Geometria_3D.cpp:72
int numeroMaximoNodosFrontera(void)
Número máximo de nodos en la frontera.
Definition: Geometria_3D.hpp:109
void asigna(const int ren, const int col, const ldouble val)
Asigna el valor indicado en el renglo y columna solicitado.
Definition: MatrizTamanoVariable.hpp:110
int coordenadasDentroDominio(ldouble x, ldouble y, ldouble z)
Coordenadas dentro del dominio.
Definition: Geometria_3D.hpp:61