35    Velocity_3):
   36 
   37    
   38    if (Parallelisation is 'Hybrid_Socket' or Parallelisation is 'Hybrid_Node'):
   40 
   41    
   42    if (Parallelisation is 'Modal'):
   43        PROC_Z = [2, 4, 5, 8, 10, 20]
   44        PROC_XY = [1, 1, 1, 1, 1, 1]
   45    
   46    
   47    if (Parallelisation is 'Elemental'):
   48        PROC_Z = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
   49        PROC_XY = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
   50 
   51
   52
   53
   54 
   55    Pairwise = []
   56    Allreduce = [] 
   57    Alltoall = []
   58 
   59    Communication = []
   60    Serial = []
   61 
   62    Serial_Pairwise = []
   63    Serial_Allreduce = []
   64    Serial_Alltoall = []
   65 
   66    Total = []
   67 
   68    for i in range(0, len(PROC_Z)):
   69 
   70        
   71        Communication_Count = 0.0
   72 
   73        
   74        Simulation = Topology(PROC_Z[i], PROC_XY[i], Num_Core_Per_Socket, Num_Sock_Per_Node, Scheme)
   75 
   76        
   77        (Num_Element_Msg, Num_Elements) = 
Partition(Mesh_File, PROC_XY[i])
 
   78 
   79        
   80        Simulation.Input_Communication(BW_Node_To_Node, LAT_Node_To_Node, BW_Socket_To_Socket, LAT_Socket_To_Socket, BW_Core_To_Core, LAT_Core_To_Core)
   81 
   82        
   83        Simulation.Distribute_Modes(Num_Modes);
   84        Simulation.Distribute_Elements(Num_Element_Msg, Num_Elements);
   85    
   86        
   87        Simulation.CG_Iterations(Pressure, Velocity_1, Velocity_2, Velocity_3)
   88 
   89        
   90        Simulation.Data_Size(P)
   91 
   92        
   93        Simulation.Hardware_Constant(Num_Constants, Fit)
   94 
   95        
   96        Pairwise.append(Simulation.Communication_Pairwise_Exchange())
   97        Communication_Count += Pairwise[i]
   98    
   99        
  100        Allreduce.append(Simulation.Communication_Allreduce())
  101        Communication_Count += Allreduce[i]
  102 
  103        
  104        Alltoall.append(Simulation.Communication_Alltoall())
  105        Communication_Count += Alltoall[i]
  106 
  107        
  108        Serial.append(Simulation.Serial_Compute())
  109 
  110        
  111        Serial_Pairwise.append(Serial[i] + Pairwise[i])
  112        Serial_Allreduce.append(Serial[i] + Allreduce[i])
  113        Serial_Alltoall.append(Serial[i] + Alltoall[i])
  114 
  115        
  116        Communication.append(Communication_Count)
  117 
  118        
  119        Total.append(Communication[i] + Serial[i])
  120    
  121    if (Parallelisation == 'Hybrid'):
  122        fig, ax = plt.subplots()
  123        ax.plot(PROC_Z, Total, label = 'Model')
  124        ax.set_xlabel('$ R_Z $')
  125        ax.set_ylabel('Timestep (s)')
  126        ax.set_title('Length of Single Timestep: Model')
  127        plt.legend(loc=1)
  128        fig.savefig("Output/Figures/Model_Hybrid.png")
  129 
  130    if (Parallelisation == 'Modal'):
  131        fig, ax = plt.subplots()
  132        ax.plot(PROC_Z, Total, label = 'Model')
  133        ax.set_xlabel('$ R_Z $')
  134        ax.set_ylabel('Timestep (s)')
  135        ax.set_title('Length of Single Timestep: Model')
  136        plt.legend(loc=1)
  137        fig.savefig("Output/Figures/Model_Modal.png")
  138 
  139    if (Parallelisation == 'Elemental'):
  140        fig, ax = plt.subplots()
  141        ax.plot(PROC_XY, Total, label = 'Model')
  142        ax.set_xlabel('$ R_{XY} $')
  143        ax.set_ylabel('Timestep (s)')
  144        ax.set_title('Length of Single Timestep: Model')
  145        plt.legend(loc=1)
  146        fig.savefig("Output/Figures/Model_Elemental.png")
  147 
  148    return(PROC_Z, PROC_XY, Total)
  149 
  150
def Partition(Input_Filename, PROC_XY)
 
def Find_Topologies(PROC_TOT, Num_Modes)