Source code for phyem.src.wf.mp.nonlinear_system
# -*- coding: utf-8 -*-
r"""
"""
import matplotlib.pyplot as plt
import matplotlib
plt.rcParams.update({
"text.usetex": True,
"font.family": "DejaVu Sans",
"text.latex.preamble": r"\usepackage{amsmath, amssymb}",
})
matplotlib.use('TkAgg')
from phyem.tools.frozen import Frozen
from phyem.tools.miscellaneous.latex_bmatrix_to_array import bmatrix_to_array
[docs]
class MatrixProxyNoneLinearSystem(Frozen):
""""""
def __init__(self, mp, mp_ls, nls):
""""""
self._mp = mp # this nonlinear system is from ``mp``
self._mp_ls = mp_ls # the ``matrix proxy`` wrapper of ``ls``, mainly to parse the bc, i.e., ``mp_ls._bc``.
self._nls = nls # the nonlinear system I am wrapping over.
self._freeze()
def pr(self, figsize=(12, 6)):
""""""
from phyem.src.config import RANK, MASTER_RANK
if RANK != MASTER_RANK:
return None
else:
pass
seek_text = self._mp._mp_seek_text()
symbolic = r"$" + self._mp._pr_text() + r"$"
# ----- for big matrix, bmatrix environment does not work, use array instead -----------------------
num_unknowns = len(self._mp._wf.unknowns)
if num_unknowns > 5:
# matrix_begin_latex = r"\left[\begin{array}{" + r"c" * num_unknowns + r"}"
# matrix_end_latex = r"\end{array}\right]"
# if r"\begin{bmatrix}" in symbolic:
# symbolic = symbolic.replace(r"\begin{bmatrix}", matrix_begin_latex)
# if r"\end{bmatrix}" in symbolic:
# symbolic = symbolic.replace(r"\end{bmatrix}", matrix_end_latex)
symbolic = bmatrix_to_array(symbolic, num_unknowns)
else:
pass
# ===================================================================================================
if self._mp_ls.bc is None or len(self._mp_ls.bc) == 0:
bc_text = ''
else:
bc_text = self._mp_ls._bc._bc_text()
fig = plt.figure(figsize=figsize)
plt.axis((0, 1, 0, 1))
plt.axis('off')
plt.text(0.05, 0.5, seek_text + symbolic + bc_text, ha='left', va='center', size=15)
# plt.text(0.05, 0.5, symbolic, ha='left', va='center', size=15)
# print(symbolic)
from phyem.src.config import _setting, _pr_cache
if _setting['pr_cache']:
_pr_cache(fig, filename='matrixProxyNonLinearSystem')
else:
plt.tight_layout()
plt.show(block=_setting['block'])
return fig
def _pr_temporal_advancing(self, *args, **kwargs):
""""""
return self._mp._pr_temporal_advancing(*args, **kwargs)