Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Dynlift/triangulations_io.adb, Revision 1.1
1.1 ! maekawa 1: with integer_io; use integer_io;
! 2: with Standard_Integer_Vectors; use Standard_Integer_Vectors;
! 3: with Standard_Integer_Vectors_io; use Standard_Integer_Vectors_io;
! 4: with Standard_Integer_VecVecs_io; use Standard_Integer_VecVecs_io;
! 5: with Simplices,Simplices_io; use Simplices,Simplices_io;
! 6:
! 7: package body Triangulations_io is
! 8:
! 9: procedure get ( t : in out Triangulation ) is
! 10: begin
! 11: get(Standard_Input,t);
! 12: end get;
! 13:
! 14: procedure get ( n,m : in natural; t : in out Triangulation ) is
! 15: begin
! 16: get(Standard_Input,n,m,t);
! 17: end get;
! 18:
! 19: procedure get ( file : in file_type; t : in out Triangulation ) is
! 20:
! 21: n,m : natural;
! 22:
! 23: begin
! 24: get(file,n); get(file,m);
! 25: get(file,n,m,t);
! 26: end get;
! 27:
! 28: procedure get ( file : in file_type; n,m : in natural;
! 29: t : in out Triangulation ) is
! 30: begin
! 31: for k in 1..m loop
! 32: declare
! 33: s : Simplex;
! 34: begin
! 35: get(file,n,s);
! 36: Construct(s,t);
! 37: end;
! 38: end loop;
! 39: Connect(t);
! 40: end get;
! 41:
! 42: procedure put ( n : in natural; t : in Triangulation ) is
! 43: begin
! 44: put(Standard_Output,n,t);
! 45: end put;
! 46:
! 47: procedure put ( n : in natural; t : in Triangulation; v : out natural ) is
! 48: begin
! 49: put(Standard_Output,n,t,v);
! 50: end put;
! 51:
! 52: procedure put ( file : in file_type;
! 53: n : in natural; t : in Triangulation ) is
! 54:
! 55: tmp : Triangulation := t;
! 56:
! 57: begin
! 58: put(file,n,1); new_line(file);
! 59: put(file,Length_Of(t),1); new_line(file);
! 60: while not Is_Null(tmp) loop
! 61: put(file,Head_Of(tmp)); -- write the cell
! 62: put(file,0,1); new_line(file); -- write refinement of cell
! 63: tmp := Tail_Of(tmp);
! 64: end loop;
! 65: end put;
! 66:
! 67: procedure put ( file : in file_type;
! 68: n : in natural; t : in Triangulation; v : out natural ) is
! 69:
! 70: tmp : Triangulation := t;
! 71: res,cnt : natural := 0;
! 72: s : Simplex;
! 73: vol : natural;
! 74:
! 75: begin
! 76: put(file,"Dimension without lifting : "); put(file,n,1); new_line(file);
! 77: put(file,"Number of simplices : "); put(file,Length_Of(t),1);
! 78: new_line(file);
! 79: put_line(file,"The simplices in the triangulation :");
! 80: while not Is_Null(tmp) loop
! 81: cnt := cnt + 1;
! 82: put(file,"Simplex "); put(file,cnt,1); put_line(file," :");
! 83: s := Head_Of(tmp);
! 84: put(file," with normal : "); put(file,Normal(s)); new_line(file);
! 85: put_line(file," spanned by the points :"); put(file,Vertices(s));
! 86: vol := Volume(s);
! 87: put(file," ==> volume : "); put(file,vol,1); put_line(file,".");
! 88: res := res + vol;
! 89: tmp := Tail_Of(tmp);
! 90: end loop;
! 91: v := res;
! 92: end put;
! 93:
! 94: function Position ( t : Triangulation; s : Simplex ) return natural is
! 95:
! 96: -- DESCRIPTION :
! 97: -- Returns the position number of the simplex in the triangulation.
! 98: -- Counting starts from one. If the simplex s does not occur in t,
! 99: -- then Length(t)+1 will be returned.
! 100:
! 101: res : natural := 1;
! 102: tmp : Triangulation := t;
! 103: s1 : Simplex;
! 104:
! 105: begin
! 106: while not Is_Null(tmp) loop
! 107: s1 := Head_Of(tmp);
! 108: if Equal(s1,s)
! 109: then return res;
! 110: else tmp := Tail_Of(tmp);
! 111: res := res + 1;
! 112: end if;
! 113: end loop;
! 114: return res;
! 115: end Position;
! 116:
! 117: function Connectivity ( t : Triangulation; s : Simplex ) return Vector is
! 118:
! 119: -- DESCRIPTION :
! 120: -- Returns the connectivity vector of the given simplex w.r.t. the
! 121: -- given triangulation. This connectivity vector, name it cv, is
! 122: -- defined as follows:
! 123: -- cv(i) = 0 if Neighbor(s,i) = Null_Simplex
! 124: -- cv(i) = k if Neighbor(s,i) /= Null_Simplex
! 125: -- and Position(t,Neighbor(s,i)) = k.
! 126:
! 127: res : Vector(1..Dimension(s));
! 128: nei : Simplex;
! 129:
! 130: begin
! 131: for i in res'range loop
! 132: nei := Neighbor(s,i);
! 133: if nei = Null_Simplex
! 134: then res(i) := 0;
! 135: else res(i) := Position(t,nei);
! 136: end if;
! 137: end loop;
! 138: return res;
! 139: end Connectivity;
! 140:
! 141: procedure put ( n : natural; t : in Triangulation;
! 142: convecs : in out List; v : out natural ) is
! 143: begin
! 144: put(Standard_Output,n,t,convecs,v);
! 145: end put;
! 146:
! 147: procedure put ( file : in file_type; n : natural; t : in Triangulation;
! 148: convecs : in out List; v : out natural ) is
! 149:
! 150: tmp : Triangulation := t;
! 151: s : Simplex;
! 152: res,cnt : natural := 0;
! 153: last : List;
! 154: vol : natural;
! 155:
! 156: begin
! 157: put(file,"Dimension without lifting : "); put(file,n,1); new_line(file);
! 158: put(file,"Number of simplices : "); put(file,Length_Of(t),1);
! 159: new_line(file);
! 160: put_line(file,"The simplices in the triangulation :");
! 161: while not Is_Null(tmp) loop
! 162: cnt := cnt + 1;
! 163: put(file,"Simplex "); put(file,cnt,1); put_line(file," :");
! 164: s := Head_Of(tmp);
! 165: put(file," with normal : "); put(file,Normal(s)); new_line(file);
! 166: put_line(file," spanned by the points :"); put(file,Vertices(s));
! 167: declare
! 168: cv : constant Vector := Connectivity(t,s);
! 169: lcv : Link_to_Vector := new Vector'(cv);
! 170: begin
! 171: put(file," connectivity vector : "); put(file,cv); new_line(file);
! 172: Append(convecs,last,lcv);
! 173: end;
! 174: vol := Volume(s);
! 175: put(file," ==> volume : "); put(file,vol,1); put_line(file,".");
! 176: res := res + vol;
! 177: tmp := Tail_Of(tmp);
! 178: end loop;
! 179: v := res;
! 180: end put;
! 181:
! 182: end Triangulations_io;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>