From 48792f56bbbaff9f995338bc43eee4855aab3b68 Mon Sep 17 00:00:00 2001
From: Klaus <klaus.boehnlein@tu-dresden.de>
Date: Mon, 7 Feb 2022 23:43:25 +0100
Subject: [PATCH] Add Script for AngleCurv-Gamma Subplots

---
 src/Plot-AngleCurvature-GammaV2_SubPlots.py | 483 ++++++++++++++++++++
 1 file changed, 483 insertions(+)
 create mode 100644 src/Plot-AngleCurvature-GammaV2_SubPlots.py

diff --git a/src/Plot-AngleCurvature-GammaV2_SubPlots.py b/src/Plot-AngleCurvature-GammaV2_SubPlots.py
new file mode 100644
index 00000000..ff303375
--- /dev/null
+++ b/src/Plot-AngleCurvature-GammaV2_SubPlots.py
@@ -0,0 +1,483 @@
+import numpy as np
+import matplotlib.pyplot as plt
+import sympy as sym
+import math
+import os
+import subprocess
+import fileinput
+import re
+import matlab.engine
+import sys
+from ClassifyMin import *
+from HelperFunctions import *
+# from CellScript import *
+from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.cm as cm
+from vtk.util import numpy_support
+from pyevtk.hl import gridToVTK
+import time
+import matplotlib.ticker as ticker
+
+import matplotlib as mpl
+from matplotlib.ticker import MultipleLocator,FormatStrFormatter,MaxNLocator
+import pandas as pd
+
+# from matplotlib import rc
+# rc('text', usetex=True) # Use LaTeX font
+#
+# import seaborn as sns
+# sns.set(color_codes=True)
+
+
+def format_func(value, tick_number):
+    # # find number of multiples of pi/2
+    # N = int(np.round(2 * value / np.pi))
+    # if N == 0:
+    #     return "0"
+    # elif N == 1:
+    #     return r"$\pi/2$"
+    # elif N == 2:
+    #     return r"$\pi$"
+    # elif N % 2 > 0:
+    #     return r"${0}\pi/2$".format(N)
+    # else:
+    #     return r"${0}\pi$".format(N // 2)
+    # find number of multiples of pi/2
+    N = int(np.round(4 * value / np.pi))
+    if N == 0:
+        return "0"
+    elif N == 1:
+        return r"$\pi/4$"
+    elif N == 2:
+        return r"$\pi/2$"
+    elif N % 2 > 0:
+        return r"${0}\pi/2$".format(N)
+    else:
+        return r"${0}\pi$".format(N // 2)
+
+
+
+def find_nearest(array, value):
+    array = np.asarray(array)
+    idx = (np.abs(array - value)).argmin()
+    return array[idx]
+
+
+def find_nearestIdx(array, value):
+    array = np.asarray(array)
+    idx = (np.abs(array - value)).argmin()
+    return idx
+
+
+InputFile  = "/inputs/computeMuGamma.parset"
+OutputFile = "/outputs/outputMuGamma.txt"
+# --------- Run  from src folder:
+path_parent = os.path.dirname(os.getcwd())
+os.chdir(path_parent)
+path = os.getcwd()
+print(path)
+InputFilePath = os.getcwd()+InputFile
+OutputFilePath = os.getcwd()+OutputFile
+print("InputFilepath: ", InputFilePath)
+print("OutputFilepath: ", OutputFilePath)
+print("Path: ", path)
+
+print('---- Input parameters: -----')
+alpha = 10
+mu1 = 1.0
+rho1 = 1.0
+beta = 2.0  #5.0
+theta = 1.0/8.0
+#
+
+alpha = -0.5
+beta = 40.0
+theta= 1/8.0
+
+
+
+# # INTERESTING! from pi/2:
+alpha = -0.5
+beta = 40.0
+theta= 1/8.0
+#
+# # # INTERESTING! from pi/2:
+# alpha = -0.2
+# beta = 25.0
+# theta= 1/2
+
+# INTERESTING!:
+# alpha = -0.5
+# beta = 5.0
+# theta= 1/30
+
+
+
+# INTERESTING!:
+# alpha = -0.25
+# beta = 10.0
+# theta= 3/4
+
+
+# # INTERESTING!:
+alpha = -0.25
+beta = 10.0
+theta= 1/8
+
+#
+# INTERESTING!:
+# alpha = -0.25
+# beta = 5.0
+# theta= 1/8
+#
+
+
+# # INTERESTING!:
+alpha = -0.5
+beta = 10.0
+theta= 1/8
+
+
+
+alpha_1 = -1.0
+alpha_2 = -0.75
+alpha_3 = -0.70
+
+angles_1 = []
+angles_2 = []
+angles_3 = []
+
+beta = 2.0
+theta= 0.25
+
+
+
+
+print('mu1: ', mu1)
+print('rho1: ', rho1)
+print('alpha_1: ', alpha_1)
+print('alpha_2: ', alpha_2)
+print('alpha_3: ', alpha_3)
+print('beta: ', beta)
+print('theta: ', theta)
+# print('gamma:', gamma)
+print('----------------------------')
+
+# ----------------------------------------------------------------
+
+
+gamma_min = 0.01
+gamma_max = 1.5
+Gamma_Values = np.linspace(gamma_min, gamma_max, num=100)    # TODO variable Input Parameters...alpha,beta...
+print('(Input) Gamma_Values:', Gamma_Values)
+# mu_gamma = []
+
+# Gamma_Values = '0'
+
+
+
+# Get values for mu_Gamma
+GetMuGammaVec = np.vectorize(GetMuGamma)
+muGammas = GetMuGammaVec(beta,theta,Gamma_Values,mu1,rho1, InputFilePath ,OutputFilePath )
+print('muGammas:', muGammas)
+
+q12 = 0.0
+q1 = (1.0/6.0)*harmonicMean(mu1, beta, theta)
+q2 = (1.0/6.0)*arithmeticMean(mu1, beta, theta)
+print('q1: ', q1)
+print('q2: ', q2)
+b1 = prestrain_b1(rho1, beta, alpha,theta)
+b2 = prestrain_b2(rho1, beta, alpha,theta)
+q3_star = math.sqrt(q1*q2)
+print('q3_star:', q3_star)
+
+# TODO these have to be compatible with input parameters!!!
+# compute certain ParameterValues that this makes sense
+# b1 = q3_star
+# b2 = q1
+print('b1: ', b1)
+print('b2: ', b2)
+
+# return classifyMin(q1, q2, q3, q12,  b1, b2,  print_Cases, print_Output)
+
+
+
+# classifyMin_anaVec = np.vectorize(classifyMin_ana)
+# G, angles, Types, curvature = classifyMin_anaVec(alpha, beta, theta, muGammas,  mu1, rho1)
+classifyMin_anaVec = np.vectorize(classifyMin_ana)
+G, angles_1, Types, curvature_1 = classifyMin_anaVec(alpha_1, beta, theta, muGammas,  mu1, rho1)
+G, angles_2, Types, curvature_2 = classifyMin_anaVec(alpha_2, beta, theta, muGammas,  mu1, rho1)
+G, angles_3, Types, curvature_3 = classifyMin_anaVec(alpha_3, beta, theta, muGammas,  mu1, rho1)
+
+# _,angles,_,_ = classifyMin_anaVec(alpha, beta, theta, muGammas,  mu1, rho1)
+
+print('angles_1:', angles_1)
+print('angles_2:', angles_2)
+print('angles_3:', angles_3)
+
+print('curvature_1:', curvature_1)
+print('curvature_2:', curvature_2)
+print('curvature_3:', curvature_3)
+
+
+idx = find_nearestIdx(muGammas, q3_star)
+print('GammaValue Idx closest to q_3^*', idx)
+gammaClose = Gamma_Values[idx]
+print('GammaValue(Idx) with mu_gamma closest to q_3^*', gammaClose)
+
+
+
+determinantVec = np.vectorize(determinant)
+
+detValues = determinantVec(q1,q2,muGammas,q12)
+print('detValues:', detValues)
+
+
+detZeroidx = find_nearestIdx(detValues, 0)
+print('idx where det nearest to zero', idx)
+gammaClose = Gamma_Values[detZeroidx]
+print('gammaClose:', gammaClose)
+
+
+# --- Convert to numpy array
+Gamma_Values = np.array(Gamma_Values)
+
+
+angles_1 = np.array(angles_1)
+angles_2 = np.array(angles_2)
+angles_3 = np.array(angles_3)
+
+curvature_1 = np.array(curvature_1)
+curvature_2 = np.array(curvature_2)
+curvature_3 = np.array(curvature_3)
+
+# ---------------- Create Plot -------------------
+# plt.figure()
+
+# Styling
+# plt.style.use("seaborn-darkgrid")
+# plt.rcParams["font.family"] = "Avenir"
+# plt.rcParams["font.size"] = 16
+
+
+mpl.rcParams['text.usetex'] = True
+mpl.rcParams["font.family"] = "serif"
+mpl.rcParams["font.size"] = "9"
+width = 6.28
+height = width / 1.618
+# height = width / 2.5
+fig = plt.figure(figsize=(width,height))
+
+# fig,ax = plt.subplots(nrows=2,ncols=3,figsize=(width,height)) # more than one plot
+# fig,ax = plt.subplots(nrows=1,ncols=3,figsize=(width,height),sharey=True) # Share Y-axis
+# fig.tight_layout()
+#
+#
+# fig = plt.figure()
+
+gs = fig.add_gridspec(nrows=2,ncols=3, hspace=0.15, wspace=0.1)
+# ax = gs.subplots(sharey=True)
+
+# Create Three Axes Objects
+
+
+ax4 = fig.add_subplot(gs[1, 0])
+ax5 = fig.add_subplot(gs[1, 1],sharey=ax4)
+ax6 = fig.add_subplot(gs[1, 2],sharey=ax4)
+plt.setp(ax5.get_yticklabels(), visible=False)
+plt.setp(ax6.get_yticklabels(), visible=False)
+
+ax1 = fig.add_subplot(gs[0, 0],sharex=ax4)
+ax2 = fig.add_subplot(gs[0, 1],sharey=ax1)
+ax3 = fig.add_subplot(gs[0, 2],sharey=ax1)
+plt.setp(ax1.get_xticklabels(), visible=False)
+plt.setp(ax2.get_xticklabels(), visible=False)
+plt.setp(ax3.get_xticklabels(), visible=False)
+plt.setp(ax2.get_yticklabels(), visible=False)
+plt.setp(ax3.get_yticklabels(), visible=False)
+
+# ax = plt.axes((0.15,0.21 ,0.75,0.75))
+# ax = plt.axes((0.15,0.21 ,0.8,0.75))
+# ax.tick_params(axis='x',which='major', direction='out',pad=5)
+# ax.tick_params(axis='y',which='major', length=3, width=1, direction='out',pad=3)
+# ax.xaxis.set_major_locator(MultipleLocator(0.1))
+# ax.xaxis.set_minor_locator(MultipleLocator(0.05))
+
+
+
+
+# ax[0,0].yaxis.set_major_locator(plt.MultipleLocator(np.pi / 8))
+# ax[0,0].yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16))
+# ax[0,0].yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+# ax[0,1].yaxis.set_major_locator(plt.MultipleLocator(np.pi / 8))
+# ax[0,1].yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16))
+# ax[0,1].yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+# ax[0,2].yaxis.set_major_locator(plt.MultipleLocator(np.pi / 8))
+# ax[0,2].yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16))
+# ax[0,2].yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+#
+# ax[0,0].grid(True,which='major',axis='both',alpha=0.3)
+# ax[0,1].grid(True,which='major',axis='both',alpha=0.3)
+# ax[0,2].grid(True,which='major',axis='both',alpha=0.3)
+
+ax1.yaxis.set_major_locator(plt.MultipleLocator(np.pi / 8))
+ax1.yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16))
+ax1.yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+ax2.yaxis.set_major_locator(plt.MultipleLocator(np.pi / 8))
+ax2.yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16))
+ax2.yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+ax3.yaxis.set_major_locator(plt.MultipleLocator(np.pi / 8))
+ax3.yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16))
+ax3.yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+
+ax1.grid(True,which='major',axis='both',alpha=0.3)
+ax2.grid(True,which='major',axis='both',alpha=0.3)
+ax3.grid(True,which='major',axis='both',alpha=0.3)
+
+
+ax1.plot(Gamma_Values, angles_1, 'royalblue', zorder=3, )
+ax2.plot(Gamma_Values, angles_2, 'royalblue', zorder=3, )
+ax3.plot(Gamma_Values, angles_3, 'royalblue', zorder=3, )
+
+# ax1.set_xlabel(r"$\gamma$")
+ax1.set_ylabel(r"angle  $\alpha$")
+ax1.xaxis.set_minor_locator(MultipleLocator(0.25))
+ax1.xaxis.set_major_locator(MultipleLocator(0.5))
+
+# ax2.set_xlabel(r"$\gamma$")
+ax2.xaxis.set_minor_locator(MultipleLocator(0.25))
+ax2.xaxis.set_major_locator(MultipleLocator(0.5))
+
+# ax3.set_xlabel(r"$\gamma$")
+# ax[2].set_ylabel(r"angle  $\alpha$")
+ax3.xaxis.set_minor_locator(MultipleLocator(0.25))
+ax3.xaxis.set_major_locator(MultipleLocator(0.5))
+# Labels to use in the legend for each line
+line_labels = [r"$\theta_\mu  = 1.0$", r"$\theta_\mu  = 2.0$",  r"$\theta_\mu  = 5.0$", r"$\theta_\mu  = 10.0$"]
+labels = ['$0$',r'$\pi/8$', r'$\pi/4$' ,r'$3\pi/8$' , r'$\pi/2$']
+ax1.set_yticks([0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2, ])
+ax2.set_yticks([0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+ax3.set_yticks([0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+
+ax1.set_yticklabels(labels)
+ax2.set_yticklabels(labels)
+ax3.set_yticklabels(labels)
+
+ax1.set_ylim([0-0.1, np.pi/2+0.1])
+ax2.set_ylim([0-0.1, np.pi/2+0.1])
+ax3.set_ylim([0-0.1, np.pi/2+0.1])
+
+# for i in range(3):
+#     ax1[i].set_ylim([0-0.1, np.pi/2+0.1])
+
+# Plot Gamma Value that is closest to q3_star
+l1 = ax1.axvline(x = gammaClose, color = 'midnightblue', linestyle = 'dashed', linewidth=1, label='$\gamma^*$')
+l2 = ax2.axvline(x = gammaClose, color = 'midnightblue', linestyle = 'dashed', linewidth=1, label='$\gamma^*$')
+l3 = ax3.axvline(x = gammaClose, color = 'midnightblue', linestyle = 'dashed', linewidth=1, label='$\gamma^*$')
+
+
+# -------------------------------------------------------------------------------------
+
+# ax[1,0].grid(True,which='major',axis='both',alpha=0.3)
+# ax[1,1].grid(True,which='major',axis='both',alpha=0.3)
+# ax[1,2].grid(True,which='major',axis='both',alpha=0.3)
+
+# ax[1,0].set_xlabel(r"$\gamma$")
+# ax[1,0].set_ylabel(r"curvature $\kappa$")
+# ax[1,0].xaxis.set_minor_locator(MultipleLocator(0.5))
+# ax[1,0].xaxis.set_major_locator(MultipleLocator(1))
+# ax[1,0].yaxis.set_minor_locator(MultipleLocator(0.5))
+# ax[1,0].yaxis.set_major_locator(MultipleLocator(1))
+# ax[1,1].set_xlabel(r"$\gamma$")
+# # ax[1].set_ylabel(r"angle  $\alpha$")
+# ax[1,1].xaxis.set_minor_locator(MultipleLocator(0.5))
+# ax[1,1].xaxis.set_major_locator(MultipleLocator(1))
+# ax[1,2].set_xlabel(r"$\gamma$")
+# # ax[2].set_ylabel(r"angle  $\alpha$")
+# ax[1,2].xaxis.set_minor_locator(MultipleLocator(0.5))
+# ax[1,2].xaxis.set_major_locator(MultipleLocator(1))
+# l4 = ax[1,0].axvline(x = gammaClose, color = 'midnightblue', linestyle = 'dashed', linewidth=1, label='$\gamma^*$', zorder=4)
+# l5 = ax[1,1].axvline(x = gammaClose, color = 'midnightblue', linestyle = 'dashed', linewidth=1, label='$\gamma^*$', zorder=4)
+# l6 = ax[1,2].axvline(x = gammaClose, color = 'midnightblue', linestyle = 'dashed', linewidth=1, label='$\gamma^*$' ,zorder=4)
+
+
+
+ax4.grid(True,which='major',axis='both',alpha=0.3)
+ax5.grid(True,which='major',axis='both',alpha=0.3)
+ax6.grid(True,which='major',axis='both',alpha=0.3)
+ax4.plot(Gamma_Values, curvature_1, 'forestgreen', zorder=3, )
+ax5.plot(Gamma_Values, curvature_2, 'forestgreen', zorder=3, )
+ax6.plot(Gamma_Values, curvature_3, 'forestgreen', zorder=3, )
+# ax2.plot(Gamma_Values, curvature_1, 'forestgreen', zorder=3, )
+# ax2.plot(Gamma_Values, curvature_2, 'forestgreen', zorder=3, )
+# ax2.plot(Gamma_Values, curvature_3, 'forestgreen', zorder=3, )
+ax4.set_xlabel(r"$\gamma$")
+ax4.set_ylabel(r"curvature $\kappa$")
+# ax4.set_ylabel(r"curvature $\kappa$", labelpad=10)
+ax4.xaxis.set_minor_locator(MultipleLocator(0.25))
+ax4.xaxis.set_major_locator(MultipleLocator(0.5))
+# ax4.yaxis.set_minor_locator(MultipleLocator(0.1))
+ax4.yaxis.set_major_locator(MultipleLocator(0.05))
+ax5.set_xlabel(r"$\gamma$")
+# ax[1].set_ylabel(r"angle  $\alpha$")
+ax5.xaxis.set_minor_locator(MultipleLocator(0.25))
+ax5.xaxis.set_major_locator(MultipleLocator(0.5))
+ax6.set_xlabel(r"$\gamma$")
+# ax[2].set_ylabel(r"angle  $\alpha$")
+ax6.xaxis.set_minor_locator(MultipleLocator(0.25))
+ax6.xaxis.set_major_locator(MultipleLocator(0.5))
+l4 = ax4.axvline(x = gammaClose, color = 'midnightblue', linestyle = 'dashed', linewidth=1, label='$\gamma^*$', zorder=4)
+l5 = ax5.axvline(x = gammaClose, color = 'midnightblue', linestyle = 'dashed', linewidth=1, label='$\gamma^*$', zorder=4)
+l6 = ax6.axvline(x = gammaClose, color = 'midnightblue', linestyle = 'dashed', linewidth=1, label='$\gamma^*$' ,zorder=4)
+
+
+
+
+
+#
+#
+
+
+
+## LEGEND
+line_labels = [r"$\gamma^*$"]
+fig.legend([l1], [r"$\gamma^*$"],
+            # bbox_to_anchor=[0.5, 0.92],
+            bbox_to_anchor=[0.5, 0.94],
+            loc='center', ncol=3)
+
+
+
+# plt.subplots_adjust(wspace=0.4, hspace=0.0)
+# plt.tight_layout()
+
+# Adjust the scaling factor to fit your legend text completely outside the plot
+# (smaller value results in more space being made for the legend)
+# plt.subplots_adjust(right=0.9)
+# plt.subplots_adjust(bottom=0.2)
+
+
+fig.align_ylabels()
+
+fig.set_size_inches(width, height)
+fig.savefig('Plot-Angle-Gamma.pdf')
+
+plt.show()
+
+
+
+
+# plt.figure()
+# plt.title(r'angle$-\mu_\gamma(\gamma)$-Plot')
+# plt.plot(muGammas, angles)
+# plt.scatter(muGammas, angles)
+# # plt.axis([0, 6, 0, 20])
+# # plt.axhline(y = 1.90476, color = 'b', linestyle = ':', label='$q_1$')
+# # plt.axhline(y = 2.08333, color = 'r', linestyle = 'dashed', label='$q_2$')
+# plt.axvline(x = 1.90476, color = 'b', linestyle = ':', label='$q_1$')
+# plt.axvline(x = 2.08333, color = 'r', linestyle = 'dashed', label='$q_2$')
+# plt.xlabel("$\mu_\gamma$")
+# plt.ylabel("angle")
+# plt.legend()
+# plt.show()
+#
-- 
GitLab