Home | Trees | Indices | Help |
|
---|
|
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 """ 4 This module contains code generation tools for the ufc::form class. 5 """ 6 7 # Copyright (C) 2008-2009 Martin Sandve Alnes and Simula Resarch Laboratory 8 # 9 # This file is part of SyFi. 10 # 11 # SyFi is free software: you can redistribute it and/or modify 12 # it under the terms of the GNU General Public License as published by 13 # the Free Software Foundation, either version 2 of the License, or 14 # (at your option) any later version. 15 # 16 # SyFi is distributed in the hope that it will be useful, 17 # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 # GNU General Public License for more details. 20 # 21 # You should have received a copy of the GNU General Public License 22 # along with SyFi. If not, see <http://www.gnu.org/licenses/>. 23 # 24 # First added: 2008-08-13 25 # Last changed: 2009-03-05 26 27 from sfc.codegeneration.codeformatting import indent, CodeFormatter 28 from sfc.common.utilities import unique 29 import ufc_utils 30 from itertools import chain 3133 "Code generator for an ufc::form." 36 40 44164 165 if __name__ == '__main__': 166 print "form.py, no test implemented" 16746 return unique(sorted("%s.h" % cn 47 for cn in chain(self.formrep.fe_names, 48 self.formrep.dm_names, 49 self.formrep.itg_names.values())))50 53 5658 form_vars = { 59 "classname" : self.formrep.classname, 60 "constructor" : indent(self.gen_constructor()), 61 "constructor_arguments" : indent(self.gen_constructor_arguments()), 62 "initializer_list" : indent(self.gen_initializer_list()), 63 "destructor" : indent(self.gen_destructor()), 64 "members" : indent(self.gen_members()), 65 "rank" : indent(self.gen_rank()), 66 "num_coefficients" : indent(self.gen_num_coefficients()), 67 "signature" : indent(self.gen_signature()), 68 "create_dofmap" : indent(self.gen_create_dofmap()), 69 "create_finite_element" : indent(self.gen_create_finite_element()), 70 "create_cell_integral" : indent(self.gen_create_cell_integral()), 71 "create_exterior_facet_integral" : indent(self.gen_create_exterior_facet_integral()), 72 "create_interior_facet_integral" : indent(self.gen_create_interior_facet_integral()), 73 "num_cell_domains" : indent(self.gen_num_cell_domains()), 74 "num_exterior_facet_domains" : indent(self.gen_num_exterior_facet_domains()), 75 "num_interior_facet_domains" : indent(self.gen_num_interior_facet_domains()), 76 } 77 return form_vars78 81 84 87 90 93 9698 return 'return %d;' % self.formrep.rank99 102 105 112114 return self._gen_num_domains(self.formrep.citg_names)115117 return self._gen_num_domains(self.formrep.eitg_names)118120 return self._gen_num_domains(self.formrep.iitg_names)121123 "Utility function for creating factory functions." 124 code = CodeFormatter() 125 #if options.add_debug_code: # FIXME 126 # code.begin_debug() 127 # code += 'std::cout << "Creating object in %s, index is " << i << std::endl;' % name 128 # code.end_debug() 129 if classnames: 130 if isinstance(classnames, dict): 131 assert indices is None 132 else: 133 if indices is None: 134 indices = range(len(classnames)) 135 classnames = dict((i,c) for (i,c) in zip(indices, classnames)) 136 137 code.begin_switch("i") 138 for i, c in classnames.iteritems(): 139 code.begin_case(i) 140 code += "return new %s();" % c 141 code.end_case() 142 code.end_switch() 143 144 if return_null: 145 code += 'return 0;' 146 else: 147 code += 'throw std::runtime_error("Invalid index in %s()");' % name 148 return str(code)149151 return self._gen_create_switch(self.formrep.dm_names, "create_dofmap")152154 return self._gen_create_switch(self.formrep.fe_names, "create_finite_element")155157 return self._gen_create_switch(self.formrep.citg_names, "create_cell_integral", return_null=True)158160 return self._gen_create_switch(self.formrep.eitg_names, "create_exterior_facet_integral", return_null=True)161163 return self._gen_create_switch(self.formrep.iitg_names, "create_interior_facet_integral", return_null=True)
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Thu Jan 31 03:52:25 2013 | http://epydoc.sourceforge.net |