@@ -619,7 +619,7 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
619
619
)" ;
620
620
std::string expected_result = R"(
621
621
DERIVATIVE states {
622
- EIGEN_NEWTON_SOLVE [1]{
622
+ EIGEN_LINEAR_SOLVE [1]{
623
623
LOCAL old_m
624
624
}{
625
625
IF (mInf == 1) {
@@ -628,7 +628,6 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
628
628
old_m = m
629
629
}{
630
630
nmodl_eigen_x[0] = m
631
- }{
632
631
nmodl_eigen_f[0] = (-nmodl_eigen_x[0]*dt+dt*mInf+mTau*(-nmodl_eigen_x[0]+old_m))/mTau
633
632
nmodl_eigen_j[0] = -(dt+mTau)/mTau
634
633
}{
@@ -659,15 +658,14 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
659
658
})" ;
660
659
std::string expected_result = R"(
661
660
DERIVATIVE states {
662
- EIGEN_NEWTON_SOLVE [2]{
661
+ EIGEN_LINEAR_SOLVE [2]{
663
662
LOCAL a, b, old_y, old_x
664
663
}{
665
664
old_y = y
666
665
old_x = x
667
666
}{
668
667
nmodl_eigen_x[0] = x
669
668
nmodl_eigen_x[1] = y
670
- }{
671
669
nmodl_eigen_f[0] = -nmodl_eigen_x[1]+a*dt+old_y
672
670
nmodl_eigen_j[0] = 0
673
671
nmodl_eigen_j[2] = -1.0
@@ -703,15 +701,14 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
703
701
})" ;
704
702
std::string expected_result = R"(
705
703
DERIVATIVE states {
706
- EIGEN_NEWTON_SOLVE [2]{
704
+ EIGEN_LINEAR_SOLVE [2]{
707
705
LOCAL a, b, old_M_1, old_M_0
708
706
}{
709
707
old_M_1 = M[1]
710
708
old_M_0 = M[0]
711
709
}{
712
710
nmodl_eigen_x[0] = M[0]
713
711
nmodl_eigen_x[1] = M[1]
714
- }{
715
712
nmodl_eigen_f[0] = -nmodl_eigen_x[1]+a*dt+old_M_1
716
713
nmodl_eigen_j[0] = 0
717
714
nmodl_eigen_j[2] = -1.0
@@ -748,15 +745,14 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
748
745
})" ;
749
746
std::string expected_result = R"(
750
747
DERIVATIVE states {
751
- EIGEN_NEWTON_SOLVE [2]{
748
+ EIGEN_LINEAR_SOLVE [2]{
752
749
LOCAL a, b, old_x, old_y
753
750
}{
754
751
old_x = x
755
752
old_y = y
756
753
}{
757
754
nmodl_eigen_x[0] = x
758
755
nmodl_eigen_x[1] = y
759
- }{
760
756
nmodl_eigen_f[0] = -nmodl_eigen_x[0]+a*dt+old_x
761
757
nmodl_eigen_j[0] = -1.0
762
758
nmodl_eigen_j[2] = 0
@@ -825,15 +821,14 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
825
821
DERIVATIVE states {
826
822
LOCAL a, b
827
823
IF (a == 1) {
828
- EIGEN_NEWTON_SOLVE [2]{
824
+ EIGEN_LINEAR_SOLVE [2]{
829
825
LOCAL old_x, old_y
830
826
}{
831
827
old_x = x
832
828
old_y = y
833
829
}{
834
830
nmodl_eigen_x[0] = x
835
831
nmodl_eigen_x[1] = y
836
- }{
837
832
nmodl_eigen_f[0] = -nmodl_eigen_x[0]+a*dt+old_x
838
833
nmodl_eigen_j[0] = -1.0
839
834
nmodl_eigen_j[2] = 0
@@ -875,15 +870,14 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
875
870
})" ;
876
871
std::string expected_result = R"(
877
872
DERIVATIVE states {
878
- EIGEN_NEWTON_SOLVE [2]{
873
+ EIGEN_LINEAR_SOLVE [2]{
879
874
LOCAL a, b, old_x, old_y
880
875
}{
881
876
old_x = x
882
877
old_y = y
883
878
}{
884
879
nmodl_eigen_x[0] = x
885
880
nmodl_eigen_x[1] = y
886
- }{
887
881
nmodl_eigen_f[0] = -nmodl_eigen_x[0]+nmodl_eigen_x[1]*a*dt+b*dt+old_x
888
882
nmodl_eigen_j[0] = -1.0
889
883
nmodl_eigen_j[2] = a*dt
@@ -901,15 +895,14 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
901
895
})" ;
902
896
std::string expected_result_cse = R"(
903
897
DERIVATIVE states {
904
- EIGEN_NEWTON_SOLVE [2]{
898
+ EIGEN_LINEAR_SOLVE [2]{
905
899
LOCAL a, b, old_x, old_y
906
900
}{
907
901
old_x = x
908
902
old_y = y
909
903
}{
910
904
nmodl_eigen_x[0] = x
911
905
nmodl_eigen_x[1] = y
912
- }{
913
906
nmodl_eigen_f[0] = -nmodl_eigen_x[0]+nmodl_eigen_x[1]*a*dt+b*dt+old_x
914
907
nmodl_eigen_j[0] = -1.0
915
908
nmodl_eigen_j[2] = a*dt
@@ -954,7 +947,7 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
954
947
)" ;
955
948
std::string expected_result = R"(
956
949
DERIVATIVE states {
957
- EIGEN_NEWTON_SOLVE [3]{
950
+ EIGEN_LINEAR_SOLVE [3]{
958
951
LOCAL a, b, c, d, h, old_x, old_y, old_z
959
952
}{
960
953
old_x = x
@@ -964,7 +957,6 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
964
957
nmodl_eigen_x[0] = x
965
958
nmodl_eigen_x[1] = y
966
959
nmodl_eigen_x[2] = z
967
- }{
968
960
nmodl_eigen_f[0] = -nmodl_eigen_x[0]+nmodl_eigen_x[2]*a*dt+b*dt*h+old_x
969
961
nmodl_eigen_j[0] = -1.0
970
962
nmodl_eigen_j[3] = 0
@@ -986,7 +978,7 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
986
978
})" ;
987
979
std::string expected_cse_result = R"(
988
980
DERIVATIVE states {
989
- EIGEN_NEWTON_SOLVE [3]{
981
+ EIGEN_LINEAR_SOLVE [3]{
990
982
LOCAL a, b, c, d, h, old_x, old_y, old_z
991
983
}{
992
984
old_x = x
@@ -996,7 +988,6 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
996
988
nmodl_eigen_x[0] = x
997
989
nmodl_eigen_x[1] = y
998
990
nmodl_eigen_x[2] = z
999
- }{
1000
991
nmodl_eigen_f[0] = -nmodl_eigen_x[0]+nmodl_eigen_x[2]*a*dt+b*dt*h+old_x
1001
992
nmodl_eigen_j[0] = -1.0
1002
993
nmodl_eigen_j[3] = 0
@@ -1042,15 +1033,14 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
1042
1033
)" ;
1043
1034
std::string expected_result = R"(
1044
1035
DERIVATIVE scheme1 {
1045
- EIGEN_NEWTON_SOLVE [2]{
1036
+ EIGEN_LINEAR_SOLVE [2]{
1046
1037
LOCAL old_mc, old_m
1047
1038
}{
1048
1039
old_mc = mc
1049
1040
old_m = m
1050
1041
}{
1051
1042
nmodl_eigen_x[0] = mc
1052
1043
nmodl_eigen_x[1] = m
1053
- }{
1054
1044
nmodl_eigen_f[0] = -nmodl_eigen_x[0]*a*dt-nmodl_eigen_x[0]+nmodl_eigen_x[1]*b*dt+old_mc
1055
1045
nmodl_eigen_j[0] = -a*dt-1.0
1056
1046
nmodl_eigen_j[2] = b*dt
@@ -1086,14 +1076,13 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
1086
1076
)" ;
1087
1077
std::string expected_result = R"(
1088
1078
DERIVATIVE scheme1 {
1089
- EIGEN_NEWTON_SOLVE [2]{
1079
+ EIGEN_LINEAR_SOLVE [2]{
1090
1080
LOCAL old_mc
1091
1081
}{
1092
1082
old_mc = mc
1093
1083
}{
1094
1084
nmodl_eigen_x[0] = mc
1095
1085
nmodl_eigen_x[1] = m
1096
- }{
1097
1086
nmodl_eigen_f[0] = -nmodl_eigen_x[0]*a*dt-nmodl_eigen_x[0]+nmodl_eigen_x[1]*b*dt+old_mc
1098
1087
nmodl_eigen_j[0] = -a*dt-1.0
1099
1088
nmodl_eigen_j[2] = b*dt
@@ -1131,15 +1120,14 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
1131
1120
)" ;
1132
1121
std::string expected_result = R"(
1133
1122
DERIVATIVE scheme1 {
1134
- EIGEN_NEWTON_SOLVE [2]{
1123
+ EIGEN_LINEAR_SOLVE [2]{
1135
1124
LOCAL old_mc, old_m
1136
1125
}{
1137
1126
old_mc = mc
1138
1127
old_m = m
1139
1128
}{
1140
1129
nmodl_eigen_x[0] = mc
1141
1130
nmodl_eigen_x[1] = m
1142
- }{
1143
1131
nmodl_eigen_f[0] = -nmodl_eigen_x[0]*a*dt-nmodl_eigen_x[0]+nmodl_eigen_x[1]*b*dt+old_mc
1144
1132
nmodl_eigen_j[0] = -a*dt-1.0
1145
1133
nmodl_eigen_j[2] = b*dt
@@ -1180,7 +1168,7 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
1180
1168
})" ;
1181
1169
std::string expected_result = R"(
1182
1170
DERIVATIVE ihkin {
1183
- EIGEN_NEWTON_SOLVE [5]{
1171
+ EIGEN_LINEAR_SOLVE [5]{
1184
1172
LOCAL alpha, beta, k3p, k4, k1ca, k2, old_c1, old_o1, old_p0
1185
1173
}{
1186
1174
evaluate_fct(v, cai)
@@ -1193,7 +1181,6 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
1193
1181
nmodl_eigen_x[2] = o2
1194
1182
nmodl_eigen_x[3] = p0
1195
1183
nmodl_eigen_x[4] = p1
1196
- }{
1197
1184
nmodl_eigen_f[0] = -nmodl_eigen_x[0]*alpha*dt-nmodl_eigen_x[0]+nmodl_eigen_x[1]*beta*dt+old_c1
1198
1185
nmodl_eigen_j[0] = -alpha*dt-1.0
1199
1186
nmodl_eigen_j[5] = beta*dt
@@ -1260,13 +1247,12 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
1260
1247
)" ;
1261
1248
std::string expected_result = R"(
1262
1249
DERIVATIVE scheme1 {
1263
- EIGEN_NEWTON_SOLVE [1]{
1250
+ EIGEN_LINEAR_SOLVE [1]{
1264
1251
LOCAL old_W_0
1265
1252
}{
1266
1253
old_W_0 = W[0]
1267
1254
}{
1268
1255
nmodl_eigen_x[0] = W[0]
1269
- }{
1270
1256
nmodl_eigen_f[0] = -nmodl_eigen_x[0]*dt*A[0]+nmodl_eigen_x[0]*dt*B[0]-nmodl_eigen_x[0]+3.0*dt*A[1]+old_W_0
1271
1257
nmodl_eigen_j[0] = -dt*A[0]+dt*B[0]-1.0
1272
1258
}{
@@ -1300,15 +1286,14 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
1300
1286
)" ;
1301
1287
std::string expected_result = R"(
1302
1288
DERIVATIVE scheme1 {
1303
- EIGEN_NEWTON_SOLVE [2]{
1289
+ EIGEN_LINEAR_SOLVE [2]{
1304
1290
LOCAL old_M_0, old_M_1
1305
1291
}{
1306
1292
old_M_0 = M[0]
1307
1293
old_M_1 = M[1]
1308
1294
}{
1309
1295
nmodl_eigen_x[0] = M[0]
1310
1296
nmodl_eigen_x[1] = M[1]
1311
- }{
1312
1297
nmodl_eigen_f[0] = -nmodl_eigen_x[0]*dt*A[0]-nmodl_eigen_x[0]+nmodl_eigen_x[1]*dt*B[0]+old_M_0
1313
1298
nmodl_eigen_j[0] = -dt*A[0]-1.0
1314
1299
nmodl_eigen_j[2] = dt*B[0]
@@ -1346,13 +1331,12 @@ SCENARIO("Solve ODEs with derivimplicit method using SympySolverVisitor",
1346
1331
)" ;
1347
1332
std::string expected_result = R"(
1348
1333
DERIVATIVE scheme1 {
1349
- EIGEN_NEWTON_SOLVE [1]{
1334
+ EIGEN_LINEAR_SOLVE [1]{
1350
1335
LOCAL old_W_0
1351
1336
}{
1352
1337
old_W_0 = W[0]
1353
1338
}{
1354
1339
nmodl_eigen_x[0] = W[0]
1355
- }{
1356
1340
nmodl_eigen_f[0] = -nmodl_eigen_x[0]*dt*A[0]+nmodl_eigen_x[0]*dt*B[0]-nmodl_eigen_x[0]+3.0*dt*A[1]+old_W_0
1357
1341
nmodl_eigen_j[0] = -dt*A[0]+dt*B[0]-1.0
1358
1342
}{
@@ -2053,7 +2037,7 @@ SCENARIO("Solve NONLINEAR block using SympySolver Visitor", "[visitor][solver][s
2053
2037
x
2054
2038
}
2055
2039
NONLINEAR nonlin {
2056
- ~ x = 5
2040
+ ~ x * x * x = 5
2057
2041
})" ;
2058
2042
std::string expected_text = R"(
2059
2043
NONLINEAR nonlin {
@@ -2062,8 +2046,8 @@ SCENARIO("Solve NONLINEAR block using SympySolver Visitor", "[visitor][solver][s
2062
2046
}{
2063
2047
nmodl_eigen_x[0] = x
2064
2048
}{
2065
- nmodl_eigen_f[0] = 5.0-nmodl_eigen_x[0]
2066
- nmodl_eigen_j[0] = -1.0
2049
+ nmodl_eigen_f[0] = 5.0-pow( nmodl_eigen_x[0], 3)
2050
+ nmodl_eigen_j[0] = -3.0 * pow(nmodl_eigen_x[0], 2)
2067
2051
}{
2068
2052
x = nmodl_eigen_x[0]
2069
2053
}{
@@ -2084,7 +2068,7 @@ SCENARIO("Solve NONLINEAR block using SympySolver Visitor", "[visitor][solver][s
2084
2068
NONLINEAR nonlin {
2085
2069
~ s[0] = 1
2086
2070
~ s[1] = 3
2087
- ~ s[2] + s[1] = s[0]
2071
+ ~ s[2] + s[1] = s[0] * s[0]
2088
2072
})" ;
2089
2073
std::string expected_text = R"(
2090
2074
NONLINEAR nonlin {
@@ -2097,14 +2081,14 @@ SCENARIO("Solve NONLINEAR block using SympySolver Visitor", "[visitor][solver][s
2097
2081
}{
2098
2082
nmodl_eigen_f[0] = 1.0-nmodl_eigen_x[0]
2099
2083
nmodl_eigen_f[1] = 3.0-nmodl_eigen_x[1]
2100
- nmodl_eigen_f[2] = nmodl_eigen_x[0]-nmodl_eigen_x[1]-nmodl_eigen_x[2]
2084
+ nmodl_eigen_f[2] = pow( nmodl_eigen_x[0], 2) -nmodl_eigen_x[1]-nmodl_eigen_x[2]
2101
2085
nmodl_eigen_j[0] = -1.0
2102
2086
nmodl_eigen_j[3] = 0
2103
2087
nmodl_eigen_j[6] = 0
2104
2088
nmodl_eigen_j[1] = 0
2105
2089
nmodl_eigen_j[4] = -1.0
2106
2090
nmodl_eigen_j[7] = 0
2107
- nmodl_eigen_j[2] = 1.0
2091
+ nmodl_eigen_j[2] = 2.0 * nmodl_eigen_x[0]
2108
2092
nmodl_eigen_j[5] = -1.0
2109
2093
nmodl_eigen_j[8] = -1.0
2110
2094
}{
0 commit comments