Here is an alternative schedule, where the 20 teams are represented by the 20 symbols A to T, which I made using a different method. Each team appears once at each time slot (T1 to T10) and also once in each column (G1 to G10). All the 100 pairings are different.
G1 G2 G3 G4 G5 G6 G7 G8 G9 G10
T1 (E G) (S M) (Q B) (N J) (D C) (O H) (L T) (F I) (R A) (K P)
T2 (K H) (T A) (I G) (C O) (B S) (P L) (E F) (J Q) (D N) (M R)
T3 (S L) (F P) (J M) (D A) (I K) (E Q) (C B) (N R) (H G) (O T)
T4 (T P) (J I) (N C) (H R) (O L) (F A) (M K) (S G) (B E) (Q D)
T5 (I C) (B G) (R D) (L K) (E P) (J T) (N Q) (A H) (M O) (S F)
T6 (J A) (O Q) (E K) (B I) (F T) (N M) (R G) (D L) (S P) (C H)
T7 (N F) (C R) (A L) (Q S) (M G) (B K) (D H) (O P) (I T) (E J)
T8 (R Q) (K D) (H P) (E T) (N A) (S C) (I O) (M B) (J F) (G L)
T9 (B O) (L H) (S T) (M F) (R J) (G D) (A P) (E C) (Q K) (I N)
T10 (M D) (E N) (O F) (P G) (H Q) (R I) (J S) (T K) (L C) (A B)
If you look again at my first suggestion. Simply prefix every entry in the first 10*10 square with A, prefix every entry in the second square by B and then superimpose the two. As above you should end up with a 10*10 grid where every cell has an entry indicating the match pairing, for example if you follow the first link above again, then you should see that Time 1, Game 2 would be (A8 vs B7). This alternative schedule is a special case of the one above since it allows you to divide your 20 teams into two groups of 10 teams each (A0 to A9) & (B0 to B9), then every match is of the form A<x> vs B<y>, in other words all matches are between a group A team and a group B team. So this special property lends itself to running a competition between group A and group B, as every group A team will be paired against every group B team, and vice-versa.
Hope that helps.