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