@@ -174,6 +174,12 @@ Variable(;
174174 Variable (variability, T, size, value,
175175 unit, displayUnit, min, max, start, fixed, nominal, info, flow, state, property)
176176
177+ Variable (v; args... ) = if typeof (v)== Variable; n= deepcopy (v); @show n; for (k,val) in args n[k]= val end ; n else Variable (value= v; args... ) end
178+
179+ function Base. size (v:: Variable )
180+ return size (v. value)
181+ end
182+
177183function Base. show (io:: IO , v:: Variable )
178184 print (io, " Variable(" )
179185 first = true
@@ -208,7 +214,7 @@ function Base.show(io::IO, v::Variable)
208214 first = false
209215 end
210216
211- if v. fixed != nothing
217+ if v. fixed != false
212218 if ! first; print (io, " , " ) end
213219 print (io, " fixed = " , v. fixed)
214220 first = false
@@ -250,9 +256,39 @@ function Base.show(io::IO, v::Variable)
250256 first = false
251257 end
252258
259+ if v. info != " "
260+ if ! first; print (io, " , " ) end
261+ print (io, " info = " , " \" $(v. info) \" " )
262+ first = false
263+ end
264+
253265 println (io, " )" )
254266end
255267
268+ # Base.:+(v1::Variable, v2::Variable) = Variable(value=v1.value+v2.value)
269+ Base.:+ (v1:: Variable , v2:: Variable ) = Variable (value= v1. value+ v2. value,
270+ info= if v1. info== nothing && v2. info== nothing ; nothing else " (" * v1. info* " ) + (" * v2. info* " )" end ,
271+ min= if v1. min== nothing || v2. min== nothing ; nothing else v1. min+ v2. min end ,
272+ max= if v1. max== nothing || v2. max== nothing ; nothing else v1. max+ v2. max end )
273+ Base.:+ (v1, v2:: Variable ) = Variable (value= v1+ v2. value)
274+ Base.:+ (v1:: Variable , v2) = Variable (value= v1. value+ v2)
275+ Base.:+ (v1:: Variable ) = Variable (value= + v1. value)
276+
277+ Base.:- (v1:: Variable , v2:: Variable ) = Variable (value= v1. value- v2. value)
278+ Base.:- (v1, v2:: Variable ) = Variable (value= v1- v2. value)
279+ Base.:- (v1:: Variable , v2) = Variable (value= v1. value- v2)
280+ Base.:- (v1:: Variable ) = Variable (value= - v1. value)
281+
282+ Base.:* (v1:: Variable , v2:: Variable ) = Variable (value= v1. value* v2. value,
283+ info= if v1. info== nothing && v2. info== nothing ; nothing else " (" * v1. info* " ) * (" * v2. info* " )" end ,
284+ min= if v1. min== nothing || v2. min== nothing ; nothing else min (v1. min* v2. min, v1. max* v2. min, v1. min* v2. max, v1. max* v2. max) end ,
285+ max= if v1. max== nothing || v2. max== nothing ; nothing else max (v1. min* v2. min, v1. max* v2. min, v1. min* v2. max, v1. max* v2. max) end )
286+ Base.:* (v1, v2:: Variable ) = Variable (value= v1* v2. value)
287+ Base.:* (v1:: Variable , v2) = Variable (value= v1. value* v2)
288+
289+ Base.:/ (v1:: Variable , v2:: Variable ) = Variable (value= v1. value/ v2. value)
290+ Base.:/ (v1, v2:: Variable ) = Variable (value= v1/ v2. value)
291+ Base.:/ (v1:: Variable , v2) = Variable (value= v1. value/ v2)
256292
257293" Check that a start value (possibly default) exists for the var, or give an error."
258294function check_start (var:: Variable , name)
0 commit comments