11import sympy as sy
22import numpy as np
33import copy
4- import sys
54import re
65
76
8- SIMPLE_FORM = True
7+ SIMPLE_FORM = False
98
109class BlockIterationGenerator ():
1110
@@ -56,10 +55,10 @@ def checkResults(self, u):
5655 for i in range (len (u )):
5756 if gen .mode == 1 :
5857 print ('Found rule: \n ' )
59- print ('u_n+1^ k+1=' )
58+ print ('u_{n+1}^{ k+1} =' )
6059 tmp = gen .generateBlockRule ()
61-
62- if SIMPLE_FORM :
60+
61+ if SIMPLE_FORM :
6362 dico = self .generateData (6 , 4 )
6463 subDico = {}
6564 prol = 1
@@ -73,7 +72,7 @@ def checkResults(self, u):
7372 prol = prol * TCtoF
7473 rest = TFtoC * rest
7574 tmp = tmp .subs (subDico )
76-
75+
7776 tmp = tmp .args
7877 for i in range (len (tmp )):
7978 print (' ' , str (tmp [i ]) if str (tmp [i ]).startswith ('-' ) or i == 0 else '+' + str (tmp [i ]))
@@ -85,8 +84,8 @@ def checkResults(self, u):
8584 def generateData (self , n , L , pre_s = 1 , post_s = 0 ):
8685 save_symbols = {}
8786 u_0 = sy .Symbol (r'u_0' , commutative = False )
88- phi = [sy .Symbol (f'\phi^ { i } ' , commutative = False ) for i in range (L )]
89- chi = [sy .Symbol (f'\chi^ { i } ' , commutative = False ) for i in range (L )]
87+ phi = [sy .Symbol (f'\phi_ { i } ' , commutative = False ) for i in range (L )]
88+ chi = [sy .Symbol (f'\chi_ { i } ' , commutative = False ) for i in range (L )]
9089 T_c_to_f = [sy .Symbol (f'T_{ i + 1 } ^{ i } ' , commutative = False ) for i in range (L )]
9190 T_f_to_c = [sy .Symbol (f'T_{ i } ^{ i + 1 } ' , commutative = False ) for i in range (L )]
9291 A = [sy .Matrix (np .eye (n , dtype = int ) * phi [i ]) + sy .Matrix (np .eye (n , k = - 1 , dtype = int ) * - chi [i ]) for i in
@@ -240,7 +239,7 @@ def check(self, expr: sy.Expr, n: int):
240239 tmp_split = re .split ('_|\^' , unknowns [i ])
241240 iteration = int (tmp_split [1 ])
242241 block = int (tmp_split [2 ])
243- tmp_block = f 'n' if n - int (block ) == 0 else f'n-{ n - int (block )} '
242+ tmp_block = 'n' if n - int (block ) == 0 else f'n-{ n - int (block )} '
244243 tmp_iter = f'k-{ self .k - iteration } ' if self .k - iteration != 0 else 'k'
245244 tmp_str = f'u_{ tmp_block } ^{ tmp_iter } '
246245 expr_str = expr_str .replace (unknowns [i ], tmp_str )
@@ -273,36 +272,18 @@ def generatingExpr(self, n: int):
273272
274273 def generateBlockRule (self ):
275274 tmp = self .generater
276- for key , val in self .translate .items ():
277- if val [0 ] == 1 :
278- if val [1 ] == 1 :
279- st = f'u_n^k'
280- elif val [1 ] > 1 :
281- st = 'todo'
282- elif val [1 ] == 0 :
283- st = f'u_n^k+1'
284- else :
285- st = f'u_n^k'
286- elif val [0 ] > 1 :
287- if val [1 ] == 1 :
288- st = f'u_n-{ val [0 ] - 1 } ^k'
289- elif val [1 ] > 1 :
290- st = 'todo'
291- elif val [1 ] == 0 :
292- st = f'u_n-{ val [0 ] - 1 } ^k+1'
293- else :
294- st = f'u_n-{ val [0 ] - 1 } ^k'
295- else :
296- st = f'u_n-{ val [0 ]} ^k-{ val [1 ]} '
297275
276+ def u (n , k ):
277+ n = "" if n == 0 else f"+{ n } " if n > 0 else f"{ n } "
278+ k = "" if k == 0 else f"+{ k } " if k > 0 else f"{ k } "
279+ return "u_{n" + n + "}^{k" + k + "}"
280+
281+ for key , val in self .translate .items ():
282+ st = u (1 - val [0 ], 1 - val [1 ])
298283 tmp = tmp .replace (lambda expr : re .match (key , str (expr )),
299284 lambda expr : sy .symbols (st , commutative = False ))
300285 return tmp
301286
302287
303288# PararealGenerator(n=6)
304- MultilevelGenerator (n = 20 , L = 2 , pre_smoothing = 10 , post_smoothing = 0 )
305- # MultilevelGenerator(n=6, L=3, pre_smoothing=1, post_smoothing=0)
306- # MultilevelGenerator(n=6, L=4, pre_smoothing=1, post_smoothing=0)
307- # MultilevelGenerator(n=6, L=2, pre_smoothing=2, post_smoothing=0)
308- # MultilevelGenerator(n=6, L=2, pre_smoothing=1, post_smoothing=1)
289+ MultilevelGenerator (n = 6 , L = 3 , pre_smoothing = 1 , post_smoothing = 0 )
0 commit comments