PDA

View Full Version : linear -> quasi-linear -> nonlinear



pazdzioch
05-21-2007, 12:02 AM
Hi there:)

I would like to learn what are the possibilities of inclusion of some nonlinear corrections to some pdes being solved with PDE2D. In general the problem I solve is "highly nonlinear" (MHD equations in physics) but because of its complexity people tend to linearize it what seems to be a good approximation. Presently I would like to see what is the influence of only one nonlinear effect so the model I plan to use is a quasi-linear one. That means in this case the nonlinearities appear in 8 equations only (8 from 38). My question is following:

Are there any chances of setting the problem as a quasi-linear in the PDE2D code to? The only distinction I see now is 'LINEAR = .TRUE.' or 'LINEAR = .FALSE.' and that is meant, as I see, for the whole system no matter where the nonlinearities appear.

I have no idea how to find any solution for this problem:p Honestly I don't think its possible, but it is always good to ask:D

Thank You!

sewell
05-21-2007, 05:23 AM
Notice in subroutine pdes8z (and gb8z) the comments:
UN8Z(1,I),UN8Z(2,I) hold the (rarely used) values of UI,UIx on
the previous time step or iteration.

Thus if you have an equation such as Ut = Uxx + exp(U), normally
you would just set LINEAR=.FALSE. and solve as a truly nonlinear
problem, but you could solve as Ut = Uxx + exp(UN8Z(1,1)) and it
would solve as if it were linear, but with the value of U in exp(U)
set to the value(s) on the last time step. So I guess this is what
you mean by solving as a quasilinear problem, isn't it?

I'm not sure there is much advantage of doing this as opposed to
solving as a nonlinear problem, in the time-dependent case (such as
your problem), but it is sometimes useful for highly nonlinear steady-state
problems, occasionally the "quasi-linear" approach will produce convergence
where the fully nonlinear approach will not.

pazdzioch
05-21-2007, 05:46 AM
I had exactly something like that in mind:) I have been thinking also about the technique of solving the problem linearly but with updating the matrix each n-th step (in order to cut the problem for pieces I should set NPROB much greater than 1). Could you tell me what might be more convenient? Do you have any idea which method gives more reliable results?

Thank you very much!:)

sewell
05-21-2007, 06:12 AM
If you have a linear (time-dependent) problem, where nothing but nonhomogeneous terms are functions of time, you can set NOUPDT=.TRUE. and only one LU decomposition will be done, on the first time step, and the savings in computer time is enormous. If you change to a nonlinear model (or quasi-linear), the matrix will change every step, and you should not set NOUPDT=.TRUE., as you know. However, you can, as I think you also have noticed, break the problem into many parts, with say, NPROB = 10 and set T0=(IPROB-1)*DT0, TF=IPROB*DT0, RESTRT=.TRUE., GRIDID=.TRUE., and, say NSTEPS=100, NOUPDT=.TRUE.. In this case, you will be taking a total of 1000 steps, but updating the matrix only every 100 steps (of size DT0/100), that might be reasonable if the problem is only slightly nonlinear.

Normally it is dangerous to set NOUPDT=.TRUE. for a nonlinear problem, in fact earlier versions automatically reset NOUPDT to .FALSE. if the user set LINEAR=.FALSE., but that is not done any more, to allow users to do precisely what you are thinking about doing. But be aware that if the matrix is changing rapidly and you are not updating, you could get bad answers, you'll need to rerun with different values of NPROB/NSTEPS to be sure the answers are good.

I would like to emphasize for the benefit of other readers, that for time-dependent problems, PDE2D users should normally ask for adaptive time step control, and then you will not need to even think about updating frequency of the matrix. This user has a problem which requires a very large amount of computer time, however, and he is trying some more sophisticated approaches to control the CPU time.

pazdzioch
05-21-2007, 06:20 AM
Hard work in front of me then:) Thank you once again!