/*************************************************************************** * 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 _INICIALIZA_H_ #define _INICIALIZA_H_ #include #include #include #include #include "bool.h" #include "definicoes.h" #include "arvore.h" /** * Condicao inicial do problema de equacoes diferenciais parciais * @param d [in] dimensao do dominio * @param x [in] coordenada dum ponto no eixo x * @param y [in] coordenada dum ponto no eixo y * @param z [in] coordenada dum ponto no eixo z * @return */ double condicaoinicial(int d, double x, double y, double z); /** * Percorre recursivamente a arvore, da raiz para as folhas. * Calcula o valor das medias nos niveis mais finos e a previsao dos valores da media usando interpolacao quadratica. * Estipula criterios para uma celula ser ou nao dividida, mantendo uma estrutura gradual no refinamento. Nao ha * diferenca de mais de um nivel de refinamento entre vizinhos. As celulas que sao folhas mas tem um vizinho com filho * possui uma folha virtual(necessario para calculo do fluxo). * @param d [in] dimensao do dominio * @param pac [in/out] conjunto de arvores, no centro esta a arvore onde sera apicada a sintese * @param xmin [in] coordenadas do vertice esquerdo/inferior da celula * @param xmax [in] coordenadas do vertice direito/superior da celula * @param profund [in] profundidade de um certo no na arvore * @param (pred) [in] esquema de previsao nao linear (Harten) * @param niv [in] quantidade de niveis da arvore * @param lim [in] previsao sera feita a partir desse nivel * @param (f) [in] funcao a ser discretizada (no caso, solucao inicial da edp) * @param (integra) [in] regra de integracao * @param eps [in] parametro de tolerancia * @return */ void inicia(int d, VNo pac[], double xmin[], double xmax[], int profund, Preditor pred, int niv, int lim, Funcao *f, Quadratura integra, double eps); /** * Calcula os limites superior e inferior da celula filha. * @param d [in] dimensao do dominio * @param ex [in] eixo ortogonal ao hiperplano de corte * @param qual [in] diz de qual filho eh para calcular os limites * @param xmin [in] coordenadas do vertice inferior do pai * @param xmax [in] coordenadas do vertice superior do pai * @param xmin_fil [out] coordenadas do vertice inferior do filho {qual} * @param xmax_fil [out] coordenadas do vertice superior do filho {qual} * @return */ void limites_celula(int d, int ex, int qual, double xmin[], double xmax[], double xmin_fil[], double xmax_fil[]); /** * Cria malha inicial... * @param d [in] dimensao do dominio * @param pac[] [in] pacote de vponteiros e medias celulares * @param xmin[] [in] limite inferior da celula filho * @param xmax[] [in] limite superior da celula filho * @param prof [in] profundidade do no na malha * @param pred [in] operador de previsao * @param niv [in] numero de niveis na malha * @param lim [in] limite na profundidade ate onde a funcao pode avancar * @param f [in] funcao a ser discretizada * @param integra [in] regra de integracao, quadratura de Gauss 5 pontos * @param eps [in] parametro de tolerancia * @return */ void inicia2(int d, VNo pac[], double xmin[], double xmax[], int profund, Preditor pred, int niv, int lim, Funcao *f, Quadratura integra, double eps); #endif