From: wolf Date: Thu, 8 Apr 1999 17:37:10 +0000 (+0000) Subject: Add some code for raw output of triangulations. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7d472286e9e82a240f4fc7c4061b0468cb5ef65;p=dealii-svn.git Add some code for raw output of triangulations. git-svn-id: https://svn.dealii.org/trunk@1111 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/source/grid/tria.all_dimensions.cc b/deal.II/deal.II/source/grid/tria.all_dimensions.cc index dbc43d83f6..edf06a5945 100644 --- a/deal.II/deal.II/source/grid/tria.all_dimensions.cc +++ b/deal.II/deal.II/source/grid/tria.all_dimensions.cc @@ -244,6 +244,159 @@ void TriangulationLevel<0>::write_rle_vector (const unsigned int magic_number1, +template +void TriangulationLevel<0>::read_raw_vector (const unsigned int magic_number1, + vector &v, + const unsigned int magic_number2, + istream &in) +{ + AssertThrow (out, ExcIO()); + + unsigned int magic_number; + in >> magic_number; + AssertThrow (magic_number==magic_number1, ExcIO()); + + unsigned int N; + in >> N; + v.resize (N); + + out.read (reinterpret_cast(v.begin()), + reinterpret_cast(v.end()) + - reinterpret_cast(v.begin())); + + in >> magic_number; + AssertThrow (magic_number==magic_number2, ExcIO()); + + AssertThrow (out, ExcIO()); +}; + + + +void +TriangulationLevel<0>::read_raw_vector (const unsigned int magic_number1, + vector &v, + const unsigned int magic_number2, + istream &in) { + AssertThrow (in, ExcIO()); + + unsigned int magic_number; + in >> magic_number; + AssertThrow (magic_number==magic_number1, ExcIO()); + + unsigned int N; + in >> N; + v.resize (N); + + vector flags (N/8+1); + for (unsigned int i=0; i> flags[i]; + }; + + for (unsigned int position=0; position!=N; ++position) + v[position] = (flags[position/8] & (1<<(position%8))); + + in >> magic_number; + AssertThrow (magic_number==magic_number2, ExcIO()); + + AssertThrow (in, ExcIO()); +}; + + + +template +void TriangulationLevel<0>::read_rle_vector (const unsigned int magic_number1, + vector &v, + const unsigned int magic_number2, + istream &in) +{ + AssertThrow (in, ExcIO()); + + unsigned int magic_number; + in >> magic_number; + AssertThrow (magic_number==magic_number1, ExcIO()); + + unsigned int N; + in >> N; + v.resize (N); + + // index of the element presently read + typename vector::iterator present_element = 0; + + // variable to store the number + // of elements to be read next + unsigned int n_elements; + + // char to hold the '<' and + // '>' chars which are used + // as delimiters, also '[]' + char delimiter; + + in >> delimiter; + AssertThrow (delimiter=='[', ExcIO()); + + // read until we reach the end + // of the vector's output + const typename vector::const_iterator v_end = v.end(); + while (present_element < v_end) + { + // each block consists of two parts: + // first some non-equal elements and + // then one element which is repeated + // several times. both lists can be + // empty + in >> delimiter; + AssertThrow (delimiter=='<', ExcIO()); + + // number of non-equal elements + in >> n_elements; + + in >> delimiter; + AssertThrow (delimiter=='>', ExcIO()); + + if (n_elements > 0) + { + in.read (reinterpret_cast (present_element), + reinterpret_cast (present_element + n_elements) + - reinterpret_cast (present_element)); + present_element += n_elements; + }; + + // now for the element which is + // to be repeated + in >> delimiter; + AssertThrow (delimiter=='<', ExcIO()); + + // number of equal elements + in >> n_elements; + + in >> delimiter; + AssertThrow (delimiter=='>', ExcIO()); + + // read this one element + if (n_elements > 0) + { + in.read (reinterpret_cast (present_element), + reinterpret_cast (present_element + 1) + - reinterpret_cast (present_element)); + // repeat it + for (unsigned int i=1; i> delimiter; + AssertThrow (delimiter==']', ExcIO()); + + in >> magic_number; + AssertThrow (magic_number==magic_number2, ExcIO()); +}; + + + + void TriangulationLevel<0>::block_write (ostream &out) const { write_raw_vector (0, refine_flags, 0, out);