diff --git a/src/Energy_ContourG+.py b/src/Energy_ContourG+.py new file mode 100644 index 0000000000000000000000000000000000000000..b691e938f2155d473fc993aa410d537ebe4e1c4b --- /dev/null +++ b/src/Energy_ContourG+.py @@ -0,0 +1,811 @@ +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 + +import seaborn as sns +import matplotlib.colors as mcolors +# from matplotlib import rc +# rc('text', usetex=True) # Use LaTeX font +# +# import seaborn as sns +# sns.set(color_codes=True) + +# set the colormap and centre the colorbar +class MidpointNormalize(mcolors.Normalize): + """ + Normalise the colorbar so that diverging bars work there way either side from a prescribed midpoint value) + + e.g. im=ax1.imshow(array, norm=MidpointNormalize(midpoint=0.,vmin=-100, vmax=100)) + """ + def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False): + self.midpoint = midpoint + mcolors.Normalize.__init__(self, vmin, vmax, clip) + + def __call__(self, value, clip=None): + # I'm ignoring masked values and all kinds of edge cases to make a + # simple example... + x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1] + return np.ma.masked_array(np.interp(value, x, y), np.isnan(value)) + + + +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 == -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 == -1: + return r"$-\pi/4$" + elif N == 2: + return r"$\pi/2$" + 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 + + + +def energy(a1,a2,q1,q2,q12,q3,b1,b2): + + + a = np.array([a1,a2]) + b = np.array([b1,b2]) + H = np.array([[2*q1, q12+2*q3], [q12+2*q3,2*q2] ]) + A = np.array([[q1,1/2*q12], [1/2*q12,q2] ]) + + + tmp = H.dot(a) + + # print('H',H) + # print('A',A) + # print('b',b) + # print('a',a) + # print('tmp',tmp) + + tmp = (1/2)*a.dot(tmp) + # print('tmp',tmp) + + tmp2 = A.dot(b) + # print('tmp2',tmp2) + tmp2 = 2*a.dot(tmp2) + + # print('tmp2',tmp2) + energy = tmp - tmp2 + # print('energy',energy) + + + # energy_axial1.append(energy_1) + + return energy + + + +# def energy(a1,a2,q1,q2,q12,q3,b1,b2): +# +# +# b = np.array([b1,b2]) +# H = np.array([[2*q1, q12+2*q3], [q12+2*q3,2*q2] ]) +# A = np.array([[q1,1/2*q12], [1/2*q12,q2] ]) +# +# +# tmp = H.dot(a) +# +# print('H',H) +# print('A',A) +# print('b',b) +# print('a',a) +# print('tmp',tmp) +# +# tmp = (1/2)*a.dot(tmp) +# print('tmp',tmp) +# +# tmp2 = A.dot(b) +# print('tmp2',tmp2) +# tmp2 = 2*a.dot(tmp2) +# +# print('tmp2',tmp2) +# energy = tmp - tmp2 +# print('energy',energy) +# +# +# # energy_axial1.append(energy_1) +# +# return energy +# + + + + + +################################################################################################################ +################################################################################################################ +################################################################################################################ + +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: -----') + +# q1=1; +# q2=2; +# q12=1/2; +# q3=((4*q1*q2)**0.5-q12)/2; +# # H=[2*q1,q12+2*q3;q12+2*q3,2*q2]; +# +# H = np.array([[2*q1, q12+2*q3], [q12+2*q3,2*q2] ]) +# A = np.array([[q1,1/2*q12], [1/2*q12,q2] ]) +# abar = np.array([q12+2*q3, 2*q2]) +# abar = (1.0/math.sqrt((q12+2*q3)**2+(2*q2)**2))*abar +# +# print('abar:',abar) +# +# b = np.linalg.lstsq(A, abar)[0] +# print('b',b) +# +# +# # print('abar:',np.shape(abar)) +# # print('np.transpose(abar):',np.shape(np.transpose(abar))) +# sstar = (1/(q1+q2))*abar.dot(A.dot(b)) +# # sstar = (1/(q1+q2))*abar.dot(tmp) +# print('sstar', sstar) +# abarperp= np.array([abar[1],-abar[0]]) +# print('abarperp:',abarperp) + + +# -------------------------- Input Parameters -------------------- + +mu1 = 1.0 +rho1 = 1.0 +alpha = 5.0 +theta = 1.0/2 +# theta= 0.1 +beta = 5.0 + + + +# mu1 = 1.0 +# rho1 = 1.0 +# alpha = 2.0 +# theta = 1.0/2 +# # theta= 0.1 +# beta = 5.0 + + +#Figure3: +mu1 = 1.0 +rho1 = 1.0 +alpha = 2.0 +theta = 1.0/8 +# theta= 0.1 +beta = 2.0 + + +alpha= -5 + + +#set gamma either to 1. '0' 2. 'infinity' or 3. a numerical positive value +gamma = '0' +gamma = 'infinity' + + +lambda1 = 0.0 + + +print('---- Input parameters: -----') +print('mu1: ', mu1) +print('rho1: ', rho1) +# print('alpha: ', alpha) +print('beta: ', beta) +# print('theta: ', theta) +print('gamma:', gamma) + +print('lambda1: ', lambda1) +print('----------------------------') +# ---------------------------------------------------------------- +print('----------------------------') + +# ---------------------------------------------------------------- + + + + + + +q1 = (1.0/6.0)*harmonicMean(mu1, beta, theta) +q2 = (1.0/6.0)*arithmeticMean(mu1, beta, theta) +q12 = 0.0 +q3 = GetMuGamma(beta, theta,gamma,mu1,rho1,InputFilePath ,OutputFilePath ) +b1 = prestrain_b1(rho1,beta, alpha, theta ) +b2 = prestrain_b2(rho1,beta, alpha, theta ) + + + +print('q1 = ', q1) +print('q2 = ', q2) +print('q3 = ', q3) +print('q12 = ', q12) +print('b1 = ', b1) +print('b2 = ', b2) + +num_Points = 400 + + +# Creating dataset +x = np.linspace(-5,5,num_Points) +y = np.linspace(-5,5,num_Points) + +x = np.linspace(-20,20,num_Points) +y = np.linspace(-20,20,num_Points) + +x = np.linspace(-10,10,num_Points) +y = np.linspace(-10,10,num_Points) + +x = np.linspace(-60,60,num_Points) +y = np.linspace(-60,60,num_Points) + + +x = np.linspace(-40,40,num_Points) +y = np.linspace(-40,40,num_Points) + +a1, a2 = np.meshgrid(x,y) + + + +print('a1:', a1) +print('a2:',a2 ) + +print('a1.shape', a1.shape) + +#-- FILTER OUT VALUES for G+ : + +# tmp1 = a1[np.where(a1*a2 >= 0)] +# tmp2 = a2[np.where(a1*a2 >= 0)] + +# np.take(a, np.where(a>100)[0], axis=0) +# tmp1 = np.take(a1, np.where(a1*a2 >= 0)[0], axis=0) +# tmp2 = np.take(a1, np.where(a1*a2 >= 0)[0], axis=0) +# tmp2 = a2[np.where(a1*a2 >= 0)] + +# tmp1 = a1[a1*a2 >= 0] +# tmp2 = a2[a1*a2 >= 0] + + +# tmp1_pos = a1[np.where(a1*a2 >= 0) ] +# tmp2_pos = a2[np.where(a1*a2 >= 0) ] +# tmp1_pos = tmp1_pos[np.where(tmp1_pos >= 0)] +# tmp2_pos = tmp2_pos[np.where(tmp2_pos >= 0)] + +# tmp1_neg = a1[a1*a2 >= 0 ] +# tmp2_neg = a2[a1*a2 >= 0 ] +# tmp1_neg = tmp1_neg[tmp1_neg < 0] +# tmp2_neg = tmp2_neg[tmp2_neg < 0] +# a1 = tmp1 +# a2 = tmp2 +# +# a1 = a1.reshape(-1,5) +# a2 = a2.reshape(-1,5) + +# tmp1_pos = tmp1_pos.reshape(-1,5) +# tmp2_pos = tmp2_pos.reshape(-1,5) +# tmp1_neg = tmp1_neg.reshape(-1,5) +# tmp2_neg = tmp2_neg.reshape(-1,5) + + +print('a1:', a1) +print('a2:',a2 ) +print('a1.shape', a1.shape) + + + + + +energyVec = np.vectorize(energy) + +# Z = energyVec(np.array([a1,a2]),q1,q2,q12,q3,b1,b2) +Z = energyVec(a1,a2,q1,q2,q12,q3,b1,b2) + + +print('Z:', Z) + +print('any', np.any(Z<0)) + +# +# negativeValues = Z[np.where(Z<0)] +# print('negativeValues:',negativeValues) +# +# Z_pos = energyVec(tmp1_pos,tmp2_pos,q1,q2,q12,q3,b1,b2) +# Z_neg = energyVec(tmp1_neg,tmp2_neg,q1,q2,q12,q3,b1,b2) + +# print('Test energy:' , energy(np.array([1,1]),q1,q2,q12,q3,b1,b2)) + + + + +# print('Z_pos.shape', Z_pos.shape) + + + + + + + +## -- PLOT : +mpl.rcParams['text.usetex'] = True +mpl.rcParams["font.family"] = "serif" +mpl.rcParams["font.size"] = "9" + +label_size = 8 +mpl.rcParams['xtick.labelsize'] = label_size +mpl.rcParams['ytick.labelsize'] = label_size + +# plt.style.use('seaborn') +plt.style.use('seaborn-whitegrid') +# sns.set() +# plt.style.use('seaborn-whitegrid') + +label_size = 9 +mpl.rcParams['xtick.labelsize'] = label_size +mpl.rcParams['ytick.labelsize'] = label_size + +width = 6.28 *0.5 +# width = 6.28 +height = width / 1.618 +fig = plt.figure() + +# ax = plt.axes(projection ='3d', adjustable='box') +ax = plt.axes((0.17,0.21 ,0.75,0.75)) +# ax = plt.axes((0.15,0.18,0.8,0.8)) +# 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.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 8)) +# ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16)) +# ax.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 2)) +# ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 4)) +# ax.xaxis.set_major_formatter(plt.FuncFormatter(format_func)) +ax.grid(True,which='major',axis='both',alpha=0.3) + +# colorfunction=(B*kappa) +# print('colofunction',colorfunction) + +#translate Data +# Z = Z - (Z.max()-Z.min())/2 +# Z = Z - 50 +# Z = Z - 500 +# +# Z = Z.T + + +# Substract constant: +c = (b1**2)*q1+b1*b2*q12+(b2**2)*q2 +Z = Z-c + +print('Value of c:', c) + + + +print('Z.min()', Z.min()) +print('Z.max()', Z.max()) +norm=mcolors.Normalize(Z.min(),Z.max()) +# facecolors=cm.brg(norm) + + +print('norm:', norm) +print('type of norm', type(norm)) +print('norm(0):', norm(0)) +print('norm(Z):', norm(Z)) + +# ax.plot(theta_rho, theta_values, 'royalblue', zorder=3, ) + +# ax.scatter(a1,a2, s=0.5) + +# ax.scatter(tmp1_pos,tmp2_pos, s=0.5) +# ax.scatter(tmp1_neg,tmp2_neg, s=0.5) + +# CS = ax.contour(a1, a2, Z,10, cmap=plt.cm.gnuplot, levels=100 ) +# CS = ax.contour(a1, a2, Z,10, cmap=plt.cm.gnuplot, levels=20 ) + + +# sns.kdeplot(np.array([a1, a2, Z])) +# sns.kdeplot(tmp1_pos,tmp2_pos,Z_pos) + +# levels = [-5.0, -4, -3, 0.0, 1.5, 2.5, 3.5] +# CS = ax.contour(a1, a2, Z,10, cmap=plt.cm.gnuplot, corner_mask=True,levels=levels) +# CS = ax.contour(a1, a2, Z, cmap=plt.cm.gnuplot(norm(Z)), corner_mask=True) +# CS = ax.contour(a1, a2, Z, cm.brg(norm(Z)), levels=20) +# CS = ax.contour(a1, a2, Z, cmap=plt.cm.gnuplot, levels=20) +CS = ax.contour(a1, a2, Z, colors='k', levels=14, linewidths=(0.5,)) + +# CS = ax.contour(a1, a2, Z, colors='k', linewidths=(0.5,)) + +# CS = ax.contour(a1, a2, Z,10, cmap=plt.cm.gnuplot, extend='both', levels=50) +# CS = ax.contourf(a1, a2, Z,10, colors='k', extend='both', levels=50) +# CS = ax.contourf(a1, a2, Z,10, colors='k') +# +# # CS = ax.contour(tmp1_pos,tmp2_pos, Z_pos,10, cmap=plt.cm.gnuplot, levels=10 ) +# # CS = ax.contour(tmp1_pos,tmp2_pos, Z_pos,10, cmap=plt.cm.gnuplot, corner_mask=True) +# +# CS = ax.contour(a1, a2, Z,10, colors = 'k') +ax.clabel(CS, inline=True, fontsize=4) + + +# cmap = cm.brg(norm(Z)) +# +# C_map = cm.inferno(norm(Z)) + +# ax.imshow(Z, cmap=C_map, extent=[-20, 20, -20, 20], origin='lower', alpha=0.5) + +# ax.imshow(norm(Z), extent=[-20, 20, -20, 20], origin='lower', +# cmap='bwr', alpha=0.8) + +# ax.imshow(norm(Z), extent=[-20, 20, -20, 20],origin='lower', vmin=Z.min(), vmax=Z.max(), +# cmap='bwr', alpha=0.6) + +# ax.imshow(norm(Z), extent=[-20, 20, -20, 20],origin='lower', norm = norm, +# cmap='coolwarm', alpha=0.6) + + +cmap=mpl.cm.RdBu_r +# cmap=mpl.cm.viridis_r +cmap=mpl.cm.bwr +# cmap=mpl.cm.coolwarm +cmap=mpl.cm.gnuplot + +# cmap = cm.brg(Z) +divnorm=mcolors.TwoSlopeNorm(vmin=Z.min(), vcenter=0., vmax=Z.max()) + +# ax.imshow(Z, extent=[-20, 20, -20, 20],origin='lower', norm = norm, +# cmap='coolwarm', alpha=0.6) + +# ax.imshow(Z, extent=[-20, 20, -20, 20],origin='lower', +# cmap='coolwarm', alpha=0.6) +# ax.imshow(Z, extent=[-20, 20, -20, 20],origin='lower', +# cmap=cmap, alpha=0.6) + +# divnorm=mcolors.TwoSlopeNorm(vmin=Z.min(), vcenter=0., vmax=Z.max()) +# plt.imshow(Z, extent=[x.min(), x.max(), y.min(), y.max()],origin='lower', +# cmap=cmap, alpha=0.6) + +plt.imshow(Z, extent=[x.min(), x.max(), y.min(), y.max()],origin='lower', norm = divnorm, + cmap=cmap, alpha=0.6) + + + + +# COLORBAR : +# cbar = plt.colorbar() +# cbar.ax.tick_params(labelsize=8) + + + + +##----- ADD RECTANGLE TO COVER QUADRANT : +epsilon = 0.4 +# ax.axvspan(0, x.max(), y.min(), 0, alpha=1, color='yellow', zorder=5)#yellow +# ax.fill_between([0, x.max()], y.min(), 0, alpha=0.3, color='yellow', zorder=5)#yellow +# ax.fill_between([x.min(), 0], 0, y.max(), alpha=0.3, color='yellow', zorder=5)#yellow +ax.fill_between([0+epsilon, x.max()], y.min(), 0-epsilon, alpha=0.7, color='gray', zorder=5)#yellow +ax.fill_between([x.min(), 0-epsilon], 0+epsilon, y.max(), alpha=0.7, color='gray', zorder=5)#yellow + + +# ax.plot_surface(a1,a2, Z, cmap=cm.coolwarm, +# linewidth=0, antialiased=False) + + + +# ax.plot(theta_rho, energy_axial1, 'royalblue', zorder=3, label=r"axialMin1") +# ax.plot(theta_rho, energy_axial2, 'forestgreen', zorder=3, label=r"axialMin2") +# ax.plot(-1.0*alphas, kappas, 'red', zorder=3, ) + + + + +# lg = ax.legend(bbox_to_anchor=(0.0, 0.75), loc='upper left') + + + +### PLot x and y- Axes +ax.plot(ax.get_xlim(),[0,0],'k--', linewidth=0.5) +ax.plot([0,0],ax.get_ylim(), 'k--', linewidth=0.5) + + + +ax.set_xlabel(r"$a_1$", fontsize=10 ,labelpad=0) +ax.set_ylabel(r"$a_2$", fontsize=10 ,labelpad=0) +# ax.set_ylabel(r"energy") + + +# ax.set_xticks([-np.pi/2, -np.pi/4 ,0, np.pi/4, np.pi/2 ]) +# labels = ['$0$',r'$\pi/8$', r'$\pi/4$' ,r'$3\pi/8$' , r'$\pi/2$'] +# ax.set_yticklabels(labels) + + + + + +# ax.legend(loc='upper right') + + + +fig.set_size_inches(width, height) +fig.savefig('Energy_ContourG+.pdf') + +plt.show() + + +# +# +# +# # Curve parametrised by \theta_rho = alpha in parameter space +# N=100; +# theta_rho = np.linspace(1, 3, num=N) +# print('theta_rho:', theta_rho) +# +# +# theta_values = [] +# +# +# for t in theta_rho: +# +# s = (1.0/10.0)*t+0.1 +# theta_values.append(s) +# +# +# +# +# +# theta_rho = np.array(theta_rho) +# theta_values = np.array(theta_values) +# +# betas_ = 2.0 +# + +# alphas, betas, thetas = np.meshgrid(theta_rho, betas_, theta_values, indexing='ij') +# +# +# harmonicMeanVec = np.vectorize(harmonicMean) +# arithmeticMeanVec = np.vectorize(arithmeticMean) +# prestrain_b1Vec = np.vectorize(prestrain_b1) +# prestrain_b2Vec = np.vectorize(prestrain_b2) +# +# GetMuGammaVec = np.vectorize(GetMuGamma) +# muGammas = GetMuGammaVec(betas,thetas,gamma,mu1,rho1,InputFilePath ,OutputFilePath ) +# +# q1_vec = harmonicMeanVec(mu1, betas, thetas) +# q2_vec = arithmeticMeanVec(mu1, betas, thetas) +# +# b1_vec = prestrain_b1Vec(rho1, betas, alphas, thetas) +# b2_vec = prestrain_b2Vec(rho1, betas, alphas, thetas) + +# special case: q12 == 0!! .. braucht eigentlich nur b1 & b2 ... + +# print('type b1_values:', type(b1_values)) + + + +# print('size(q1)',q1.shape) +# +# +# energy_axial1 = [] +# energy_axial2 = [] +# +# # for b1 in b1_values: +# for i in range(len(theta_rho)): +# print('index i:', i) +# +# print('theta_rho[i]',theta_rho[i]) +# print('theta_values[i]',theta_values[i]) +# +# q1 = (1.0/6.0)*harmonicMean(mu1, beta, theta_values[i]) +# q2 = (1.0/6.0)*arithmeticMean(mu1, beta, theta_values[i]) +# q12 = 0.0 +# q3 = GetMuGamma(beta, theta_values[i],gamma,mu1,rho1,InputFilePath ,OutputFilePath ) +# b1 = prestrain_b1(rho1,beta, theta_rho[i],theta_values[i] ) +# b2 = prestrain_b2(rho1,beta, theta_rho[i],theta_values[i] ) +# +# +# # q2_vec = arithmeticMean(mu1, betas, thetas) +# # +# # b1_vec = prestrain_b1Vec(rho1, betas, alphas, thetas) +# # b2_vec = prestrain_b2Vec(rho1, betas, alphas, thetas) +# print('q1[i]',q1) +# print('q2[i]',q2) +# print('q3[i]',q3) +# print('b1[i]',b1) +# print('b2[i]',b2) +# # print('q1[i]',q1[0][i]) +# # print('q2[i]',q2[i]) +# # print('b1[i]',b1[i]) +# # print('b2[i]',b2[i]) +# #compute axial energy #1 ... +# +# a_axial1 = np.array([b1,0]) +# a_axial2 = np.array([0,b2]) +# b = np.array([b1,b2]) +# +# H = np.array([[2*q1, q12+2*q3], [q12+2*q3,2*q2] ]) +# A = np.array([[q1,1/2*q12], [1/2*q12,q2] ]) +# +# +# tmp = H.dot(a_axial1) +# +# print('H',H) +# print('A',A) +# print('b',b) +# print('a_axial1',a_axial1) +# print('tmp',tmp) +# +# tmp = (1/2)*a_axial1.dot(tmp) +# print('tmp',tmp) +# +# tmp2 = A.dot(b) +# print('tmp2',tmp2) +# tmp2 = 2*a_axial1.dot(tmp2) +# +# print('tmp2',tmp2) +# energy_1 = tmp - tmp2 +# print('energy_1',energy_1) +# +# +# energy_axial1.append(energy_1) +# +# +# tmp = H.dot(a_axial2) +# +# print('H',H) +# print('A',A) +# print('b',b) +# print('a_axial2',a_axial2) +# print('tmp',tmp) +# +# tmp = (1/2)*a_axial2.dot(tmp) +# print('tmp',tmp) +# +# tmp2 = A.dot(b) +# print('tmp2',tmp2) +# tmp2 = 2*a_axial2.dot(tmp2) +# +# print('tmp2',tmp2) +# energy_2 = tmp - tmp2 +# print('energy_2',energy_2) +# +# +# energy_axial2.append(energy_2) +# +# +# +# +# +# print('theta_values', theta_values) +# +# +# + + +# +# +# +# +# kappas = [] +# alphas = [] +# # G.append(float(s[0])) +# +# +# +# +# for t in T : +# +# abar_current = sstar*abar+t*abarperp; +# # print('abar_current', abar_current) +# abar_current[abar_current < 1e-10] = 0 +# # print('abar_current', abar_current) +# +# # G = np.array([[2*q1, q12+2*q3], [q12+2*q3,2*q2] ]) +# G = [abar_current[0], abar_current[1] , (2*abar_current[0]*abar_current[1])**0.5 ] +# +# e = [(abar_current[0]/(abar_current[0]+abar_current[1]))**0.5, (abar_current[1]/(abar_current[0]+abar_current[1]))**0.5] +# kappa = abar_current[0]+abar_current[1] +# alpha = math.atan2(e[1], e[0]) +# +# print('angle current:', alpha) +# +# kappas.append(kappa) +# alphas.append(alpha) +# +# +# +# alphas = np.array(alphas) +# kappas = np.array(kappas) +# +# +# print('kappas:',kappas) +# print('alphas:',alphas) +# print('min alpha:', min(alphas)) +# print('min kappa:', min(kappas)) +# +# 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.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.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 8)) +# # ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16)) +# ax.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 2)) +# ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 4)) +# ax.xaxis.set_major_formatter(plt.FuncFormatter(format_func)) +# ax.grid(True,which='major',axis='both',alpha=0.3) +# +# +# +# +# ax.plot(alphas, kappas, 'royalblue', zorder=3, ) +# ax.plot(-1.0*alphas, kappas, 'red', zorder=3, )