Beispiel #1
0
    def setUpClass(self): # NOTE - self here refers to class
        self.absoluteTolerance = 1e-3
        self.relativeTolerance = 1e-3
        deg = pi / 180
        wavelength = 2
        theta = 60 * deg
        phi = 30 * deg
        pTEM = 1 / sqrt(2) * complexArray([1, 1j])

        erReflectionRegion = 2
        urReflectionRegion = 1
        erTransmissionRegion = 9
        urTransmissionRegion = 1
        erDeviceRegion = 6
        urDeviceRegion = 1
        thicknessLayer1 = 0.5
        thicknessLayer2 = 0.3
        numberHarmonicsX = 3
        numberHarmonicsY = 3

        reflectionLayer = Layer(erReflectionRegion, urReflectionRegion)
        transmissionLayer = Layer(erTransmissionRegion, urTransmissionRegion)
        layer1 = Layer(erDeviceRegion, urDeviceRegion, thicknessLayer1)
        layer1.homogenous = False
        layer2 = Layer(erDeviceRegion, urDeviceRegion, thicknessLayer2)

        self.layerStack = LayerStack(reflectionLayer, layer1, layer2, transmissionLayer)
        self.source = Source(wavelength, theta, phi, pTEM, reflectionLayer)
        self.numberHarmonics = (numberHarmonicsX, numberHarmonicsY)

        erConvolutionMatrixLayer1 = numpyArrayFromFile(
            context.testLocation + "/matrixDataOblique/layer1/erConvolutionData.txt")
        urConvolutionMatrixLayer1 = complexIdentity(9)
        erConvolutionMatrixLayer2 = erDeviceRegion*complexIdentity(9)
        urConvolutionMatrixLayer2 = complexIdentity(9)
        # This is a bit of a hack, but that's good for test purposes.
        self.layerStack.internalLayer[0].er = erConvolutionMatrixLayer1
        self.layerStack.internalLayer[0].ur = urConvolutionMatrixLayer1
        self.layerStack.internalLayer[1].er = erConvolutionMatrixLayer2
        self.layerStack.internalLayer[1].ur = urConvolutionMatrixLayer2

        self.Kx = np.diag(complexArray(
            [2.2035, 1.0607, -0.0822, 2.2035, 1.0607, -0.0822, 2.2035, 1.0607, -0.0822]))
        self.Ky = np.diag(complexArray(
            [1.9457, 1.9457, 1.9457, 0.6124, 0.6124, 0.6124, -0.7210, -0.7210, -0.7210]))
        self.KzReflectionRegion = numpyArrayFromFile( context.testLocation +
                "/matrixDataOblique/reflectionRegion/KzReflectionRegion.txt")
        self.KzTransmissionRegion = np.diag(complexArray(
            [0.5989, 2.0222, 2.2820, 1.9415, 2.7386, 2.9357, 1.9039, 2.7121, 2.9109]))

        self.KzFreeSpace = numpyArrayFromFile( context.testLocation +
                "/matrixDataOblique/freeSpace/KzFreeSpace.txt")
        self.QFreeSpace = numpyArrayFromFile(context.testLocation +
                "/matrixDataOblique/freeSpace/QFreeSpace.txt")
        self.WFreeSpace = complexIdentity(18)
        self.LambdaFreeSpace = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/freeSpace/LambdaFreeSpace.txt")
        self.VFreeSpace = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/freeSpace/VFreeSpace.txt")

        self.S11Transparent = complexZeros((18, 18))
        self.S22Transparent = complexZeros((18, 18))
        self.S21Transparent = complexIdentity(18)
        self.S12Transparent = complexIdentity(18)

        self.PLayer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/PLayer1.txt")
        self.QLayer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/QLayer1.txt")
        self.OmegaSquaredLayer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/OmegaSquaredLayer1.txt")
        self.LambdaLayer1= numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/LambdaLayer1.txt")
        # NOTE - THE LAYER 1 VALUES ARE MODIFIED SO THAT ELEMENTS 7, 11, 12, AND 16 ALONG THE MAIN
        # DIAGONAL OF THE EIGENVALUE MATRIX ARE THEIR OWN CONJUGATE. THIS IS A NUMERICAL ERROR ISSUE
        # THAT I DON'T KNOW HOW TO RESOLVE AND I DON'T THINK IT SHOULD HAVE ANY PHYSICAL CONSEQUENCES.
        # SO I HAVE MODIFIED THE X AND V MATRICES. PHYSICALLY, 
        self.VLayer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/VLayer1.txt")
        self.ALayer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/ALayer1.txt")
        self.BLayer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/BLayer1.txt")
        self.XLayer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/XLayer1.txt")
        self.WLayer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/WLayer1.txt")
        self.S11Layer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/S11Layer1.txt")
        self.S12Layer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/S12Layer1.txt")
        self.S21Layer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/S21Layer1.txt")
        self.S22Layer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/S22Layer1.txt")
        self.SLayer1 = complexArray([
            [self.S11Layer1, self.S12Layer1],
            [self.S21Layer1, self.S22Layer1]])

        self.SGlobal11Layer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/SGlobal11Layer1.txt")
        self.SGlobal12Layer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/SGlobal12Layer1.txt")
        self.SGlobal21Layer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/SGlobal21Layer1.txt")
        self.SGlobal22Layer1 = numpyArrayFromSeparatedColumnsFile(context.testLocation +
                "/matrixDataOblique/layer1/SGlobal22Layer1.txt")
        self.SGlobalLayer1 = complexArray([
            [self.SGlobal11Layer1, self.SGlobal12Layer1],
            [self.SGlobal21Layer1, self.SGlobal22Layer1]])

        self.PLayer2 = numpyArrayFromFile(context.testLocation + "/matrixDataOblique/layer2/PLayer2.txt")
        self.QLayer2 = numpyArrayFromFile(context.testLocation + "/matrixDataOblique/layer2/QLayer2.txt")
        self.OmegaSquaredLayer2 = numpyArrayFromFile(context.testLocation + "/matrixDataOblique/layer2/OmegaSquaredLayer2.txt")
        self.WLayer2 = complexIdentity(18)
        self.LambdaLayer2 = numpyArrayFromSeparatedColumnsFile(context.testLocation + "/matrixDataOblique/layer2/LambdaLayer2.txt")
        self.VLayer2 = np.loadtxt(context.testLocation + "/matrixDataOblique/layer2/VLayer2MYSELF.csv", dtype=np.cdouble) # This is to rearrange the eigenvalue columns so that they display properly.
        self.ALayer2 = numpyArrayFromSeparatedColumnsFile(context.testLocation + "/matrixDataOblique/layer2/ALayer2.txt")
        self.BLayer2 = numpyArrayFromSeparatedColumnsFile(context.testLocation + "/matrixDataOblique/layer2/BLayer2.txt")
        self.XLayer2 = numpyArrayFromSeparatedColumnsFile(context.testLocation + "/matrixDataOblique/layer2/XLayer2.txt")
        self.S11Layer2 = numpyArrayFromSeparatedColumnsFile(context.testLocation + "/matrixDataOblique/layer2/S11Layer2.txt")
        self.S12Layer2 = numpyArrayFromSeparatedColumnsFile(context.testLocation + "/matrixDataOblique/layer2/S12Layer2.txt")
        self.S21Layer2 = numpyArrayFromSeparatedColumnsFile(context.testLocation + "/matrixDataOblique/layer2/S21Layer2.txt")
        self.S22Layer2 = numpyArrayFromSeparatedColumnsFile(context.testLocation + "/matrixDataOblique/layer2/S22Layer2.txt")
        self.SLayer2 = complexArray([
            [self.S11Layer2, self.S12Layer2],
            [self.S21Layer2, self.S22Layer2]])
        self.DLayer12= np.loadtxt(context.testLocation + '/matrixDataOblique/layer2/D12.csv', dtype=np.cdouble)
        self.FLayer12= np.loadtxt(context.testLocation + '/matrixDataOblique/layer2/F12.csv', dtype=np.cdouble)

        self.SGlobal11Layer2 = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/layer2/SGlobal11Layer2.txt")
        self.SGlobal12Layer2 = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/layer2/SGlobal12Layer2.txt")
        self.SGlobal21Layer2 = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/layer2/SGlobal21Layer2.txt")
        self.SGlobal22Layer2 = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/layer2/SGlobal22Layer2.txt")
        self.SGlobalLayer2 = complexArray([
            [self.SGlobal11Layer2, self.SGlobal12Layer2],
            [self.SGlobal21Layer2, self.SGlobal22Layer2]])

        self.QReflectionRegion = numpyArrayFromFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/QReflectionRegion.txt")
        self.LambdaReflectionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/LambdaReflectionRegion.txt")
        self.WReflectionRegion = complexIdentity(18)
        self.VReflectionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/VReflectionRegion.txt")
        self.LambdaReflectionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/LambdaReflectionRegion.txt")
        self.AReflectionRegion= numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/AReflectionRegion.txt")
        self.BReflectionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/BReflectionRegion.txt")
        self.S11ReflectionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/S11ReflectionRegion.txt")
        self.S12ReflectionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/S12ReflectionRegion.txt")
        self.S21ReflectionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/S21ReflectionRegion.txt")
        self.S22ReflectionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/reflectionRegion/S22ReflectionRegion.txt")
        self.SReflectionRegion = complexArray([
            [self.S11ReflectionRegion, self.S12ReflectionRegion],
            [self.S21ReflectionRegion, self.S22ReflectionRegion]])

        self.QTransmissionRegion = numpyArrayFromFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/QTransmissionRegion.txt")
        self.LambdaTransmissionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/LambdaTransmissionRegion.txt")
        self.WTransmissionRegion = complexIdentity(18)
        self.VTransmissionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/VTransmissionRegion.txt")
        self.LambdaTransmissionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/LambdaTransmissionRegion.txt")
        self.ATransmissionRegion= numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/ATransmissionRegion.txt")
        self.BTransmissionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/BTransmissionRegion.txt")
        self.S11TransmissionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/S11TransmissionRegion.txt")
        self.S12TransmissionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/S12TransmissionRegion.txt")
        self.S21TransmissionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/S21TransmissionRegion.txt")
        self.S22TransmissionRegion = numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/transmissionRegion/S22TransmissionRegion.txt")
        self.STransmissionRegion = complexArray([
            [self.S11TransmissionRegion, self.S12TransmissionRegion],
            [self.S21TransmissionRegion, self.S22TransmissionRegion]])

        # Overall global scattering matrices
        self.SGlobal11= numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/SGlobal11.txt")
        self.SGlobal12= numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/SGlobal12.txt")
        self.SGlobal21= numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/SGlobal21.txt")
        self.SGlobal22= numpyArrayFromSeparatedColumnsFile(
                context.testLocation + "/matrixDataOblique/SGlobal22.txt")
        self.SGlobal = complexArray([
            [self.SGlobal11, self.SGlobal12],
            [self.SGlobal21, self.SGlobal22]])

        self.transparentSMatrix = complexZeros((2, 2, 18, 18))
        self.transparentSMatrix[0,1] = complexIdentity(18)
        self.transparentSMatrix[1,0] = complexIdentity(18)

        self.rx = complexArray([-0.0187- 0.0155j, 0.0486 - 0.0467j, 0.0016 + 0.0012j,
            0.0324 - 0.0229j, -0.1606 - 0.0348j, -0.0089 + 0.0156j,
            0.0020 + 0.0105j, 0.0076 + 0.0187j, -0.0027 - 0.0129j])
        self.ry = complexArray([-0.0077 - 0.0106j, 0.0184 + 0.0323j, -0.0267 - 0.0070j,
            -0.0286 + 0.0472j, 0.2335 + 0.0138j, 0.0243 + 0.0164j,
            0.0435 - 0.018j, 0.0183 + 0.0146j, -0.0062 + 0.0011j])
        self.rT = np.hstack((self.rx, self.ry))
        self.rz = complexArray([0.0213 - 0.0218j, -0.0078 + 0.0512j, 0.0103 - 0.0388j,
            0.0120 + 0.0300j, -0.0386 - 0.0403j, 0.0123 + 0.0069j,
            -0.0197 - 0.0147j, -0.0087 + 0.0157j, 0.0039 + 0.0002j])
        self.tx = complexArray([0.0015 - 0.0016j, -0.0583 + 0.0256j, -0.0245 - 0.0098j,
            0.0060 + 0.0210j, 0.3040 + 0.0664j, -0.0054 - 0.0632j,
            -0.0123 - 0.0262j, -0.0323 - 0.0534j, 0.0169 + 0.0455j])
        self.ty = complexArray([-0.0024 + 0.0011j, 0.0356 + 0.0282j, -0.0230 - 0.0071j,
            0.0610 - 0.0011j, 0.0523 - 0.2913j, -0.0645 - 0.0027j,
            -0.0170 - 0.0165j, -0.0420 + 0.0298j, 0.0258 - 0.0234j])
        self.tT = np.hstack((self.tx, self.ty))
        self.tz = complexArray([0.0023 + 0.0021j, - 0.0036 - 0.0406j, 0.0187 + 0.0057j,
            -0.0261 - 0.0235j, -0.1294 + 0.0394j, 0.0133 - 0.0012j,
            0.0078 + 0.0241j, 0.0014 + 0.0288j, 0.0069 - 0.0045j])

        self.R = np.array([
            [0,0,0],
            [0,0.0848, 0.0011],
            [0, 0.0025, 0.0004]])
        self.T = np.array([
            [0, 0.0149, 0.0055],
            [0.0222, 0.7851, 0.0283],
            [0.0053, 0.0348, 0.0150]])
        self.R = np.transpose(self.R)
        self.T = np.transpose(self.T)
        self.RTot = 0.088768
        self.TTot = 0.91123