> On 28 Jun 2016, at 23:45, Matthew Knepley <[email protected]> wrote: > > On Tue, Jun 28, 2016 at 6:47 PM, Sander Arens <[email protected] > <mailto:[email protected]>> wrote: > Please reply to all, so that other people can also read this discussion on > the mailing list. > > I do currently have problems understanding the inner workings of PetscFE. For > example how the element matrix is assembled. As far as I could deduce from > your example, g3_uu_3d is the fourth-order elasticity tensor which means that > we should form the double-dot product of it with the strain for it to be the > integrand of the gradient of the basis functions ( int_omega > [g3:epsilon]•grad(v) d omega). So for a linear elastic problem, according to > my understanding, g3 should be the elasticity tensor and g0,g1,g2 = NULL if > there is no volumetric force. And the residual should be f0 = 0 ; f1= the > cauchy stress tensor. > > Yes, that seems correct. > > I also have troubles understanding how to apply boundary conditions. There > seems to be the concept of DMAddBoundary() and the PetscDSSetBdJacobian() and > PetscDSSetBdResidual(). I struggle to understand what sets them apart from > each other. My impression is that DMAddBoundary() is for Dirichlet and > Neumann conditions and that PetscDSSetBdJacobian() and PetscDSSetBdResidual() > are for BC types that do not fall in those categories? > Note that you can also use PetscDSAddBoundary now (if you use the master > branch). DMAddBoundary is basically used to tell which boundary region to > apply which bc. If it's a Dirichlet bc you have to provide a function to > prescribe the values on the boundary, if it's a Neumann bc you just give it > NULL. PetscDSSetBdJacobian() and PetscDSSetBdResidual() are for Neumann bcs. > The reason why there's this difference for Dirichlet and Neumann bcs is > because for finite elements you need to assemble stuff for non-zero Neumann > bcs while for Dirichlet you set some dofs to some prescribed value. Ok, that makes sense. I did not find documentation on PetscDSAddBoundary but I managed to use the old functions to impose the correct BC. > > ex77 works with the options you provided me with. However the solver does not > seem to converge. > What do you mean that it works but it doesn't converge? Did you use all the > options I provided you? In case not, you should send the output of -snes_view. > > The output of -ksp_view -ksp_monitor_true_residual -ksp_converged_reason I must have made some changes without noticing when i tried to follow the workings of the ex77 sourcecode, my apologies. I copied the example again and it runs and converges fine now with the options you provided. If I change -dim to 2 however it does not converge and / or produce the correct Jacobian. But as far as I understand, ex77 is not intended to run in 2D. > > The problem I have with the documentation online so far is that I fail to > fully understand how to apply petscFE. I did for example not know that you > had to set the order of the finite element space and I have the feeling that > there is much more I am missing. > > I don't really understand what you mean with "applying PetscFE". > I think the simplest way to learn how to use it is to start from one of the > examples and if you don't understand what a function does you look it up in > the documentation. If you want to see what kind of options there are for some > object, for example petscspace, you add "-help|grep petscspace" to the > command line. > > PetscFE is a Ciarlet triple (P, P', K) meaning a PetscSpace for the primal > space P, PetscDualSpace for the dual space P', and reference > cell K which is a DM. The main function of PetscFE is to tabulate the basis > at quadrature points, and to act with dual space basis vectors > on functions. > I have troubles to understand what you mean with “tabulate the basis” and I am not too familiar with the concept of dual spaces. My intention is to use the PetscFE infrastructure to construct the global Jacobian to give to the nonlinear solver. As a simple example, I tried using snes for solving a linear elastic problem in 2D and PetscFE to create the Jacobian and to impose the BC. I do now have a program that runs and gives the correct solution if I use the matrix-free SNES solver. -snes_type test gives a ratio of 0.45 however and I am almost certain that the stiffness tensor I create is correct (I checked the assembly algorithm in numpy and it gives the expected cauchy stress tensor). The only explanation I have left is some misunderstanding on my side about how the double contraction works in Petsc.
Thank you, M. Hartig > Thanks, > > Matt > > Thanks, > Sander > > On 28 June 2016 at 17:47, <[email protected] > <mailto:[email protected]>> wrote: > Yes, that was vague, I should have formulated that better. > What I’m trying to accomplish is writing a FEM code to calculate deformation > and stress of structure. As a first step analysing a linear elastic and > static problem in 2D, which I plan to extend to a elastic-plastic transient > analysis for a 3D case. > > I do currently have problems understanding the inner workings of PetscFE. For > example how the element matrix is assembled. As far as I could deduce from > your example, g3_uu_3d is the fourth-order elasticity tensor which means that > we should form the double-dot product of it with the strain for it to be the > integrand of the gradient of the basis functions ( int_omega > [g3:epsilon]•grad(v) d omega). So for a linear elastic problem, according to > my understanding, g3 should be the elasticity tensor and g0,g1,g2 = NULL if > there is no volumetric force. And the residual should be f0 = 0 ; f1= the > cauchy stress tensor. > > I also have troubles understanding how to apply boundary conditions. There > seems to be the concept of DMAddBoundary() and the PetscDSSetBdJacobian() and > PetscDSSetBdResidual(). I struggle to understand what sets them apart from > each other. My impression is that DMAddBoundary() is for Dirichlet and > Neumann conditions and that PetscDSSetBdJacobian() and PetscDSSetBdResidual() > are for BC types that do not fall in those categories? > > ex77 works with the options you provided me with. However the solver does not > seem to converge. > > The problem I have with the documentation online so far is that I fail to > fully understand how to apply petscFE. I did for example not know that you > had to set the order of the finite element space and I have the feeling that > there is much more I am missing. > > Thank you for your precious time, > > M. Hartig > > >> On 28 Jun 2016, at 14:30, Sander Arens <[email protected] >> <mailto:[email protected]>> wrote: >> >> What are you trying to do with it? I don't think there's more documentation >> on how to use PetscFE than what's already in the online documentation and in >> the examples. >> What do you mean with "grasp the concept"? >> >> Thanks, >> Sander >> >> On 27 June 2016 at 17:41, <[email protected] >> <mailto:[email protected]>> wrote: >> That did do the trick with the examples, thank you. I am still struggling >> with my own simple example however. Is there any documentation available on >> how to use petscFE? I could not find anything besides the three examples. >> And I yet have to grasp the concept. >> >> >> Thanks in advance, >> M. Hartig >> >>> On 27 Jun 2016, at 15:49, Sander Arens <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> I think you forgot to set the order of the finite element spaces, which >>> default to 0. Does it work if you try for example ex77 with the following >>> options found here? >>> <https://bitbucket.org/petsc/petsc/src/8bc5349a152c81f25b59a9592e1e5936c01866af/config/builder.py?at=master&fileviewer=file-view-default#builder.py-562> >>> >>> Thanks, >>> Sander >>> >>> On 27 June 2016 at 15:28, <[email protected] >>> <mailto:[email protected]>> wrote: >>> Dear Petsc developer team, >>> >>> while learning the ways of the petscFE I came across a curiosity I’d like >>> to point out to you. The Jacobians that are created from the petscFE object >>> seem to have only 0-entries (apart from the obviously empty regions) in >>> examples 12 and 77. That might be due to a limited understanding from my >>> side on how exactly petscFE and the mentioned examples work, but it struck >>> me as unusual. >>> >>> Thanks in advance, >>> >>> M. Hartig >>> >> >> > > > > > > -- > What most experimenters take for granted before they begin their experiments > is infinitely more interesting than any results to which their experiments > lead. > -- Norbert Wiener
