Newer
Older
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 time
# from subprocess import Popen, PIPE
#import sys
InputFile = "/inputs/cellsolver.parset"
OutputFile = "/outputs/output.txt"
# path = os.getcwd()
# InputFilePath = os.getcwd()+InputFile
# OutputFilePath = os.getcwd()+OutputFile
# --------- 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)
#1. Define Inputs Gamma-Array..
#2. for(i=0; i<length(array)) ..compute Q_hom, B_eff from Cell-Problem
#3
# matrix = np.loadtxt(path + 'Qmatrix.txt', usecols=range(3))
# print(matrix)
# Use Shell Commands:
# subprocess.run('ls', shell=True)
#---------------------------------------------------------------
Gamma_Values = np.linspace(0.01, 2.5, num=6) # TODO variable Input Parameters...alpha,beta...
print('(Input) Gamma_Values:', Gamma_Values)
mu_gamma = []
# --- Options
RUN = True
# RUN = False
# make_Plot = False
make_Plot = True
if RUN:
for gamma in Gamma_Values:
print("Run Cell-Problem for Gamma = ", gamma)
# print('gamma='+str(gamma))
with open(InputFilePath, 'r') as file:
filedata = file.read()
filedata = re.sub('(?m)^gamma=.*','gamma='+str(gamma),filedata)
f = open(InputFilePath,'w')
f.write(filedata)
f.close()
# --- Run Cell-Problem
t = time.time()
subprocess.run(['./build-cmake/src/Cell-Problem', './inputs/cellsolver.parset'],
capture_output=True, text=True)
# --- Run Cell-Problem_muGama -> much faster!!!
# subprocess.run(['./build-cmake/src/Cell-Problem_muGamma', './inputs/cellsolver.parset'],
# capture_output=True, text=True)
print('elapsed time:', time.time() - t)
#Extract mu_gamma from Output-File
with open(OutputFilePath, 'r') as file:
output = file.read()
tmp = re.search(r'(?m)^mu_gamma=.*',output).group()
s = re.findall(r"[-+]?\d*\.\d+|\d+", tmp)
mu_gammaValue = float(s[0])
print("mu_gamma:", mu_gammaValue)
mu_gamma.append(mu_gammaValue)
# ------------end of for-loop -----------------
print("(Output) Values of mu_gamma: ", mu_gamma)
# ----------------end of if-statement -------------
# mu_gamma=[2.06099, 1.90567, 1.905]
# mu_gamma=[2.08306, 1.905, 1.90482, 1.90479, 1.90478, 1.90477]
##Gamma_Values = np.linspace(0.01, 20, num=12) :
#mu_gamma= [2.08306, 1.91108, 1.90648, 1.90554, 1.90521, 1.90505, 1.90496, 1.90491, 1.90487, 1.90485, 1.90483, 1.90482]
##Gamma_Values = np.linspace(0.01, 2.5, num=12)
# mu_gamma=[2.08306, 2.01137, 1.96113, 1.93772, 1.92592, 1.91937, 1.91541, 1.91286, 1.91112, 1.90988, 1.90897, 1.90828]
Gamma_Values = np.linspace(0.01, 2.5, num=6)
mu_gamma=[2.08306, 1.95497, 1.92287, 1.91375, 1.9101, 1.90828]
if make_Plot:
plt.figure()
plt.title(r'$\mu_\gamma(\gamma)$-Plot')
plt.plot(Gamma_Values, mu_gamma)
plt.scatter(Gamma_Values, mu_gamma)
# 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.xlabel("$\gamma$")
plt.ylabel("$\mu_\gamma$")
plt.legend()
plt.show()
# ------------- RUN Matlab symbolic minimization program
eng = matlab.engine.start_matlab()
# s = eng.genpath(path + '/Matlab-Programs')
s = eng.genpath(path)
eng.addpath(s, nargout=0)
# print('current Matlab folder:', eng.pwd(nargout=1))
eng.cd('Matlab-Programs', nargout=0) #switch to Matlab-Programs folder
# print('current Matlab folder:', eng.pwd(nargout=1))
Inp = False
print('Run symbolic Minimization...')
G, angle, type, kappa = eng.symMinimization(Inp,Inp,Inp,Inp, nargout=4) #Name of program:symMinimization
# G, angle, type, kappa = eng.symMinimization(Inp,Inp,Inp,Inp,path + "/outputs", nargout=4) #Optional: add Path
G = np.asarray(G) #cast Matlab Outout to numpy array
# --- print Output ---
print('Minimizer G:')
print(G)
print('angle:', angle)
print('type:', type )
print('curvature:', kappa)