00001 
00202 #ifndef _PDE_H_
00203 #define _PDE_H_
00204 
00205 #include <mc/mc_base.h>
00206 
00207 
00208 
00209 
00210 
00211 
00212 
00219 struct sPDE {
00220 
00221    
00222 
00223 
00224 
00225 
00226 
00228     int dim;         
00230     int dimII;            
00231 
00233     int vec;              
00241     int sym[MAXV][MAXV];  
00242 
00244     double est[MAXV];             
00246     int bmap[MAXV][VMAX_BDTYPE];  
00247 
00249     void (*initAssemble)(struct sPDE *thee, int ip[], double rp[]);
00251     void (*initElement)(struct sPDE *thee, int elementType,
00252         int chart, double tvx[][3], void *data);
00254     void (*initFace)(struct sPDE *thee, int faceType,
00255         int chart, double tnvec[]);
00257     void (*initPoint)(struct sPDE *thee, int pointType,
00258         int chart, double txq[],
00259         double U[], double dU[][3]);
00260 
00263     void (*Fu)(struct sPDE *thee, int key, double F[]);
00266     double (*Ju)(struct sPDE *thee, int key);
00269     double (*Fu_v)(struct sPDE *thee, int key,
00270         double V[], double dV[][3]);
00273     double (*DFu_wv)(struct sPDE *thee, int key,
00274         double W[], double dW[][3],
00275         double V[], double dV[][3]);
00278     double (*p_wv)(struct sPDE *thee,
00279         int key, double W[], double V[]);
00280 
00283     void (*delta)(struct sPDE *thee, int type,
00284         int chart, double txq[], void *data, double F[]);
00287     void (*u_D)(struct sPDE *thee, int type,
00288         int chart, double txq[], double F[]);
00291     void (*u_T)(struct sPDE *thee, int type,
00292                 int chart, double txq[], double F[], double dF[][3]);
00293 
00296     void (*bisectEdge)(int dim, int dimII,
00297         int edgeType, int chart[], double vx[][3]);
00300     void (*mapBoundary)(int dim, int dimII, int vertexType,
00301         int chart, double vx[3]);
00304     int (*markSimplex)(int dim, int dimII,
00305         int simplexType, int faceType[4], int vertexType[4],
00306         int chart[], double vx[][3], void *data);
00309     void (*oneChart)(int dim, int dimII,
00310         int objType, int chart[], double vx[][3], int dimV);
00311 
00313     int (*simplexBasisInit)(int key, int dim, int comp,
00314         int *ndof, int dof[]);
00316     void (*simplexBasisForm)(int key, int dim, int comp,
00317         int pdkey, double xq[], double basis[]);
00318 
00321     void *user;
00322 
00323 };
00324 
00330 typedef struct sPDE PDE;
00331 
00332 
00333 
00334 
00335 
00336 
00337 
00338 #if !defined(VINLINE_PDE)
00339 
00348     void PDE_setDim(PDE *thee, int d);
00349 
00359     void PDE_setDimII(PDE *thee, int d);
00360 
00369     int PDE_dim(PDE *thee);
00370 
00379     int PDE_dimII(PDE *thee);
00380 
00389     int PDE_vec(PDE *thee);
00390 #else 
00391 #   define PDE_setDim(thee,d)         ( (thee)->dim = (d) )
00392 
00393 #   define PDE_setDimII(thee,d)       ( (thee)->dimII = (d) )
00394 
00395 #   define PDE_dim(thee)              ( (thee)->dim )
00396 
00397 #   define PDE_dimII(thee)            ( (thee)->dimII )
00398 
00399 #   define PDE_vec(thee)              ( (thee)->vec )
00400 #endif 
00401 
00402 
00403 
00404 
00405 
00406 
00407 
00416 PDE* PDE_ctor_default(void);
00417 
00426 void PDE_dtor_default(PDE **thee);
00427 
00438 int PDE_sym(PDE *thee, int i, int j);
00439 
00440 #endif 
00441 
00442