From 96e355578e2357211e81a58485a4a1856ce62503 Mon Sep 17 00:00:00 2001
From: Klaus <klaus.boehnlein@tu-dresden.de>
Date: Wed, 13 Oct 2021 23:05:09 +0200
Subject: [PATCH] Update Angle-plot

---
 src/Plot-Angle-Gamma.py    | 343 +++++++++++++++++++++++++++++++++++++
 src/Plot_Angle_Lemma1.4.py | 131 +++++++++++---
 2 files changed, 454 insertions(+), 20 deletions(-)
 create mode 100644 src/Plot-Angle-Gamma.py

diff --git a/src/Plot-Angle-Gamma.py b/src/Plot-Angle-Gamma.py
new file mode 100644
index 00000000..419f19b1
--- /dev/null
+++ b/src/Plot-Angle-Gamma.py
@@ -0,0 +1,343 @@
+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)
+
+
+
+
+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: -----')
+# mu1 = 10.0
+# rho1 = 1.0
+# alpha = 2.56140350877193 #2.56140350877193, 4.0852130325814535
+# beta = 2.0  #5.0
+# theta = 1.0/4.0
+# theta = 1.0/8.0  # 0.5
+# theta = 0.075  # 0.5
+# mu1 = 10.0
+# rho1 = 1.0
+alpha = 10.0
+# beta = 40.0
+# theta = 0.125
+
+mu1 = 10.0
+rho1 = 1.0
+# alpha = 2.0
+beta = 2.0  #5.0
+# theta = 1.0/4.0
+theta = 1.0/8.0
+#
+
+
+
+# mu1 = 10.0
+# rho1 = 1.0
+# alpha = 10.0
+# beta = 2.0  #5.0
+# theta = 1.0/8.0
+# #
+
+
+# mu1 = 10.0
+# rho1 = 1.0
+# # alpha = 10.02021333
+# alpha = 10.0
+# beta = 2.0
+# theta = 0.125
+
+
+
+# mu1 = 10.0
+# rho1 = 1.0
+# # alpha = 10.02021333
+# alpha = 9.0
+# beta = 2.0
+# theta = 0.075
+
+#
+# mu1 = 10.0
+# rho1 = 1.0
+# alpha = 4.0
+# beta = 10.0
+# theta = 1.0/4.0
+
+# alpha = 10   #1.05263158
+# beta = 40.0  #5.0
+# # theta = 1.0/4.0
+# theta = 1.0/8.0  # 0.5
+#
+#
+# alpha = 2.0
+# beta = 2.0 #5.0
+# theta = 1/4.0
+# rho1 = 1.0
+# mu1 = 10.0
+
+# InterestingParameterSet :
+# mu1 = 10.0
+# rho1 = 1.0
+# alpha = 10
+# beta = 40.0
+
+
+# theta = 0.124242
+# gamma = 0.75
+#set gamma either to 1. '0' 2. 'infinity' or 3. a numerical positive value
+# gamma = '0'
+# gamma = 'infinity'
+# gamma = 0.5
+# gamma = 0.25
+
+print('mu1: ', mu1)
+print('rho1: ', rho1)
+print('alpha: ', alpha)
+print('beta: ', beta)
+print('theta: ', theta)
+# print('gamma:', gamma)
+print('----------------------------')
+
+# ----------------------------------------------------------------
+
+
+gamma_min = 0.01
+gamma_max = 1.0
+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'
+
+# # --- Options
+# # make_Plot = False
+make_Plot = True
+
+# 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, Types, curvature = classifyMin_anaVec(alpha, beta, theta, muGammas,  mu1, rho1)
+
+# _,angles,_,_ = classifyMin_anaVec(alpha, beta, theta, muGammas,  mu1, rho1)
+
+print('angles:', angles)
+
+
+
+
+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)
+
+
+# Make Plot
+if make_Plot:
+    # plt.figure()
+    #
+    #
+    #
+    #
+    # # plt.title(r'angle$-\mu_\gamma(\gamma)$-Plot')
+    # # plt.title(r'angle$-\gamma$-Plot')
+    plt.plot(Gamma_Values, angles)
+    plt.scatter(Gamma_Values, angles)
+    # 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 = q1, color = 'b', linestyle = ':', label='$q_1$')
+    # plt.axvline(x = q2, color = 'r', linestyle = 'dashed', label='$q_2$')
+    # # plt.axvline(x = q3_star, color = 'r', linestyle = 'dashed', label='$\gamma^*$')
+
+
+
+    f,ax=plt.subplots(1)
+    # ax.plot(muGammas, angles)
+    # ax.scatter(muGammas, angles)
+
+    ax.plot(Gamma_Values, angles, zorder=3)
+    ax.scatter(Gamma_Values, angles)
+
+
+    plt.xlabel("$q_3$")
+    plt.xlabel("$\gamma$")
+    plt.ylabel("angle")
+    ax.grid(True)
+
+
+    # ax.yaxis.set_major_locator(plt.MultipleLocator(np.pi / 2))
+    # ax.yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 12))
+
+    # ax.yaxis.set_major_locator(plt.MultipleLocator(np.pi / 4))
+    # ax.yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 12))
+    # ax.yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+
+    # ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%g $\pi$'))
+    # ax.yaxis.set_major_locator(ticker.MultipleLocator(base=0.25))
+
+
+    # ax.yaxis.set_major_formatter(ticker.FuncFormatter(
+    # lambda val,pos: '{:.0g}$\pi$'.format(2*val/np.pi) if val !=0 else '0'))
+    # ax.yaxis.set_major_locator(ticker.MultipleLocator(base=0.5*np.pi))
+
+    # ---------------------------- show pi values ------------------------------------
+    # ax.axvline(x = q1, color = 'b', linestyle = ':', label='$q_1$')
+    # ax.axvline(x = q2, color = 'r', linestyle = 'dashed', label='$q_2$')
+    # ax.legend()
+    # # ax.set(xlim=(1.750, 1.880), ylim=(0, math.pi/2.0))
+    # ax.set(xlim=(1.760, 1.880), ylim=(-0.1, np.pi/4.0))
+    # # ax.set_yticks([0,  np.pi/4 ,np.pi/2])
+    # # labels = ['$0$', r'$\pi/4$', r'$\pi/2$']
+    # ax.set_yticks([0, np.pi/8, np.pi/4 ])
+    # labels = ['$0$',r'$\pi/8$', r'$\pi/4$']
+    # ax.set_yticklabels(labels)
+    # ---------------------------------------------------------------
+
+    ax.legend()
+    # ax.set(xlim=(1.750, 1.880), ylim=(0, math.pi/2.0))
+
+    # ax.set(xlim=(1.760, 1.880), ylim=(-0.1, np.pi/4.0))
+    # ax.set(xlim=(1.760, 1.880), ylim=(-0.1, np.pi/4.0))
+    # ax.set_yticks([0,  np.pi/4 ,np.pi/2])
+    # labels = ['$0$', r'$\pi/4$', r'$\pi/2$']
+    ax.set_yticks([0, np.pi/8, np.pi/4 ])
+    labels = ['$0$',r'$\pi/8$', r'$\pi/4$']
+    ax.set_yticklabels(labels)
+
+
+    # Plot Gamma Value that is closest to q3_star
+    ax.axvline(x = gammaClose, color = 'b', linestyle = 'dashed', label='$\gamma^*$')
+    ax.axvspan(gamma_min, gammaClose, color='red', alpha=0.5)
+    ax.axvspan(gammaClose, gamma_max, color='green', alpha=0.5)
+
+
+
+
+    # plt.xlabel("$q_3(\gamma)$")
+    plt.xlabel("$\gamma$")
+    plt.ylabel("angle")
+    plt.legend(loc='upper center')
+
+    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()
+    #
diff --git a/src/Plot_Angle_Lemma1.4.py b/src/Plot_Angle_Lemma1.4.py
index e60ba683..7f2cb216 100644
--- a/src/Plot_Angle_Lemma1.4.py
+++ b/src/Plot_Angle_Lemma1.4.py
@@ -10,7 +10,11 @@ import matlab.engine
 from HelperFunctions import *
 from ClassifyMin import *
 
-import matplotlib.ticker as ticker
+import matplotlib.ticker as tickers
+import matplotlib as mpl
+from matplotlib.ticker import MultipleLocator,FormatStrFormatter,MaxNLocator
+import pandas as pd
+
 # from subprocess import Popen, PIPE
 #import sys
 
@@ -27,14 +31,26 @@ import matplotlib.ticker as ticker
 ###########################################################
 
 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(2 * value / np.pi))
+    N = int(np.round(4 * value / np.pi))
     if N == 0:
         return "0"
     elif N == 1:
-        return r"$\pi/2$"
+        return r"$\pi/4$"
     elif N == 2:
-        return r"$\pi$"
+        return r"$\pi/2$"
     elif N % 2 > 0:
         return r"${0}\pi/2$".format(N)
     else:
@@ -304,10 +320,86 @@ print("x_plotValues:", x_plotValues)
 # print('np.nonzero(X_Values>x_plotValues[1]', np.nonzero(X_Values>x_plotValues[1]) )
 
 
+
+
+# --- Convert to numpy array
+Y_Values = np.array(Y_Values)
+X_Values = np.array(X_Values)
+
 # ---------------- Create Plot -------------------
-plt.figure()
 
-f,ax=plt.subplots(1)
+#Adjust gobal matplotlib variables
+mpl.rcParams['pdf.fonttype'] = 42
+mpl.rcParams['ps.fonttype'] = 42
+# mpl.rcParams['font.family'] = 'Arial'
+
+
+#setup canvas first
+fig = plt.figure()
+mpl.rcParams['figure.figsize']
+fig = plt.figure(figsize=(10,6)) # default is [6.4,4.8] 6.4 is the width, 4.8 is the height
+
+ax = plt.axes((0.1,0.1,0.5,0.8))
+# ax.spines['right'].set_visible(False)
+# ax.spines['left'].set_visible(False)
+# ax.spines['bottom'].set_visible(False)
+# ax.spines['top'].set_visible(False)
+# ax.tick_params(axis='x',which='major',direction='out',length=10,width=5,color='red',pad=15,labelsize=15,labelcolor='green',
+#                labelrotation=15)
+ax.tick_params(axis='x',which='major', direction='out',pad=5,labelsize=10)
+
+ax.xaxis.set_major_locator(MultipleLocator(0.05))
+ax.xaxis.set_minor_locator(MultipleLocator(0.025))
+
+
+#---- print data-types
+print(ax.xaxis.get_major_locator())
+print(ax.xaxis.get_minor_locator())
+print(ax.xaxis.get_major_formatter())
+print(ax.xaxis.get_minor_formatter())
+
+#---- Hide Ticks or Labels
+# ax.yaxis.set_major_locator(plt.NullLocator())
+# ax.xaxis.set_major_formatter(plt.NullFormatter())
+
+#---- Reducing or Increasing the Number of Ticks
+# ax.xaxis.set_major_locator(plt.MaxNLocator(3))
+# ax.yaxis.set_major_locator(plt.MaxNLocator(3))
+
+
+#----- Fancy Tick Formats
+ax.yaxis.set_major_locator(plt.MultipleLocator(np.pi / 4))
+ax.yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 12))
+
+
+# ax.set_yticks([0, np.pi/8, np.pi/4 ])
+
+ax.yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+
+
+
+# --- manually change ticks&labels:
+# ax.set_xticks([0.2,1])
+# ax.set_xticklabels(['pos1','pos2'])
+
+# ax.set_yticks([0, np.pi/8, np.pi/4 ])
+# labels = ['$0$',r'$\pi/8$', r'$\pi/4$']
+# ax.set_yticklabels(labels)
+
+a=ax.yaxis.get_major_locator()
+b=ax.yaxis.get_major_formatter()
+c = ax.get_xticks()
+d = ax.get_xticklabels()
+print('xticks:',c)
+print('xticklabels:',d)
+
+ax.grid(True,which='major',axis='both',alpha=0.3)
+
+
+
+# plt.figure()
+
+# f,ax=plt.subplots(1)
 
 # plt.title(r''+ yName + '-Plot')
 # plt.plot(X_Values, Y_Values,linewidth=2, '.k')
@@ -340,14 +432,13 @@ f,ax=plt.subplots(1)
 
 # jump_xValues[0]
 
-Y_Values = np.array(Y_Values)  #convert the np array
-X_Values = np.array(X_Values)  #convert the np array
 
-# leave out jumps:
+
+# --- leave out jumps:
 # ax.scatter(X_Values, Y_Values)
 # leave out jumps:
-# ax.plot(X_Values[X_Values>jump_xValues[0]], Y_Values[X_Values>jump_xValues[0]] , 'b')
-# ax.plot(X_Values[X_Values<jump_xValues[0]], Y_Values[X_Values<jump_xValues[0]], 'b')
+ax.plot(X_Values[X_Values>=jump_xValues[0]], Y_Values[X_Values>=jump_xValues[0]] , 'blue')
+ax.plot(X_Values[X_Values<jump_xValues[0]], Y_Values[X_Values<jump_xValues[0]], 'blue')
 
 
 
@@ -355,8 +446,8 @@ X_Values = np.array(X_Values)  #convert the np array
 
 # ax.plot(X_Values[X_Values>0.136], Y_Values[X_Values>0.136])
 # ax.plot(X_Values[X_Values<0.135], Y_Values[X_Values<0.135])
-ax.scatter(X_Values, Y_Values)
-ax.plot(X_Values, Y_Values)
+# ax.scatter(X_Values, Y_Values)
+# ax.plot(X_Values, Y_Values)
 
 # plt.plot(x_plotValues, y_plotValues,'.')
 # plt.scatter(X_Values, Y_Values, alpha=0.3)
@@ -365,19 +456,16 @@ ax.plot(X_Values, Y_Values)
 # plt.plot([X_Values[0],X_Values[-1]], [Y_Values[0],Y_Values[-1]])
 # plt.axis([0, 6, 0, 20])
 
-plt.xlabel(xName)
-plt.ylabel(yName)
+ax.set_xlabel(r"$\theta$")
+ax.set_ylabel('angle')
 
 # plt.ylabel('$\kappa$')
 
 # ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%g $\pi$'))
 # ax.yaxis.set_major_locator(ticker.MultipleLocator(base=0.1))
 
-ax.grid(True)
-ax.yaxis.set_major_locator(plt.MultipleLocator(np.pi / 2))
-ax.yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 12))
 
-ax.yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+
 
 # Plot every other line.. not the jumps...
 tmp = 1
@@ -396,12 +484,15 @@ tmp = 1
 
 
 for x in jump_xValues:
-    plt.axvline(x,ymin=0, ymax= 1, color = 'g',alpha=0.5, linestyle = 'dashed')
+    plt.axvline(x,ymin=0, ymax= 1, color = 'orange',alpha=0.5, linestyle = 'dashed',  label='$?$')
 
 # plt.axvline(x_plotValues[1],ymin=0, ymax= 1, color = 'g',alpha=0.5, linestyle = 'dashed')
 
 # plt.axhline(y = 1.90476, color = 'b', linestyle = ':', label='$q_1$')
 # plt.axhline(y = 2.08333, color = 'r', linestyle = 'dashed', label='$q_2$')
 # plt.legend()
+
+ax.legend()
+
 plt.show()
 # #---------------------------------------------------------------
-- 
GitLab