From b5835d1c242fa2fad814e362b3522befda8dc54a Mon Sep 17 00:00:00 2001
From: Klaus <klaus.boehnlein@tu-dresden.de>
Date: Fri, 17 Sep 2021 18:19:26 +0200
Subject: [PATCH] Add method to set Parameters in parsets

---
 inputs/cellsolver.parset     | 103 +++++++++--------------------------
 inputs/computeMuGamma.parset |  32 +++++++++--
 src/HelperFunctions.py       |  77 ++++++++++++++++++--------
 src/makePlot.py              |  31 ++++++++---
 4 files changed, 131 insertions(+), 112 deletions(-)

diff --git a/inputs/cellsolver.parset b/inputs/cellsolver.parset
index b92a7dd5..7b723865 100644
--- a/inputs/cellsolver.parset
+++ b/inputs/cellsolver.parset
@@ -1,3 +1,10 @@
+# --- Parameter File as Input for 'Cell-Problem'
+# 
+# NOTE: define variables without whitespaces in between! i.e. : gamma=1.0 instead of gamma = 1.0
+# since otherwise these cant be read from other Files! 
+# --------------------------------------------------------
+
+
 
 
 #path for logfile
@@ -13,50 +20,18 @@
 
 
 
-#############################################
-#  Cell Domain
-#############################################
-# Domain 1: (-1/2, 1/2)^3  , Domain 2 : [0,1)^2 x (-1/2, 1/2)
 
-cellDomain = 1
 
 #############################################
 #  Grid parameters
 #############################################
 
 
-#######################################################################
-## numLevels : Number of Levels on which solution is computed. starting with a 2x2x2 cube mesh.
-## {start,finish} computes on all grid from 2^(start) to 2^finish refinement
-########################################################################
-
-#numLevels =  1 3   # computes all levels from first to second entry
-numLevels = 3 3     # computes all levels from first to second entry
-#numLevels = 1 6
-
-
-
-
+nElements = 32 32
 
-#Elements_Cell = 20 20 20	               # number elements in each direction (y1 y2 x3) 
-#nElements_Cell = 30 30 30	
-#nElements_Cell = 30 30 30	
-#nElements_Cell = 50 50 50	
-#nElements_Cell = 100 100 2
-#nElements_Cell = 100 100 100  // does not work
-#nElements_Cell = 10 10 10
-#nElements_Cell = 2 2 2
-#nElements_Cell = 4 4 4
-#nElements_Cell = 8 8 8
-#nElements_Cell = 16 16 16
-#nElements_Cell = 32 32 32
-#nElements_Cell = 64 64 64 
+gamma=0.25
 
 
-#gamma=50.0
-gamma=1.0
-#gamma=2.5
-
 #############################################
 #  Material parameters
 #############################################
@@ -66,17 +41,15 @@ write_materialFunctions = true   # VTK mu-functions , lambda-functions
 beta = 2.0    # ratio between material parameters mu1 & mu2 .... beta = 1.0 corresponds to homogeneous case 
 
 mu1=10.0
-lambda1=10.0
-#lambda1 = 20.0 
-#lambda1 = 20.0 
-#lambda1 = 5.0 
+#mu1=1000.0
 
-####  material_implementation("analytical_Example") ? 
+lambda1=10.0
 
 
-#material_prestrain_imp= "analytical_Example"
-material_prestrain_imp ="isotropic_bilayer"
+####  material_implementation("analytical_Example") ? 
 
+material_prestrain_imp= "analytical_Example"
+#material_prestrain_imp ="isotropic_bilayer"
 
 
 #material_prestrain_imp= "circle_fiber"    #TEST
@@ -89,8 +62,10 @@ material_prestrain_imp ="isotropic_bilayer"
 write_prestrainFunctions = true  # VTK norm of B ,
 
 rho1 = 1.0
-alpha = 5.0    # ratio between prestrain parameters rho1 & rho2 
+alpha = 2.0    # ratio between prestrain parameters rho1 & rho2 
+
 
+theta = 0.25
 #theta = 0.3    # volume fraction   #default = 1.0/4.0
 #theta = 0.25   # volume fraction
 #theta = 0.75   # volume fraction
@@ -111,32 +86,6 @@ height = 1.0
 
 
 
-# Prestrain Types: 
-
-#1 Isotropic Pressure
-#    Func2Tensor B1_ = [this] (const Domain& x) {              // ISOTROPIC PRESSURE
-#                if (abs(x[0]) > (theta/2)  && x[2] > 0)
-#                    return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}};
-#                if (abs(x[0]) < (theta/2)  && x[2] < 0)
-#                    return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}};
-#                else
-#                    return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}};
-#            };
-
-
-#############################################
-#  Assembly options
-#############################################
-
-set_IntegralZero = true
-#set_IntegralZero = false
-
-#arbitraryLocalIndex = 7
-#arbitraryElementNumber = 3
-
-#arbitraryLocalIndex = 0
-#arbitraryElementNumber = 0
-
 
 #############################################
 #  Solver Type
@@ -145,15 +94,8 @@ set_IntegralZero = true
 
 Solvertype = 1
 
-#write_corrector_phi1 = false
-#write_corrector_phi2 = false
-#write_corrector_phi3 = false
-#write_corrector_phi1 = true
-#write_corrector_phi2 = true
-#write_corrector_phi3 = true
 
-write_L2Error = true
-#write_IntegralMean = true
+
 
 #############################################
 #  Define Analytic Solutions
@@ -168,3 +110,12 @@ write_L2Error = true
 
 
 
+)*mu2)
+
+
+
+
+
+
+
+
diff --git a/inputs/computeMuGamma.parset b/inputs/computeMuGamma.parset
index 6971b967..02ee3c47 100644
--- a/inputs/computeMuGamma.parset
+++ b/inputs/computeMuGamma.parset
@@ -1,3 +1,11 @@
+# --- Parameter File as Input for 'Compute_MuGamma'
+# 
+# NOTE: define variables without whitespaces in between! i.e. : gamma=1.0 instead of gamma = 1.0
+# since otherwise these cant be read from other Files! 
+# --------------------------------------------------------
+
+
+
 
 #path for logfile
 #outputPath = "../../outputs/output.txt"
@@ -21,17 +29,19 @@
 
 nElements = 32 32
 
-gamma=0.5
+gamma=0.25
+
+
 #############################################
 #  Material parameters
 #############################################
 
 write_materialFunctions = true   # VTK mu-functions , lambda-functions
 
-beta = 2.0    # ratio between material parameters mu1 & mu2 .... beta = 1.0 corresponds to homogeneous case 
+beta=2.0
 
 mu1=10.0
-#mu1=1000.0
+
 
 #lambda1=10.0
 #lambda1 = 20.0 
@@ -53,8 +63,11 @@ material_prestrain_imp= "analytical_Example"
 
 write_prestrainFunctions = true  # VTK norm of B ,
 
-rho1 = 1.0
-alpha = 2.0    # ratio between prestrain parameters rho1 & rho2 
+
+rho1=1.0
+alpha=2.0
+
+theta=0.2
 
 #theta = 0.3    # volume fraction   #default = 1.0/4.0
 #theta = 0.25   # volume fraction
@@ -100,3 +113,12 @@ Solvertype = 1
 
 
 
+)*mu2)
+
+
+
+
+
+
+
+
diff --git a/src/HelperFunctions.py b/src/HelperFunctions.py
index 123d5a8f..b819eaf8 100644
--- a/src/HelperFunctions.py
+++ b/src/HelperFunctions.py
@@ -40,18 +40,49 @@ def ReadEffectiveQuantities(QFilePath = os.path.dirname(os.getcwd()) + '/outputs
 
 
 
+def SetParametersCellProblem(alpha,beta,theta,gamma,mu1,rho1, InputFilePath = os.path.dirname(os.getcwd()) +"/inputs/computeMuGamma.parset"):
+    with open(InputFilePath, 'r') as file:
+        filedata = file.read()
+    filedata = re.sub('(?m)^alpha=.*','alpha='+str(alpha),filedata)
+    filedata = re.sub('(?m)^beta=.*','beta='+str(beta),filedata)
+    filedata = re.sub('(?m)^theta=.*','theta='+str(theta),filedata)
+    filedata = re.sub('(?m)^gamma=.*','gamma='+str(gamma),filedata)
+    filedata = re.sub('(?m)^mu1=.*','mu1='+str(mu1),filedata)
+    filedata = re.sub('(?m)^rho1=.*','rho1='+str(rho1),filedata)
+    f = open(InputFilePath,'w')
+    f.write(filedata)
+    f.close()
+
+#TODO combine these...
+
+def SetParametersComputeMuGamma(beta,theta,gamma,mu1,rho1, InputFilePath = os.path.dirname(os.getcwd()) +"/inputs/computeMuGamma.parset"):
+    with open(InputFilePath, 'r') as file:
+        filedata = file.read()
+    filedata = re.sub('(?m)^beta=.*','beta='+str(beta),filedata)
+    filedata = re.sub('(?m)^theta=.*','theta='+str(theta),filedata)
+    filedata = re.sub('(?m)^gamma=.*','gamma='+str(gamma),filedata)
+    filedata = re.sub('(?m)^mu1=.*','mu1='+str(mu1),filedata)
+    filedata = re.sub('(?m)^rho1=.*','rho1='+str(rho1),filedata)
+    f = open(InputFilePath,'w')
+    f.write(filedata)
+    f.close()
+
+
+
+
 def RunCellProblem(alpha,beta,theta,gamma,mu1,rho1, InputFilePath = os.path.dirname(os.getcwd()) +"/inputs/computeMuGamma.parset"):
-        with open(InputFilePath, 'r') as file:
-            filedata = file.read()
-        filedata = re.sub('(?m)^gamma=.*','gamma='+str(gamma),filedata)
-        filedata = re.sub('(?m)^alpha=.*','alpha='+str(alpha),filedata)
-        filedata = re.sub('(?m)^beta=.*','beta='+str(beta),filedata)
-        filedata = re.sub('(?m)^theta=.*','theta='+str(theta),filedata)
-        filedata = re.sub('(?m)^mu1=.*','mu1='+str(mu1),filedata)
-        filedata = re.sub('(?m)^rho1=.*','rho1='+str(rho1),filedata)
-        f = open(InputFilePath,'w')
-        f.write(filedata)
-        f.close()
+        # with open(InputFilePath, 'r') as file:
+        #     filedata = file.read()
+        # filedata = re.sub('(?m)^gamma=.*','gamma='+str(gamma),filedata)
+        # filedata = re.sub('(?m)^alpha=.*','alpha='+str(alpha),filedata)
+        # filedata = re.sub('(?m)^beta=.*','beta='+str(beta),filedata)
+        # filedata = re.sub('(?m)^theta=.*','theta='+str(theta),filedata)
+        # filedata = re.sub('(?m)^mu1=.*','mu1='+str(mu1),filedata)
+        # filedata = re.sub('(?m)^rho1=.*','rho1='+str(rho1),filedata)
+        # f = open(InputFilePath,'w')
+        # f.write(filedata)
+        # f.close()
+        SetParametersCellProblem(alpha,beta,theta,gamma,mu1,rho1, InputFilePath)
         # --- Run Cell-Problem
         # Optional: Check Time
         # t = time.time()
@@ -89,17 +120,19 @@ def GetMuGamma(beta,theta,gamma,mu1,rho1, InputFilePath = os.path.dirname(os.get
     else:
         # --- Scenario 1.2:  compute mu_gamma with 'Compute_MuGamma' (much faster than running full Cell-Problem)
         # print("Run computeMuGamma for Gamma = ", gamma)
-        with open(InputFilePath, 'r') as file:
-            filedata = file.read()
-        filedata = re.sub('(?m)^gamma=.*','gamma='+str(gamma),filedata)
-        # filedata = re.sub('(?m)^alpha=.*','alpha='+str(alpha),filedata)
-        filedata = re.sub('(?m)^beta=.*','beta='+str(beta),filedata)
-        filedata = re.sub('(?m)^theta=.*','theta='+str(theta),filedata)
-        filedata = re.sub('(?m)^mu1=.*','mu1='+str(mu1),filedata)
-        filedata = re.sub('(?m)^rho1=.*','rho1='+str(rho1),filedata)
-        f = open(InputFilePath,'w')
-        f.write(filedata)
-        f.close()
+
+        SetParametersComputeMuGamma(beta,theta,gamma,mu1,rho1, InputFilePath)
+        # with open(InputFilePath, 'r') as file:
+        #     filedata = file.read()
+        # filedata = re.sub('(?m)^gamma=.*','gamma='+str(gamma),filedata)
+        # # filedata = re.sub('(?m)^alpha=.*','alpha='+str(alpha),filedata)
+        # filedata = re.sub('(?m)^beta=.*','beta='+str(beta),filedata)
+        # filedata = re.sub('(?m)^theta=.*','theta='+str(theta),filedata)
+        # filedata = re.sub('(?m)^mu1=.*','mu1='+str(mu1),filedata)
+        # filedata = re.sub('(?m)^rho1=.*','rho1='+str(rho1),filedata)
+        # f = open(InputFilePath,'w')
+        # f.write(filedata)
+        # f.close()
         # --- Run Cell-Problem
 
         # Check Time
diff --git a/src/makePlot.py b/src/makePlot.py
index b7342266..48d7dd15 100644
--- a/src/makePlot.py
+++ b/src/makePlot.py
@@ -54,7 +54,10 @@ rho1 = 1.0
 alpha = 2.8
 beta = 2.0
 theta = 1.0/4.0
-gamma = 0.75
+
+
+gamma = 1.0/4.0
+
 
 print('mu1: ', mu1)
 print('rho1: ', rho1)
@@ -85,15 +88,17 @@ yName = 'angle'
 # --- Define Parameter this function/quantity depends on:
 # Options: mu1 ,lambda1, rho1 , alpha, beta, theta, gamma
 # xName = 'theta'
-xName = 'gamma'
+# xName = 'gamma'
 # xName = 'lambda1'
+xName = 'alpha'
+
 
 # --- define Interval of x-values:
-# xmin = 0.0
-# xmax = 10.0
-xmin = 0.01
-xmax = 3.0
-numPoints = 3
+xmin = 0.0
+xmax = 10.0
+# xmin = 0.01
+# xmax = 3.0
+numPoints = 5
 X_Values = np.linspace(xmin, xmax, num=numPoints)
 print(X_Values)
 
@@ -111,7 +116,12 @@ make_Plot = True
 if RUN:
     for x in X_Values:
 
-        if yName =='q3' or yName == 'mu_gamma':
+        if yName =='q3' or yName == 'mu_gamma':   # if only q3 is needed .. compute 2D problem (much faster)
+
+            # fist replace old parameters in parset
+            SetParametersComputeMuGamma(beta,theta,gamma,mu1,rho1, InputFilePath)
+
+            # replace the sought after x value in the parset
             with open(path+"/inputs/computeMuGamma.parset", 'r') as file:
                 filedata = file.read()
             filedata = re.sub('(?m)^'+xName+'=.*',xName+'='+str(x),filedata)
@@ -128,7 +138,10 @@ if RUN:
             tmp = re.search(r'(?m)^mu_gamma=.*',output).group()                           # Not necessary for Intention of Program t output Minimizer etc.....
             s = re.findall(r"[-+]?\d*\.\d+|\d+", tmp)
             Y_Values.append(float(s[0]))
-        else :
+        else :     # Run full Cell-Problem...
+            # fist replace old parameters in parset
+            SetParametersCellProblem(alpha,beta,theta,gamma,mu1,rho1,InputFilePath)
+
             with open(InputFilePath, 'r') as file:
                 filedata = file.read()
             filedata = re.sub('(?m)^'+xName+'=.*',xName+'='+str(x),filedata)
-- 
GitLab