def main(): parser = ArgumentParser(description=__doc__) parser.add_argument('-m', '--max-order', metavar='order', type=int, action='store', dest='max_order', default=10, help=helps['max_order']) parser.add_argument('output_dir', help=helps['output_dir']) options = parser.parse_args() indir = InDir(options.output_dir) a, b = symbols("a, b") r, s = symbols("r, s") x, y = symbols("x, y") order = options.max_order dim = 2 n_el_nod = get_n_el_nod(order, dim) # number of DOFs per element simplexP = [] exponentM = np.zeros((n_el_nod, 3), dtype=np.int32) coefM = np.zeros((n_el_nod, n_el_nod)) exponentList = [] for m, idx in enumerate(iter_by_order(order, dim)): # print(m, idx) exponentM[m, :dim] = idx pa = jacobi_P(idx[0], 0, 0, a) pb = jacobi_P(idx[1], 2 * idx[0] + 1, 0, b) * (1 - b) ** idx[0] # print("P_{} = {}".format(m, pa*pb)) polrs = cancel((pa * pb).subs(b, s).subs( a, 2 * (1 + r) / (1 - s) - 1)) # print("P_{} = {}".format(m, polrs)) polxy = expand(polrs.subs(r, 2 * x - 1).subs(s, 2 * y - 1)) # polxy = expand(polrs.subs(r, x).subs(s, y)) simplexP.append(simplify(polxy)) exponentList.append(x ** idx[0] * y ** idx[1]) for j, exponent in enumerate(exponentList): coefM[m, j] = simplexP[m].as_coefficients_dict()[exponent] print("P_{}{} = {}".format(m, idx, simplexP[m])) print() np.savetxt(indir("legendre2D_simplex_expos.txt"), exponentM, fmt="%d") # are coefs always integers? np.savetxt(indir("legendre2D_simplex_coefs.txt"), coefM, fmt="%d")
def __init__(self, name, geometry, order, extended=False): super().__init__(name, geometry, order, extended) if self.dim == 1: return if order <= 5: self.coefM = simplex_coefM5[:self.n_nod, :self.n_nod] self.expoM = simplex_expoM5[:self.n_nod, :] return indir = InDir(__file__) try: self.coefM = nm.loadtxt( indir("legendre2D_simplex_coefs.txt") )[:self.n_nod, :self.n_nod] self.expoM = nm.loadtxt( indir("legendre2D_simplex_expos.txt") )[:self.n_nod, :] except IOError as e: raise IOError( ("File {} not found, run gen_legendre_simplex_base.py" + " to generate it. This is needed approx order > 5.") .format(e.args[0]))
:math:`Y_r`. """ import numpy as nm from sfepy import data_dir from sfepy.base.base import Struct from sfepy.base.ioutils import InDir from sfepy.fem import extend_cell_data from sfepy.linalg import norm_l2_along_axis from sfepy.homogenization.coefficients import Coefficients from band_gaps_conf import BandGapsRigidConf, get_pars, normalize normalize # Make pyflakes happy... incwd = InDir(__file__) dim = 2 if dim == 3: filename = data_dir + '/meshes/3d/special/cube_sphere.mesh' else: filename = data_dir + '/meshes/2d/special/circle_in_square.mesh' output_dir = incwd('output/band_gaps_rigid') # Rigid inclusion diameter. yr_diameter = 0.125 # aluminium, in 1e+10 Pa
def main(): parser = ArgumentParser(description=__doc__) parser.add_argument('--version', action='version', version='%(prog)s') parser.add_argument('-m', '--max-order', metavar='order', type=int, action='store', dest='max_order', default=10, help=helps['max_order']) parser.add_argument('--plot', action='store_true', dest='plot', default=False, help=helps['plot']) options = parser.parse_args() max_order = options.max_order (legs, clegs, dlegs, cdlegs, lobs, clobs, dlobs, cdlobs, kerns, ckerns, dkerns, cdkerns, denoms) = gen_lobatto(max_order) if options.plot: plot_polys(1, lobs) plot_polys(11, dlobs) plot_polys(2, kerns) plot_polys(21, dkerns) plot_polys(3, legs, var_name='y') plot_polys(31, dlegs, var_name='y') plt.show() indir = InDir(os.path.join(top_dir, 'sfepy/discrete/fem/extmods/')) fd = open(indir('lobatto1d_template.h'), 'r') template = fd.read() fd.close fd = open(indir('lobatto1d.h'), 'w') out = [] append_declarations(out, clobs, 'Lobatto', 'lobatto') append_declarations(out, cdlobs, 'Derivatives of Lobatto', 'd_lobatto') append_declarations(out, ckerns, 'Kernel', 'kernel', shift=2) append_declarations(out, cdkerns, 'Derivatives of kernel', 'd_kernel', shift=2) append_declarations(out, clegs, 'Legendre', 'legendre') append_declarations(out, cdlegs, 'Derivatives of Legendre', 'd_legendre') fd.write(template.replace('// REPLACE_TEXT', ''.join(out))) fd.close() fd = open(indir('lobatto1d_template.c'), 'r') template = fd.read() fd.close() fd = open(indir('lobatto1d.c'), 'w') out = [] names_lobatto = append_polys(out, clobs, 'Lobatto', 'lobatto') names_d_lobatto = append_polys(out, cdlobs, 'Derivatives of Lobatto', 'd_lobatto') names_kernel = append_polys(out, ckerns, 'Kernel', 'kernel', shift=2) names_d_kernel = append_polys(out, cdkerns, 'Derivatives of kernel', 'd_kernel', shift=2) names_legendre = append_polys(out, clegs, 'Legendre', 'legendre', var_name='y') names_d_legendre = append_polys(out, cdlegs, 'Derivatives of Legendre', 'd_legendre', var_name='y') out.append('\n// Lists of functions.\n') out.append('\nconst int32 max_order = %d;\n' % max_order) append_lists(out, names_lobatto, max_order + 1) append_lists(out, names_d_lobatto, max_order + 1) append_lists(out, names_kernel, max_order - 1) append_lists(out, names_d_kernel, max_order - 1) append_lists(out, names_legendre, max_order + 1) append_lists(out, names_d_legendre, max_order + 1) fd.write(template.replace('// REPLACE_TEXT', ''.join(out))) fd.close()
def main(): parser = OptionParser(usage=usage, version='%prog') parser.add_option('-m', '--max-order', metavar='order', type=int, action='store', dest='max_order', default=10, help=help['max_order']) parser.add_option('', '--plot', action='store_true', dest='plot', default=False, help=help['plot']) options, args = parser.parse_args() max_order = options.max_order (legs, clegs, dlegs, cdlegs, lobs, clobs, dlobs, cdlobs, kerns, ckerns, dkerns, cdkerns, denoms) = gen_lobatto(max_order) if options.plot: plot_polys(1, lobs) plot_polys(11, dlobs) plot_polys(2, kerns) plot_polys(21, dkerns) plot_polys(3, legs, var_name='y') plot_polys(31, dlegs, var_name='y') plt.show() indir = InDir(os.path.join(top_dir, 'sfepy/fem/extmods/')) fd = open(indir('lobatto_template.pyx'), 'r') template = fd.read() fd.close() filename = indir('lobatto.pyx') fd = open(filename, 'w') out = [] names_lobatto = append_polys(out, clobs, 'Lobatto', 'lobatto') names_d_lobatto = append_polys(out, cdlobs, 'Derivatives of Lobatto', 'd_lobatto') names_kernel = append_polys(out, ckerns, 'Kernel', 'kernel', shift=2) names_d_kernel = append_polys(out, cdkerns, 'Derivatives of kernel', 'd_kernel', shift=2) names_legendre = append_polys(out, clegs, 'Legendre', 'legendre', var_name='y') names_d_legendre = append_polys(out, cdlegs, 'Derivatives of Legendre', 'd_legendre', var_name='y') out.append('\n# Lists of functions.\n') out.append('\ncdef int32 max_order = %d\n' % max_order) append_lists(out, names_lobatto, max_order + 1) append_lists(out, names_d_lobatto, max_order + 1) append_lists(out, names_kernel, max_order - 1) append_lists(out, names_d_kernel, max_order - 1) append_lists(out, names_legendre, max_order + 1) append_lists(out, names_d_legendre, max_order + 1) fd.write(template.replace('REPLACE_TEXT', ''.join(out))) fd.close()