Example #1
0
    def vt_array(self):
        if not hasattr(self, 'aux_connection'):
            self._vt_array = []
            return self._vt_array

        if not hasattr(self, '_vt_array'):
            self._vt_array = []
        for key in self.aux_connection:
            if len(self._vt_array) > key:
                continue
            sidx = str(key)
            data = [
                ("oprt1_" + sidx,
                 VtableElement(
                     "oprt1_" + sidx,
                     type='any',
                     guilabel="operator1",
                     default="",
                     tip="oprator (horizontal)",
                 )),
                ("oprt2_" + sidx,
                 VtableElement(
                     "oprt2_" + sidx,
                     type='any',
                     guilabel="operator2",
                     default="",
                     tip="oprator (vertical)",
                 )),
            ]
            vt = Vtable(data)
            self._vt_array.append(vt)
        return self._vt_array
Example #2
0
    def vt(self):
        root_phys = self.get_root_phys()
        if not isinstance(root_phys, PhysModule):
            data = (('esse_value',
                     VtableElement(None,
                                   type="array",
                                   guilabel="dummy",
                                   default="0.0",
                                   tip="dummy")), )
            return Vtable(data)

        dep_vars = self.get_root_phys().dep_vars
        if not hasattr(self, '_dep_var_bk'):
            self._dep_var_bk = ""

        if self._dep_var_bk != dep_vars:
            dep_var = dep_vars[0]
            data = (('esse_value',
                     VtableElement("esse_value",
                                   type="array",
                                   guilabel=dep_var,
                                   default="0.0",
                                   tip="Reference for disance measurement")), )
            vt = Vtable(data)
            self._vt1 = vt
            self._dep_var_bk = dep_vars
            self.update_attribute_set()
        else:
            vt = self._vt1
        return vt
Example #3
0
 def import_panel_value(self, obj, v):
     obj.use_3_points = False
     obj.use_face_parallel = False
     if v[0] == 'Face parallel and point':
         setattr(obj, 'use_m_'+self.name, False)
         obj.use_face_parallel = True
         obj.face_parallel_txt1 = v[4][0]
         obj.face_parallel_txt2 = v[4][1]            
     elif v[0] == 'By 3 points':
         setattr(obj, 'use_m_'+self.name, False)            
         obj.use_3_points = True
         obj.by_3_points_txt1 = v[3][0]
         obj.by_3_points_txt2 = v[3][1]
         obj.by_3_points_txt3 = v[3][2]            
     else:
         VtableElement.import_panel_value(self, obj, v)
Example #4
0
 def add_attribute(self, v):
     v = VtableElement.add_attribute(self, v) 
     v['use_face_parallel'] = False
     v['face_parallel_txt1'] = ''
     v['face_parallel_txt2'] = ''                
     v['use_3_points'] = False
     v['by_3_points_txt1'] = ''
     v['by_3_points_txt2'] = ''
     v['by_3_points_txt3'] = ''
     
     return v
Example #5
0
    def vt(self):
        root_phys = self.get_root_phys()
        if not isinstance(root_phys, PhysModule):
            data = (('esse_value',
                     VtableElement(None,
                                   type="array",
                                   guilabel="dummy",
                                   default="0.0",
                                   tip="dummy")), )
            return Vtable(data)

        dep_vars = self.get_root_phys().dep_vars
        if not hasattr(self, '_dep_var_bk'):
            self._dep_var_bk = ""

        if self._dep_var_bk != dep_vars:
            dep_var = dep_vars[0]
            data = (
                ('esse_value',
                 VtableElement("esse_value",
                               type="array",
                               guilabel=dep_var,
                               default="0.0",
                               tip="Essentail BC")),
                (
                    'esse_vdim',
                    VtableElement(
                        "esse_vdim",
                        type="string",
                        guilabel="vdim (0-base)",
                        default="all",
                        #readonly = True,
                        tip="vdim (not supported)")),
            )
            vt = Vtable(data)
            self._vt1 = vt
            self._dep_var_bk = dep_vars
            self.update_attribute_set()
        else:
            vt = self._vt1
        return vt
Example #6
0
 def import_panel_value(self, obj, v):
     obj.use_normal = False
     obj.use_normalp = False        
     obj.use_fromto_points = False
     if v[0] == 'Normal':
         setattr(obj, 'use_m_'+self.name, False)
         obj.use_normal = True
         obj.reverse_dir_normal = v[4][0]
     elif v[0] == 'Normal to point':
         setattr(obj, 'use_m_'+self.name, False)
         obj.use_normalp = True
         obj.normalp_dest = v[5][0]
         obj.reverse_dir_normalp = v[5][1]            
     elif v[0] == 'By two points':
         setattr(obj, 'use_m_'+self.name, False)            
         obj.use_fromto_points = True
         obj.fromto_points_txt1 = v[3][0]
         obj.fromto_points_txt2 = v[3][1]
         obj.fromto_points_use_dist = v[3][2]
         obj.reverse_dir_fromto = v[3][3]            
     else:
         VtableElement.import_panel_value(self, obj, v)
Example #7
0
 def _add_vt_array(self, sidx):
     data = [
         ("oprt1_" + sidx,
          VtableElement(
              "oprt1_" + sidx,
              type='any',
              guilabel="operator1",
              default="",
              tip="oprator (horizontal)",
          )),
         ("oprt2_" + sidx,
          VtableElement(
              "oprt2_" + sidx,
              type='any',
              guilabel="operator2",
              default="",
              tip="oprator (vertical)",
          )),
     ]
     vt = Vtable(data)
     self._vt_array.append(vt)
     vt.preprocess_params(self)
Example #8
0
 def make_value_or_expression(self, obj):
     ret = VtableElement.make_value_or_expression(self, obj)
     if obj.use_face_parallel:
          ret = ['face_parallel',
                  obj.face_parallel_txt1,
                  obj.face_parallel_txt2]                    
     elif obj.use_3_points:
          ret = ['3_points',
                  obj.by_3_points_txt1,
                  obj.by_3_points_txt2,
                  obj.by_3_points_txt3,]
     else:
         ret = ['by_abc', ret]
     return ret
Example #9
0
 def add_attribute(self, v):
     v = VtableElement.add_attribute(self, v) 
     v['use_normal'] = False
     v['use_fromto_points'] = False
     v['fromto_points_txt1'] = ''
     v['fromto_points_txt2'] = ''
     v['fromto_points_use_dist'] = False
     v['reverse_dir_normal'] = False
     v['reverse_dir_fromto'] = False
     v['use_normalp'] = False
     v['normalp_dest'] = ''
     v['reverse_dir_normalp'] = False        
     
     return v
Example #10
0
    def panel_param(self, obj, validator = None):
        ret = VtableElement.panel_param(self, obj, validator = validator)
        ret[3] = list(ret[3])
        ret[3][0]['choices'].append('By 3 points') 
        ret[3][0]['choices'].append('Face parallel and point')
        elp3 = [["Point 1",  None, 0,  {}],
                ["Point 2",    None, 0,  {}],
                ["Point 3",    None, 0,  {}],]
        elp4 = [["Face",  None, 0,  {}],
                ["Point",  None, 0,  {}],]
        ret[3].append({'elp': elp3})
        ret[3].append({'elp': elp4})

        return ret    
Example #11
0
 def make_value_or_expression(self, obj):
     ret = VtableElement.make_value_or_expression(self, obj)
     if obj.use_normal:
          ret = ['normal', obj.reverse_dir_normal]
     elif obj.use_normalp:
          ret = ['normalp', obj.normalp_dest, obj.reverse_dir_normalp]
     elif obj.use_fromto_points:
          ret = ['fromto_points',
                  obj.fromto_points_txt1,
                  obj.fromto_points_txt2,
                  obj.fromto_points_use_dist,
                  obj.reverse_dir_normal]    
     else:
         pass
     return ret
Example #12
0
    def get_panel_value(self, obj):
        ret = VtableElement.get_panel_value(self, obj)        
        if obj.use_face_parallel:
            ret[0] = 'Face parallel and point'
        elif obj.use_3_points:
            ret[0] = 'By 3 points'
        else:
            pass

        ret.append([obj.by_3_points_txt1,
                    obj.by_3_points_txt2,
                    obj.by_3_points_txt3,])
        ret.append([obj.face_parallel_txt1,
                    obj.face_parallel_txt2,])

        return ret
    def vt3(self):
        names = self.get_root_phys().dep_vars_base
        names2 = [n + '_init' for n in names]
        data = []
        if hasattr(self, '_vt3'):
            vt3 = self._vt3
            if vt3.keys() == names2: return vt3

        data = [(n + '_init',
                 VtableElement(n + '_init',
                               type='float',
                               guilabel=n + '(init)',
                               default=0.0,
                               tip="initial value",
                               chkbox=True)) for n in names]
        self._vt3 = Vtable(data)
        self.update_attribute_set()
        return self._vt3
Example #14
0
    def panel_param(self, obj, validator = None):
        ret = VtableElement.panel_param(self, obj, validator = validator)
        ret[3] = list(ret[3])
        ret[3][0]['choices'].append('By two points') 
        ret[3][0]['choices'].append('Normal')
        ret[3][0]['choices'].append('Normal to point')
        elp3 = [["Point(from)",  None, 0,  {}],
                ["Point(to)",    None, 0,  {}],
                [None, True, 3,  {"text": "Use distance between points"}],
                [None, True, 3,  {"text": "Reverse direction"}],]             
        elp4 = [ [None, True, 3,  {"text": "Reverse direction"}],
                 [None,  "(Note) Face must be flat-plane", 2,  {}],]
        elp5 = [ ["Point(to)",    None, 0,  {}],
                 [None, True, 3,  {"text": "Reverse direction"}],                    
                 [None,  "(Note) Face must be flat-plane. Length below is mulitplier", 2,  {}],]                
        ret[3].append({'elp': elp3})
        ret[3].append({'elp': elp4})
        ret[3].append({"elp": elp5})

        return ret    
Example #15
0
    def get_panel_value(self, obj):
        ret = VtableElement.get_panel_value(self, obj)        
        if obj.use_normal:
            ret[0] = 'Normal'
        elif obj.use_fromto_points:
            ret[0] = 'By two points'
        elif obj.use_normalp:
            ret[0] = 'Normal to point'
        else:
            pass

        ret.append([obj.fromto_points_txt1,
                    obj.fromto_points_txt2,
                    obj.fromto_points_use_dist,
                    obj.reverse_dir_fromto])        
        ret.append([obj.reverse_dir_normal,
                   '(Note) Face must be flat-plane',])
        ret.append([obj.normalp_dest,
                    obj.reverse_dir_normalp,                    
                   '(Note) Face must be flat-plane. Distance below is ignored',])
        return ret
Example #16
0
            assert False, "entity id field must be text"

        return values

    def eval_enitity_id(self, *text):
        if len(text) == 1:
            return self._eval_enitity_id(text[0])

        return [self._eval_enitity_id(x) for x in text]


data = (
    ('clmax',
     VtableElement('clmax',
                   type='float',
                   guilabel='Max size(def)',
                   default_txt='',
                   default=1e20,
                   tip="CharacteristicLengthMax")),
    ('clmin',
     VtableElement('clmin',
                   type='float',
                   guilabel='Min size(def)',
                   default_txt='',
                   default=0.0,
                   tip="CharacteristicLengthMin")),
)


class GmshMesh(GMeshTop, Vtable_mixin):
    has_2nd_panel = False
    isMeshGroup = True
from petram.phys.coeff2d.coeff2d_base import Coeff2D_Point

import petram.debug as debug
dprint1, dprint2, dprint3 = debug.init_dprints('Coeff2D_Domain')

from petram.mfem_config import use_parallel
if use_parallel:
    import mfem.par as mfem
else:
    import mfem.ser as mfem

from petram.phys.vtable import VtableElement, Vtable

data = (
    ('x_delta',
     VtableElement('x_delta', type='array', guilabel='x', default=0.0,
                   tip="x")),
    ('y_delta',
     VtableElement('y_delta', type='array', guilabel='y', default=0.0,
                   tip="y")),
    ('s_delta',
     VtableElement('s_delta',
                   type='array',
                   guilabel='scale',
                   default=1.0,
                   tip="scale")),
)


class Coeff2D_PointSource(Coeff2D_Point):
    vt = Vtable(data)
    _sel_index = [-1]
Example #18
0
from petram.phys.em3d.em3d_base import EM3D_Bdry, EM3D_Domain

from petram.phys.vtable import VtableElement, Vtable
data = (('label1',
         VtableElement(None,
                       guilabel='Perfect Magnetic Conductor',
                       default="Ht = 0",
                       tip="this is a natural BC")), )


class EM3D_PMC(EM3D_Bdry):
    is_essential = False
    nlterms = []
    vt = Vtable(data)
Example #19
0
from petram.phys.phys_model  import Phys, VectorPhysCoefficient
from petram.phys.em3d.em3d_base import EM3D_Bdry, EM3D_Domain

import petram.debug as debug
dprint1, dprint2, dprint3 = debug.init_dprints('EM3D_extJ')

from petram.mfem_config import use_parallel
if use_parallel:
   import mfem.par as mfem
else:
   import mfem.ser as mfem

from petram.phys.vtable import VtableElement, Vtable      
data =  (('jext', VtableElement('jext', type='complex',
                             guilabel = 'External J',
                             suffix =('x', 'y', 'z'),
                             default = [0,0,0],
                             tip = "volumetric external current" )),)
   
class Jext(VectorPhysCoefficient):
   def __init__(self, *args, **kwargs):
       self.omega = kwargs.pop('omega', 1.0)
       super(Jext, self).__init__(*args, **kwargs)
   def EvalValue(self, x):
       from .em3d_const import mu0, epsilon0      
       v = super(Jext, self).EvalValue(x)
       v = 1j * self.omega * v
       if self.real:  return v.real
       else: return v.imag

class EM3D_ExtJ(EM3D_Domain):
Example #20
0
import traceback

import petram.debug
dprint1, dprint2, dprint3 = petram.debug.init_dprints('Projection(PP)')

from petram.phys.vtable import VtableElement, Vtable, Vtable_mixin

from petram.postprocess.pp_model import PostProcessBase

data = [("coeff_lambda",
         VtableElement(
             "coeff_lambda",
             type='array',
             guilabel="expression",
             default=0.0,
             tip="expression",
         ))]


class DerivedValue(PostProcessBase, Vtable_mixin):
    has_2nd_panel = True
    vt_coeff = Vtable(data)

    def attribute_set(self, v):
        v = super(DerivedValue, self).attribute_set(v)
        v["projection_name"] = 'derived'
        v["element"] = 'H1_FECollection'
        v["is_complex_valued"] = False
        v["order"] = 1
        v["sdim"] = 2
        v['sel_index'] = ['all']
Example #21
0
       2)  an weighting to evaulate mode amplutude from the E field
           on a boundary              
  TEM Mode
       E is parallel to the periodic edge
       Mode number is ignored (of course)

  About sign of port phasing.
       positive phasing means the incoming wave appears later (phase delay)
       at the port
'''
from petram.phys.vtable import VtableElement, Vtable
data = (
    ('inc_amp',
     VtableElement('inc_amp',
                   type='complex',
                   guilabel='incoming amp',
                   default=1.0,
                   tip="amplitude of incoming wave")),
    ('inc_phase',
     VtableElement('inc_phase',
                   type='float',
                   guilabel='incoming phase (deg)',
                   default=0.0,
                   tip="phase of incoming wave")),
    ('epsilonr',
     VtableElement('epsilonr',
                   type='complex',
                   guilabel='epsilonr',
                   default=1.0,
                   tip="relative permittivity")),
    ('mur',
Example #22
0
'''
import numpy as np
import traceback

from petram.model import Domain, Bdry, Pair
from petram.phys.phys_model import Phys, PhysModule
from petram.phys.em2da.em2da_base import EM2Da_Bdry
from petram.phys.em2da.em2da_vac import EM2Da_Vac

txt_predefined = 'freq, e0, mu0'

from petram.phys.vtable import VtableElement, Vtable

data2 =  (('label1', VtableElement(None, 
                                     guilabel = 'Default Bdry (PMC)',
                                     default =   "Ht = 0",
                                     tip = "this is a natural BC" )),)
class EM2Da_DefDomain(EM2Da_Vac):
    can_delete = False
    nlterms = []
    #vt  = Vtable(data1)
    #do not use vtable here, since we want to use
    #vtable defined in EM3D_Vac in add_bf_conttribution
    
    def __init__(self, **kwargs):
        super(EM2Da_DefDomain, self).__init__(**kwargs)
    def panel1_param(self):
        return [['Default Domain (Vac)',   "eps_r=1, mu_r=1, sigma=0",  2, {}],]
    def get_panel1_value(self):
        return None
    def import_panel1_value(self, v):
Example #23
0
import numpy as np

import petram.debug as debug

dprint1, dprint2, dprint3 = debug.init_dprints('GmshMeshActions')

from petram.phys.vtable import VtableElement, Vtable
from petram.mesh.gmsh_mesh_model import GmshMeshActionBase

data = (
    ('geom_id',
     VtableElement('geom_id',
                   type='string',
                   guilabel='Line#',
                   default="remaining",
                   tip="Line ID")),
    ('num_seg',
     VtableElement('num_seg',
                   type='int',
                   guilabel='Number of segments',
                   default=5,
                   tip="Number of segments")),
    ('progression',
     VtableElement('progression',
                   type='float',
                   guilabel='Progression',
                   default=1.0,
                   tip="Progression")),
    ('bump',
     VtableElement('bump',
                   type='float',
Example #24
0
dprint1, dprint2, dprint3 = debug.init_dprints('EM3D_PML')

from petram.mfem_config import use_parallel
if use_parallel:
    import mfem.par as mfem
else:
    import mfem.ser as mfem

from petram.phys.vtable import VtableElement, Vtable
data = (
    ('stretch',
     VtableElement(
         'stretch',
         type='complex',
         guilabel='stretch',
         default=1.0,
         no_func=True,
         tip=
         "real: shorten wavelength (>0), imag: damping (>0 forward, <0 backward)"
     )),
    ('s_order',
     VtableElement('s_order',
                   type='float',
                   guilabel='order',
                   default=1.0,
                   no_func=True,
                   tip="streach order")),
)

from petram.phys.coefficient import CC_Matrix
from petram.phys.em3d.em3d_const import mu0, epsilon0
Example #25
0
import petram.debug as debug
dprint1, dprint2, dprint3 = debug.init_dprints('EM1D_PEC')

from petram.phys.phys_model  import PhysConstant
from petram.phys.em1d.em1d_base import EM1D_Bdry, EM1D_Domain

from petram.mfem_config import use_parallel
if use_parallel:
   import mfem.par as mfem
else:
   import mfem.ser as mfem

from petram.phys.vtable import VtableElement, Vtable   
data =  (('label1', VtableElement(None, 
                                  guilabel = 'Perfect Electric Conductor',
                                  default =   "Ey=0 and Ez=0",
                                  tip = "Essential Homogenous BC" )),)


class EM1D_PEC(EM1D_Bdry):
    has_essential = True
    nlterms = []
    vt  = Vtable(data)          
    
    def get_essential_idx(self, kfes):
        if kfes == 1:
            return self._sel_index
        elif kfes == 2:
            return self._sel_index            
        else:
            return []
Example #26
0
from petram.phys.coefficient import PyComplexPowCoefficient as ComplexPow
from petram.phys.coefficient import PyComplexProductCoefficient as ComplexProduct
from petram.phys.coefficient import PyComplexSumCoefficient as ComplexSum

from petram.phys.coefficient import PyComplexMatrixSumCoefficient as ComplexMatrixSum
from petram.phys.coefficient import PyComplexMatrixInvCoefficient as ComplexMatrixInv
from petram.phys.coefficient import PyComplexMatrixSliceCoefficient as ComplexMatrixSlice
from petram.phys.coefficient import PyComplexMatrixProductCoefficient as ComplexMatrixProduct
from petram.phys.coefficient import PyComplexMatrixAdjCoefficient as ComplexMatrixAdj

from petram.phys.vtable import VtableElement, Vtable
data = (
    ('epsilonr',
     VtableElement('epsilonr',
                   type='complex',
                   guilabel='epsilonr',
                   default=1.0,
                   tip="relative permittivity")),
    ('mur',
     VtableElement('mur',
                   type='complex',
                   guilabel='mur',
                   default=1.0,
                   tip="relative permeability")),
    ('sigma',
     VtableElement('sigma',
                   type='complex',
                   guilabel='sigma',
                   default=0.0,
                   tip="contuctivity")),
    ('kz',
Example #27
0
from petram.mfem_config import use_parallel
if use_parallel:
    import mfem.par as mfem
else:
    import mfem.ser as mfem

from petram.model import Domain, Bdry, Pair
from petram.phys.phys_model import Phys, PhysModule, VectorPhysCoefficient, PhysCoefficient

# define variable for this BC.
from petram.phys.vtable import VtableElement, Vtable
data = (('Einit',
         VtableElement('Einit',
                       type='float',
                       guilabel='E(init)',
                       suffix=('x', 'y', 'z'),
                       default=np.array([0, 0, 0]),
                       tip="initial_E",
                       chkbox=True)), )


class Einit_xy(VectorPhysCoefficient):
    def EvalValue(self, x):
        v = super(Einit_xy, self).EvalValue(x)
        v = np.array((v[0], v[1]))
        if self.real: val = v.real
        else: val = v.imag
        return val


class Einit_z(PhysCoefficient):
Example #28
0
dprint1, dprint2, dprint3 = petram.debug.init_dprints('Integration(PP)')

from petram.phys.vtable import VtableElement, Vtable, Vtable_mixin

from petram.postprocess.pp_model import PostProcessBase

from petram.phys.weakform import get_integrators

bilinintegs = get_integrators('BilinearOps')
linintegs = get_integrators('LinearOps')

data = [("coeff_lambda",
         VtableElement(
             "coeff_lambda",
             type='array',
             guilabel="lambda",
             default=0.0,
             tip="coefficient",
         ))]

data = [("coeff_lambda",
         VtableElement(
             "coeff_lambda",
             type='array',
             guilabel="lambda",
             default='1.0',
             tip="coefficient",
         ))]


class WeakformIntegrator(PostProcessBase, Vtable_mixin):
Example #29
0
from petram.mfem_config import use_parallel
if use_parallel:
    import mfem.par as mfem
else:
    import mfem.ser as mfem

import petram.debug as debug
dprint1, dprint2, dprint3 = debug.init_dprints('WF_Natrual')

from petram.phys.vtable import VtableElement, Vtable
from petram.model import Domain, Bdry, Edge, Point, Pair
from petram.phys.phys_model import Phys, PhysModule

data = (('label1',
         VtableElement(None,
                       guilabel='Natrual BC',
                       default="",
                       tip="this does not constrain the model")), )


class WF_Natural(Bdry, Phys):
    has_essential = False
    nlterms = []
    can_timedpendent = False
    has_3rd_panel = True
    vt = Vtable(data)

    def __init__(self, **kwargs):
        super(WF_Natural, self).__init__(**kwargs)

    def attribute_set(self, v):
        Bdry.attribute_set(self, v)
Example #30
0
import petram.debug as debug
dprint1, dprint2, dprint3 = debug.init_dprints('EM3D_Z')

from petram.mfem_config import use_parallel
if use_parallel:
    import mfem.par as mfem
else:
    import mfem.ser as mfem

from petram.phys.vtable import VtableElement, Vtable

data1 = (('impedance',
          VtableElement('impedance',
                        type='complex',
                        guilabel='Z(w)',
                        default=1.0,
                        tip="impedance ")), )
data2 = (
    ('epsilonr_bnd',
     VtableElement('epsilonr_bnd',
                   type='complex',
                   guilabel='epsilonr(bnd)',
                   default=1.0,
                   tip="boundary relative permittivity")),
    ('mur_bnd',
     VtableElement('mur_bnd',
                   type='complex',
                   guilabel='mur',
                   default=1.0,
                   tip="boundary relative permeability")),