For paths going through a primary input port, the tool needs to know the frequency of the clock driving the signal in order to create a proper timing path. Similarly for output ports, the tool needs to know the frequency of the flop capturing the signal.
This is why we define a virtual clock. To give a clock relationship to paths going through IO ports.
input / output delay values ( if no clock is existing )
virtual clock can be created same as Create_clock, except that the port/pin name must not be specified !
in case if you have a purely combinational path and if you want to specify a set_input_delay or a set_output_delay for that path, then the virtual clock is used