Dear Abbas, Dear Prof. Bangerth,
Thank you very much for your fast replies to my post. I'm sorry for not having found step-74 myself before. step-74 is I think indeed what I am looking for: However, when I played around with step-74, I ran into the following two issues: (1) trying to solve in 1D: - I get errors of the following type: *error: ‘class dealii::DoFAccessor<0, 1, 1, false>’ has no member named ‘measure’ 411 | re() / cell->face(face_no)->measure();* * I can make it run by removing the calls to these functions and replace the penalty factor which would involve them by a constant number, which according to the output seems to work o.k. but might need further tuning of the penalty constant (here just chosen as a constant of 100).* degree = 1 | cycle | cells | dofs | L2 | L2...red.rate.log2 | H1 | H1...red.rate.log2 | Energy | | 0 | 4 | 8 | 5.426e-03 | - | 7.226e-02 | - | 7.458e-02 | | 1 | 8 | 16 | 1.360e-03 | 2.00 | 3.619e-02 | 1.00 | 3.745e-02 | | 2 | 16 | 32 | 3.428e-04 | 1.99 | 1.818e-02 | 0.99 | 1.894e-02 | | 3 | 32 | 64 | 8.852e-05 | 1.95 | 9.267e-03 | 0.97 | 9.894e-03 | | 4 | 64 | 128 | 4.032e-05 | 1.13 | 7.273e-03 | 0.35 | 9.568e-03 | | 5 | 128 | 256 | 1.461e-05 | 1.46 | 4.961e-03 | 0.55 | 6.636e-03 | | 6 | 256 | 512 | 4.876e-06 | 1.58 | 2.073e-03 | 1.26 | 2.706e-03 | | 7 | 512 | 1024 | 1.837e-05 | -1.91 | 8.917e-03 | -2.10 | 1.260e-02 | | 8 | 1024 | 2048 | 4.070e-06 | 2.17 | 2.706e-03 | 1.72 | 3.817e-03 | | 9 | 2048 | 4096 | 2.449e-07 | 4.06 | 2.652e-04 | 3.35 | 3.474e-04 | - *This first point however is less important than (2) below, because my desired usecase is anyways either 2D or 3D, so I could adjust the boundary conditions to make the 2D essentially 1D. However, it would of course be nice to be able to solve a simple 1D problem as the one described in the .pdf first.* (2) trying to solve for polynomial degree 0 (i.e. piecewise constant): - *When I try to solve the default convergence_rate test case in step-74 with degree p = 0, I don't see a decrease in the L2 norm of the solution. I tested different values for the penalty_factor for which the given function would evaluate to 0 because of the p*(p+1) term. I tested just removing the p*(p+1) term and also tested constants like 1000 or 0.001, but in all cases, I got results similar to the table below, whre the L2 norm does not decrease. The table below is for the case with penalty term * = 0.5 * (1. / cell_extent_left + 1. / cell_extent_right); degree = 0 | cycle | cells | dofs | L2 | L2...red.rate.log2 | H1 | H1...red.rate.log2 | Energy | | 0 | 16 | 16 | 3.016e-01 | - | 4.443e+00 | - | 6.045e+00 | | 1 | 64 | 64 | 2.273e-01 | 0.41 | 4.443e+00 | 0.00 | 5.680e+00 | | 2 | 256 | 256 | 2.284e-01 | -0.01 | 4.443e+00 | 0.00 | 5.554e+00 | | 3 | 1024 | 1024 | 2.368e-01 | -0.05 | 4.443e+00 | 0.00 | 5.497e+00 | | 4 | 4096 | 4096 | 2.428e-01 | -0.04 | 4.443e+00 | 0.00 | 5.470e+00 | | 5 | 16384 | 16384 | 2.462e-01 | -0.02 | 4.443e+00 | 0.00 | 5.456e+00 | | 6 | 65536 | 65536 | 2.481e-01 | -0.01 | 4.443e+00 | 0.00 | 5.448e+00 | Maybe this is well-known and it shouldn't work. However, it would be nice to be able to solve with degree 0 because that would allow me to mimic a finite volume type implemenation. Thank you very much again on any hints how I could resolve either of the two issues. Best regards, Nik On Friday, June 21, 2024 at 12:11:32 AM UTC+2 Wolfgang Bangerth wrote: > Since the equations I'm trying to solve are conservations laws, I would like > to use a finite volume type of implementation. I know that deal.ii is a finite > element library. However, since I would like to use a fully implicit approach > and later hopefully octree refined grids, I think deal.ii offers the things > needed for this task as well as many functionalities and interfaces for future > tasks. This is true, but before you get fully settled on FV methods, may I suggest that you also think about the accuracy you get for the simplicity? If you use piecewise constants (=finite volumes), the best you can hope for is O(h) accuracy. That's quite inaccurate. By using finite element methods, you will generally be able to obtain much better accuracy (not just in terms of the convergence *rate*, but in *absolute errors*). I agree, the discontinuous elements are very promising for this because ideally, I could (1) recover the desired finite volume formulation for degree 0, (2) keep the conservativeness and (3) easily get better accuracy by using higher order elements. > To start, I've summarized a simplified problem I would like to solve in the > appended .pdf file. It's a 1D Laplace equation using finite volumes. I think I understand what you want to do, but you may want to see if you can make your writing more precise. For example, in (4), you say you integrate over S, but you're missing the normal vector that in your case is either +1 or -1, but is necessary to ensure that the formula is correct. You can see that in the transition between (5) and (6) where a minus sign magically appears in front of the first term. Of course, (5) and (6) are also not exactly equal, but only approximately. Second, in (6) there magically appears a factor of h^2 for which I don't have an explanation. (No need to write back to these comments -- I just wanted to point it out, the teacher in me can't just let it go ;-) ) Thank you very much for the comments - helps me to be more precise. > I would like to build on the step-12 or step-12b tutorials because they use > discontinuous elements too. I don't call the beta function of the original > tutorials such that a 1D version should be possible. > > The appended nik-step-12.cc file contains a hard-coded version of the three > assembly functions that results in the correct matrix and solution for a very > specific case described in the .pdf (section 3). > > My questions would therefore be the following: > > * How should I best write the three functions (cell, boundary and interior > face worker) for the matrix/RHS assembly with as less hard-coding as > possible for a finite volume scheme like equations (7-9) in the .pdf. > * Related - How can I access the elements of the solution vector (phi_i) of > the current cell and neighbor cell that are used for example in equation > (7) in the .pdf. As already mentioned by Abbas, step-74 gives a good overview. Best W. On Friday, June 21, 2024 at 12:11:32 AM UTC+2 Wolfgang Bangerth wrote: > > > Since the equations I'm trying to solve are conservations laws, I would > like > > to use a finite volume type of implementation. I know that deal.ii is a > finite > > element library. However, since I would like to use a fully implicit > approach > > and later hopefully octree refined grids, I think deal.ii offers the > things > > needed for this task as well as many functionalities and interfaces for > future > > tasks. > > This is true, but before you get fully settled on FV methods, may I > suggest > that you also think about the accuracy you get for the simplicity? If you > use > piecewise constants (=finite volumes), the best you can hope for is O(h) > accuracy. That's quite inaccurate. By using finite element methods, you > will > generally be able to obtain much better accuracy (not just in terms of the > convergence *rate*, but in *absolute errors*). > > > > To start, I've summarized a simplified problem I would like to solve in > the > > appended .pdf file. It's a 1D Laplace equation using finite volumes. > > I think I understand what you want to do, but you may want to see if you > can > make your writing more precise. For example, in (4), you say you integrate > over S, but you're missing the normal vector that in your case is either > +1 or > -1, but is necessary to ensure that the formula is correct. You can see > that > in the transition between (5) and (6) where a minus sign magically appears > in > front of the first term. Of course, (5) and (6) are also not exactly > equal, > but only approximately. > > Second, in (6) there magically appears a factor of h^2 for which I don't > have > an explanation. > > (No need to write back to these comments -- I just wanted to point it out, > the > teacher in me can't just let it go ;-) ) > > > > I would like to build on the step-12 or step-12b tutorials because they > use > > discontinuous elements too. I don't call the beta function of the > original > > tutorials such that a 1D version should be possible. > > > > The appended nik-step-12.cc file contains a hard-coded version of the > three > > assembly functions that results in the correct matrix and solution for a > very > > specific case described in the .pdf (section 3). > > > > My questions would therefore be the following: > > > > * How should I best write the three functions (cell, boundary and > interior > > face worker) for the matrix/RHS assembly with as less hard-coding as > > possible for a finite volume scheme like equations (7-9) in the .pdf. > > * Related - How can I access the elements of the solution vector (phi_i) > of > > the current cell and neighbor cell that are used for example in equation > > (7) in the .pdf. > > As already mentioned by Abbas, step-74 gives a good overview. > > Best > W. > > -- > ------------------------------------------------------------------------ > Wolfgang Bangerth email: bang...@colostate.edu > www: http://www.math.colostate.edu/~bangerth/ > > > -- The deal.II project is located at http://www.dealii.org/ For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en --- You received this message because you are subscribed to the Google Groups "deal.II User Group" group. To unsubscribe from this group and stop receiving emails from it, send an email to dealii+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/876b0c3f-c185-49c8-911a-7a5c4a143fe3n%40googlegroups.com.