242 const int nnodes_per_cell=3;
243 const int nedges_per_cell=3;
257 for (
int icell=0; icell<ncells; icell++)
261 for (
int inode=0;inode<nnodes_per_cell;inode++)
263 int k=cells(icell,inode);
264 Rhs(k)-=source(k)*npar(inode);
265 fkappa(Sol(k),kappa(inode),dkappa(inode));
268 for (
int iedge=0;iedge<nedges_per_cell;iedge++)
270 int i0=edgenodes(iedge,0);
271 int i1=edgenodes(iedge,1);
272 int k0=cells(icell,i0);
273 int k1=cells(icell,i1);
276 double flux=epar(iedge)*0.5*(kappa(i0)+kappa(i1))*(Sol(k0)-Sol(k1));
280 SGlobal(k0,k0)+= epar(iedge)*( 0.5*(kappa(i0)+kappa(i1))+0.5*dkappa(i0)*(Sol(k0)-Sol(k1)));
281 SGlobal(k0,k1)+= epar(iedge)*(-0.5*(kappa(i0)+kappa(i1))+0.5*dkappa(i1)*(Sol(k0)-Sol(k1)));
282 SGlobal(k1,k0)+= epar(iedge)*(-0.5*(kappa(i0)+kappa(i1))-0.5*dkappa(i0)*(Sol(k0)-Sol(k1)));
283 SGlobal(k1,k1)+= epar(iedge)*( 0.5*(kappa(i0)+kappa(i1))-0.5*dkappa(i1)*(Sol(k0)-Sol(k1)));
const int ncells() const
Return number of cells.
void compute_local_formfactors(const int icell, const numcxx::DArray2 &points, const numcxx::IArray2 &cells, numcxx::DArray1 &epar, numcxx::DArray1 &npar, double &vol)
void flush()
Re-create the internal data structure in order to accomodated all newly created elements.
const TArray2< double > & get_points() const
Get array of point coordinates.
void assemble_apply_bc(const numcxx::SimpleGrid &grid, const numcxx::DArray1 &bcfac, const numcxx::DArray1 &bcval, numcxx::DSparseMatrix &SGlobal, numcxx::DArray1 &Sol, numcxx::DArray1 &Rhs)
One dimensional array class.
Two-dimensional array class.
const int npoints() const
Return number of points.
const TArray2< int > & get_cells() const
Get array of point indices describing cells.
const int spacedim() const
Return dimension of space.