1. Install openFoam

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
#from matplotlib.patches import Polygon, Circle, Rectangle, Wedge
fig, (ax1) = plt.subplots(1, 1, figsize =(7, 7))
ax1.patches.append(mpatches.Circle([0.2, 0.8], 0.05, transform=fig.transFigure))
ax1.patches.append(mpatches.Rectangle((0.15, 0.58), 0.15, 0.15, transform=fig.transFigure))
ax1.patches.append(mpatches.Rectangle((0.15, 0.45), 0.20, 0.10, transform=fig.transFigure))
y = np.array([[0.15,0.35], [0.4,0.35], [0.15,0.42]])
ax1.patches.append(mpatches.Polygon(y, transform=fig.transFigure))

y = np.array([[0.20,0.20], [0.4,0.20], [0.5,0.32], [0.13, 0.30], [0.20,0.20]])
ax1.patches.append(mpatches.Polygon(y, transform=fig.transFigure))


y = np.array([[0.10,0.20], [0.4,0.20], [0.5,0.32], [0.13, 0.30], [0.20,0.20]])
ax1.patches.append(mpatches.Polygon(y, transform=fig.transFigure))

ax1.patches.append(mpatches.Rectangle((0.15, 0.15), 0.20, 0.025, transform=fig.transFigure))
# combinations

ax1.patches.append(mpatches.Rectangle((0.65, 0.62), 0.15, 0.15, transform=fig.transFigure))
ax1.patches.append(mpatches.Circle([0.75, 0.8], 0.05, transform=fig.transFigure))

ax1.patches.append(mpatches.Circle([0.75, 0.45], 0.04, transform=fig.transFigure))
ax1.patches.append(mpatches.Circle([0.75, 0.50], 0.05, transform=fig.transFigure))
ax1.patches.append(mpatches.Circle([0.70, 0.50], 0.05, transform=fig.transFigure))

y = np.array([[0.65,0.15], [0.75,0.15], [0.65,0.4]])
ax1.patches.append(mpatches.Polygon(y, transform=fig.transFigure))
ax1.patches.append(mpatches.Circle([0.70, 0.30], 0.05, transform=fig.transFigure))
ax1.patches.append(mpatches.Rectangle((0.65, 0.2), 0.20, 0.025, transform=fig.transFigure))

#plt.axis('off')
plt.xticks([])
plt.yticks([])
plt.savefig("shapes.png", dpi = 300)
fig, (ax1) = plt.subplots(1, 1,figsize = (7,7))
ax1.set_xlim(0,1)
ax1.set_ylim(0,1)
ax1.patches.append(mpatches.Rectangle((0.23, 0.4), 0.55, 0.3, transform=fig.transFigure,\
                                      edgecolor = 'k', facecolor = "None", lw = 2))
y = np.array([[0.40,0.45], [0.50,0.45], [0.45,0.4]])
#ax1.patches.append(mpatches.Polygon(y, transform=fig.transFigure))

ax1.patches.append(mpatches.Circle([0.45, 0.55], 0.05, transform=fig.transFigure))
ax1.patches.append(mpatches.Rectangle([0.45, 0.55], 0.10,0.10, transform=fig.transFigure))
#ax1.patches.append(mpatches.Rectangle((0.4, 0.4), 0.20, 0.025, transform=fig.transFigure))
y_list = [0.4,  0.50,  0.60, 0.70]
for _, y in enumerate(y_list):
    ax1.arrow(0.135, y, 0.115, 0, length_includes_head=True,
          head_width=0.03, head_length=0.02) 
    #ax1.arrow(0.85, y, 0.1, 0, length_includes_head=True,
    #      head_width=0.03, head_length=0.02)     
ax1.text(0.139, 0.65, "U = const")    
ax1.text(0.72, 0.7, "p = 0 bar")
ax1.text(0.45, 0.78, "no slip") 
ax1.axis('off')
plt.savefig("BCs.png", dpi = 300)