/*
 * Copyright (C) 1997-2006 P. Dular, C. Geuzaine
 *
 * 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.
 *
 * Please report all bugs and problems to <getdp@geuz.org>.
 */

#ifndef _BF_FUNCTION_H_
#define _BF_FUNCTION_H_

#include "Message.h"
#include "Data_Element.h"

#define BF_ARG  struct Element * Element, int NumEntity, \
                double u, double v, double w,  double Value[]

/* H^1 Basis Functions and their gradients */

void  BF_Node(BF_ARG) ;    
void  BF_Node_2E(BF_ARG) ; 
void  BF_Node_2F(BF_ARG) ; 
void  BF_Node_2V(BF_ARG) ; 
void  BF_Node_3E(BF_ARG) ; 
void  BF_Node_3F(BF_ARG) ; 
void  BF_Node_3V(BF_ARG) ; 
  
void  BF_GradNode(BF_ARG) ;    
void  BF_GradNode_2E(BF_ARG) ; 
void  BF_GradNode_2F(BF_ARG) ; 
void  BF_GradNode_2V(BF_ARG) ; 
void  BF_GradNode_3E(BF_ARG) ; 
void  BF_GradNode_3F(BF_ARG) ; 
void  BF_GradNode_3V(BF_ARG) ; 
  
void  BF_GroupOfNodes(BF_ARG) ;    
void  BF_GroupOfNodes_2E(BF_ARG) ; 
void  BF_GroupOfNodes_2F(BF_ARG) ; 
void  BF_GroupOfNodes_2V(BF_ARG) ; 
void  BF_GroupOfNodes_3E(BF_ARG) ; 
void  BF_GroupOfNodes_3F(BF_ARG) ; 
void  BF_GroupOfNodes_3V(BF_ARG) ; 
  
void  BF_GradGroupOfNodes(BF_ARG) ;    
void  BF_GradGroupOfNodes_2E(BF_ARG) ; 
void  BF_GradGroupOfNodes_2F(BF_ARG) ; 
void  BF_GradGroupOfNodes_2V(BF_ARG) ; 
void  BF_GradGroupOfNodes_3E(BF_ARG) ; 
void  BF_GradGroupOfNodes_3F(BF_ARG) ; 
void  BF_GradGroupOfNodes_3V(BF_ARG) ; 
  
/* H(curl) basis Functions and their curls */
  
void  BF_Edge(BF_ARG) ;      
void  BF_Edge_2E(BF_ARG) ;   
void  BF_Edge_2F(BF_ARG) ;   
void  BF_Edge_2V(BF_ARG) ;   
void  BF_Edge_3E(BF_ARG) ;   
void  BF_Edge_3F_a(BF_ARG) ; 
void  BF_Edge_3F_b(BF_ARG) ; 
void  BF_Edge_3F_c(BF_ARG) ; 
void  BF_Edge_3V(BF_ARG) ;   
void  BF_Edge_4E(BF_ARG) ;   
void  BF_Edge_4F(BF_ARG) ;   
void  BF_Edge_4V(BF_ARG) ;   
  
void  BF_CurlEdge(BF_ARG) ;     
void  BF_CurlEdge_2E(BF_ARG) ;  
void  BF_CurlEdge_2F(BF_ARG) ;  
void  BF_CurlEdge_2V(BF_ARG) ;  
void  BF_CurlEdge_3E(BF_ARG) ;  
void  BF_CurlEdge_3F_a(BF_ARG) ;
void  BF_CurlEdge_3F_b(BF_ARG) ;
void  BF_CurlEdge_3F_c(BF_ARG) ;
void  BF_CurlEdge_3V(BF_ARG) ;  
void  BF_CurlEdge_4E(BF_ARG) ;  
void  BF_CurlEdge_4F(BF_ARG) ;  
void  BF_CurlEdge_4V(BF_ARG) ;  
  
void  BF_GroupOfEdges(BF_ARG) ;    
void  BF_GroupOfEdges_2E(BF_ARG) ; 
void  BF_GroupOfEdges_2F(BF_ARG) ; 
void  BF_GroupOfEdges_2V(BF_ARG) ; 
void  BF_GroupOfEdges_3E(BF_ARG) ; 
void  BF_GroupOfEdges_3F_a(BF_ARG) ; 
void  BF_GroupOfEdges_3F_b(BF_ARG) ; 
void  BF_GroupOfEdges_3F_c(BF_ARG) ; 
void  BF_GroupOfEdges_3V(BF_ARG) ; 
void  BF_GroupOfEdges_4E(BF_ARG) ; 
void  BF_GroupOfEdges_4F(BF_ARG) ; 
void  BF_GroupOfEdges_4V(BF_ARG) ; 
  
void  BF_CurlGroupOfEdges(BF_ARG) ;     
void  BF_CurlGroupOfEdges_2E(BF_ARG) ;  
void  BF_CurlGroupOfEdges_2F(BF_ARG) ;  
void  BF_CurlGroupOfEdges_2V(BF_ARG) ;  
void  BF_CurlGroupOfEdges_3E(BF_ARG) ;  
void  BF_CurlGroupOfEdges_3F_a(BF_ARG) ;
void  BF_CurlGroupOfEdges_3F_b(BF_ARG) ;
void  BF_CurlGroupOfEdges_3F_c(BF_ARG) ;
void  BF_CurlGroupOfEdges_3V(BF_ARG) ;  
void  BF_CurlGroupOfEdges_4E(BF_ARG) ;  
void  BF_CurlGroupOfEdges_4F(BF_ARG) ;  
void  BF_CurlGroupOfEdges_4V(BF_ARG) ;  
                            
/* H(curl, perp) basis Functions and their curls */
  
void  BF_PerpendicularEdge(BF_ARG) ;    
void  BF_PerpendicularEdge_2E(BF_ARG) ; 
void  BF_PerpendicularEdge_2F(BF_ARG) ; 
void  BF_PerpendicularEdge_2V(BF_ARG) ; 
void  BF_PerpendicularEdge_3E(BF_ARG) ; 
void  BF_PerpendicularEdge_3F(BF_ARG) ; 
void  BF_PerpendicularEdge_3V(BF_ARG) ; 
  
void  BF_CurlPerpendicularEdge(BF_ARG) ;    
void  BF_CurlPerpendicularEdge_2E(BF_ARG) ; 
void  BF_CurlPerpendicularEdge_2F(BF_ARG) ; 
void  BF_CurlPerpendicularEdge_2V(BF_ARG) ; 
void  BF_CurlPerpendicularEdge_3E(BF_ARG) ; 
void  BF_CurlPerpendicularEdge_3F(BF_ARG) ; 
void  BF_CurlPerpendicularEdge_3V(BF_ARG) ; 
                                
void  BF_GroupOfPerpendicularEdges(BF_ARG) ;   
void  BF_GroupOfPerpendicularEdges_2E(BF_ARG) ;
void  BF_GroupOfPerpendicularEdges_2F(BF_ARG) ;
void  BF_GroupOfPerpendicularEdges_2V(BF_ARG) ;
void  BF_GroupOfPerpendicularEdges_3E(BF_ARG) ;
void  BF_GroupOfPerpendicularEdges_3F(BF_ARG) ;
void  BF_GroupOfPerpendicularEdges_3V(BF_ARG) ;
                                   
void  BF_CurlGroupOfPerpendicularEdges(BF_ARG) ;    
void  BF_CurlGroupOfPerpendicularEdges_2E(BF_ARG) ; 
void  BF_CurlGroupOfPerpendicularEdges_2F(BF_ARG) ; 
void  BF_CurlGroupOfPerpendicularEdges_2V(BF_ARG) ; 
void  BF_CurlGroupOfPerpendicularEdges_3E(BF_ARG) ; 
void  BF_CurlGroupOfPerpendicularEdges_3F(BF_ARG) ; 
void  BF_CurlGroupOfPerpendicularEdges_3V(BF_ARG) ; 
  
/* H(div) basis Functions and their divergences */
  
void  BF_Facet(BF_ARG) ;
  
void  BF_DivFacet(BF_ARG) ;
  
/* H(div, perp) basis Functions and their divergences */
  
void  BF_PerpendicularFacet(BF_ARG) ;      
void  BF_PerpendicularFacet_2E(BF_ARG) ;   
void  BF_PerpendicularFacet_2F(BF_ARG) ;   
void  BF_PerpendicularFacet_2V(BF_ARG) ;   
void  BF_PerpendicularFacet_3E(BF_ARG) ;   
void  BF_PerpendicularFacet_3F_a(BF_ARG) ; 
void  BF_PerpendicularFacet_3F_b(BF_ARG) ; 
void  BF_PerpendicularFacet_3F_c(BF_ARG) ; 
void  BF_PerpendicularFacet_3V(BF_ARG) ;   
void  BF_PerpendicularFacet_4E(BF_ARG) ;   
void  BF_PerpendicularFacet_4F(BF_ARG) ;   
void  BF_PerpendicularFacet_4V(BF_ARG) ;   
                               
void  BF_DivPerpendicularFacet(BF_ARG) ;     
void  BF_DivPerpendicularFacet_2E(BF_ARG) ;  
void  BF_DivPerpendicularFacet_2F(BF_ARG) ;  
void  BF_DivPerpendicularFacet_2V(BF_ARG) ;  
void  BF_DivPerpendicularFacet_3E(BF_ARG) ;  
void  BF_DivPerpendicularFacet_3F_a(BF_ARG) ;
void  BF_DivPerpendicularFacet_3F_b(BF_ARG) ;
void  BF_DivPerpendicularFacet_3F_c(BF_ARG) ;
void  BF_DivPerpendicularFacet_3V(BF_ARG) ;  
void  BF_DivPerpendicularFacet_4E(BF_ARG) ;  
void  BF_DivPerpendicularFacet_4F(BF_ARG) ;  
void  BF_DivPerpendicularFacet_4V(BF_ARG) ;  
  
/* L^2 basis Functions */
  
void  BF_Volume(BF_ARG) ; 
void  BF_VolumeX(BF_ARG) ; 
void  BF_VolumeY(BF_ARG) ; 
void  BF_VolumeZ(BF_ARG) ; 
  
/* (H^1)^3 Basis Functions */
  
void  BF_NodeX(BF_ARG) ; 
void  BF_NodeY(BF_ARG) ; 
void  BF_NodeZ(BF_ARG) ; 
void  BF_NodeX_2E(BF_ARG) ; 
void  BF_NodeY_2E(BF_ARG) ; 
void  BF_NodeZ_2E(BF_ARG) ; 
void  BF_NodeX_2F(BF_ARG) ; 
void  BF_NodeY_2F(BF_ARG) ; 
void  BF_NodeZ_2F(BF_ARG) ; 
void  BF_NodeX_2V(BF_ARG) ; 
void  BF_NodeY_2V(BF_ARG) ; 
void  BF_NodeZ_2V(BF_ARG) ; 
void  BF_NodeX_3E(BF_ARG) ; 
void  BF_NodeY_3E(BF_ARG) ; 
void  BF_NodeZ_3E(BF_ARG) ; 
void  BF_NodeX_3F(BF_ARG) ; 
void  BF_NodeY_3F(BF_ARG) ; 
void  BF_NodeZ_3F(BF_ARG) ; 
void  BF_NodeX_3V(BF_ARG) ; 
void  BF_NodeY_3V(BF_ARG) ; 
void  BF_NodeZ_3V(BF_ARG) ; 

void  BF_NodeX_D1(BF_ARG) ; 
void  BF_NodeY_D1(BF_ARG) ; 
void  BF_NodeZ_D1(BF_ARG) ; 
void  BF_NodeX_D1_2E(BF_ARG) ; 
void  BF_NodeY_D1_2E(BF_ARG) ; 
void  BF_NodeZ_D1_2E(BF_ARG) ; 
void  BF_NodeX_D1_2F(BF_ARG) ; 
void  BF_NodeY_D1_2F(BF_ARG) ; 
void  BF_NodeZ_D1_2F(BF_ARG) ; 
void  BF_NodeX_D1_2V(BF_ARG) ; 
void  BF_NodeY_D1_2V(BF_ARG) ; 
void  BF_NodeZ_D1_2V(BF_ARG) ; 
void  BF_NodeX_D1_3E(BF_ARG) ; 
void  BF_NodeY_D1_3E(BF_ARG) ; 
void  BF_NodeZ_D1_3E(BF_ARG) ; 
void  BF_NodeX_D1_3F(BF_ARG) ; 
void  BF_NodeY_D1_3F(BF_ARG) ; 
void  BF_NodeZ_D1_3F(BF_ARG) ; 
void  BF_NodeX_D1_3V(BF_ARG) ; 
void  BF_NodeY_D1_3V(BF_ARG) ; 
void  BF_NodeZ_D1_3V(BF_ARG) ; 

void  BF_NodeX_D2(BF_ARG) ; 
void  BF_NodeY_D2(BF_ARG) ; 
void  BF_NodeZ_D2(BF_ARG) ; 
void  BF_NodeX_D2_2E(BF_ARG) ; 
void  BF_NodeY_D2_2E(BF_ARG) ; 
void  BF_NodeZ_D2_2E(BF_ARG) ; 
void  BF_NodeX_D2_2F(BF_ARG) ; 
void  BF_NodeY_D2_2F(BF_ARG) ; 
void  BF_NodeZ_D2_2F(BF_ARG) ; 
void  BF_NodeX_D2_2V(BF_ARG) ; 
void  BF_NodeY_D2_2V(BF_ARG) ; 
void  BF_NodeZ_D2_2V(BF_ARG) ; 
void  BF_NodeX_D2_3E(BF_ARG) ; 
void  BF_NodeY_D2_3E(BF_ARG) ; 
void  BF_NodeZ_D2_3E(BF_ARG) ; 
void  BF_NodeX_D2_3F(BF_ARG) ; 
void  BF_NodeY_D2_3F(BF_ARG) ; 
void  BF_NodeZ_D2_3F(BF_ARG) ; 
void  BF_NodeX_D2_3V(BF_ARG) ; 
void  BF_NodeY_D2_3V(BF_ARG) ; 
void  BF_NodeZ_D2_3V(BF_ARG) ; 

void  BF_NodeX_D12(BF_ARG) ; 
void  BF_NodeY_D12(BF_ARG) ; 
void  BF_NodeZ_D12(BF_ARG) ; 

void  BF_NodeX_D12_2E(BF_ARG) ; 
void  BF_NodeY_D12_2E(BF_ARG) ; 
void  BF_NodeZ_D12_2E(BF_ARG) ; 

void  BF_GroupOfNodesX(BF_ARG) ; 
void  BF_GroupOfNodesY(BF_ARG) ; 
void  BF_GroupOfNodesZ(BF_ARG) ; 

void  BF_GroupOfNodesX_D1(BF_ARG) ; 
void  BF_GroupOfNodesY_D1(BF_ARG) ; 
void  BF_GroupOfNodesZ_D1(BF_ARG) ; 

void  BF_GroupOfNodesX_D2(BF_ARG) ; 
void  BF_GroupOfNodesY_D2(BF_ARG) ; 
void  BF_GroupOfNodesZ_D2(BF_ARG) ; 

void  BF_GroupOfNodesX_D12(BF_ARG) ; 
void  BF_GroupOfNodesY_D12(BF_ARG) ; 
void  BF_GroupOfNodesZ_D12(BF_ARG) ; 

/* Special basis Functions */
  
void  BF_Zero(BF_ARG) ; 
void  BF_One(BF_ARG) ;  
  
void  BF_Region(BF_ARG) ;
void  BF_RegionX(BF_ARG) ;
void  BF_RegionY(BF_ARG) ;
void  BF_RegionZ(BF_ARG) ;

void  BF_dRegion(BF_ARG) ;
void  BF_dRegionX(BF_ARG) ;
void  BF_dRegionY(BF_ARG) ;
void  BF_dRegionZ(BF_ARG) ;
  	       
void  BF_Global(BF_ARG) ;
void  BF_dGlobal(BF_ARG) ;

void BF_Wire(BF_ARG) ;
void BF_DivWire(BF_ARG) ;

#undef BF_ARG

#endif


syntax highlighted by Code2HTML, v. 0.9.1