00001
00002 void stokes() {
00003 std::map<std::pair<int,int>,double> A;
00004 std::map<std::pair<int,int>,double> B;
00005 std::map<std::pair<int,int>,double> C;
00006 std::map<int, double> b;
00007 std::pair<int,int> index;
00008
00009 FiniteElement vfe;
00010 FiniteElement pfe;
00011
00012 Triangle triangle; Mesh mesh;
00013 int ig, jg;
00014 int t=0;
00015 for ( triangle = mesh.iter.begin(); triangle != mesh.iter.end(); triangle++) {
00016 t++;
00017 vfe.set(triange);
00018 pfe.compute_basis_functions();
00019
00020
00021 for (int i=1; i <= vfe.nbf; i++) {
00022 ig = vdofs.glob_dof(t, i , vfe.dof(i));
00023 index.first = ig;
00024 for (int j=1; j <= vfe.nbf; j++) {
00025 jg = vdofs.glob_dof(t, j, vfe.dof(j));
00026 index.second = jg;
00027 A[index] += integral(triangle,grad(vfe.N(i)*grad(vfe.N(j))));
00028 }
00029 b[ig] += integral(triangle,f*vfe.N(i));
00030 }
00031
00032
00033 for (int i=1; i <= vfe.nbf; i++) {
00034 ig = vdofs.glob_dof(t, i, vfe.dof(i));
00035 index.first = ig;
00036 for (int j=1; j <= vfe.nbf; j++) {
00037 jg = pdofs.glob_dof(t, i, pfe.dof(j));
00038 index.second = jg;
00039 B[index] += integral(triangle,vfe.N(i)*grad(pfe.N(j)));
00040 }
00041
00042
00043 for (int i=1; i <= pfe.nbf; i++) {
00044 ig = pdofs.glob_dof(t, i, pfe.dof(i));
00045 index.first = ig;
00046 for (int j=1; j <= vfe.nbf; j++) {
00047 jg = vdofs.glob_dof(t, j, vfe.dof(j));
00048 index.second = jg;
00049 C[index] += integral(triangle, div(vfe.N(i))*pfe.N(j));
00050 }
00051
00052
00053 }
00054
00055
00056