← Back to team overview

dolfin team mailing list archive

Re: Improved Function class

 

Yes.

/Anders

On Fri, Feb 10, 2006 at 08:08:41AM +0100, Johan Hoffman wrote:
> Looks great! This opens up for moving the initial conditions to the
> main-file, where I think they belong.
> 
> /Johan
> 
> 
> > Hi everyone!
> >
> > As you may have noticed, I've been working on some new demos in
> > src/demo/pde. As a consequence, I have fixed a couple of issues with
> > the Function class that we've had previously. In particular, you no
> > longer have to initalize a Vector for a Function used as initial value
> > in time-steppig.
> >
> > Here's an illustration from the new convection-diffusion demo:
> >
> > // Linear system and solver
> > Matrix A;
> > Vector x, b;
> > GMRES solver;
> >
> > // Create functions
> > ConvectionDiffusion::BilinearForm::TrialElement element;
> > Function u0 = 0.0;
> > Function u1(x, mesh, element);
> >
> > // Create forms
> > ConvectionDiffusion::BilinearForm a(velocity, delta);
> > ConvectionDiffusion::LinearForm L(u0, velocity, f, delta);
> >
> > // Assemble left-hand side
> > FEM::assemble(a, A, mesh);
> >
> > // Parameters for time-stepping
> > real T = 0.3;
> > real k = 0.01;
> > real t = k;
> >
> > // Output file
> > File file("temperature.pvd");
> >
> > // Start time-stepping
> > Progress p("Time-stepping");
> > while ( t < T )
> > {
> >   // Assemble load vector and set boundary conditions
> >   FEM::assemble(L, b, mesh);
> >   FEM::applyBC(A, b, mesh, element, bc);
> >
> >   // Solve the linear system
> >   solver.solve(A, x, b);
> >
> >   // Save the solution to file
> >   file << u1;
> >
> >   // Update progress
> >   p = t / T;
> >
> >   // Move to next interval
> >   t += k;
> >   u0 = u1;
> > }
> >
> > Note in particular the following things that you couldn't do before:
> >
> > 1. Function u0 = 0.0;
> >
> > This initializes a Function that is constant equal to zero.
> >
> > 2. u0 = u1;
> >
> > This updates the values of u0 to those of u1. u0 will change from
> > being a constant Function to a discrete Function and automatically
> > create a new Vector (previously x0) and copy the values from x1.
> > The next time, it will keep the previously created Vector and just
> > copy the values.
> >
> > I haven't actually checked the solution so I'll just keep my fingers
> > crossed I didn't break anything... :-)
> >
> > /Anders
> >
> > _______________________________________________
> > DOLFIN-dev mailing list
> > DOLFIN-dev@xxxxxxxxxx
> > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
> >
> 
> 
> 
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
> 

-- 
Anders Logg
Research Assistant Professor
Toyota Technological Institute at Chicago
http://www.tti-c.org/logg/



References