Index: mttroot/mtt/bin/trans/make_ode2odes ================================================================== --- mttroot/mtt/bin/trans/make_ode2odes +++ mttroot/mtt/bin/trans/make_ode2odes @@ -7,10 +7,13 @@ ############################################################### ## Version control history ############################################################### ## $Id$ ## $Log$ +## Revision 1.16 1999/03/06 02:28:38 peterg +## Rearranged evaluation to: state - input - output - write +## ## Revision 1.15 1999/03/06 02:19:43 peterg ## Changed args to _input ## ## Revision 1.14 1998/10/01 16:02:01 peterg ## Integration with switches handled separately fro Euler and Implicit. @@ -79,44 +82,56 @@ MTTilast = round(mttlast/mttdt); # Total number of steps #Initialise MTTt = 0.0; [MTTu] = zero_vector($Nu); # Zero the input -[MTTx] = $1_state; # Read in initial state +if $Nx>0 + [MTTx] = $1_state; # Read in initial state +else + MTTx = 0; # Dummy value +endif; + [MTTy] = $1_odeo(MTTx,MTTu,MTTt); # Evaluate initial output [MTTu] = $1_input(MTTt,MTTx,MTTy); # Evaluate initial input mtt_write(MTTt,MTTx,MTTy,$Nx,$Ny); # And write them [mttAA] = zero_matrix($Nx); # Zero the A matrix [mttAAx] = zero_vector($Nx); # Zero the AAx vector -[MTTx] = $1_switch(MTTx); # Switches - - if mttmethod==1 # Euler - MTTddt = mttdt/mttstepfactor; # The small sample interval - endif; - -#Integration loop -for MTTit = 1:MTTilast - - if mttmethod==1 # Euler - for MTTjt = 1:mttstepfactor - [MTTdx] = $1_ode(MTTx,MTTu,MTTt); # State derivative - [MTTx] = mtt_euler(MTTx,MTTdx,MTTddt,$Nx); # Euler update - [MTTx] = $1_switch(MTTx); # Switches - MTTt = MTTt + MTTddt; - endfor; - endif; - if mttmethod==2 # Implicit - [MTTdx] = $1_ode(MTTx,MTTu,MTTt); # State derivative - [mttAA,mttAAx] = $1_smx(MTTx,MTTu,mttdt); # (I-Adt) and (I-Adt)x - [mttAA] = $1_switcha(mttAA,MTTx); # Switches - [MTTx] = mtt_implicit(MTTx,MTTdx,mttAA,mttAAx,mttdt,$Nx); # Implicit update - [MTTx] = $1_switch(MTTx); # Switches - MTTt = MTTt + mttdt; - endif; - +if $Nx>0 + [MTTx] = $1_switch(MTTx); # Switches +endif; + +if mttmethod==1 # Euler + MTTddt = mttdt/mttstepfactor; # The small sample interval +endif; + + +for MTTit = 1:MTTilast #Integration loop +MTTit + if $Nx>0 # Don't if no states + if mttmethod==1 # Euler + for MTTjt = 1:mttstepfactor + [MTTdx] = $1_ode(MTTx,MTTu,MTTt); # State derivative + [MTTx] = mtt_euler(MTTx,MTTdx,MTTddt,$Nx); # Euler update + [MTTx] = $1_switch(MTTx); # Switches + MTTt = MTTt + MTTddt; + endfor; + endif; + if mttmethod==2 # Implicit + [MTTdx] = $1_ode(MTTx,MTTu,MTTt); # State derivative + [mttAA,mttAAx] = $1_smx(MTTx,MTTu,mttdt); # (I-Adt) and (I-Adt)x + [mttAA] = $1_switcha(mttAA,MTTx); # Switches + [MTTx] = mtt_implicit(MTTx,MTTdx,mttAA,mttAAx,mttdt,$Nx); # Implicit update + [MTTx] = $1_switch(MTTx); # Switches + MTTt = MTTt + mttdt; + endif; + else + MTTt = MTTt + mttdt; + endif; # $Nx>0 + +MTTit [MTTy] = $1_odeo(MTTx,MTTu,MTTt); # Output [MTTu] = $1_input(MTTt,MTTx,MTTy); # Input mtt_write(MTTt,MTTx,MTTy,$Nx,$Ny); # Write it out endfor; # Integration loop