Very cool work....

I'm still waiting for parallel IO as well... ;-)

Derek

On Nov 30, 2007 2:56 PM, Benjamin Kirk <[EMAIL PROTECTED]> wrote:
> **please read if you want to be able to read your existing restart files!**
>
> ...are now supported.  It is not required to serialize the mesh to write a
> restart file from a parallel mesh during an application run.  Similarly, it
> is possible to read a restart file onto an EquationSystems object and mesh
> which are not serial.
>
> The new format is visually identical to the old one with two important
> differences:
> (1) there is a version line at the beginning of the file, and
> (2) the ordering of the output vectors is different.
>
> If you want to read an old restart file use the --read_legacy_restart_format
> command-line option.  Only the new format is written.
>
> The key to doing this was to come up with a partition-agnostic DOF ordering
> which could be used to write the same file independent of the partitioning.
> I have chosen to use the libHilbert space-filling-curve keys to produce this
> ordering.
>
> The approach is as follows:
>
> (1) take the distributed mesh and compute partition-agnostic
> DofObject::id()s for the nodes/elements using the Hilbert keys.
> (2)
>  for each system
>    for each variable in the system
>      for a block of nodes
>        for each node in the block of nodes
>          read/write the solution for this block in hilbert-indexed order
>        end
>      end
>      for a block of elems
>        for each elem in the block of elems
>          read/write the solution for this block in hilbert-indexed order
>        end
>      end
>    end
>  end
>
> The blocking allows a single file to be written through processor 0
> independent of the problem size.  Of course, the performance of the write
> will scale with the single-node I/O.  (there is an easy parallel option
> which could be added.)
>
> The hilbert indexing is what enables the partiton-agnostic IDs, which in
> turn enable a file written on N processors to be restarted on M processors.
>
> Now, currently the hilbert indices are temporarily stored in the
> DofObject::id() locations.  This requires overwriting the valid numbering
> with an invalid numbering and then restoring the original. I thought about
> it for a while and chose this approach over adding a DofObject::global_id()
> or something like that, although that may be something to consider for the
> future.
>
> Thoughts?
>
> -Ben
>
>
> -------------------------------------------------------------------------
> SF.Net email is sponsored by: The Future of Linux Business White Paper
> from Novell.  From the desktop to the data center, Linux is going
> mainstream.  Let it simplify your IT future.
> http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
> _______________________________________________
> Libmesh-devel mailing list
> Libmesh-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/libmesh-devel
>

-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to