可执行文件地址:

下载后,后缀修改去掉.ra即可执行

源代码

 #!/usr/bin/env python

 from math import exp
from gnuplot_leon import *
imp0 = 377.0 class fdtd_leon:
# Author : Leon Email: yangli0534@gmail.com
# fdtd simulation #initialization
def __init__(self,size=400,time=0,MaxTime=1000,delay = 30, width = 10, cdtds =1.0):
self.ez = size * [0.00]
self.hy = size * [0.00]
self.ceze = size * [0.00]
self.chye = size * [0.00]
self.cezh = size * [0.00]
self.chyh = size * [0.00]
self.size = size
self.time = 0
self.MaxTime = MaxTime
self.delay = delay
self.width = width
self.cdtds = cdtds # grid initialization
def grid_init(self,loss = 0.02, loss_layer = 180, epsr = 9.0):
for mm in range(0, self.size):
if (mm < 100):
self.ceze[mm] = 1.0
self.cezh[mm] = imp0
elif (mm < loss_layer):
self.ceze[mm] = 1.0
self.cezh[mm] = imp0/epsr
else:
self.ceze[mm] = (1.0-loss)/(1.0+loss)
self.cezh[mm] = imp0/epsr//(1.0+loss)
if(mm < loss_layer):
self.chyh[mm] = 1.0
self.chye[mm] = 1.0/imp0
else:
self.chyh[mm] = (1.0-loss)/(1.0+loss)
self.chye[mm] = 1.0/imp0/(1.0+loss) # update electric field
def update_e(self):
mm =0;
for mm in range(1,self.size-1):
self.ez[mm] = self.ez[mm]*self.ceze[mm] + (self.hy[mm]-self.hy[mm-1])*self.cezh[mm] # update magnetic field
def update_h(self):
mm =0;
for mm in range(0,self.size-1):
self.hy[mm] = self.hy[mm]*self.chyh[mm] + (self.ez[mm+1]-self.ez[mm])*self.chye[mm] def ez_inc_init(self):
#self.delay = int(raw_input('Enter delay:'))
#self.width = int(raw_input('Enter width:'))
#self.cdtds = int(raw_input('Enter cdtds:'))
#print self.delay
#print self.width
#print self.cdtds
return def ez_inc(self,time,location):
#print ''.join(['ez_inc time: ',str(time),'location: ',str(location)] )
#print exp(-((time-self.delay-location/self.cdtds)/self.width)**2)
return exp(-((time-self.delay-location/self.cdtds)/self.width)**2) def abc_init(self):
return def abc(self):
self.ez[0] = self.ez[1] def tfsf_init(self):
tfsf_boundary = raw_input('Enter location of tfsf boundary:')
self.ez_inc_init()
return int(tfsf_boundary) def tfsf_update(self,tfsf_boundary):
#print self.time
#print tfsf_boundary
tfsf_boundary = int(tfsf_boundary)
if (tfsf_boundary <= 0):
print 'tfsf boundary error \n'
return
else:
self.hy[tfsf_boundary] -= self.ez_inc(self.time,0.0)*self.chye[tfsf_boundary]
self.ez[tfsf_boundary+1] += self.ez_inc(self.time+0.5,-0.5)

例子

 #!/usr/bin/env python

 import sys
import math
import os
from gnuplot_leon import *
from fdtd_leon import *
import threading
# Author : Leon Email: yangli0534@gmail.com
# fdtd simulation , plotting with gnuplot, writting in python
# python and gnuplot software packages should be installed before running this program
# 1d fdtd with absorbing boundary and TFSF boundary
# lossy dielectric material def snashot(gp, fdtd,interval):
"""Record a frame data into the gif file Parameters
----------
gp : class gnuplot_leon
fdtd : class fdtd_leon
interval : int record one every [interval] frames
"""
if(fdtd.time % interval == 0):
gp.set_frame_start('l', 1, 'green')
cnt = 0
for elem in fdtd.ez:
gp.update_point(cnt,elem)
cnt += 1
gp.set_frame_end() def report():
"""report the rate of progress Parameters
----------
none
"""
global MaxTime
global qTime
print ''.join([str(int(1000.00*int(qTime+1)/int(MaxTime))/10.0),'% has been finished!'])
if(qTime>=MaxTime-1):
return
global timer
timer = threading.Timer(2.0,report)
timer.start() gp = gnuplot_leon()
gp.set_plot_size(0.85,0.85)
gp.set_canvas_size(600,400)
#gp.set_title('fdtd simulation by leon : gnuplot class test')
title = 'fdtd simulation by leon,yangli0534\\\\@gmail.com' gp.set_title(title)
gp.set_gif()
#gp.set_png()
gp.set_file_name('demo3.gif')
gp.set_tics_color('white')
gp.set_border_color('orange')
gp.set_grid_color('orange')
gp.set_bkgr_color('gray10')
gp.set_xlabel('length','white')
gp.set_ylabel('amplitude','white')
gp.auto_scale_enable()
gp.set_key('off','sin(x)','white') size = 400#physical distance
#ez=size * [0.00]#electric field
#hy=size * [0.00]#magnetic field
#ceze=size * [0.00]#
#cezh=size * [0.00]#
#chye=size * [0.00]#
#chyh=size * [0.00]#
#sinwave=size * [0.00]#
imp0 = 377.00
LOSS = 0.01
LOSS_LAYER = 250
qTime = 0
MaxTime = 18000
delay = 30
width = 10
cdtds =1.0
epsR = 9.0
tfsf_boundary = 0
interval = 30
#cnt = 0
#elem = 0.00000
gp.set_x_range(0,size-1) fdtd = fdtd_leon(size,0,MaxTime,delay,width,cdtds)
fdtd.grid_init(LOSS, LOSS_LAYER, epsR)
fdtd.abc_init()
tfsf_boundary = fdtd.tfsf_init()
timer = threading.Timer(1,report)
timer.start()
# do time stepping
for fdtd.time in range(0, MaxTime):
qTime = fdtd.time
fdtd.update_h()
fdtd.tfsf_update(tfsf_boundary)
fdtd.abc()
fdtd.update_e()
snashot(gp,fdtd,interval) gp.set_output_valid()
gp.close()

FDTD Python API的更多相关文章

  1. Appium python API 总结

    Appium python api 根据testerhome的文章,再补充一些文章里面没有提及的API [TOC] [1]find element driver 的方法 注意:这几个方法只能通过sel ...

  2. The novaclient Python API

    The novaclient Python API Usage First create a client instance with your credentials: >>> f ...

  3. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  4. BotVS开发基础—Python API

    代码 import json def main(): # python API列表 https://www.botvs.com/bbs-topic/443 #状态信息 LogStatus(" ...

  5. 《Spark Python API 官方文档中文版》 之 pyspark.sql (一)

    摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...

  6. 《Spark Python API 官方文档中文版》 之 pyspark.sql (二)

    摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...

  7. HBase Python API

    HBase Python API HBase通过thrift机制可以实现多语言编程,信息通过端口传递,因此Python是个不错的选择 吐槽 博主在Mac上配置HBase,奈何Zoomkeeper一直报 ...

  8. 二、Blender/Python API总览

    原文:https://docs.blender.org/api/blender_python_api_current/info_overview.html Python in Blender  Ble ...

  9. Appium+python自动化8-Appium Python API

    Appium+python自动化8-AppiumPython API   前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts conte ...

随机推荐

  1. C++ Qt 框架静态编译 操作记录

    谁愿意写个程式出来之后还附带一堆DLL,尤其是名字如此明显的名字. 于是在网上看了看,是需要下载源代码然后进行编译的,但是看了看别人说的编译时间,长达几个小时,瞬间就感觉不想做了.因为我还需要抓紧时间 ...

  2. [PHP] 读取大文件并显示

    使用PHP读取日志文件,当文件比较大的时候,会报内存不足,因此应该部分读取,读取指定的行数的数据 PHP代码: <?php class Test{ //日志路径 const LOG_PATH=& ...

  3. ahjesus 安装mongodb企业版for ubuntu

    导入共匙 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 创建源列表 echo 'deb http ...

  4. J2EE分布式架构及MySQL交流群

    J2EE分布式架构及MySQL交流群:577913057

  5. Linux编辑器vim键盘详解

    下面的这张图,一看就明白了,从此,学习变的不再艰难! 补注:图中没有关于查找和替换的,应该用下面的.自上而下的查找操作                  /word小写的n和N自下而上的查找操作    ...

  6. 在sap系统设置纸张打印格式(针式打印机)

    在sap做一个打印报表,要先设置一个纸张打印格式,下面以工厂中常用来打印的针孔纸为例,在sap设置该纸张的打印格式,以用于报表: 1.运行事务代码SPAD:选择工具栏上的[完全管理]按钮——>选 ...

  7. mysql实时同步到mssql的解决方案

    数据库在应用程序中是必不可少的部分,mysql是开源的,所以很多人它,mssql是微软的,用在windows平台上是非常方便的,所以也有很多人用它.现在问题来了,如何将这两个数据库同步,即数据内容保持 ...

  8. 网站SEO之百度优化不得不知的铁人三项规则

    奥运会有铁人三项,此运动更好的协调了运动员的综合素质水平,而百度优化排名中的“铁人三项”规则则是让网站的整体质量更好的满足市场用户体验.针对不同部分的操作,可以让网站在每个细节处都能凸显以人为本的服务 ...

  9. Android项目实战(十四):TextView显示html样式的文字

    项目需求: TextView显示一段文字,格式为:(消息个数,不确定)条消息 这段文字中名字和数字的长度是不确定的,还要求名字和数字各自有各自的颜色. 一开始我想的是用(转) SpannableStr ...

  10. File存储 - 文件存储

    博客地址 http://www.cnblogs.com/mmyblogs/p/6107472.html(转载请保留) 文件存储 文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容 ...