⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo.py

📁 利用C
💻 PY
字号:
"""Lorenz demo"""__author__ = "Rolv Erlend Bredesen <rolv@simula.no>"__date__ = "2008-04-03 -- 2008-04-03"__copyright__ = "Copyright (C) 2008 Rolv Erlend Bredesen"__license__  = "GNU LGPL Version 2.1"from numpy import emptyfrom dolfin import *  class Lorenz(ODE):        # Parameters    s = 10.0;    b = 8.0 / 3.0;    r = 28.0;            def __init__(self, N=3, T=50.):        ODE.__init__(self, N, T)        # Work arrays corresponding to uBlasVectors        self.u = empty(N)        self.x = empty(N)        self.y = empty(N)            def u0(self, u_):        u = self.u        u[0] = 1.0;        u[1] = 0.0;        u[2] = 0.0;        u_.set(u)            def f(self, u_, t_, y_):        u = self.u        u_.get(u)        y = self.y        y[0] = self.s*(u[1] - u[0]);        y[1] = self.r*u[0] - u[1] - u[0]*u[2];        y[2] = u[0]*u[1] - self.b*u[2];        y_.set(y)            def J(self, x_, y_, u_, t):        x = self.x        y = self.y        u = self.u        u_.get(u)        x_.get(x)        y[0] = self.s*(x[1] - x[0]);        y[1] = (self.r - u[2])*x[0] - x[1] - u[0]*x[2];        y[2] = u[1]*x[0] + u[0]*x[1] - self.b*x[2];        y_.set(y)        def myplot():    import matplotlib    import pylab    pylab.ion()    import numpy    import matplotlib.axes3d as p3    r = numpy.fromfile('solution_r.data', sep=' ')    r.shape = len(r)//3, 3    print "Residual in l2 norm:", pylab.norm(r)    u = numpy.fromfile('solution_u.data', sep=' ')    u.shape = len(u)//3, 3    x, y, z = numpy.hsplit(u, 3)    ax = p3.Axes3D(pylab.figure(figsize=(12,9)))    ax.plot3d(u[:,0], u[:,1], u[:,2], alpha=0.8, linewidth=.25)    ax.set_xlabel('x')    ax.set_ylabel('y')    ax.set_zlabel('z')    ax.set_title('Lorenz attractor')    pylab.savefig('lorenz.png', dpi=100)    print "Generated plot: lorenz.png"    pylab.show()   dolfin_set("ODE number of samples", 6000);dolfin_set("ODE initial time step", 0.02);dolfin_set("ODE fixed time step", True);dolfin_set("ODE nonlinear solver", "newton");dolfin_set("ODE method", "dg"); # cg/dgdolfin_set("ODE order", 18); # Convergence order 37!dolfin_set("ODE discrete tolerance", 1e-13);#dolfin_set("ODE save solution", True)lorenz = Lorenz(T=60)lorenz.solve();#myplot()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -