Please hit "reply to all" to make sure questions go to libmesh-users;
if I didn't know that this stuff was getting archived to let Google
help additional users later, I doubt I'd find the time to answer as
many questions in the first place.

On Wed, 11 Jan 2012, Ataollah Mesgarnejad wrote:

Correct me if I'm wrong please, but it seems that this doesn't have any support 
for the vectors and matrices that you add to
your systems and are not part of the solution variables? 

We do automatically write out user-added vectors (at least in
xda/xdr files; not sure about other formats), but not user-added
matrices.  Or any other matrices, for that matter; I guess we've
always thought of those as dependent data that could be recalculated
from the independent vectors in a restart file.

A patch to save just matrix metadata (probably just the name) to
automatically re-add-matrices upon restart wouldn't be a bad idea, but
it would be mildly tricky to implement, since ImplicitSystem would
have to override some of the system_io code.

I wouldn't mind a patch adding the option to save matrix contents,
even, but it would have to be an option, off by default; otherwise
it'd be too much unused bloat in most people's restart files.

This isn't a major set back for me but I want to be able to add such vectors 
and matrices nevertheless when I restart the
calculation; if I try to do this after reading the equation system I get the 
following:

 ERROR: Too late.  Cannot add matrices to the system after initialization any 
more.  You should have done this earlier.

Yes, the initial libMesh design only allowed the addition of new
vectors or matrices before System::init().  I went in and fixed that
for vectors, but someone would have to go back in and do the same for
the matrices.  I don't have time to do so myself but I'd love a patch.
I think it'd be easy to efficiently handle late matrix addition in
most cases, the only exception would be the perverse case where prior
matrices didn't need a full sparsity pattern (so the DofMap didn't
bother calculating it) but the new matrix does.

and if I do it before reading the system they would be removed and I get 
something like this:

 ERROR: matrix Hessian does not exist in this system!

Is this a bug or do I need to set a variable somewhere so this doesn't happen?

Set a variable.  The default EquationSystems::read() flags include
READ_HEADER, which is superfluous if you've already done all the
add_variable, add_vector, etc. setup that the header would otherwise
have been required to specify, and which is actively damaging if your
System subclass's clear() method removes data (like matrix existence)
which the header doesn't know how to re-add.
---
Roy
------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual 
desktops for less than the cost of PCs and save 60% on VDI infrastructure 
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to