Exemplo n.º 1
0
    def _describe(self, geo, qp_coors, weights):
        bf_g = self.get_base(qp_coors, diff=True)

        if nm.allclose(bf_g, 0.0):
            raise ValueError('zero base function gradient!')

        try:
            geo.describe(self.coors, self.conn, bf_g, weights)
        except:
            gm.errclear()
            raise
Exemplo n.º 2
0
Arquivo: fea.py Projeto: certik/sfepy
    def describe_geometry( self, field, geom_request, integral, coors ):
        gtype = geom_request.gtype
        if gtype == 'Volume':
            bf_vg, weights = self.get_base( 'v', 1, integral = integral,
                                          base_only = False )

##             print bf_vg, weights
##             pause()
            vg = gm.VolumeGeometry( *self.get_v_data_shape( integral.name ) )
            vg.mode = gm.GM_Material
            try:
                vg.describe( coors, self.econn, bf_vg, weights )
            except:
#                pdb.set_trace()
                gm.errclear()
                raise
            return vg

        elif (gtype == 'Surface') or (gtype == 'SurfaceExtra'):
##             print self.name
##             print geom_request
            region = geom_request.region
            fa = region.domain.get_neighbour_lists( True )[2]
            region.setup_face_indices( fa )
            region.select_cells_of_surface()
            self.setup_surface_data( region )
            
            sd = self.surface_data[region.name]
##             print sd
##             print integral
            bf_sg, weights = self.get_base( sd.face_type, 1, integral = integral,
                                          base_only = False )
##             print bf_sg, weights 

            sg = gm.SurfaceGeometry( *self.get_s_data_shape( integral.name,
                                                          region.name ) )
            sg.mode = gm.GM_Material

##             print sg
            
            try:
                sg.describe( coors, sd.econn, bf_sg, weights )
            except:
                gm.errclear()
                raise

            if gtype == 'SurfaceExtra':
                sg.alloc_extra_data( self.get_v_data_shape()[2] )

                bf_s = self.get_base( sd.face_type, 0, integral = integral,
                                    from_geometry = True )
##                 print bf_s
                bkey = self.create_bqp( sd.face_type, bf_s, weights, integral.name )
                bf_bg = self.get_base( bkey, 1, integral = integral )
##                 print bf_bg
                sg.evaluate_bfbgm( bf_bg, coors, sd.fis, self.econn )

##                 sg.str( sys.stdout, 0 )
##                 pause()
            
            return sg

        elif gtype == 'Point':
            region = geom_request.region
##             print gtype, region.name, self.ig
##             pause()
            if self.ig == region.igs[0]:
                # Point data only in the first group to avoid multiple
                # assembling of nodes on group boundaries.
                self.setup_point_data( field, region )

        else:
            print 'unknown geometry type:', gtype
            raise ValueError