man fem_FEM (Fonctions bibliothèques) - this class drives the resolution of the pde using the Finite Element Method.
NAME
fem::FEM - this class drives the resolution of the pde using the Finite Element Method.
SYNOPSIS
#include <femSolver.hpp>
Public Member Functions
DECLARE_TYPE (femMesh::femPoint, femPoint)
Typedefs.
DECLARE_TYPE (femMesh::femTriangle, femTriangle)
DECLARE_TYPE (creal *, cmatptr)
DECLARE_TYPE (float *, matptr)
FEM (femMeshPtr=0, int quadra=0)
default constructor
~FEM ()
destructor
float solvePDE (fcts *param, int how)
solve the PDE
creal deriv (int m, creal *f, int ksolv, int i)
creal convect (creal *f, creal *u1, creal *u2, float dt, int i)
creal rhsConvect (creal *f, creal *u1, creal *u2, float dt, int i)
creal fctval (creal *f, float x, float y)
int getregion (int k)
creal gfemuser (creal what, creal *f, int i)
creal P1ctoP1 (creal *f, int i)
creal prodscalar (creal *f, creal *g)
creal ginteg (int, int, int, creal *, creal *, int)
creal binteg (int, int, int, creal *, creal *, int)
void initvarmat (int how, int flagcomplexe, int N, fcts *param)
void assemble (int how, int flagcomplexe, int N, int k, creal *a, creal *b, fcts *param)
void solvevarpde (int N, fcts *param, int how)
Public Attributes
float * normlx
float * normly
Detailed Description
this class drives the resolution of the pde using the Finite Element Method.
Author: Christophe Prud'homme <Christophe.Prudhomme@ann.jussieu.fr>
See also: femMesh
Version: #
Id.RS 4 femSolver.hpp,v 1.2 2001/07/12 14:11:57 prudhomm Exp
#
Member Function Documentation
int fem::FEM::getregion (int k)
Returns: the ngt of a femTriangle to which belongs vertex k
1277 {
1278 return __mesh->ngt[listHead[i]];
1279
1280 }
float fem::FEM::solvePDE (fcts * param, int how)
solve the PDE
Parameters:
param contain all the possible data for computation
how defines if the P1 quadrature
1001 {
1002 long nsl = ((long) ns) * (2 * ((long) bdth) + 1);
1003 int factorize = 1;
1004
1005 if (how > nhowmax)
1006 erreur ('Too many linear systems');
1007 if (how < 0)
1008 {
1009 factorize = 0;
1010 how = -how;
1011 if (((how > nhow1) && (N == 1)) || ((how > nhow2) && (N == 2)))
1012 {
1013 sprintf (errbuf, 'solve(..,'-%d') refers to an inexistant system', how);
1014 erreur (errbuf);
1015 }
1016 }
1017 if (((how > nhow1) && (N == 1)) || ((how > nhow2) && (N == 2)))
1018 {
1019 switch (N)
1020 {
1021 case 1:
1022 if (flag.complexe)
1023 a1c[nhow1++] = new creal[nsl];
1024 else
1025 a1[nhow1++] = new float[nsl];
1026
1027 break;
1028 case 2:
1029 a2[nhow2++].init (nsl);
1030 break;
1031 }
1032 }
1033 if (flag.complexe)
1034 {
1035 if (N == 1)
1036 return pdeian (a1c[how - 1], param->sol1c, param->f1c, param->g1c, param->p1c, param->b1c,
1037 param->nuxx1c, param->nuxy1c, param->nuyx1c, param->nuyy1c, param->a11c,
1038 param->a21c, param->c1c, factorize);
1039 else if (N == 2)
1040 return pdeian (a2[how - 1], param->sol2, param->f2, param->g2, param->p2, param->b2,
1041 param->nuxx2, param->nuxy2, param->nuyx2, param->nuyy2, param->a12,
1042 param->a22, param->c2, factorize);
1043 else
1044 return -1.F;
1045
1046 }
1047 else
1048 {
1049 if (N == 1)
1050 return pdeian (a1[how - 1], param->sol1, param->f1, param->g1, param->p1, param->b1,
1051 param->nuxx1, param->nuxy1, param->nuyx1, param->nuyy1, param->a11,
1052 param->a21, param->c1, factorize);
1053 else if (N == 2)
1054 return pdeian (a2[how - 1], param->sol2, param->f2, param->g2, param->p2, param->b2,
1055 param->nuxx2, param->nuxy2, param->nuyx2, param->nuyy2, param->a12,
1056 param->a22, param->c2, factorize);
1057 else
1058 return -1.F;
1059 }
1060 }
Author
Generated automatically by Doxygen for FreeFem from the source code.