 ## General

• FAQ
Participant

In CFX Expression language, the procedure is as shown below, but the logic would apply in any code.
LIBRARY:
CEL:
&replace EXPRESSIONS:
customtime = if(cycleno>1,Time-0.03[s]*(cycleno-1),Time)
cycleno = int(Time/0.03 [s])+1
dt = if(cycletime <= 0.01[s] ,0.001[s], 0 [s])+ if(cycletime>0.01[s] && cycletime <= 0.02[s], 0.002[s], 0[s]) + if(cycletime >0.02[s] &&
cycletime<= 0.03[s], 0.003[s], 0.0[s])
END
END
END
Since we have a repeating cycle of 0.03 [s], we need something to let us know what cycle we are in, so that we can make a custom time counter that will reset at the beginning of each cycle. This makes use of the int() function, which rounds UP to the closest integer.
cycleno = int(Time/0.03 [s])+1
Next we can make a time counter that goes from 0-0.03 [s][ repeatedly. This makes use of the conditional if() function:
cycletime = if(cycleno>1,Time-0.03[s]*(cycleno-1),Time)
Now, we create a series of additive if() statements to cover each portion of the cycle. each one is only active inside its cycletime range
dt = if(cycletime <= 0.01[s] ,0.001[s], 0 [s])+ if(cycletime>0.01[s] && cycletime <= 0.02[s], 0.002[s], 0[s]) + if(cycletime >0.02[s] && cycletime<= 0.03[s], 0.003[s], 0.0[s])
If the list is very long, create a separate if expression for each portion and then add these expressions for a tidier timestep expression that is easier to debug. 