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

📄 dolfin-swig

📁 利用C
💻
字号:
#!/usr/bin/env pythonimport os, sysfrom commands import getoutputdebug = False# Simple tool to automatically convert a header file (with# implementation) including DOLFIN classes or functions to a Python# module.usage = """Usage: %s sourcefile [modulename]Example: dolfin-swig Poisson3D.h poisson3dform""" % os.path.basename(sys.argv[0])if len(sys.argv) < 2:    print usagename = sys.argv[1]name = name.rstrip(".h")if(len(sys.argv) > 2):    modulename = sys.argv[2]else:    lowername = name.lower()    modulename = lowernameswigfile = modulename + ".i"print "Generating the SWIG interface file for the %s module" % nameswigsource = """%%module %s%%{#include <dolfin.h>#include <string>#include \"%s.h\"using namespace dolfin;%%}%%typemap(python,in) real = double; %%typemap(python,out) real = double; %%typemap(python,in) uint = int; %%typemap(python,out) uint = int; // Typemaps for dolfin::real array arguments in virtual methods// probably not very safe%%typemap(directorin) dolfin::real [] {  {    // Custom typemap    $input = SWIG_NewPointerObj((void *) $1_name, $1_descriptor, $owner);  }}%%typemap(directorin) dolfin::real const [] {  {    // Custom typemap    $input = SWIG_NewPointerObj((void *) $1_name, $1_descriptor, $owner);  }}%%include \"typemaps.i\"%%include \"std_string.i\"%%include \"carrays.i\"%%include \"%s.i\"%%array_functions(dolfin::real, realArray);%%feature(\"director\") Function;%%feature(\"director\") BoundaryCondition;%%feature(\"director\") ODE;%%ignore dolfin::dolfin_set;%%ignore dolfin::dolfin_set_aptr;%%import \"dolfin.h\"%%import \"dolfin/constants.h\"/* function imports */%%import \"dolfin/Function.h\"/* fem imports */%%include \"dolfin/FiniteElementSpec.h\"%%include \"dolfin/BoundaryCondition.h\"%%include \"dolfin/FiniteElement.h\"/* form imports */%%include \"dolfin/Form.h\"%%include \"dolfin/BilinearForm.h\"%%include \"dolfin/LinearForm.h\"/* form include */%%include \"%s.h\"""" % (modulename, name, name, name)swigoutput = open(swigfile, 'w')swigoutput.write(swigsource)swigoutput.close()#print "Building the Python module"debugout = getoutput("swig -python -c++ -nodefault -dirprot `pkg-config --cflags-only-I dolfin` -o %s_wrap.cpp %s" % (modulename, swigfile))if debug:    print debugout# FIXME: Workaround for apparent bug in SWIG, try to fix the bug.interfacefile = open("%s_wrap.cpp" % modulename)tmpfile = open("tmp.cpp", 'w')stext = "dolfin::%s::dolfin::" % namertext = "dolfin::"for s in interfacefile.xreadlines():    tmpfile.write(s.replace(stext, rtext))interfacefile.close()tmpfile.close()debugout = getoutput("mv tmp.cpp %s_wrap.cpp" % modulename)if debug:    print debugout# FIXME:# Compilation still not compiler-independent#print "Compiling generated code"debugout = getoutput("`pkg-config --variable=compiler dolfin` `pkg-config --variable=swigcflags dolfin` `pkg-config --cflags-only-I dolfin` -I. -g -fPIC  -c -o %s_wrap.o %s_wrap.cpp" % (modulename, modulename))if debug:    print debugout# FIXME:# Generating shared library still not compiler-independent (syntax likely# only works for GCC)#print "Linking generated code"debugout = getoutput("`pkg-config --variable=compiler dolfin` -g -shared %s_wrap.o -o _%s.so `pkg-config --libs dolfin`" % (modulename, modulename))if debug:    print debugout

⌨️ 快捷键说明

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