示例#1
0
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")
示例#2
0
    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]))
示例#3
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()
示例#5
0
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()