Beispiel #1
0
    def execute(self):
        """
        generate cross sections at every spanwise node of the st3d vartree
        """

        # clear list of outputs!
        self.cs2d = []

        ni = self.st3d.x.shape[0]
        for i in range(ni):
            x = self.st3d.x[i]
            # print 'adding section at r/R = %2.2f' % x
            st2d = CrossSectionStructureVT()
            st2d.s = x * self.blade_length
            st2d.DPs = []
            try:
                airfoil = self.surface.interpolate_profile(
                    x)[:, [0, 1]] * self.blade_length
                st2d.airfoil.initialize(airfoil)
            except:
                pass
            for ir, rname in enumerate(self.st3d.regions):
                reg = getattr(self.st3d, rname)
                if reg.thickness[i] == 0.:
                    print 'zero thickness region!', rname
                    # continue
                DP0 = getattr(self.st3d, 'DP%02d' % ir)
                DP1 = getattr(self.st3d, 'DP%02d' % (ir + 1))
                r = st2d.add_region(rname.upper())
                st2d.DPs.append(DP0[i])
                r.s0 = DP0[i]
                r.s1 = DP1[i]
                for lname in reg.layers:
                    lay = getattr(reg, lname)
                    if lay.thickness[i] > 1.e-5:
                        l = r.add_layer(lname)
                        # try:
                        lnamebase = lname.translate(None, digits)
                        st2d.add_material(lnamebase,
                                          self.get_material(lname).copy())
                        # except:
                        # raise RuntimeError('Material %s not in materials list' % lname)
                        l.materialname = lnamebase
                        l.thickness = max(0., lay.thickness[i])
                        try:
                            l.angle = lay.angle[i]
                        except:
                            l.angle = 0.

            st2d.DPs.append(DP1[i])
            for ir, rname in enumerate(self.st3d.webs):
                reg = getattr(self.st3d, rname)
                if reg.thickness[i] == 0.:
                    continue
                r = st2d.add_web(rname.upper())
                try:
                    DP0 = getattr(self.st3d, 'DP%02d' % self.st3d.iwebs[ir][0])
                except:
                    DP0 = getattr(
                        self.st3d, 'DP%02d' %
                        (len(self.st3d.regions) + self.st3d.iwebs[ir][0] + 1))
                try:
                    DP1 = getattr(self.st3d, 'DP%02d' % self.st3d.iwebs[ir][1])
                except:
                    DP1 = getattr(
                        self.st3d, 'DP%02d' %
                        (len(self.st3d.regions) + self.st3d.iwebs[ir][1] + 1))
                r.s0 = DP0[i]
                r.s1 = DP1[i]
                for lname in reg.layers:
                    lay = getattr(reg, lname)
                    if lay.thickness[i] > 1.e-5:
                        l = r.add_layer(lname)
                        try:
                            lnamebase = lname.translate(None, digits)
                            st2d.add_material(lnamebase,
                                              self.get_material(lname).copy())
                        except:
                            raise RuntimeError(
                                'Material %s not in materials list' % lname)
                        l.materialname = lnamebase
                        l.thickness = max(0., lay.thickness[i])
                        try:
                            l.angle = lay.angle[i]
                        except:
                            l.angle = 0.

            self.cs2d.append(st2d)
Beispiel #2
0
def make_cs2d():

    cs2d = CrossSectionStructureVT()
    cs2d.airfoil.initialize(np.loadtxt('ffaw3301.dat'))
    # DEFINE MATERIALS
    uniax = MaterialProps()
    uniax.E1 = 40e9
    uniax.E2 = 10e9
    uniax.E3 = 10e9
    uniax.nu12 = 0.28
    uniax.nu13 = 0.28
    uniax.nu23 = 0.4
    uniax.G12 = 4e9
    uniax.G13 = 4e9
    uniax.G23 = 3.571e9
    uniax.rho = 1900
    uniax.materialname = 'uniax'

    biax = MaterialProps()
    biax.E1 = 12e9
    biax.E2 = 12e9
    biax.E3 = 10e9
    biax.nu12 = 0.5
    biax.nu13 = 0.28
    biax.nu23 = 0.28
    biax.G12 = 10e9
    biax.G13 = 3.8e9
    biax.G23 = 3.8e9
    biax.rho = 1890
    biax.materialname = 'biax'

    triax = MaterialProps()
    triax.E1 = 20e9
    triax.E2 = 10e9
    triax.E3 = 10e9
    triax.nu12 = 0.5
    triax.nu13 = 0.28
    triax.nu23 = 0.28
    triax.G12 = 7.5e9
    triax.G13 = 4e9
    triax.G23 = 4e9
    triax.rho = 1860
    triax.materialname = 'triax'

    core = MaterialProps()
    core.E1 = 50e6
    core.E2 = 50e6
    core.E3 = 50e6
    core.nu12 = 0.4
    core.nu13 = 0.4
    core.nu23 = 0.4
    core.G12 = 17.857e6
    core.G13 = 17.857e6
    core.G23 = 17.857e6
    core.rho = 80
    core.materialname = 'core'

    # add materials to airfoil
    cs2d.add_material('uniax', uniax)
    cs2d.add_material('biax', biax)
    cs2d.add_material('triax', triax)
    cs2d.add_material('core', core)

    # --------
    # Region 1: TE
    # --------
    r = cs2d.add_region('REGION01')
    r.s0 = -1.00
    r.s1 = -0.90

    l = r.add_layer('l1')
    l.thickness = .006
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply01'

    # --------
    # Region 2: TE sandwich
    # --------
    r = cs2d.add_region('REGION02')
    r.s0 = -0.90
    r.s1 = -0.50

    l = r.add_layer('l1')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply02'

    l = r.add_layer('l2')
    l.thickness = .015
    l.angle = 0
    l.materialname = 'CORE'
    l.plyname = 'Ply03'

    l = r.add_layer('l3')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply04'

    # --------
    # Region 3: spar cap
    # --------
    r = cs2d.add_region('REGION03')
    r.s0 = -0.50
    r.s1 = -0.20

    l = r.add_layer('l1')
    l.thickness = .004
    l.angle = 0
    l.materialname = 'UNIAX'
    l.plyname = 'Ply02'

    # --------
    # Region 4: LE edge sandwich
    # --------
    r = cs2d.add_region('REGION04')
    r.s0 = -0.20
    r.s1 = 0.20

    l = r.add_layer('l1')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply06'

    l = r.add_layer('l2')
    l.thickness = .010
    l.angle = 0
    l.materialname = 'CORE'
    l.plyname = 'Ply07'

    l = r.add_layer('l3')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply08'

    # -----------
    # Regions 5-8
    # -----------
    r = cs2d.add_region('REGION05')
    cs2d.REGION05 = cs2d.REGION03.copy()
    cs2d.REGION05.s0 = 0.20
    cs2d.REGION05.s1 = 0.50
    r = cs2d.add_region('REGION06')
    cs2d.REGION06 = cs2d.REGION02.copy()
    cs2d.REGION06.s0 = 0.5
    cs2d.REGION06.s1 = 0.9
    r = cs2d.add_region('REGION07')
    cs2d.REGION07 = cs2d.REGION01.copy()
    cs2d.REGION07.s0 = 0.9
    cs2d.REGION07.s1 = 1.0

    # --------
    # Webs
    # --------
    r = cs2d.add_web('WEB00')
    r.s0 = 1.
    r.s1 = -1.
    l = r.add_layer('l1')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'BIAX'
    l.plyname = 'Ply09'

    r = cs2d.add_web('WEB01')
    r.s0 = -.5
    r.s1 = 0.5
    l = r.add_layer('l1')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'BIAX'
    l.plyname = 'Ply09'

    l = r.add_layer('l2')
    l.thickness = .010
    l.angle = 0
    l.materialname = 'CORE'
    l.plyname = 'Ply10'

    l = r.add_layer('l3')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'BIAX'
    l.plyname = 'Ply11'

    r = cs2d.add_web('WEB02')
    cs2d.WEB02 = cs2d.WEB01.copy()
    cs2d.WEB02.s0 = -0.2
    cs2d.WEB02.s1 = 0.2

    # =============================================================================
    ### REMESH AIRFOIL, CREATE BECAS INPUT FILES
    # =============================================================================
    # Number of mesh points along the airfoil. Should be higher as the number of
    # points in the airfoil input file
    b = CS2DtoBECAS()
    b.cs2d = cs2d
    b.total_points = 150
    # dominant regions: spar caps
    b.dominant_elsets = ['REGION03', 'REGION05']
    b.path_shellexpander = '/Users/frza/svn/BECAS/shellexpander/src'
    b.run()
    return b
Beispiel #3
0
    def execute(self):
        """
        generate cross sections at every spanwise node of the st3d vartree
        """

        # clear list of outputs!
        self.cs2d = []

        ni = self.st3d.x.shape[0]
        for i in range(ni):
            x = self.st3d.x[i]
            # print 'adding section at r/R = %2.2f' % x 
            st2d = CrossSectionStructureVT()
            st2d.s = x * self.blade_length
            st2d.DPs = []
            try:
                airfoil = self.surface.interpolate_profile(x)[:, [0, 1]] * self.blade_length
                st2d.airfoil.initialize(airfoil)
            except:
                pass
            for ir, rname in enumerate(self.st3d.regions):
                reg = getattr(self.st3d, rname)
                if reg.thickness[i] == 0.:
                    print 'zero thickness region!', rname
                    # continue
                DP0 = getattr(self.st3d, 'DP%02d' % ir)
                DP1 = getattr(self.st3d, 'DP%02d' % (ir + 1))
                r = st2d.add_region(rname.upper())
                st2d.DPs.append(DP0[i])
                r.s0 = DP0[i]
                r.s1 = DP1[i]
                for lname in reg.layers:
                    lay = getattr(reg, lname)
                    if lay.thickness[i] > 1.e-5: 
                        l = r.add_layer(lname)
                        # try:
                        lnamebase = lname.translate(None, digits)
                        st2d.add_material(lnamebase, self.get_material(lname).copy())
                        # except:
                            # raise RuntimeError('Material %s not in materials list' % lname)
                        l.materialname = lnamebase
                        l.thickness = max(0., lay.thickness[i])
                        try:
                            l.angle = lay.angle[i]
                        except:
                            l.angle = 0.

            st2d.DPs.append(DP1[i])
            for ir, rname in enumerate(self.st3d.webs):
                reg = getattr(self.st3d, rname)
                if reg.thickness[i] == 0.:
                    continue
                r = st2d.add_web(rname.upper())
                try:
                    DP0 = getattr(self.st3d, 'DP%02d' % self.st3d.iwebs[ir][0])
                except:
                    DP0 = getattr(self.st3d, 'DP%02d' % (len(self.st3d.regions) + self.st3d.iwebs[ir][0] + 1))
                try:
                    DP1 = getattr(self.st3d, 'DP%02d' % self.st3d.iwebs[ir][1])
                except:
                    DP1 = getattr(self.st3d, 'DP%02d' % (len(self.st3d.regions) + self.st3d.iwebs[ir][1] + 1))
                r.s0 = DP0[i] 
                r.s1 = DP1[i]
                for lname in reg.layers:
                    lay = getattr(reg, lname)
                    if lay.thickness[i] > 1.e-5:
                        l = r.add_layer(lname)
                        try:
                            lnamebase = lname.translate(None, digits)
                            st2d.add_material(lnamebase, self.get_material(lname).copy())
                        except:
                            raise RuntimeError('Material %s not in materials list' % lname)
                        l.materialname = lnamebase
                        l.thickness = max(0., lay.thickness[i])
                        try:
                            l.angle = lay.angle[i]
                        except:
                            l.angle = 0.

            self.cs2d.append(st2d)
def make_cs2d():

    cs2d = CrossSectionStructureVT()
    cs2d.airfoil.initialize(np.loadtxt('ffaw3301.dat'))
    # DEFINE MATERIALS
    uniax = MaterialProps()
    uniax.E1 = 40e9
    uniax.E2 = 10e9
    uniax.E3 = 10e9
    uniax.nu12 = 0.28
    uniax.nu13 = 0.28
    uniax.nu23 = 0.4
    uniax.G12 = 4e9
    uniax.G13 = 4e9
    uniax.G23 = 3.571e9
    uniax.rho = 1900
    uniax.materialname = 'uniax'

    biax = MaterialProps()
    biax.E1 = 12e9
    biax.E2 = 12e9
    biax.E3 = 10e9
    biax.nu12 = 0.5
    biax.nu13 = 0.28
    biax.nu23 = 0.28
    biax.G12 = 10e9
    biax.G13 = 3.8e9
    biax.G23 = 3.8e9
    biax.rho = 1890
    biax.materialname = 'biax'

    triax = MaterialProps()
    triax.E1 = 20e9
    triax.E2 = 10e9
    triax.E3 = 10e9
    triax.nu12 = 0.5
    triax.nu13 = 0.28
    triax.nu23 = 0.28
    triax.G12 = 7.5e9
    triax.G13 = 4e9
    triax.G23 = 4e9
    triax.rho = 1860
    triax.materialname = 'triax'

    core = MaterialProps()
    core.E1 = 50e6
    core.E2 = 50e6
    core.E3 = 50e6
    core.nu12 = 0.4
    core.nu13 = 0.4
    core.nu23 = 0.4
    core.G12 = 17.857e6
    core.G13 = 17.857e6
    core.G23 = 17.857e6
    core.rho = 80
    core.materialname = 'core'

    # add materials to airfoil
    cs2d.add_material('uniax', uniax)
    cs2d.add_material('biax', biax)
    cs2d.add_material('triax', triax)
    cs2d.add_material('core', core)

    # --------
    # Region 1: TE
    # --------
    r = cs2d.add_region('REGION01')
    r.s0 = -1.00
    r.s1 = -0.90

    l = r.add_layer('l1')
    l.thickness = .006
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply01'

    # --------
    # Region 2: TE sandwich
    # --------
    r = cs2d.add_region('REGION02')
    r.s0 = -0.90
    r.s1 = -0.50

    l = r.add_layer('l1')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply02'

    l = r.add_layer('l2')
    l.thickness = .015
    l.angle = 0
    l.materialname = 'CORE'
    l.plyname = 'Ply03'

    l = r.add_layer('l3')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply04'

    # --------
    # Region 3: spar cap
    # --------
    r = cs2d.add_region('REGION03')
    r.s0 = -0.50
    r.s1 = -0.20

    l = r.add_layer('l1')
    l.thickness = .004
    l.angle = 0
    l.materialname = 'UNIAX'
    l.plyname = 'Ply02'

    # --------
    # Region 4: LE edge sandwich
    # --------
    r = cs2d.add_region('REGION04')
    r.s0 = -0.20
    r.s1 = 0.20

    l = r.add_layer('l1')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply06'

    l = r.add_layer('l2')
    l.thickness = .010
    l.angle = 0
    l.materialname = 'CORE'
    l.plyname = 'Ply07'

    l = r.add_layer('l3')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'TRIAX'
    l.plyname = 'Ply08'

    # -----------
    # Regions 5-8
    # -----------
    r = cs2d.add_region('REGION05')
    cs2d.REGION05 = cs2d.REGION03.copy()
    cs2d.REGION05.s0 = 0.20
    cs2d.REGION05.s1 = 0.50
    r = cs2d.add_region('REGION06')
    cs2d.REGION06 = cs2d.REGION02.copy()
    cs2d.REGION06.s0 = 0.5
    cs2d.REGION06.s1 = 0.9
    r = cs2d.add_region('REGION07')
    cs2d.REGION07 = cs2d.REGION01.copy()
    cs2d.REGION07.s0 = 0.9
    cs2d.REGION07.s1 = 1.0

    # --------
    # Webs
    # --------
    r = cs2d.add_web('WEB00')
    r.s0 = 1.
    r.s1 = -1.
    l = r.add_layer('l1')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'BIAX'
    l.plyname = 'Ply09'

    r = cs2d.add_web('WEB01')
    r.s0 = -.5
    r.s1 = 0.5
    l = r.add_layer('l1')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'BIAX'
    l.plyname = 'Ply09'

    l = r.add_layer('l2')
    l.thickness = .010
    l.angle = 0
    l.materialname = 'CORE'
    l.plyname = 'Ply10'

    l = r.add_layer('l3')
    l.thickness = .002
    l.angle = 0
    l.materialname = 'BIAX'
    l.plyname = 'Ply11'

    r = cs2d.add_web('WEB02')
    cs2d.WEB02 = cs2d.WEB01.copy()
    cs2d.WEB02.s0 = -0.2
    cs2d.WEB02.s1 =  0.2

    # =============================================================================
    ### REMESH AIRFOIL, CREATE BECAS INPUT FILES
    # =============================================================================
    # Number of mesh points along the airfoil. Should be higher as the number of
    # points in the airfoil input file
    b = CS2DtoBECAS()
    b.cs2d = cs2d
    b.total_points = 150
    # dominant regions: spar caps
    b.dominant_elsets = ['REGION03', 'REGION05']
    b.path_shellexpander = '/Users/frza/svn/BECAS/shellexpander/src'
    b.run()
    return b