Skip to content
Snippets Groups Projects
CellScript.py 4.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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
    
    # 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)
    
    RUN = True
    # RUN = False
    
    
    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)