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

📄 dolfinformat.py

📁 finite element library for mathematic majored research
💻 PY
字号:
"Code generation for the UFC 1.0 format with DOLFIN"__author__ = "Anders Logg (logg@simula.no)"__date__ = "2007-03-24 -- 2007-06-11"__copyright__ = "Copyright (C) 2007 Anders Logg"__license__  = "GNU GPL version 3 or any later version"# Modified by Kristian B. Oelgaard 2007# UFC code templatesfrom ufc import *# FFC common modulesfrom ffc.common.utils import *from ffc.common.debug import *from ffc.common.constants import *# FFC language modulesfrom ffc.compiler.language.restriction import *from ffc.compiler.language.integral import *# FFC format modulesimport ufcformat# Specify formatting for code generationformat = ufcformat.formatdef init(options):    "Initialize code generation for given options"    ufcformat.init(options)def write(generated_forms, prefix, options):    "Generate UFC 1.0 code with DOLFIN wrappers for a given list of pregenerated forms"    debug("Generating code for UFC 1.0 with DOLFIN wrappers")    # Generate code for header    output = ""    output += generate_header(prefix, options)    output += "\n"    # Generate UFC code    output += ufcformat.generate_ufc(generated_forms, "UFC_" + prefix, options)    # Generate code for DOLFIN wrappers    output += __generate_dolfin_wrappers(generated_forms, prefix, options)    # Generate code for footer    output += generate_footer(prefix, options)    # Write file    filename = "%s.h" % prefix    file = open(filename, "w")    file.write(output)    file.close()    debug("Output written to " + filename)def generate_header(prefix, options):    "Generate file header"    # Check if BLAS is required    if options["blas"]:        blas_include = "\n#include <cblas.h>"        blas_warning = "\n// Warning: This code was generated with '-f blas' and requires cblas.h."    else:        blas_include = ""        blas_warning = ""            return """\// This code conforms with the UFC specification version 1.0// and was automatically generated by FFC version %s.%s//// Warning: This code was generated with the option '-l dolfin'// and contains DOLFIN-specific wrappers that depend on DOLFIN.#ifndef __%s_H#define __%s_H#include <cmath>#include <stdexcept>#include <fstream>#include <ufc.h>%s""" % (FFC_VERSION, blas_warning, prefix.upper(), prefix.upper(), blas_include)def generate_footer(prefix, options):    "Generate file footer"    return """\#endif"""def __generate_dolfin_wrappers(generated_forms, prefix, options):    "Generate code for DOLFIN wrappers"    output = """\// DOLFIN wrappers#include <dolfin/Form.h>"""    for i in range(len(generated_forms)):        (form_code, form_data) = generated_forms[i]        form_prefix = ufcformat.compute_prefix(prefix, generated_forms, i)        constructor_args = ", ".join(["dolfin::Function& w%d" % i for i in range(form_data.num_coefficients)])        constructor_body = "\n".join(["    __coefficients.push_back(&w%d);" % i for i in range(form_data.num_coefficients)])        if constructor_body == "":            constructor_body = "    // Do nothing"        output += """\class %s : public dolfin::Form{public:  %s(%s) : dolfin::Form()  {%s  }  /// Return UFC form  virtual const ufc::form& form() const  {    return __form;  }    /// Return array of coefficients  virtual const dolfin::Array<dolfin::Function*>& coefficients() const  {    return __coefficients;  }private:  // UFC form  UFC_%s __form;  /// Array of coefficients  dolfin::Array<dolfin::Function*> __coefficients;};""" % (form_prefix, form_prefix, constructor_args, constructor_body, form_prefix)        return output

⌨️ 快捷键说明

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