2026-01-12
例. サンプル brf (Brusselator)
データの読み込みと書き出し
output-sol.auto
# output-sol.auto
data=loadbd("brf") # read b.brf, d.brf, s.brf
ibr=0 # Number of branch
for br in data: # Branch
ibr+=1
for pt in br: # Points
lab=pt["LAB"]
if(lab!=0): # Labeled points
print("br={}, label={}".format(ibr,lab))
fname="sol-%04d.dat" % lab
data(lab).writeRawFilename(fname) # Output data of labeled solution
書き出しデータのプロット
$ python3 sol-plot2d.py < sol-XXXX.dat
ソース
import numpy as np
import matplotlib.pyplot as plt
while True:
try:
line = input()
except EOFError: End of data"
break
except:
print ("Error:")
break
s = line.split() # 'a b c' -> ['a','b','c']
if(len(s) == 0):
break;
else:
t=float(s[0]) # time
sval=list(map(float, s[1:])) # data
slen=len(sval)
plt.plot(sval[:int(slen/2)],label="t=%f" % t)
plt.legend()
plt.savefig("sol-u.png")
$ python3 sol-plot3d < sol-XXXX.dat
ソース
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
isep=0
gt=[] # list of time
gu=[] # list of data u
gv=[] # list of data v
while True:
try:
line = input()
except EOFError:
print("End of data")
break
except:
print ("Error:")
break
s = line.split() # 'a b c' -> ['a','b','c']
nval = len(s)
if(nval == 0):
break;
else:
t=float(s[0]) # time
sval=list(map(float, s[1:])) # data
print("t=%f" % t)
slen=len(sval)
isep=int(slen/2)
gt.append(t)
gu.append(sval[:isep])
gv.append(sval[isep:])
###############
gt=np.array(gt)
gu=np.array(gu)
gv=np.array(gv)
x = np.linspace(0, 1, isep)
X1, X2 = np.meshgrid(x, gt)
#
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X1, X2, gv, cmap='bwr', linewidth=0)
fig.colorbar(surf)
plt.show()
例. brf
AUTO> data=loadbd("brf")
AUTO> print(len(data))
3
AUTO> print(data[0])
BR PT TY LAB PAR(5) L2-NORM U(1) U(2) U(3) U(4) U(5) U(6)
1 1 EP 1 4.00000E-01 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 5 HB 2 5.12990E-01 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 11 HB 3 1.02338E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 16 HB 4 1.51789E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 21 HB 5 1.95959E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 22 UZ 6 2.05000E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
AUTO> print(len(data[0]))
22
AUTO> print(data[0][0])
{'BR': 1, 'PT': -1, 'TY number': 9, 'TY name': 'EP', 'LAB': 1, 'data': [0.40000000596, 7.5583149577, 2.0, 2.0, 2.0, 2.0, 2.0, 2.725], 'section': 0, 'index': 0}
AUTO> print(data(1)[0])
{'t': 0.0, 'u': [2.0, 2.0, 2.0, 2.0, 2.0, 2.AUTO> print(data[0][0])
{'BR': 1, 'PT': -1, 'TY number': 9, 'TY name': 'EP', 'LAB': 1, 'data': [0.40000000596, 7.5583149577, 2.0, 2.0, 2.0, 2.0, 2.0, 2.725], 'section': 0, 'index': 0}725, 2.725, 2.725, 2.725, 2.725], 'u dot': [2.4493022973e-09, 7.5221027891e-10, -2.879992591e-09, 1.7597740692e-09, 6.7294519168e-09, -1.9034442118e-09, -9.3464720051e-10, 2.2991151929e-10, -2.3152170469e-09, -4.3053043051e-09]}
#####################
AUTO> ad=data.toArray()
AUTO> print(len(ad))
226
AUTO> print(ad[0]) # data[0][0]['data'] と同じ
[0.40000000596, 7.5583149577, 2.0, 2.0, 2.0, 2.0, 2.0, 2.725]
#####################
AUTO> sd=sol(data)
AUTO> print(len(sd))
3
AUTO> print(len(sd[0]))
22
AUTO> print(len(sd[1]))
119
AUTO> print(len(sd[2]))
85
AUTO> print(sd[0]) # data[0]と同じ
BR PT TY LAB PAR(5) L2-NORM U(1) U(2) U(3) U(4) U(5) U(6)
1 1 EP 1 4.00000E-01 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 5 HB 2 5.12990E-01 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 11 HB 3 1.02338E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 16 HB 4 1.51789E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 21 HB 5 1.95959E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
1 22 UZ 6 2.05000E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00
AUTO> print(sd[0][0]) # data[0][0]と同じ
{'BR': 1, 'PT': -1, 'TY number': 9, 'TY name': 'EP', 'LAB': 1, 'data': [0.40000000596, 7.5583149577, 2.0, 2.0, 2.0, 2.0, 2.0, 2.725], 'section': 0, 'index': 0}