Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c38e74a

Browse files
committedOct 24, 2023
TL: blockIter generator using common notations
1 parent 349e202 commit c38e74a

File tree

1 file changed

+16
-35
lines changed

1 file changed

+16
-35
lines changed
 

‎blockops/blockIterationGenerator.py

+16-35
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import sympy as sy
22
import numpy as np
33
import copy
4-
import sys
54
import re
65

76

8-
SIMPLE_FORM = True
7+
SIMPLE_FORM = False
98

109
class 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

Comments
 (0)