by the way, the increment size is like that for a 100 lengh model, the increment is set to 0.05, the engineering strain is around 5%% per load step. This is already too small increment size for a large deformation analysis. a 0.5 increment size leads to both linear search and trust region failed. linear search failed for 0.05 while trust region converges with 17 Newton iterations each load step. Rong
----- Original Message ----- From: "Tian(ICT)" <[email protected]> To: "PETSc users list" <petsc-users at mcs.anl.gov> Sent: Tuesday, May 10, 2011 11:37 AM Subject: Re: [petsc-users] nonzero prescribed boundary condition > First, thanks again, the issue was gone. > > I just followed up with some test results. > I have tested SNES using one finite element for a geometric large > deformation problem. > Those are just the very early test results so they may be not telling what > happened exactly. > For the displacement controlled load, I found that convergence is much > slower than that of force loading. > Even worse, linear search is so sensitive to the displacement increment > and diverged no matter what the increment size was used (too small > incremnt also led to diverged soloution (-6 reason), trust region works > well in the sense of not sensitive to the displacement increment, but > during each load step, it requires around ten to several tens of Newton > interations whereas for the force loading case and the almost same amount > of deformation, this is normally 3. This is against my expectation. Any > hint? > > Rong > > ----- Original Message ----- > From: "Barry Smith" <bsmith at mcs.anl.gov> > To: "PETSc users list" <petsc-users at mcs.anl.gov> > Sent: Tuesday, May 10, 2011 10:22 AM > Subject: Re: [petsc-users] nonzero prescribed boundary condition > > > > On May 9, 2011, at 9:15 PM, Tian(ICT) wrote: > >> Dear Barry, Thanks a lot for quick answering. >> I checked the development documents and found the new version of >> MatZeroRows() does support the nonzero prescribed boundary conditions. >> >> I followed up with more details. >> I am using Petasc 2.3.3. to solve a nonlinear problem, e.g. using SNES >> solvers. >> I used a displacement-controlled load (as this type of loading works well >> for all cases). >> This is the reason the nonzero prescribed boundary came up. >> >> In FormJacobian, I modified Jacobian and residual to satisfy the nonzero >> prescribed boundary. >> In FormFunction, I modified the solution to the known solution(this >> should not be necessary as the modified Jacobian and rhs should give the >> prescribed solution also) > > You should not do it this way. See below. >> >> Now I found another issue, no matter if I prescried the solution or not >> in FormFunction, >> SNES solver always call FormFunction and never call FormJacobian. > > The only reason it would not call FormJacobian is if decided that the > residual norm was small enough before any Newton steps; for example if the > FormFunction() computed exactly the zero function initially. When you run > with -snes_monitor -ksp_monitor what does it print for residual norms. > >> Of course the solver finally diverged or converged to a zero solution. >> >> So my quick follow up question is How a displacement-controled load is >> done corrently in Petsc 2.3.3? > > To do it in 2.3.3 simply have for those components of F() the formula > F_i = x_i - givenvalue_i and in your Jacobian just use MatZeroRows() for > those rows > > We strongly urge you to upgrade to the latest PETSc before doing > anything further. > > > Barry > >> >> Rong >> >> ----- Original Message ----- From: "Barry Smith" <bsmith at mcs.anl.gov> >> To: "PETSc users list" <petsc-users at mcs.anl.gov> >> Sent: Tuesday, May 10, 2011 9:31 AM >> Subject: Re: [petsc-users] nonzero prescribed boundary condition >> >> >> >> In petsc-dev http://www.mcs.anl.gov/petsc/petsc-as/developers/index.html >> we have modified the calling sequence for MatZeroRows() so that it can >> automatically adjust the appropriate right hand side values for the >> zeroed rows to support zero or non-zero prescribed boundary conditions >> easily. >> >> Barry >> >> On May 9, 2011, at 8:18 PM, Tian(ICT) wrote: >> >>> Dear all, >>> >>> I got this question long ago and searched the prior posting but did not >>> find the solution. >>> The question is about nonzero prescribed boundary condition. >>> My understanding is that MatZeroRows() works only for zero prescribed >>> value, not non-zero value. >>> For the non-zero values, we have to remove the rows associated with the >>> boundary, but this >>> will lead to a zero dignal and accordingly the rows in r.h.s should also >>> be removed. >>> My question is that does MatZeroRows() also works for nonzero prescribed >>> boundary and if so how to do it simply? >>> >>> Rong >> >> > > >
