@@ -67,61 +67,77 @@ relation inst_list : (Env, Mod, Prefix, Connect.Sets,
6767
6868end
6969
70- (* FIXME flow variables. This needs to be totally reworked *)
71-
72- relation connect_vars : (Connect.Sets, Exp.ComponentRef, Exp.ComponentRef ,
70+ relation connect_vars : (Connect.Sets,
71+ Exp.ComponentRef, Connect.Face,
72+ Exp.ComponentRef, Connect.Face ,
7373 Types.Var list) => Connect.Sets =
7474
75- axiom connect_vars(sets,_,_,[]) => sets
75+ axiom connect_vars(sets,_,_,_,_, []) => sets
7676
7777 rule Exp.extend_cref(c1, n, []) => c1' &
7878 Exp.extend_cref(c2, n, []) => c2' &
79- print " connect_vars: " &
79+ (* print " connect_vars: " &
8080 Dump.dump_component_ref c1' & print " <-> " &
8181 Dump.dump_component_ref c2' &
82- print "\n" &
83- connect_components(sets,[], c1', c2', ty, flow) => sets' &
84- connect_vars(sets',c1,c2,xs) => sets''
82+ print "\n" & *)
83+ connect_components(sets,[], c1',f1, c2',f2, ty, flow) => sets' &
84+ connect_vars(sets',c1,f1,c2,f2,xs) => sets''
85+ --------------------------------------
86+ connect_vars(sets,c1,f1,c2,f2,(n,Types.ATTR(_,flow,_,_),ty)::xs)
87+ => sets''
88+
89+ end
90+
91+ relation component_face : Exp.ComponentRef => Connect.Face =
92+
93+ axiom component_face (c as [_,_]) => Connect.INNER
94+
95+ axiom component_face (c as [_]) => Connect.OUTER
96+
97+ rule print "# component_face error: " &
98+ Dump.dump_component_ref c & print "\n"
8599 --------------------------------------
86- connect_vars(sets,c1,c2,(n,Types.ATTR(_,flow,_,_),ty)::xs) => sets''
100+ component_face c => fail
87101
88102end
89103
90104relation connect_components: (Connect.Sets,
91105 Prefix,
92- Explode.ComponentRef,
93- Explode.ComponentRef,
106+ Explode.ComponentRef, Connect.Face,
107+ Explode.ComponentRef, Connect.Face,
94108 Types.Type, bool) => Connect.Sets =
95109
96110 rule Prefix.prefix_cref(pre, c1) => c1' &
97111 Prefix.prefix_cref(pre, c2) => c2' &
98- print " connect_components flow: " &
99- Dump.dump_component_ref c1' & print " <-> " &
100- Dump.dump_component_ref c2' &
101- print "\n" &
102- Connect.add_flow(sets, c1, Connect.IN , c2, Connect.IN ) => sets'
112+ (* print " connect_components flow: " &
113+ Dump.dump_component_ref c1' & print " <-> " &
114+ Dump.dump_component_ref c2' &
115+ print "\n" & *)
116+ Connect.add_flow(sets, c1, f1 , c2, f2 ) => sets'
103117 -----------------------------------------
104- connect_components(sets, pre, c1, c2, Types.BUILTIN(_), true) => sets'
118+ connect_components(sets, pre, c1, f1, c2, f2, Types.BUILTIN(_), true)
119+ => sets'
105120
106121 rule Prefix.prefix_cref(pre, c1) => c1' &
107122 Prefix.prefix_cref(pre, c2) => c2' &
108- print " connect_components non-flow: " &
109- Dump.dump_component_ref c1' & print " <-> " &
110- Dump.dump_component_ref c2' &
111- print "\n" &
123+ (* print " connect_components non-flow: " &
124+ Dump.dump_component_ref c1' & print " <-> " &
125+ Dump.dump_component_ref c2' &
126+ print "\n" & *)
112127 Connect.add_equ(sets, c1, c2) => sets'
113128 -----------------------------------------
114- connect_components(sets, pre, c1, c2, Types.BUILTIN(_), false) => sets'
129+ connect_components(sets, pre, c1, _, c2, _, Types.BUILTIN(_), false)
130+ => sets'
115131
116132 rule Prefix.prefix_cref(pre, c1) => c1' &
117133 Prefix.prefix_cref(pre, c2) => c2' &
118- print " connect_components 2: " &
119- Dump.dump_component_ref c1' & print " <-> " &
120- Dump.dump_component_ref c2' &
121- print "\n" &
122- connect_vars(sets,c1',c2', l) => sets'
134+ (* print " connect_components 2: " &
135+ Dump.dump_component_ref c1' & print " <-> " &
136+ Dump.dump_component_ref c2' &
137+ print "\n" & *)
138+ connect_vars(sets,c1',f1, c2',f2 , l) => sets'
123139 ----------------------------------------
124- connect_components(sets,pre,c1,c2 ,Types.COMPLEX(l),_) => sets'
140+ connect_components(sets,pre,c1,f1,c2,f2 ,Types.COMPLEX(l),_) => sets'
125141
126142end
127143
@@ -136,16 +152,18 @@ relation inst_connect: (Connect.Sets, Env, Prefix,
136152 Explode.ComponentRef,Explode.ComponentRef)
137153 => Connect.Sets =
138154
139- rule print " trying to connect " &
140- Dump.dump_component_ref(o1 ) & print " with " &
141- Dump.dump_component_ref(o2 ) & print "\n" &
142- Env.lookup_var(env,o1 ) => (Types.ATTR(_,flow1,_,dir1),ty1) &
143- Env.lookup_var(env,o2 ) => (Types.ATTR(_,flow2,_,dir2),ty2) &
155+ rule print " connecting " &
156+ Dump.dump_component_ref(c1 ) & print " with " &
157+ Dump.dump_component_ref(c2 ) & print "\n" &
158+ Env.lookup_var(env,c1 ) => (Types.ATTR(_,flow1,_,dir1),ty1) &
159+ Env.lookup_var(env,c2 ) => (Types.ATTR(_,flow2,_,dir2),ty2) &
144160 Types.same_type(ty1, ty2) &
145161 check_flow(flow1, flow2) &
146- connect_components(sets, pre, o1, o2, ty1, flow1) => sets'
162+ component_face(c1) => f1 &
163+ component_face(c2) => f2 &
164+ connect_components(sets, pre, c1, f1, c2, f2, ty1, flow1) => sets'
147165 ---------------------------------
148- inst_connect(sets, env,pre,o1,o2 ) => sets'
166+ inst_connect(sets, env,pre,c1,c2 ) => sets'
149167
150168 rule print "# could not connect\n"
151169 ---------------------------------
@@ -479,10 +497,13 @@ and inst_class: (Env, Mod, Prefix, Connect.Sets, Explode.Class)
479497 => (DAE.DAEcomp list, Connect.Sets, Types.Type) =
480498
481499 rule Env.new_frame(env) => env' &
482- inst_class_in(env', mod, pre, csets, c, false) => (dae,_,csets',tys) &
500+ inst_class_in(env', mod, pre, csets, c, false) => (dae1,_,csets',tys) &
501+ Connect.dump_sets csets' &
502+ Connect.equations csets' => dae2 &
503+ list_append(dae1, dae2) => dae &
483504 mktype(tys) => ty
484505 -------------------------------------------
485- inst_class(env, mod, pre, csets, c) => (dae, csets' , ty)
506+ inst_class(env, mod, pre, csets, c) => (dae, [] , ty)
486507
487508end
488509
@@ -493,10 +514,7 @@ relation inst_program : (Env, Explode.Program) => DAE.DAEcomp list =
493514 inst_program(env,[]) => fail
494515
495516 rule Env.extend_frame_c(env,c,Mod.NOMOD) => env' &
496- inst_class(env',Mod.NOMOD,[],[],c) => (dae1,csets,_) &
497- Connect.dump_sets csets &
498- Connect.equations csets => dae2 &
499- list_append(dae1, dae2) => dae
517+ inst_class(env',Mod.NOMOD,[],[],c) => (dae,csets,_)
500518 -----------------------------
501519 inst_program(env,[c]) => dae
502520
0 commit comments