summaryrefslogtreecommitdiff
path: root/beam_tracing/python/exampleBeamTrace.py
diff options
context:
space:
mode:
authorEugeniy Mikhailov <evgmik@gmail.com>2013-02-28 14:59:55 -0500
committerEugeniy Mikhailov <evgmik@gmail.com>2013-02-28 14:59:55 -0500
commite4360a48435cc762855d356b208b5544e6f40c4b (patch)
tree71c6c83c247cb07495265b93ec062eefc3e928a8 /beam_tracing/python/exampleBeamTrace.py
parenta08ed173692ce16b79002733003049ec32a02485 (diff)
downloadwgmr-e4360a48435cc762855d356b208b5544e6f40c4b.tar.gz
wgmr-e4360a48435cc762855d356b208b5544e6f40c4b.zip
Added python version of mode-matching code by Bain Bronner
Diffstat (limited to 'beam_tracing/python/exampleBeamTrace.py')
-rw-r--r--beam_tracing/python/exampleBeamTrace.py122
1 files changed, 122 insertions, 0 deletions
diff --git a/beam_tracing/python/exampleBeamTrace.py b/beam_tracing/python/exampleBeamTrace.py
new file mode 100644
index 0000000..1e35118
--- /dev/null
+++ b/beam_tracing/python/exampleBeamTrace.py
@@ -0,0 +1,122 @@
+from beamTrace import *
+from classes import *
+from colorGradient import *
+from drawPrismDisk import *
+from faceBeamInteraction import *
+from fresnelReflection import *
+import pylab
+import numpy as np
+
+#prismAngle = 45 # rutile prism
+prismAngle = 60 # diamond prism
+
+nDisk = np.array([2.256, 2.176]) # LiNbO3
+#nDisk = np.array([1.375, 1.387]) #MgF2
+#nDisk = np.array([1.430, 1.430]) #CaF2
+
+nPrism = np.array([2.400, 2.400]) # diamond
+#nPrism = np.array([2.521, 2.793]) # rutile
+
+nAir = np.array([1.0, 1.0])
+
+coupDesc = 'LiNbO3 disk\nDiamond (C) Prism'
+
+# keep in mind the bottom of prism always goes from -1 to 1, regardless of
+# prismAngle
+diskX = -0.85
+
+
+# the following calls prismDiskCoupling from drawPrismDisk
+# it is the same as prismDiskCoupling function, with unnecessary parts removed
+# calling this function allows for different ideal beam start locations to be
+# easily put into beamTrace and its helpers
+
+[xBeamOrigin, yBeamOrigin, yFace2, yFace3,\
+ thetaPrism, thetaPrism2, thetaAirRth] =\
+ drawPrismDisk(prismAngle, nDisk[0], nPrism[0], diskX, coupDesc)
+
+
+
+# ------------------------------------------------------------
+# Should not have to alter below to acquire different outputs
+# ------------------------------------------------------------
+
+
+# prism faces
+face1 = face()
+face1.vertex1 = np.array([-1, 0])
+face1.vertex2 = np.array([1, 0])
+# left (right) side is left (right) of line from vertex 1 to 2
+face1.nLeft = nPrism
+face1.nRight = nDisk
+
+face2 = face()
+face2.vertex1 = np.array([1, 0])
+face2.vertex2 = np.array([0, yFace2])
+face2.nLeft = nPrism
+face2.nRight = nAir
+
+face3 = face()
+face3.vertex1 = np.array([-1, 0])
+face3.vertex2 = np.array([0, yFace3])
+face3.nLeft = nAir
+face3.nRight = nPrism
+
+faces = np.array([face1, face2, face3])
+
+#beams
+beamInitialTravelAngle = thetaAirRth
+
+beam1 = beam()
+beam1.k = np.array([-np.cos(beamInitialTravelAngle), \
+ -np.sin(beamInitialTravelAngle)])
+beam1.origin = np.array([xBeamOrigin, yBeamOrigin])
+beam1.face = float('NaN')
+beam1.intensity = 1
+beam1.polarization = 1 # 0 for s and 1 for p
+beam1.status = 'incoming' # could be reflected, refracted, incoming
+
+beam2 = beam()
+beam2.k = np.array([-np.cos(beamInitialTravelAngle), \
+ -np.sin(beamInitialTravelAngle)])
+beam2.origin = np.array([xBeamOrigin, yBeamOrigin])
+beam2.face = float('NaN')
+beam2.intensity = 1
+beam2.polarization = 0 # 0 for s and 1 for p
+beam2.status = 'incoming'
+
+beams = np.array([beam1, beam2])
+
+
+# image borders, we don't want a beam traced to infinity
+border1 = border()
+border1.vertex1 = np.array([-1.5, -0.5])
+border1.vertex2 = np.array([1.5, -0.5])
+border1.nRight = nAir
+border1.nLeft = nAir
+
+border2 = border()
+border2.vertex1 = np.array([1.5, -0.5])
+border2.vertex2 = np.array([1.5, 2.0])
+border2.nRight = nAir
+border2.nLeft = nAir
+
+border3 = border()
+border3.vertex1 = np.array([1.5, 2.0])
+border3.vertex2 = np.array([-1.5, 2.0])
+border3.nRight = nAir
+border3.nLeft = nAir
+
+border4 = border()
+border4.vertex1 = np.array([-1.5, 2.0])
+border4.vertex2 = np.array([-1.5, -0.5])
+border4.nRight = nAir
+border4.nLeft = nAir
+
+borders = np.array([border1, border2, border3, border4])
+borderLimits = np.array([-1.5, -0.5, 1.5, 2.0])
+# end parameters
+
+
+processedBeams = beamTrace(beams, faces, borders, borderLimits)
+pylab.show()