浏览代码

Added customizable tol and maxIt

Snow 8 年之前
父节点
当前提交
c895fbc526
共有 3 个文件被更改,包括 19 次插入8 次删除
  1. 2 2
      hdpg1d/adaptation.py
  2. 3 1
      hdpg1d/config/config.json
  3. 14 5
      hdpg1d/preprocess.py

+ 2 - 2
hdpg1d/adaptation.py

@@ -169,10 +169,10 @@ class hdpg1d(object):
         return np.abs(np.sum(residual)), refineIndex
 
     def adaptive(self):
-        TOL = 1e-10
+        TOL = self.coeff.TOL
         estError = 10
         nodeCount = 0
-        maxCount = 40
+        maxCount = self.coeff.MAXIT
         while estError > TOL and nodeCount < maxCount:
             # solve
             self.solvePrimal()

+ 3 - 1
hdpg1d/config/config.json

@@ -6,7 +6,9 @@
 		"pOrder": 2,
 		"numEle": 2,
 		"tauPlus": 1,
-		"tauMinus": 1
+		"tauMinus": 1,
+        "tol": 1e-10,
+        "maxIt": 30
 	},
 	"forcing": "1",
 	"boundary": {

+ 14 - 5
hdpg1d/preprocess.py

@@ -6,7 +6,8 @@ import numpy as np
 from collections import namedtuple
 from scipy.linalg import block_diag
 
-# load the configuration file
+
+# load cfg file
 installDir = os.path.split(__file__)[0]
 cfgPath = os.path.join(installDir, "config")
 for loc in cfgPath, os.curdir, os.path.expanduser("~"):
@@ -74,9 +75,11 @@ def setDefaultCoefficients():
         numEleDefault = configdata["coefficients"]["numEle"]
         tauPlusDefault = configdata["coefficients"]["tauPlus"]
         tauMinusDefault = configdata["coefficients"]["tauMinus"]
+        tol = configdata["coefficients"]["tol"]
+        maxIt = configdata["coefficients"]["maxIt"]
         coeff = coefficients(diffDefault, convDefault, reactionDefault,
-                             pOrderDefault, numEleDefault,
-                             tauPlusDefault, tauMinusDefault)
+                             pOrderDefault, numEleDefault, tauPlusDefault,
+                             tauMinusDefault, tol, maxIt)
     else:
         coeff = coefficients.fromInput()
     return coeff
@@ -115,7 +118,8 @@ def boundaryCondition(case):
 
 
 class coefficients:
-    def __init__(self, diff, conv, reaction, pOrder, numEle, tauPlus, tauMinus):
+    def __init__(self, diff, conv, reaction, pOrder, numEle,
+                 tauPlus, tauMinus, tol, maxIt):
         if diff == 0:
             # set the diffusion constant to a small number
             # to avoid division by zero error
@@ -127,6 +131,8 @@ class coefficients:
         self.numEle = numEle
         self.TAUPLUS = tauPlus
         self.TAUMINUS = tauMinus
+        self.TOL = tol
+        self.MAXIT = maxIt
 
     @classmethod
     def fromInput(cls):
@@ -141,13 +147,16 @@ class coefficients:
                 tauPlus = float(input("Stablization parameter plus (float): "))
                 tauMinus = float(
                     input("Stablization parameter minus (float): "))
+                tol = float(input("Error tolerance (float): "))
+                maxIt = int(input("Max adaptive iterations (int): "))
             except ValueError:
                 print("Sorry, wrong data type.")
                 continue
             else:
                 print("Something is wrong. Exit.")
                 break
-        return cls(diff, conv, reaction, pOrder, numEle, tauPlus, tauMinus)
+        return cls(diff, conv, reaction, pOrder, numEle,
+                   tauPlus, tauMinus, tol, maxIt)
 
 
 class discretization(object):