Skip to content

Commit

Permalink
Save names of algebraic variables needing diag_eps to `calls.need_d…
Browse files Browse the repository at this point in the history
…iag_eps`.
  • Loading branch information
cuihantao committed Sep 14, 2023
1 parent 5e5cfbe commit 8f0d18c
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 7 deletions.
14 changes: 12 additions & 2 deletions andes/core/model/modelcall.py
Expand Up @@ -16,6 +16,8 @@ def __init__(self):
self.md5 = ''

# `f` and `g` are callables generated by lambdify that take positional args
# `s` is a dict of callables for services needing sequential updates
# `sns` is a callable for updating non-sequential services
self.f = None
self.g = None
self.j = dict()
Expand All @@ -26,11 +28,15 @@ def __init__(self):
self.f_args = list()
self.g_args = list()
self.j_args = dict()
self.s_args = OrderedDict()
self.sns_args = list()

# when saving to pycode, dict of functions are stored as individual functions.
# these include `j`, `ia`, `ii`, `ij`, and `s`.
self.ia = OrderedDict()
self.ii = OrderedDict()
self.ij = OrderedDict()
self.s_args = OrderedDict()
self.sns_args = list()

self.ia_args = OrderedDict() # assignment initialization
self.ii_args = OrderedDict() # iterative initialization
self.ij_args = OrderedDict()
Expand All @@ -39,6 +45,10 @@ def __init__(self):
self.jjac = OrderedDict()
self.vjac = OrderedDict()

self.j_names = list() # existing jacobian names for this model
self.init_seq = list() # initialization sequence
self.need_diag_eps = list() # id of algeb variables needing diag_eps

def clear_ijv(self):
for jname in jac_names:
for jtype in jac_types:
Expand Down
3 changes: 2 additions & 1 deletion andes/core/symprocessor.py
Expand Up @@ -409,6 +409,7 @@ def generate_jacobians(self, diag_eps=1e-8):
v_idx = vars_syms_list.index(var.name)

self.calls.append_ijv(f'{var.e_code}{var.v_code}c', e_idx, v_idx, eps)
self.calls.need_diag_eps.append(var.name)

def generate_pretty_print(self):
"""
Expand Down Expand Up @@ -518,7 +519,7 @@ def generate_pycode(self, pycode_path, yapf_pycode):

# variables
for name in dilled_vars:
out.append(f'{name} = ' + pprint.pformat(self.calls.__dict__[name]))
out.append(f'{name} = ' + pprint.pformat(self.calls.__dict__[name]) + "\n")

out_str = '\n'.join(out)

Expand Down
7 changes: 3 additions & 4 deletions andes/shared.py
Expand Up @@ -40,11 +40,10 @@
jac_names = ('fx', 'fy', 'gx', 'gy')
jac_types = ('c', '')

dilled_vars = ['f_args', 'g_args', 'j_args',
's_args', 'sns_args',
dilled_vars = ['f_args', 'g_args', 'j_args', 's_args', 'sns_args',
'ia_args', 'ii_args', 'ij_args',
'ijac', 'jjac', 'vjac', 'j_names',
'init_seq']
'ijac', 'jjac', 'vjac',
'j_names', 'init_seq', "need_diag_eps"]

jac_full_names = list()
for jname in jac_names:
Expand Down

0 comments on commit 8f0d18c

Please sign in to comment.