From e99ca88df42de51914d57e5a0e24f12133c75ceb Mon Sep 17 00:00:00 2001
From: Klaus <klaus.boehnlein@tu-dresden.de>
Date: Sat, 23 Oct 2021 12:00:09 +0200
Subject: [PATCH]  Add Curvature-Gamma Plots

---
 src/PhaseDiagram.py            |  27 ++-
 src/PhaseDiagram_PlotScript.py |   9 +-
 src/Plot-Angle-Gamma.py        |   2 +-
 src/Plot-Angle-q3.py           |   6 +-
 src/Plot-Curvature-Gamma.py    | 388 ++++++++++++++++++++++++++++++++
 src/Plot-Curvature-q3.py       | 399 +++++++++++++++++++++++++++++++++
 6 files changed, 821 insertions(+), 10 deletions(-)
 create mode 100644 src/Plot-Curvature-Gamma.py
 create mode 100644 src/Plot-Curvature-q3.py

diff --git a/src/PhaseDiagram.py b/src/PhaseDiagram.py
index a37f282e..2c7917d0 100644
--- a/src/PhaseDiagram.py
+++ b/src/PhaseDiagram.py
@@ -172,14 +172,14 @@ print('----------------------------')
 generalCase = False
 
 # make_3D_plot = True
-# make_3D_PhaseDiagram = True
+make_3D_PhaseDiagram = True
 make_2D_plot = False
-# make_2D_PhaseDiagram = False
+make_2D_PhaseDiagram = False
 make_3D_plot = False
-make_3D_PhaseDiagram = False
+# make_3D_PhaseDiagram = False
 # make_2D_plot = True
-make_2D_PhaseDiagram = True
-
+# make_2D_PhaseDiagram = True
+#
 
 # --- Define effective quantities: q1, q2 , q3 = mu_gamma, q12 ---
 # q1 = harmonicMean(mu1, beta, theta)
@@ -218,14 +218,28 @@ make_2D_PhaseDiagram = True
 # SamplePoints_3D = 10 # Number of sample points in each direction
 # SamplePoints_2D = 10 # Number of sample points in each direction
 SamplePoints_3D = 300 # Number of sample points in each direction
+# SamplePoints_3D = 100 # Number of sample points in each direction
+# SamplePoints_3D = 200 # Number of sample points in each direction
+# SamplePoints_3D = 400 # Number of sample points in each direction
 SamplePoints_2D = 300 # Number of sample points in each direction
 
 
 
 if make_3D_PhaseDiagram:
     alphas_ = np.linspace(-20, 20, SamplePoints_3D)
-    betas_  = np.linspace(0.01,40.01,SamplePoints_3D)
+    # betas_  = np.linspace(0.01,40.01,SamplePoints_3D) # Full Range
+
+
+    # betas_  = np.linspace(0.01,1.01,SamplePoints_3D)  # weird part
+    betas_  = np.linspace(1,40.01,SamplePoints_3D)     #TEST !!!!!  For Beta <1 weird tings happen...
     thetas_ = np.linspace(0.01,0.99,SamplePoints_3D)
+
+
+
+    # TEST :
+    # alphas_ = np.linspace(-40, 40, SamplePoints_3D)
+    # betas_  = np.linspace(0.01,80.01,SamplePoints_3D) # Full Range
+
     # print('type of alphas', type(alphas_))
     # print('Test:', type(np.array([mu_gamma])) )
     alphas, betas, thetas = np.meshgrid(alphas_, betas_, thetas_, indexing='ij')
@@ -267,6 +281,7 @@ if make_2D_PhaseDiagram:
     # betas_  = np.linspace(0.01,40.01,1)
     #fix to one value:
     betas_ = 2.0;
+    # betas_ = 0.5;  #TEST!!!
     alphas, betas, thetas = np.meshgrid(alphas_, betas_, thetas_, indexing='ij')
 
 
diff --git a/src/PhaseDiagram_PlotScript.py b/src/PhaseDiagram_PlotScript.py
index 8246b11c..6884e2ab 100644
--- a/src/PhaseDiagram_PlotScript.py
+++ b/src/PhaseDiagram_PlotScript.py
@@ -6,6 +6,8 @@ from paraview.simple import *
 #### disable automatic camera reset on 'Show'
 paraview.simple._DisableFirstRenderCameraReset()
 
+#--- Run in Terminal with: 'pvbatch PhaseDiagram_PlotScript.py'
+
 
 # ----- CREATE A Phase Diagram for the following cases:
 # 1. (Hyperbolic Case) Gamma = '0'
@@ -23,7 +25,9 @@ curvature = 0
 # phaseDiagram3DGammainfinityvts = XMLStructuredGridReader(FileName=['/home/klaus/Desktop/DUNE/dune-microstructure/outputs/PhaseDiagram3DGammainfinity_100SP.vts'])
 # phaseDiagram3DGammainfinityvts = XMLStructuredGridReader(FileName=['/home/klaus/Desktop/DUNE/dune-microstructure/outputs/PhaseDiagram3DGammainfinity300sp.vts'])
 # phaseDiagram3DGammainfinityvts = XMLStructuredGridReader(FileName=['/home/klaus/Desktop/DUNE/dune-microstructure/outputs/PhaseDiagram3DGammainfinityBetaSmallerOne.vts'])
-phaseDiagram3DGammainfinityvts = XMLStructuredGridReader(FileName=['/home/klaus/Desktop/DUNE/dune-microstructure/outputs/PhaseDiagram3DGamma0300sp.vts'])
+# phaseDiagram3DGammainfinityvts = XMLStructuredGridReader(FileName=['/home/klaus/Desktop/DUNE/dune-microstructure/outputs/PhaseDiagram3DGamma0300sp.vts'])
+# phaseDiagram3DGammainfinityvts = XMLStructuredGridReader(FileName=['/home/klaus/Desktop/DUNE/dune-microstructure/outputs/PhaseDiagram3DGammainfinity_greaterOne.vts'])
+phaseDiagram3DGammainfinityvts = XMLStructuredGridReader(FileName=['/home/klaus/Desktop/DUNE/dune-microstructure/outputs/PhaseDiagram3DGamma0_greaterOne.vts'])
 # phaseDiagram3DGammainfinityvts = XMLStructuredGridReader(FileName=['/home/klaus/Desktop/DUNE/dune-microstructure/outputs/PhaseDiagram3DGamma0.vts'])
 
 
@@ -420,7 +424,8 @@ renderView1.AxesGrid.XAxisUseCustomLabels = 1
 renderView1.AxesGrid.ZAxisUseCustomLabels = 1
 renderView1.AxesGrid.YAxisUseCustomLabels = 1
 renderView1.AxesGrid.XAxisLabels = [-20, -15.0, -10.0, -5.0, 0.0, 5.0, 10.0, 15.0, 20.0]
-renderView1.AxesGrid.YAxisLabels = [0 , 10.0, 20.0, 30.0, 40.0]
+# renderView1.AxesGrid.YAxisLabels = [0 , 10.0, 20.0, 30.0, 40.0]
+renderView1.AxesGrid.YAxisLabels = [1 ,5, 10.0,15, 20.0,25, 30.0,35, 40.0]
 # renderView1.AxesGrid.YAxisLabels = [0 ,5.0, 10.0, 15.0, 20.0, 25.0, 30.0,35.0, 40.0]
 renderView1.AxesGrid.ZAxisLabels = [ 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
 
diff --git a/src/Plot-Angle-Gamma.py b/src/Plot-Angle-Gamma.py
index e4117d35..ea200776 100644
--- a/src/Plot-Angle-Gamma.py
+++ b/src/Plot-Angle-Gamma.py
@@ -176,7 +176,7 @@ print('----------------------------')
 
 gamma_min = 0.01
 gamma_max = 1.0
-Gamma_Values = np.linspace(gamma_min, gamma_max, num=200)    # TODO variable Input Parameters...alpha,beta...
+Gamma_Values = np.linspace(gamma_min, gamma_max, num=20)    # TODO variable Input Parameters...alpha,beta...
 print('(Input) Gamma_Values:', Gamma_Values)
 # mu_gamma = []
 
diff --git a/src/Plot-Angle-q3.py b/src/Plot-Angle-q3.py
index c44f1f2d..78e58067 100644
--- a/src/Plot-Angle-q3.py
+++ b/src/Plot-Angle-q3.py
@@ -352,11 +352,15 @@ ax.set_yticklabels(labels)
 # ax.axvspan(gamma_min, gammaClose, color='red', alpha=0.2)
 # ax.axvspan(gammaClose, gamma_max, color='green', alpha=0.2)
 
+
+ax.axvline(x = q3_star, color = 'midnightblue', linestyle = 'dashed', label='$q_3^*$')
 ax.axvline(x = q1, color = 'forestgreen', linestyle = 'dashed', label='$q_1$')
 ax.axvline(x = q2, color = 'darkorange', linestyle = 'dashed', label='$q_2$')
 
 
-ax.legend(loc='upper center')
+# ax.legend(loc='upper center')
+ax.legend(loc='upper left', bbox_to_anchor=(0.55, 0.85))
+# ax.legend(loc='upper left')
 
 # plt.xlabel("$q_3(\gamma)$")
 # plt.xlabel("$\gamma$")
diff --git a/src/Plot-Curvature-Gamma.py b/src/Plot-Curvature-Gamma.py
new file mode 100644
index 00000000..12184027
--- /dev/null
+++ b/src/Plot-Curvature-Gamma.py
@@ -0,0 +1,388 @@
+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: -----')
+# 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=200)    # 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, Types, curvature = classifyMin_anaVec(alpha, beta, theta, muGammas,  mu1, rho1)
+
+# _,angles,_,_ = classifyMin_anaVec(alpha, beta, theta, muGammas,  mu1, rho1)
+
+print('angles:', angles)
+
+print('curvature:', curvature)
+
+
+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 = np.array(angles)
+
+
+curvature = np.array(curvature)
+
+# ---------------- Create Plot -------------------
+# plt.figure()
+
+
+mpl.rcParams['text.usetex'] = True
+mpl.rcParams["font.family"] = "serif"
+mpl.rcParams["font.size"] = "9"
+width = 6.28 *0.5
+height = width / 1.618
+fig = plt.figure()
+# ax = plt.axes((0.15,0.21 ,0.75,0.75))
+ax = plt.axes((0.15,0.18 ,0.8,0.75))
+# ax = plt.axes((0.21,0.21 ,0.8,0.75))
+ax.tick_params(axis='x',which='major', direction='out',pad=1)
+ax.tick_params(axis='y',which='major', length=3, width=1, direction='out',pad=1) # changed pad = distance to title to 1 here!
+ax.xaxis.set_major_locator(MultipleLocator(0.1))
+ax.xaxis.set_minor_locator(MultipleLocator(0.05))
+# ax.yaxis.set_major_locator(plt.MultipleLocator(np.pi / 8))
+# ax.yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16))
+# ax.yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+ax.grid(True,which='major',axis='both',alpha=0.3)
+
+
+# # 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, 'royalblue', zorder=3, )
+ax.plot(Gamma_Values, curvature, 'royalblue', zorder=3, )
+
+# ax.scatter(Gamma_Values, angles)
+
+# ax.set_xlabel(r"$q_3(\gamma)$")
+ax.set_xlabel(r"$\gamma$")
+# ax.set_ylabel(r"curvature $\kappa$")
+ax.set_title(r"curvature $\kappa$", fontsize=9, pad = 4)
+
+# 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.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$']
+
+
+# OLD :
+# 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 = 'midnightblue', linestyle = 'dashed', label='$\gamma^*$')
+ax.axvspan(gamma_min, gammaClose, color='red', alpha=0.2)
+ax.axvspan(gammaClose, gamma_max, color='green', alpha=0.2)
+
+
+ax.legend(loc='upper right')
+
+# plt.xlabel("$q_3(\gamma)$")
+# plt.xlabel("$\gamma$")
+# plt.ylabel("angle")
+# plt.legend(loc='upper center')
+
+fig.set_size_inches(width, height)
+fig.savefig('Plot-Curvature-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()
+#
diff --git a/src/Plot-Curvature-q3.py b/src/Plot-Curvature-q3.py
new file mode 100644
index 00000000..e1088e04
--- /dev/null
+++ b/src/Plot-Curvature-q3.py
@@ -0,0 +1,399 @@
+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: -----')
+# 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 = 3.0
+Gamma_Values = np.linspace(gamma_min, gamma_max, num=200)    # 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)
+
+
+print('ratio(left) =', b2/b1)
+print('ratio(right) = ', q1/q3_star)
+
+# 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)
+
+print('curvature:', curvature)
+
+
+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 = np.array(angles)
+
+curvature = np.array(curvature)
+
+# ---------------- Create Plot -------------------
+# plt.figure()
+
+
+mpl.rcParams['text.usetex'] = True
+mpl.rcParams["font.family"] = "serif"
+mpl.rcParams["font.size"] = "9"
+width = 6.28 *0.5
+height = width / 1.618
+fig = plt.figure()
+# ax = plt.axes((0.15,0.21 ,0.75,0.75))
+# ax = plt.axes((0.15,0.21 ,0.8,0.75))
+# ax = plt.axes((0.19,0.21 ,0.8,0.75))
+ax = plt.axes((0.15,0.18 ,0.8,0.75))
+ax.tick_params(axis='x',which='major', direction='out',pad=1)
+# ax.tick_params(axis='y',which='major', length=3, width=1, direction='out',pad=3)
+ax.tick_params(axis='y',which='major', length=3, width=1, direction='out',pad=1) # changed pad = distance to title to 1 here!
+ax.xaxis.set_major_locator(MultipleLocator(0.02))
+ax.xaxis.set_minor_locator(MultipleLocator(0.01))
+# ax.yaxis.set_major_locator(plt.MultipleLocator(np.pi / 8))
+# ax.yaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16))
+# ax.yaxis.set_major_formatter(plt.FuncFormatter(format_func))
+ax.grid(True,which='major',axis='both',alpha=0.3)
+# ax.set(xlim=(1.760, 1.880), ylim=(-0.1, np.pi/4.0))
+ax.set(xlim=(1.760, 1.880))
+
+
+# # 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(muGammas, angles, 'royalblue', zorder=3, )
+ax.plot(muGammas, curvature, 'royalblue', zorder=3, )
+# ax.scatter(Gamma_Values, angles)
+ax.set_xlabel(r"$q_3(\gamma)$")
+# ax.set_xlabel(r"$\gamma$")
+# ax.set_ylabel(r"curvature $\kappa$")
+ax.set_title(r"curvature $\kappa$", fontsize=9, pad = 4)
+
+# 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.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$']
+
+
+# OLD :
+# 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 = 'midnightblue', linestyle = 'dashed', label='$\gamma^*$')
+# ax.axvspan(gamma_min, gammaClose, color='red', alpha=0.2)
+# ax.axvspan(gammaClose, gamma_max, color='green', alpha=0.2)
+
+
+ax.axvline(x = q3_star, color = 'midnightblue', linestyle = 'dashed', label='$q_3^*$')
+ax.axvline(x = q1, color = 'forestgreen', linestyle = 'dashed', label='$q_1$')
+ax.axvline(x = q2, color = 'darkorange', linestyle = 'dashed', label='$q_2$')
+
+
+# ax.legend(loc='upper center')
+ax.legend(loc='upper left', bbox_to_anchor=(0.55, 0.85))
+# ax.legend(loc='upper left')
+
+# plt.xlabel("$q_3(\gamma)$")
+# plt.xlabel("$\gamma$")
+# plt.ylabel("angle")
+# plt.legend(loc='upper center')
+
+fig.set_size_inches(width, height)
+fig.savefig('Plot-Curvature-q3.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