/*************************************************************************** * Copyright (C) 2009 by Douglas Castro * * douglas@ime.unicamp.br * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef _DEFINICOES_H_ #define _DEFINICOES_H_ #include #include #include "bool.h" /** * @typedef No * @brief No da arvore * @param fil ponteiro para os filhos * @param deletable indicio que a cel pode ser apagada * @param leaf eh folha ? * @param virtual_leaf; folha virtual ? * @param fval armazena media na celula * @param fv vetor das solucoes(tempo n, old, new) * @param flx vetor de fluxos de saida pela face superior relativa a cada eixo * @param divf divergente do fluxo em cada uma das direcoes, num certo ponto. * @return */ typedef struct No{ struct No *fil[2]; double fval; double fv[3]; double flxinf[3]; double flxsup[3]; bool_t del; } No; /** * @typedef VNo * @brief Pacote com ponteiro e valor interpolado caso nao exista o no referente ao ponteiro * @param p ponteiro para um no * @param fv valor da funcao no no, caso nao exista o no esse valor e interpolado * @return */ typedef struct VNo { No *p; double fv; } VNo; /** * @typedef VFl * @brief Pacote com ponteiro e vetor com fluxo interpolado caso nao exista o no referente ao ponteiro * @param p ponteiro para um no * @param fv valor do fluxo no no, caso nao exista o no esse valor e interpolado * @return */ typedef struct VFl { No *p; double fvs[3]; double fvi[3]; } VFl; /** * Tipo de funcao que, dadas as medias em cada celula de um grupo de 3 celulas adjacentes de mesmo nivel, * preve a media no filho {esq} (esquerdo/inferior) da celula central * @param qo [in] ordem da previsao TRUE para 4 ordem e FALSE para 2 ordem * @param x1 [in] medias celulares */ typedef double Preditor(bool_t qo, double x[]); /** * Tipo de uma funcao a ser aproximada. * @param d [in] dimensao do dominio ( d = 1,2,3 ) * @param x [in] valor da coordenadas do ponto X = (x,y,z) em R^d * @return */ typedef double Funcao(int d, double x[]); /** * Tipo de uma fluxo considerado * @param x [in] valor da media na celula * @return */ typedef double Fluxo(double x); /** * Tipo de funcao que calcula a quadratura gaussiana (regra de 5 pontos) num certo dominio * @param d [in] dimensao do dominio ( d = 1,2,3 ) * @param xmin [in] vetor com os limites inferiores do dominio de integracao * @param xmax [in] vetor com os limites superiores do dominio de integracao * @param f [in] funcao generica a ser integrada * @return */ typedef double Quadratura(int d, double xmin[], double xmax[], Funcao *f); /** * Tipo de funcao que calcula a quadratura gaussiana (regra de 5 pontos) num certo dominio * @param d [in] dimensao do dominio ( d = 1,2,3 ) * @param xmin [in] vetor com os limites inferiores do dominio de integracao * @param xmax [in] vetor com os limites superiores do dominio de integracao * @param f [in] funcao generica a ser integrada * @param t [in] unidades para translacao * @return */ typedef double QuadraturaSA(int d, double xmin[], double xmax[], Funcao *f, double t); #endif