def showdirs(): k = 10 #direction=array([[1.0,1.0]])/sqrt(2) direction=array([[1,1]])/sqrt(2) # direction = array([[1,0]]) mesh = pmm.gmshMesh('squarescatt.msh',dim=2) problem = psp.Problem(mesh, k, None) etods = prc.tracemesh(problem, {10:lambda x:direction}) pom.showdirections2(problem.mesh, etods) pom.showmesh(problem.mesh)
p=3 t=p**2 g=2 h=.1 beta=p**2*h*k alpha=k*p**2*1./h delta=.5 alpha=.5 beta=.5 delta=.5 entityton ={6:nfun} problem=psp.VariableNProblem(entityton, mesh,k, bnddata) etods = prc.tracemesh(problem, {8:lambda x:direction}) etob = [[pcb.PlaneWaves(ds, k)] if len(ds) else [] for ds in etods] pob.vtkbasis(mesh,etob,'waveguide_rays.vtu',None) b0=pcbv.PlaneWaveVariableN(pcb.circleDirections(10)) b=pcb.PlaneWaveFromDirectionsRule(etods) b1=pcb.ProductBasisRule(b,pcbr.ReferenceBasisRule(pcbr.Dubiner(p))) b2=pcbr.ReferenceBasisRule(pcbr.Dubiner(p)) origins=np.array([[0,0],[0,5],[5,1],[0,1]]) h=pcb.FourierHankelBasisRule(origins,[0]) h2=pcb.ProductBasisRule(h,pcbr.ReferenceBasisRule(pcbr.Dubiner(p))) bh=pcb.UnionBasisRule([h2,b1])
def traceproblem(k, direction=array([[1,1]])/sqrt(2)): problem = createproblem(k, direction) etods = prc.tracemesh(problem, {10:lambda x:direction}) return problem, etods