Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. ' temhorn_lens
  2.  
  3. Sub Main ()
  4. Dim B1, B2, H1, H2, L1, L2 As Double
  5. B1 = RestoreDoubleParameter("B1")
  6. B2 = RestoreDoubleParameter("B2")
  7. H1 = RestoreDoubleParameter("H1")
  8. H2 = RestoreDoubleParameter("H2")
  9. L1 = RestoreDoubleParameter("L1")
  10. L2 = RestoreDoubleParameter("L2")
  11.  
  12. Dim nx, ny, nz As Integer
  13. nx = RestoreDoubleParameter("nx")
  14. ny = RestoreDoubleParameter("ny")
  15. nz = RestoreDoubleParameter("nz")
  16.  
  17. Dim epsMax As Double
  18. epsMax = RestoreDoubleParameter("epsmax")
  19.  
  20. Dim var As Integer
  21. var = RestoreDoubleParameter("lensvariant")
  22.  
  23. Dim lh, lb, l As Double
  24. lh = H1 * L2 / (H2 - H1)
  25. lb = B1 * L2 / (B2 - B1)
  26. If lb < lh Then
  27. l = lb
  28. Else
  29. l = lh
  30. End If
  31.  
  32.  
  33. Dim x0, y0, z0 As Double
  34. x0 = -B2/2
  35. y0 = -H2/2
  36.  
  37. If var = 0 Then
  38. z0 = -lh
  39. Else
  40. z0 = -l
  41. End If
  42.  
  43.  
  44. Dim dx, dy, dz As Double
  45. dx = B2 / nx
  46. dy = H2 / ny
  47. dz = (-z0 + L2) / nz
  48.  
  49. Dim ix, iy, iz As Integer
  50.  
  51. For ix = 0 To nx-1
  52. For iy = 0 To ny-1
  53. For iz = 0 To nz-1
  54. Dim x, y, z As Double
  55. x = x0 + (ix+0.5)*dx
  56. y = y0 + (iy+0.5)*dy
  57. z = z0 + (iz+0.5)*dz
  58.  
  59. Dim minX, maxX, minY, maxY, minZ As Double
  60. minX = x - dx/2
  61. maxX = x + dx/2
  62. minY = y - dy/2
  63. maxY = y + dy/2
  64. minZ = z - dz/2
  65.  
  66. If (2*( maxY - H1/2) / (H2 - H1) < minZ / L2) And _
  67. (2*( maxX - B1/2) / (B2 - B1) < minZ / L2) And _
  68. (2*(-minY - H1/2) / (H2 - H1) < minZ / L2) And _
  69. (2*(-minX - B1/2) / (B2 - B1) < minZ / L2) Then
  70.  
  71. Dim eps As Double
  72.  
  73. If var = 0 Then
  74. eps = epsMax * (z+l)^2 / (x*x + y*y + (z+l)^2)
  75. ElseIf var = 1 Then
  76. Dim R1sq, R2sq As Double
  77. R1sq = (L2 + lb)^2 + (B2/2)^2
  78. R2sq = (L2 + lh)^2 + (H2/2)^2
  79.  
  80. Dim cosAlphaSq, cosBetaSq As Double
  81. cosAlphaSq = (lb+L2)^2 / R1sq
  82. cosBetaSq = (lh+L2)^2 / R2sq
  83.  
  84. Dim tgPhiSq, cosXiSq As Double
  85. tgPhiSq = y^2 / (lh+z)^2
  86. cosXiSq = (lb+z)^2 / ((lb+z)^2 + x^2)
  87.  
  88. eps = epsMax * R1sq*cosAlphaSq / (R1sq*cosAlphaSq/cosXiSq + R2sq*cosBetaSq*tgPhiSq)
  89. ElseIf var = 2 Then
  90. Dim cosPhiSq, tgXiSq As Double
  91. cosPhiSq = (lh+L2)^2 / R2sq
  92. tgXiSq = x^2 /(lb+z)^2
  93.  
  94. eps = epsMax * R2sq*cosBetaSq / (R1sq*cosAlphaSq*tgXiSq + R2sq*cosBetaSq/cosPhiSq)
  95.  
  96. End If
  97.  
  98.  
  99.  
  100. eps = Fix(eps*50)/50
  101.  
  102.  
  103. Dim epsName As String
  104. epsName = "" & eps
  105. epsName = Replace(epsName, ",", ".")
  106.  
  107.  
  108. ' Create material
  109. With Material
  110. .Reset
  111. .Folder "temhorn_lens"
  112. .Name "material_eps=" & epsName
  113. .FrqType "all"
  114. .Type "Normal"
  115. .Epsilon eps
  116. .Mue 1
  117. .Create
  118. End With
  119.  
  120. ' Create brick
  121. With Brick
  122. .Reset
  123. .Component "temhorn_lens"
  124. .Name "solid_" & ix & "_" & iy & "_" & iz
  125. .Material "temhorn_lens/material_eps=" & epsName
  126. .Xrange x0 + ix*dx, x0 + (ix+1)*dx
  127. .Yrange y0 + iy*dy, y0 + (iy+1)*dy
  128. .Zrange z0 + iz*dz, z0 + (iz+1)*dz
  129. .Create
  130. End With
  131. End If
  132. Next
  133. Next
  134. Next
  135.  
  136. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement