Development of Analytical and Experimental Tools for Microwave Breast Imaging Research
Fuqiang GaoDepartment of Electrical and Computer Engineering, Madison, WI
Introduction
The incidence rate of breast cancer is the highest of any cancer among women in the United States, and its mortality rate is second only to lung cancer. It is well known that early detection is crucial to successful treatment of breast cancer. X-ray mammography has been the standard clinical tools for detecting and treating breast cancer for many years. However, the sensitivity and specificity of this method are significantly lower in women with extremely dense breasts, and it also involves breast compression and exposure to ionizing. Hence, there is a critical need of alternative non-ionizing molecular imaging technologies that are capable of 3D tomographic breast imaging and suitable for low-cost cancer screening particularly in high-risk patients. Microwave imaging, which utilizes the dielectric contrast between malignant and normal breast tissues, has shown great potential to meet these needs in recent studies.
My master’s project involves development of both analytical and experimental tools for microwave breast imaging research. In the analytical part, the potential of incorporating both dielectric and elastic contrasts for improving breast tumor detection is studied. This work resulted in a comment that is published in IEEE Antennas and Wireless Propagation Letters. In the experimental part, a technique to fabricate 3D realistic breast phantom is successfully developed. The fabricated breast phantoms can be used for rigorous pre-clinical validation of microwave breast imaging systems. A manuscript based on this work has been submitted to a journal for peer-review. Hence, the main body of this report consists of the aforementioned two materials. The appendix includes the MATLAB codes used to generate the results in the IEEE AWPL comment.
Copyright (c) 2010 IEEE. Personal use is permitted. For any other purposes, Permission must be obtained from the IEEE by emailing [email protected].
This article has been accepted for publication in a future issue of this journal, but has not been fully edited. Content may change prior to final publication.
IEEE ANTENNAS AND WIRELESS PROPAGATION LETTERS, VOL. 9, 2010 1
Comments and Replies
Comments on “Numerical Study of Microwave Scatteringin Breast Tissue via Coupled Dielectric
and Elastic Contrasts”
Fuqiang Gao, Student Member, IEEE,Susan C. Hagness, Fellow, IEEE, andBarry D. Van Veen, Fellow, IEEE
In [1], the dielectric properties in the 2-D ��� validation study ofFig. 1 were stated incorrectly as (�� � ��� �� � ����� S/m) for thecylinder and (�� � ��� �� � ��� S/m) for the background. Theactual properties for the results presented in Fig. 1 in [1] are (�� �
��� �� � � S/m) and (�� � ��� �� � � S/m), respectively. Also, therewas an inconsistency in the definition of � � �
�. The corrected Fig. 1is presented here.A validation for the lossy case (cylinder: �� � ��� �� � ����� S/m;
background: �� � ��� �� � ��� S/m) is presented in Fig. 2.The excellent agreement between the two curves in Fig. 2 supportsour conclusion in [1] regarding the accuracy of the FDTD-SBCimplementation.The peak applied strain of Fig. 3 in [1] was stated incorrectly as 10%.
The correct peak applied strain is 8%.The results shown in Fig. 4 in [1] were obtained for lossless ver-
sions of the materials stated; that is, �� � � S/m for all tissues. Theresults based on the lossy material properties stated in [1] are presentedin Fig. 3. These results support our conclusion in [1] regarding the en-hancement of the overall microwave scattering contrast using the hy-brid modality.
REFERENCES
[1] M. Zhao, J. D. Shea, S. C. Hagness, D. W. van der Weide, B. D. VanVeen, and T. Varghese, “Numerical study of microwave scattering inbreast tissue via coupled dielectric and elastic contrasts,” IEEE An-tennas Wireless Propag. Lett., vol. 7, pp. 247–250, 2008.
Manuscript received July 26, 2010; accepted July 26, 2010. Date of publica-tion August 05, 2010; date of current version nulldate.F. Gao, S. C. Hagness, and B. D. Van Veen are with the Department of Elec-
trical and Computer Engineering, University of Wisconsin-Madison, Madison,WI 53706 USA (e-mail: [email protected]; [email protected]; [email protected]).Digital Object Identifier 10.1109/LAWP.2010.2063450
Fig. 1. Comparison of the amplitudes of the normalized Doppler componentcomputed via the finite-difference time-domain method with sheet boundaryconditions (FDTD-SBC) (dashed line) and the normalized difference betweenstationary scattered field solutions computed via FDTD with repositionedboundaries (FDTD-REP) (solid line). the 2-D scattering object is a deforming4-mm-diameter lossless circular cylinder undergoing a peak radial displace-ment of 0.45 mm.
Fig. 2. Comparison of the amplitudes of the normalized Doppler componentcomputed via FDTD-SBC (dashed line) and the normalized difference betweenstationary scattered field solutions computed via FDTD-REP (solid line). The2-D scattering object is a deforming 4-mm-diameter lossy circular cylinder un-dergoing a peak radial displacement of 0.45 mm.
Fig. 3 Computed Doppler components in the backward (� � ��� ) and for-ward (� � � ) scattered fields under different peak applied strains, for malig-nant and normal fibroglandular scatterers.
1536-1225/$26.00 © 2010 IEEE
Heterogeneous Anthropomorphic Phantoms with Realistic Dielectric
Properties for Microwave Breast Imaging Experiments
Alireza Mashal, Fuqiang Gao, and Susan C. Hagness
Department of Electrical and Computer Engineering, University of Wisconsin, Madison, WI, 53706 USA
e-mail: [email protected], [email protected], [email protected]
Abstract
We present a technique for fabricating realistic breast phantoms for microwave imaging system
validation. Using oil-in-gelatin dispersions that mimic the dielectric properties of breast tissue,
we constructed four phantoms, spanning the full range of volumetric breast densities. We
obtained CT scans and performed dielectric properties measurements to characterize each
phantom.
Key terms: microwave imaging, breast phantoms, dielectric spectroscopy
1. INTRODUCTION
Microwave breast imaging is a non-ionizing molecular imaging technique that senses the
endogenous -- and possibly exogenously influenced -- dielectric properties of breast tissue.
Microwave imaging shows much promise as a safe, low-cost, three-dimensional tomographic
imaging modality. Potential applications include early-stage breast cancer detection, breast
density evaluation, and cancer treatment monitoring. Definitive, quantitative validation of
microwave imaging techniques is a critical component in the development of this technology.
Clinical studies with human subjects provide the ultimate test domain but also pose the most
challenging validation scenario due to the fact that the true in vivo properties are not known. This
emphasizes the important role of realistic physical phantoms in pre-clinical validation studies.
Phantoms have the potential to provide an anthropomorphic test domain with known structure
and known dielectric properties that reasonably mimic tissue in the breast.
Table 1. summarizes the features of numerous breast phantoms that have been reported over
the past decade. The shape and structural complexity of the phantoms vary considerably, ranging
from simple geometrically defined volumes with predominantly homogeneous interiors to
realistically shaped volumes with heterogeneous interiors. The materials in these phantoms range
from those with dielectric properties that roughly approximate breast tissue properties at select
frequencies to tissue-mimicking (TM) materials [1] that closely match the dielectric properties of
certain tissues in the breast over a wide frequency range. However, none of the phantoms
reported to date include fibroglandular mimicking materials with properties that match those
reported in the large-scale Wisconsin-Calgary study of breast tissue [2].
Our present investigation is motivated not only by the need for individual realistic breast
phantoms that accurately model the shape, structural complexity, and microwave-frequency
dielectric properties of fatty and fibroglandular tissue in the human breast, but also by the need
for sets of realistic breast phantoms that span the full range of volumetric breast densities
observed in the general patient population. Breast density refers to the percentage of
fibroglandular tissue in the breast. High breast density is one of the strongest predictors of breast
cancer risk [3] and also impedes mammographic screening [4]. Accordingly, it is of great interest
and importance to evaluate the performance of microwave imaging across the full range of breast
densities.
In this paper, we present a method for constructing stable, heterogeneous anthropomorphic
breast phantoms with realistic dielectric properties. We illustrate the approach by constructing
four phantoms with different breast densities. We select oil-in-gelatin TM materials that
accurately model the dielectric properties of skin, fat, and fibroglandular breast tissues. The
percentage of fibroglandular TM material is varied to create low and high breast density
phantoms. CT images of the completed phantoms are obtained to confirm the interior spatial
distribution of the various TM materials. We confirm the integrity of the dielectric properties
distribution by cutting each breast phantom in half and conducting direct dielectric-properties
measurements of the different regions of the interior.
The remainder of this paper is organized as follows. In Section 2 we discuss the TM materials
employed in constructing the phantoms, the phantom construction method, and dielectric
measurement techniques. In Section 3 we report the measured dielectric properties and CT-
imaged structural composition of the constructed phantoms. Our conclusions are presented in
Section 4.
2. MATERIALS AND METHODS
2.1 Design of tissue-mimicking materials
We created the TM materials from oil-in-gelatin dispersions reported by [1]. The TM materials
are composed of water, gelatin, oil (1:1 mixture of kerosene and safflower oil), and preservatives.
Varying the concentration of oil alters the dielectric properties. Higher oil concentrations result
in materials with dielectric properties that are similar to those of lower-water-content tissue, while
lower oil concentrations result in materials that mimic higher water-content tissues. These
materials are relatively inexpensive to fabricate, can conform to any shape, and have stable
dielectric properties even when placed in direct contact with other TM materials. In addition, the
fabrication procedure may be altered to allow for the inclusion of contrast agents, such as carbon
nanotubes [14].
The TM materials in our breast phantoms were designed to achieve a close match to the breast
tissue properties reported in [2] and wet and dry skin properties reported in [15]. [2] categorized
breast tissue into three different groups based on adipose composition; hereafter we refer to these
groups as fibroglandular (0-30% adipose), heterogeneous mix (31-84% adipose), and fat (85-100%
adipose). We designed one or two TM materials for each of these groups of breast tissue, and one
TM material for skin. An even greater level of dielectric heterogeneity in the phantom may be
achieved by designing two or more distinct TM materials (e.g., with different oil concentrations)
for each breast tissue group.
2.2 Dielectric characterization of tissue-mimicking materials
We conducted two sets of dielectric characterization measurements. The purpose of the first set
was to design the TM materials, as described above. The purpose of the second set was twofold:
1) to investigate the within-sample variability of the dielectric properties of a given TM material,
and 2) to investigate the stability of the dielectric properties of each TM material when placed in
contact with other TM materials, in an environment similar to that of the constructed phantom. A
portion of each TM material fabricated during the phantom construction phase of this study was
set aside for the second set of experiments.
Two multi-layer cylindrical test volumes were constructed, each from a different batch of the
TM materials, as follows. A 1-cm-thick layer of the skin-mimicking material was poured into a
10-cm-diameter cylindrical container and allowed to congeal. Layers of 4-cm-thick fat-,
heterogeneous-mix-, and fibroglandular-mimicking materials were added one-by-one in a similar
manner, yielding a 13-cm-high test volume. After one week, each test volume was removed from
its cylindrical container and the layers were separated. We note that the ease of separation served
as one indication that no osmosis had occurred between adjacent layers.
We measured the dielectric properties at three different locations on each surface (top and
bottom) of each TM material layer from each of the two test volumes. Thus we obtained
dielectric properties data from a total of 12 measurement sites for each TM material. The
dielectric measurements were conducted using the wideband open-ended coaxial probe technique
described in [16].
2.3 Phantom construction
Each breast phantom was constructed in three stages using an outer and inner mold. The outer
mold (~ 400 mL volume) was shaped similar to the human breast in a prone position; identical
outer molds were used for all four phantoms. The inner mold was unique to each phantom as it
was used to control the volume of the heterogeneous mix and fibroglandular content in relation to
the fat content. In addition, the inner mold was configured to provide a unique structurally
complex interface between the fat and fibroglandular regions.
In the first stage of phantom construction, we created a thin skin layer (1-2 mm) on the inner
surface of the outer mold by pouring a small amount of the skin-mimicking material into the outer
mold in its liquid state and rotating the mold as the TM material cooled and congealed on the
inner surface of the mold. The skin-mimicking material was also used to create a slightly thicker
layer at the anterior end of the mold. This feature provided a reasonably good model of the areola.
The skin layer was allowed to fully congeal for 5 hours before proceeding to the next stage.
In the second stage, the fat layer was added on the top of the skin layer. This was
accomplished by suspending the inner mold inside the outer mold and pouring the fat-mimicking
material into the space between the inner and outer molds. The volume of each inner mold was
chosen to achieve a representative breast density for that phantom class. For example, for a class
I phantom (mostly fat), the volume of the heterogeneous mix and fibroglandular content was
chosen to be approximately 10% of the total breast volume. Similarly we chose inner-mold
volumes to be approximately 30%, 50%, and 70% of the total breast volume to construct class II
(scattered fibroglandular), class III (heterogeneously dense), and class IV (extremely dense)
phantoms, respectively.
In the final stage, after allowing the fat layer to congeal for 12 hours, the heterogeneous-mix-
mimicking material was added to the void left by the removal of the inner mold. Randomly
shaped pieces of already congealed fibroglandular-mimicking materials were added to the
heterogeneous mix as it was poured. Once the phantom was completed, it was covered by a thin
sheet of polyethylene material and allowed to set for approximately one week before it was
removed from the outer mold.
3. RESULTS AND DISCUSSION
3.1 Dielectric properties characterization of TM materials
The dielectric properties of the TM materials used for the construction of the four different
phantoms are shown in Figures 1 and 2. In these figures, each curve with vertical bars represents
the average properties (relative permittivity or effective conductivity) of 12 measurements made
on the different cylindrical TM samples described in Section 2.2. The vertical bars span the
maximum and minimum values at specific frequencies. The small variability across
measurements of each TM material demonstrate the spatial uniformity and stability of the
dielectric properties of the TM materials even when placed in contact with TM materials of
different oil concentrations.
We used 20% and 30% -oil TM materials to represent fibroglandular tissue, 40%-oil to
represent the heterogeneous mix, and 80%-oil to represent fat. Figure 1 shows that these TM
materials closely mimic the dielectric properties of the corresponding breast tissue types reported
in [2] across the 1-6 GHz frequency range. For all the breast tissue types, the dielectric properties
of the TM materials fall within the range of the 25th and 75th percentile of the breast tissue group
they represent.
A 30%-oil TM material was chosen to represent skin tissue. Figure 2 shows the dielectric
properties of wet and dry skin tissue types [15] and 30%-oil TM material. The relative
permittivity of the skin-mimicking material falls between that of wet and dry skin in the 1-6 GHz
frequency range. The effective conductivity of the skin-mimicking material is slightly higher
than that of wet skin. This small discrepancy in conductivity should have a negligible effect on
microwave scattering since the skin layer is only 1-2 mm thick.
3.2 Phantom characterization
Figure 3 shows a photograph of one of the four completed phantoms after the outer mold has
been removed. The height of the phantom is approximately 8 cm. The diameter at the base is
approximately 12 cm. A CT scan of each of the four phantoms was acquired approximately one
week after construction. Figure 4 shows a sagittal and coronal CT image of a central cross-
section of each phantom. These images confirm the integrity of each of the spatial features of the
phantoms. For each phantom, the CT images clearly show the presence of skin and areola
(medium grey), fat (black), heterogeneous mix (medium grey), and fibroglandular tissue (light
grey). In addition, the CT images show the variations in fibroglandular tissue density across the
four different phantoms. The small dark circles in the images are air bubbles (typically less than
1 mm in diameter) that are introduced unintentionally during fabrication of the TM materials. The
dielectric properties of the various TM materials inside the phantom were verified by making a
coronal cross-sectional cut through each phantom and making measurements at approximately 1
cm intervals along a trans-sectional line across the exposed coronal plane. Figures 5, 6 (a),(b)
show the dielectric properties in the 1-6 GHz range at various trans-sectional positions for class I
and class IV phantoms. This data confirms that a large dielectric contrast (>5:1 in some cases)
between fatty and fibroglandular content is present, as desired. Parts (c) and (d) of Figures 5 and
6 show the dielectric properties of the phantoms at 3 GHz as a function of position. These graphs
provide a spatial snapshot of the interior heterogeneity as well as the increasing fibroglandular
density with phantom class number. For example, a comparison of Figures 5(c) and 5(d) and
Figures 6(c) and 6(d) shows that there is significantly more higher-water-content TM material in
the class IV phantom (extremely dense) than the class I phantom (mostly fat), as desired.
These phantoms are well suited for experimental imaging tests. The phantoms are relatively
sturdy and are not easily damaged during gentle handling. In addition, the TM materials used to
construct these phantoms have been shown to be stable over a nine-week period as long as they
are not exposed to air for long periods of time [1]. The TM materials are also stable in oil (1:1
mixture of kerosene and safflower oil); this is an important feature for experiments that require
the phantoms to be immersed in a coupling medium.
4. CONCLUSIONS
We have described the construction of four different realistic breast phantoms, each representing
a different volumetric breast density classification. The phantoms were constructed using TM
materials that accurately represent the dielectric properties of various breast tissues. The
phantoms were heterogeneous, each with a skin layer and a complex network of fibroglandular
and fatty tissues. We verified the integrity of the internal structure of the phantom by obtaining
CT images. The dielectric properties of the phantom constituents were verified by cutting the
phantoms in half and measuring the dielectric properties of the phantom cross-section. These
phantoms were constructed using simple techniques and have long term stability when not
exposed to air for long periods of time. The techniques described here may be easily modified to
construct phantoms with malignant lesions.
ACKNOWLEDGMENTS
The authors would like to thank Christine Jaskowiak (University of Wisconsin, School of
Medicine and Public Health) for her assistance in obtaining the CT images. This work was
supported by the Department of Defense Breast Cancer Research Program under grant
W81XWH-07-1-0629 and the National Institutes of Health under grant R01CA112398 awarded
by the National Cancer Institute.
TABLE 1 Summary of Previously Published Work on Breast Phantoms for Microwave Imaging Applications
Materials used for construction
Breast shape
�r, �(S/m) of constituents Frequency (GHz)
Citation Skin Fat Fibroglandular Tumor
Corn syrup, NaCl, agar Cylinder
�r=23 �=0.2
�r=53.5 �=1.2 1.35 [5]
Corn syrup, agar Cylinder �r=42
�=0.67 �r=74 �=1.6 0.9 [6]
Silicone sheet, dough, alginate Cylinder
�r ~ 34.3 �=2-4
�r=4.5-4 �=0.06-0.2
�r ~ 43.7 �=5-8 1-7 [7]
Oil-in-gelatin Realistic �r=40-30
�=0.6-10.5 �r=8-7.1
�=0.05-1.1
1-11 [8]
Liquid, gelatin, polythene
Hemi-sphere
�r=35 � NA
�r=10 � NA
�r=27 � NA
�r=50 � NA 3 [9]
Dough, water Truncated
cone �r=80-64
�=0.1-15 �r=50-27 �=0.1-9 1-9 [10]
Isoparaffin, salt, sugar, water Realistic
�r=40.8 �=1.79
�r=5.3 �=0.13
2.5 [11]
Oil-in-gelatin Realistic �r=34-21 �=0.5-10
�r=7.5-5.5 �=0.01-1.8
�r=25-22.5 �=0.5-10
�r=47.5-30 �=0.5-015 0.05-13.51 [12]
Oil-in-gelatin Cylinder �r=46-35
�=12.5-18 �r=5-4.5
� ~ 1 �r=26-20 �=2.5-5
�r=55-40 �=15-21 0.5-8 [13]
Figure 1. Comparison of the dielectric properties of (a)-(b) fibroglandular, (c)-(d) heterogeneous
mix (both fibroglandular and fatty tissue), and (e)-(f) fatty tissue and the TM materials used to
construct the four different breast phantoms. The curves without vertical bars are the 75th (dashed
lines), 50th (solid lines), and 25th (dash-dotted lines) percentile breast tissue data reported in [2].
The solid curves with vertical bars are the average of 12 dielectric properties measurements made
on two TM material samples with the specified concentration of oil; the vertical bars span the
maximum and minimum property values at specific frequencies.
Figure 2. Comparison of the dielectric properties of wet and dry skin [15] and the 30%-oil TM
material. The solid curve with vertical bars is the average of 12 dielectric properties measurement
made on two 30%-oil TM material samples; the vertical bars span the maximum and minimum
property values at specific frequencies.
Figure 3. Photograph of a breast phantom after construction.
(a) (b)
(c) (d)
(e) (f)
(g) (h)
Figure 4. CT images of sagittal (left) and coronal (right) cross-sections of four phantoms: (a)-(b)
class I (mostly fat), (c)-(d) class II (scattered fibroglandular), (e)-(f) class III (heterogeneously
dense), and (g)-(h) class IV (extremely dense). Features present in each phantom include a skin
layer and areola (medium grey), fat (black), heterogeneous mix (medium grey), and
fibroglandular (light grey) tissue.
Figure 5. Dielectric properties at nine positions along an interior trans-sectional line through the
class I phantom. (a)-(b) Dielectric properties across the 1-6 GHz frequency range. (c)-(d)
Dielectric properties at 3 GHz as a function of position.
Figure 6. Dielectric properties at nine positions along an interior trans-sectional line through the
class IV phantom. (a)-(b) Dielectric properties across the 1-6 GHz frequency range. (c)-(d)
Dielectric properties at 3 GHz as a function of position.
REFERENCES
1. M. Lazebnik, E. L. Madsen, G. R. Frank and S. C. Hagness, Tissue-mimicking phantom materials for narrowband and ultrawideband microwave applications, Physics in Medicine and Biology 50 (2005), no. 18, 4245-4258.
2. M. Lazebnik, L. McCartney, D. Popovic, C. B. Watkins, M. J. Lindstrom, J. Harter, S. Sewall, A. Magliocco, J. H. Booske, M. Okoniewski and S. C. Hagness, A large-scale study of the ultrawideband microwave dielectric properties of normal breast tissue obtained from reduction surgeries, Physics in Medicine and Biology 52 (2007), no. 10, 2637-2656.
3. K. Kerlikowske, L. Ichikawa, D. L. Miglioretti, D. S. M. Buist, P. M. Vacek, R. Smith-Bindman, B. Yankaskas, P. A. Carney and R. Ballard-Barbash, Longitudinal measurement of clinical mammographic breast density to improve estimation of breast cancer risk, Journal of the National Cancer Institute 99 (2007), no. 5, 386-395.
4. P. A. Carney, D. L. Miglioretti, B. C. Yankaskas, K. Kerlikowske, R. Rosenberg and C. M. Rutter, Individual and combined effects of age, breast density, and hormone replacement therapy use on the accuracy of screening mammography, Annals of Internal Medicine 138 (2003), no. 3, 168-175.
5. P. M. Meaney, N. K. Yagnamurthy and K. D. Paulsen, Pre-scaled two-parameter Gauss-Newton image reconstruction to reduce property recovery imbalance, Physics in Medicine and Biology 47 (2002), no. 7, 1101-1119.
6. D. Li, P. M. Meaney, T. D. Tosteson, S. Jiang, T. E. Kerner, T. O. McBride, B. W. Pogue, A. Hartov and K. D. Paulsen, Comparisons of three alternative breast modalities in a common phantom imaging experiment, Medical Physics 30 (2003), no. 8, 2194-2205.
7. J. M. Sill and E. C. Fear, Tissue sensing adaptive radar for breast cancer detection – experimental investigation of simple tumor models, IEEE Transactions on Microwave Theory and Techniques 53 (2005), no. 11, 3312-3319.
8. D. W. Winters, J. D. Shea, E. L. Madsen, G. R. Frank, B. D. Van Veen and S. C. Hagness, Estimating the breast surface using UWB microwave monostatic backscatter measurements, IEEE Transactions on Biomedical Engineering 55 (2008), no. 1, 247-256.
9. M. Klemm, J. A. Leendertz, D. Gibbins, I. J. Craddock, A. Preece and R. Benjamin, Microwave radar-based breast cancer detection: Imaging in inhomogeneous breast phantoms, IEEE Transactions Antennas and Wireless Propagation Letters 8 (2009), 1349-1352.
10. S. M. Salvador and G. Vecchi, Experimental tests of microwave breast cancer detection on phantoms, IEEE Transactions on Antennas and Propagation 57 (2009), no. 6, 1705-1712.
11. M. Miyakawa, S. Takata and K. Inotsume, Development of non-uniform breast phantom and its microwave imaging for tumor detection by CP-MCT, Conf Proc IEEE Eng Med Biol Soc (2009), 2723-2726.
12. J. Croteau, J. Sill, T. Williams and E. Fear, Phantoms for testing radar-based microwave breast imaging, 13th International Symposium on Antenna Technology and Applied Electromagnetics and Canadian Radio Sciences Meeting (2009).
13. M. Ostadrahimi, R. Reopelle, S. Noghanian, S. Pistorius, A. Vahedi and F. Safari, A heterogeneous breast phantom for microwave breast imaging, Conf Proc IEEE Eng Med Biol Soc (2009), 2727-2730.
14. A. Mashal, B. Sitharaman, X. Li, P. K. Avti, A. V. Sahakian, J. H. Booske and S. C. Hagness, Toward carbon-nanotube-based theranostic agents for microwave detection and treatment of breast cancer: Enhanced dielectric and heating response of tissue-mimicking materials, IEEE Trans Biomed Eng 57 (2010), no. 8, 1831-1834.
15. S. Gabriel, R. W. Lau and C. Gabriel, The dielectric properties of biological tissues: III.
Parametric models for the dielectric spectrum of tissues, Physics in Medicine and Biology 41 (1996), no. 11, 2271-2293.
16. D. Popovic, L. McCartney, C. Beasley, M. Lazebnik, M. Okoniewski, S. C. Hagness and J. H. Booske, Precision open-ended coaxial probes for in vivo and ex vivo dielectric spectroscopy of biological tissues at microwave frequencies, IEEE Transactions on Microwave Theory and Techniques 53 (2005), no. 5, 1713-1722.
Appendix 1. FDTD_SBC.m %This function calls the corresponding subroutines to perform the FDTD-SBC %algorithm function FDTD_SBC(nmax) [fi1 E_i Ei ez_boundary ez_obs]=background_UPML(nmax); [ez_boundarys ez_obst]=scatter_UPML(nmax); eoz=ez_boundarys; [fi2 Ed ez_obss Jz rc]=sbc(nmax,eoz); Ed_m=Ed; plot(fi1,10*log10(abs(Ed).^2/abs(E_i)^2)); 2. background_UPML.m %********************************************************************** % 2D scatter problem, without scatter % a current line source is launched 7.5cm away from the center. The % electric field is recorded at the points 4.0cm away from the center. the % update coefficients for the main grid use the media pointer, and the upml % update equations are only used on the boundary. "On the fly" DFT is taken % for both observation points and the source, so that the final Ez_b is % nomalized %********************************************************************** % Program author: Fuqiang Gao % Department of Electrical and Computer Engineering % University of Wisconsin-Madison % 1415 Engineering Drive % Madison, WI 53706-1691 % [email protected] %********************************************************************** function [fi E_i Ez_b ez_boundary ez_obs]=background_UPML(nmax) %********************************************************************** % Fundamental constants %********************************************************************** cc=2.99792458e8; %speed of light in free space muz=4.0*pi*1.0e-7; %permeability of free space epsz=1.0/(cc*cc*muz); %permittivity of free space %********************************************************************** % Source Parameters %********************************************************************** epsrb=44.0; sigrb=0; epsrs=50.0; sigrs=0; %Parameter for lossy case % epsrb=44.0; % sigrb=4.162; % epsrs=50.0;
% sigrs=4.91; freq=5e9; %frequency omega=2*pi*freq; %********************************************************************** % Grid parameters %********************************************************************** beta=omega*sqrt(muz*epsz*epsrb)*sqrt(1/2*(sqrt(1+(sigrb/omega/epsz/epsrb)^2)+1)); lamda=2*pi/beta; delta=2.5e-4; %space increment in 2-D lattice dt=delta*sqrt(epsrb)/(2.0*cc); %time increment ie=round((0.25)/delta); je=round((0.25)/delta); ih=ie-1; jh=je-1; upml=10; ie_tot=ie+2*upml; je_tot=je+2*upml; ih_tot=ie_tot-1; jh_tot=je_tot-1; i_cen=round(ie_tot/2); %center location j_cen=round(je_tot/2); i_src=i_cen-round(0.075/delta); %source location j_src=j_cen; x=linspace(delta,ih_tot*delta,ih_tot); y=linspace(delta,jh_tot*delta,jh_tot); tau=3e-10;%1/(pi*(fmax-freq)); ndecay=tau/dt; n0=3*ndecay; %********************************************************************** % Material parameters %********************************************************************** MEDIAez=ones(ie_tot,je_tot); MEDIAhx=ones(ie_tot,jh_tot); MEDIAhy=ones(ih_tot,je_tot); ez(ie_tot,je_tot)=0.0; dz=ez; hx(ie_tot,jh_tot)=0.0; bx=hx; hy(ih_tot,je_tot)=0.0; by=hy; C1ez=ones(size(ez)); C2ez=ones(size(ez)); C3ez=ones(size(ez));
C4ez=ones(size(ez)); C5ez=ones(size(ez)); C6ez=ones(size(ez)); D1hx=ones(size(hx)); D2hx=ones(size(hx)); D3hx=ones(size(hx)); D4hx=ones(size(hx)); D5hx=ones(size(hx)); D6hx=ones(size(hx)); D1hy=ones(size(hy)); D2hy=ones(size(hy)); D3hy=ones(size(hy)); D4hy=ones(size(hy)); D5hy=ones(size(hy)); D6hy=ones(size(hy)); C1=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt); C2=2*epsrb*epsz*dt/(2*epsrb*epsz*1+sigrb*dt); C3=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt); C4=1.0/(2*epsrb*epsz*1+sigrb*dt)/(epsrb*epsz); C5=2.0*epsrb*epsz; C6=2.0*epsrb*epsz; D1x=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt); D2x=2*epsrb*epsz*dt/(2*epsrb*epsz*1+sigrb*dt); D3x=1.0; D4x=1.0/(2*epsrb*epsz)/muz; D5x=2.0*epsrb*epsz+sigrb*dt; D6x=2.0*epsrb*epsz-sigrb*dt; D1y=1.0; D2y=dt; D3y=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt); D4y=1.0/(2*epsrb*epsz+sigrb*dt)/muz; D5y=2.0*epsrb*epsz+sigrb*dt; D6y=2.0*epsrb*epsz-sigrb*dt; %Assign main domain parameters to whole region, then modify the PML region C1ez=C1*C1ez; C2ez=C2*C2ez; C3ez=C3*C3ez; C4ez=C4*C4ez; C5ez=C5*C5ez; C6ez=C6*C6ez; D1hx=D1x*D1hx; D2hx=D2x*D2hx;
D3hx=D3x*D3hx; D4hx=D4x*D4hx; D5hx=D5x*D5hx; D6hx=D6x*D6hx; D1hy=D1y*D1hy; D2hy=D2y*D2hy; D3hy=D3y*D3hy; D4hy=D4y*D4hy; D5hy=D5y*D5hy; D6hy=D6y*D6hy; %Get index of observation points I=ones(1,2); J=ones(1,2); index=1; for i=1:ie_tot for j=1:je_tot if (((i-i_cen)^2+(j-j_cen)^2)>=(0.04/delta)^2 && ((i-i_cen)^2+(j-j_cen)^2)<(0.04/delta+1)^2) I(index)=i; J(index)=j; index=index+1; end; end end %Get index of source locations Id=ones(1,2); Jd=ones(1,2); index=1; for i=1:ie_tot for j=1:je_tot if (((i-i_cen)^2+(j-j_cen)^2)>(0.002/delta+0.4)^2 && ((i-i_cen)^2+(j-j_cen)^2)<(0.002/delta+1.4)^2) Id(index)=i; Jd(index)=j; index=index+1; end; end end source=[i_src-i_cen 0]; phi=ones(1,size(Id,2)); for i=1:size(Id,2) a=[Id(i)-i_cen Jd(i)-j_cen]; l=sqrt(source(1)^2+source(2)^2)*sqrt(a(1)^2+a(2)^2); cfi=dot(a,source)/l; phi(i)=acos(cfi);
if a(2)<0 phi(i)=2*pi-phi(i); end end for i=1:length(phi)-1 for j=i+1:length(phi) if phi(j)<phi(i) temp=phi(i); phi(i)=phi(j); phi(j)=temp; temp=Id(i); Id(i)=Id(j); Id(j)=temp; temp=Jd(i); Jd(i)=Jd(j); Jd(j)=temp; end end end %*********************************************************************** % compute observation points angle %*********************************************************************** source=[i_src-i_cen 0]; fi=ones(1,size(I,2)); for i=1:size(I,2) a=[I(i)-i_cen J(i)-j_cen]; l=sqrt(source(1)^2+source(2)^2)*sqrt(a(1)^2+a(2)^2); cfi=dot(a,source)/l; fi(i)=acos(cfi); if a(2)<0 fi(i)=2*pi-fi(i); end end for i=1:size(fi,2)-1 for j=i+1:size(fi,2) if fi(j)<fi(i) temp=fi(i); fi(i)=fi(j); fi(j)=temp; temp=I(i); I(i)=I(j); I(j)=temp; temp=J(i); J(i)=J(j); J(j)=temp; end end
end %delete some observation points, avoid 'noisy' data i=1; while (i<length(fi)) if abs(fi(i)-fi(i+1))<0.02 fi(i+1)=[]; I(i+1)=[]; J(i+1)=[]; else i=i+1; end end eps=[epsrb epsrs]; sig=[sigrb sigrs]; mu=[1.0 1.0]; sigstar=[0.0 0.0]; %*********************************************************************** % Main Grid Coefficients %*********************************************************************** ca=(1.0-(dt*sig)./(2.0*epsz*eps))./(1.0+(dt*sig)./(2.0*epsz*eps)); cb=(dt./epsz./eps./delta)./(1.0+(dt*sig)./(2.0*epsz*eps)); da=(1.0-(sigstar*dt)./(2.0*muz*mu))./(1.0+(dt*sigstar)./(2.0*muz*mu)); db=(dt./muz./mu./delta)./(1.0+(dt*sigstar)./(2.0*muz*mu)); %*********************************************************************** % UPML Coefficients %*********************************************************************** %Update coefficients in PML region R0=exp(-16); %reflection error m=4; %order of polynomial grading d=upml*delta; %thickness of pml slabs; eta=sqrt(muz/epsrb/epsz); %x-direction sigxmax=-(m+1)*log(R0/100)/2/d/eta; kxmax=1.0; sigfactor=sigxmax/(m+1)/(d^m)/delta; kfactor=(kxmax-1)/(m+1)/(d^m)/delta; for i=1:upml %coefficients on the boundary x2=(upml-i+1.5)*delta; x1=(upml-i+0.5)*delta; sigx=(x2^(m+1)-x1^(m+1))*sigfactor; kx=1+(x2^(m+1)-x1^(m+1))*kfactor; C1=(2*epsrb*epsz*kx-sigx*dt)/(2*epsrb*epsz*kx+sigx*dt); C2=(2*epsrb*epsz*dt)/(2*epsrb*epsz*kx+sigx*dt);
D5=(2*epsrb*epsz*kx+sigx*dt); D6=(2*epsrb*epsz*kx-sigx*dt); C1ez(i,:)=C1; C1ez(ie_tot-i+1,:)=C1; C2ez(i,:)=C2; C2ez(ie_tot-i+1,:)=C2; D5hx(i,:)=D5; D5hx(ie_tot-i+1,:)=D5; D6hx(i,:)=D6; D6hx(ie_tot-i+1,:)=D6; %coefficients in the center x2=(upml-i+1)*delta; x1=(upml-i)*delta; sigx=(x2^(m+1)-x1^(m+1))*sigfactor; kx=1+(x2^(m+1)-x1^(m+1))*kfactor; D3=(2*epsrb*epsz*kx-sigx*dt)/(2*epsrb*epsz*kx+sigx*dt); D4=1.0/(2*epsrb*epsz*kx+sigx*dt)/muz; D3hy(i,:)=D3; D3hy(ih_tot-i+1,:)=D3; D4hy(i,:)=D4; D4hy(ih_tot-i+1,:)=D4; end % Model PEC walls C1ez(1,:)=-1.0; C1ez(ie_tot,:)=-1.0; C2ez(1,:)=0.0; C2ez(ie_tot,:)=0.0; %y-direction sigymax=-(m+1)*log(R0/100)/2/d/eta; kymax=1.0; sigfactor=sigymax/(m+1)/(d^m)/delta; kfactor=(kymax-1)/(m+1)/(d^m)/delta; for j=1:upml %coefficients on the boundary y2=(upml-j+1.5)*delta; y1=(upml-j+0.5)*delta; sigy=(y2^(m+1)-y1^(m+1))*sigfactor; ky=1+(y2^(m+1)-y1^(m+1))*kfactor; C3=(2*epsrb*epsz*ky-sigy*dt)/(2*epsrb*epsz*ky+sigy*dt); C4=1.0/(2*epsrb*epsz*ky+sigy*dt)/epsrb/epsz; D5=(2*epsrb*epsz*ky+sigy*dt); D6=(2*epsrb*epsz*ky-sigy*dt); C3ez(:,j)=C3;
C3ez(:,je_tot-j+1)=C3; C4ez(:,j)=C4; C4ez(:,je_tot-j+1)=C4; D5hy(:,j)=D5; D5hy(:,je_tot-j+1)=D5; D6hy(:,j)=D6; D6hy(:,je_tot-j+1)=D6; %coefficients in the center y2=(upml-j+1)*delta; y1=(upml-j)*delta; sigy=(y2^(m+1)-y1^(m+1))*sigfactor; ky=1+(y2^(m+1)-y1^(m+1))*kfactor; D1=(2*epsrb*epsz*ky-sigy*dt)/(2*epsrb*epsz*ky+sigy*dt); D2=2*epsrb*epsz*dt/(2*epsrb*epsz*ky+sigy*dt); D1hx(:,j)=D1; D1hx(:,jh_tot-j+1)=D1; D2hx(:,j)=D2; D2hx(:,jh_tot-j+1)=D2; end % Model PEC walls C3ez(:,1)=-1.0; C3ez(:,je_tot)=-1.0; C4ez(:,1)=0.0; C4ez(:,je_tot)=0.0; %*********************************************************************** % BEGIN TIME-STEPPING LOOP %*********************************************************************** ez_obs(nmax,size(I,2))=0.0; ez_boundary=zeros(nmax,length(Id)); %store ez field on boundary at every time step hx_boundary=zeros(nmax,length(Id)); %store ez field on boundary at every time step hy_boundary=zeros(nmax,length(Id)); %store ez field on boundary at every time step ftr(1,size(I,2))=0.0; fti(1,size(I,2))=0.0; E_i=0; for n=1:nmax %*********************************************************************** % Update electric fields %*********************************************************************** es=ez; ez(upml+1:ie_tot-upml,upml+1:je_tot-upml)=ca(MEDIAez(upml+1:ie_tot-upml,upml+1:je_tot-upml)).*ez(upml+1:ie_tot-upml,upml+1:je_tot-upml)+... cb(MEDIAez(upml+1:ie_tot-upml,upml+1:je_tot-upml)).*... (hy(upml+1:ie_tot-upml,upml+1:je_tot-upml)-hy(upml:ih_tot-upml,upml+1:je_tot-upml)+...
hx(upml+1:ie_tot-upml,upml:jh_tot-upml)-hx(upml+1:ie_tot-upml,upml+1:je_tot-upml)); ds=dz; dz(2:upml,2:je_tot-1)=C1ez(2:upml,2:je_tot-1).*dz(2:upml,2:je_tot-1)+... C2ez(2:upml,2:je_tot-1)./delta.*((hy(2:upml,2:je_tot-1)-hy(1:upml-1,2:je_tot-1))-... (hx(2:upml,2:je_tot-1)-hx(2:upml,1:je_tot-2))); ez(2:upml,2:je_tot-1)=C3ez(2:upml,2:je_tot-1).*es(2:upml,2:je_tot-1)+... C4ez(2:upml,2:je_tot-1).*(C5ez(2:upml,2:je_tot-1).*dz(2:upml,2:je_tot-1)-C6ez(2:upml,2:je_tot-1).*ds(2:upml,2:je_tot-1)); dz(upml+1:ie_tot-1,2:upml)=C1ez(upml+1:ie_tot-1,2:upml).*ds(upml+1:ie_tot-1,2:upml)+... C2ez(upml+1:ie_tot-1,2:upml)./delta.*((hy(upml+1:ie_tot-1,2:upml)-hy(upml:ie_tot-2,2:upml))-... (hx(upml+1:ie_tot-1,2:upml)-hx(upml+1:ie_tot-1,1:upml-1))); ez(upml+1:ie_tot-1,2:upml)=C3ez(upml+1:ie_tot-1,2:upml).*es(upml+1:ie_tot-1,2:upml)+... C4ez(upml+1:ie_tot-1,2:upml).*(C5ez(upml+1:ie_tot-1,2:upml).*dz(upml+1:ie_tot-1,2:upml)-... C6ez(upml+1:ie_tot-1,2:upml).*ds(upml+1:ie_tot-1,2:upml)); dz(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)=C1ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*ds(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)+... C2ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)./delta.*... ((hy(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)-hy(upml:ie_tot-2,je_tot-upml+1:je_tot-1))-... (hx(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)-hx(upml+1:ie_tot-1,je_tot-upml:je_tot-2))); ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)=C3ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*es(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)+... C4ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*... (C5ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*dz(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)-... C6ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*ds(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)); dz(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)=C1ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*ds(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)+... C2ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)./delta.*... ((hy(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)-hy(ie_tot-upml:ie_tot-2,upml+1:je_tot-upml))-... (hx(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)-hx(ie_tot-upml+1:ie_tot-1,upml:je_tot-upml-1))); ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)=C3ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*es(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)+... C4ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*... (C5ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*dz(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)-...
C6ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*ds(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)); ez(i_src,j_src)=ez(i_src,j_src)-cb(MEDIAez(i_src,j_src))*delta*exp(-((n-n0)/ndecay)^2)*sin(omega*(n-n0)*dt); %*********************************************************************** % Update magnetic fields %*********************************************************************** hs=hx; hx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)=da(MEDIAhx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)).*hx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)+... db(MEDIAhx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)).*(ez(upml+1:ie_tot-upml,upml+1:jh_tot-upml)-ez(upml+1:ie_tot-upml,upml+2:je_tot-upml)); bs=bx; bx(1:upml,:)=D1hx(1:upml,:).*bx(1:upml,:)-D2hx(1:upml,:).*(ez(1:upml,2:je_tot)-ez(1:upml,1:jh_tot))./delta; hx(1:upml,:)=D3hx(1:upml,:).*hx(1:upml,:)+D4hx(1:upml,:).*(D5hx(1:upml,:).*bx(1:upml,:)-D6hx(1:upml,:).*bs(1:upml,:)); bx(upml+1:ie_tot,1:upml)=D1hx(upml+1:ie_tot,1:upml).*bs(upml+1:ie_tot,1:upml)-... D2hx(upml+1:ie_tot,1:upml).*(ez(upml+1:ie_tot,2:upml+1)-ez(upml+1:ie_tot,1:upml))./delta; hx(upml+1:ie_tot,1:upml)=D3hx(upml+1:ie_tot,1:upml).*hs(upml+1:ie_tot,1:upml)+D4hx(upml+1:ie_tot,1:upml).*... (D5hx(upml+1:ie_tot,1:upml).*bx(upml+1:ie_tot,1:upml)-D6hx(upml+1:ie_tot,1:upml).*bs(upml+1:ie_tot,1:upml)); bx(ie_tot-upml+1:ie_tot,upml+1:jh_tot)=D1hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*bs(ie_tot-upml+1:ie_tot,upml+1:jh_tot)-... D2hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*(ez(ie_tot-upml+1:ie_tot,upml+2:jh_tot+1)-ez(ie_tot-upml+1:ie_tot,upml+1:jh_tot))./delta; hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot)=D3hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*... hs(ie_tot-upml+1:ie_tot,upml+1:jh_tot)+D4hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*... (D5hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*bx(ie_tot-upml+1:ie_tot,upml+1:jh_tot)-... D6hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*bs(ie_tot-upml+1:ie_tot,upml+1:jh_tot)); bx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)=D1hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*bs(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)-... D2hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*... (ez(upml+1:ie_tot-upml,jh_tot-upml+2:jh_tot+1)-ez(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot))./delta; hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)=D3hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*... hs(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)+D4hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*...
(D5hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*bx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)-... D6hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*bs(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)); hs=hy; hy(upml+1:ih_tot-upml,upml+1:je_tot-upml)=da(MEDIAhy(upml+1:ih_tot-upml,upml+1:je_tot-upml)).*... hy(upml+1:ih_tot-upml,upml+1:je_tot-upml)+db(MEDIAhy(upml+1:ih_tot-upml,upml+1:je_tot-upml)).*... (ez(upml+2:ie_tot-upml,upml+1:je_tot-upml)-ez(upml+1:ih_tot-upml,upml+1:je_tot-upml)); bs=by; by(1:upml,:)=D1hy(1:upml,:).*by(1:upml,:)-D2hy(1:upml,:).*(-(ez(2:upml+1,1:je_tot)-ez(1:upml,1:je_tot)))./delta; hy(1:upml,:)=D3hy(1:upml,:).*hy(1:upml,:)+D4hy(1:upml,:).*(D5hy(1:upml,:).*by(1:upml,:)-D6hy(1:upml,:).*bs(1:upml,:)); by(upml+1:ih_tot,1:upml)=D1hy(upml+1:ih_tot,1:upml).*bs(upml+1:ih_tot,1:upml)-... D2hy(upml+1:ih_tot,1:upml).*(-(ez(upml+2:ih_tot+1,1:upml)-ez(upml+1:ih_tot,1:upml)))./delta; hy(upml+1:ih_tot,1:upml)=D3hy(upml+1:ih_tot,1:upml).*hs(upml+1:ih_tot,1:upml)+D4hy(upml+1:ih_tot,1:upml).*... (D5hy(upml+1:ih_tot,1:upml).*by(upml+1:ih_tot,1:upml)-D6hy(upml+1:ih_tot,1:upml).*bs(upml+1:ih_tot,1:upml)); by(ih_tot-upml+1:ih_tot,upml+1:je_tot)=D1hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*bs(ih_tot-upml+1:ih_tot,upml+1:je_tot)-... D2hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*(-(ez(ih_tot-upml+2:ih_tot+1,upml+1:je_tot)-ez(ih_tot-upml+1:ih_tot,upml+1:je_tot)))./delta; hy(ih_tot-upml+1:ih_tot,upml+1:je_tot)=D3hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*hs(ih_tot-upml+1:ih_tot,upml+1:je_tot)+... D4hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*(D5hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*by(ih_tot-upml+1:ih_tot,upml+1:je_tot)-... D6hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*bs(ih_tot-upml+1:ih_tot,upml+1:je_tot)); by(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)=D1hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*bs(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)-... D2hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*... (-(ez(upml+2:ih_tot-upml+1,je_tot-upml+1:je_tot)-ez(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)))./delta; hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)=D3hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*hs(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)+... D4hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*... (D5hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*by(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)-...
D6hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*bs(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)); %*********************************************************************** % Get obseverations, compute phasor quantities(Ei) %*********************************************************************** for i=1:size(I,2) ez_obs(n,i)=ez(I(i),J(i)); ftr(i)=ftr(i)+ez_obs(n,i)*cos(omega*n*dt); fti(i)=fti(i)+ez_obs(n,i)*sin(omega*n*dt); end E_i=E_i+ez(i_cen,j_cen)*(cos(omega*n*dt)-1j*sin(omega*n*dt)); for i=1:length(Id) ez_boundary(n,i)=ez(Id(i),Jd(i)); hx_boundary(n,i)=hx(Id(i),Jd(i)); hy_boundary(n,i)=hy(Id(i),Jd(i)); end end Ez_b=(ftr-1j*fti); 3. scatter_UPML.m %*********************************************************************** % 2D scatter problem, with scatter. the scatter is put in the center of % the grid. and it's diameter is 4mm. %*********************************************************************** % % Program author: Fuqiang Gao % Department of Electrical and Computer Engineering % University of Wisconsin-Madison % 1415 Engineering Drive % Madison, WI 53706-1691 % [email protected] % %*********************************************************************** function [ez_boundarys ez_obs]=scatter_UPML(nmax) %*********************************************************************** % Fundamental constants %*********************************************************************** cc=2.99792458e8; %speed of light in free space muz=4.0*pi*1.0e-7; %permeability of free space epsz=1.0/(cc*cc*muz); %permittivity of free space % nmax=1000; %***********************************************************************
% Source Parameters %*********************************************************************** epsrb=44.0; sigrb=0; epsrs=50.0; sigrs=0; %Parameter for lossy case % epsrb=44.0; % sigrb=4.162; % epsrs=50.0; % sigrs=4.91; freq=5e9; %frequency omega=2*pi*freq; %*********************************************************************** % Grid parameters %*********************************************************************** beta=omega*sqrt(muz*epsz*epsrb)*sqrt(1/2*(sqrt(1+(sigrb/omega/epsz/epsrb)^2)+1)); lamda=2*pi/beta; delta=2.5e-4; %space increment in 2-D lattice dt=delta*sqrt(epsrb)/(2.0*cc); %time increment ie=round((0.25)/delta); je=round((0.25)/delta); ih=ie-1; jh=je-1; upml=10; ie_tot=ie+2*upml; je_tot=je+2*upml; ih_tot=ie_tot-1; jh_tot=je_tot-1; i_cen=round(ie_tot/2); %center location j_cen=round(je_tot/2); i_src=i_cen-round(0.075/delta); %source location j_src=j_cen; x=linspace(delta,ih_tot*delta,ih_tot); y=linspace(delta,jh_tot*delta,jh_tot); fmax=1e10; tau=3e-10;%1/(pi*(fmax-freq)); ndecay=tau/dt; n0=3*ndecay; %*********************************************************************** % Material parameters %*********************************************************************** MEDIAez=ones(ie_tot,je_tot); MEDIAhx=ones(ie_tot,jh_tot); MEDIAhy=ones(ih_tot,je_tot);
ez(ie_tot,je_tot)=0.0; dz=ez; hx(ie_tot,jh_tot)=0.0; bx=hx; hy(ih_tot,je_tot)=0.0; by=hy; C1ez=ones(size(ez)); C2ez=ones(size(ez)); C3ez=ones(size(ez)); C4ez=ones(size(ez)); C5ez=ones(size(ez)); C6ez=ones(size(ez)); D1hx=ones(size(hx)); D2hx=ones(size(hx)); D3hx=ones(size(hx)); D4hx=ones(size(hx)); D5hx=ones(size(hx)); D6hx=ones(size(hx)); D1hy=ones(size(hy)); D2hy=ones(size(hy)); D3hy=ones(size(hy)); D4hy=ones(size(hy)); D5hy=ones(size(hy)); D6hy=ones(size(hy)); C1=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt); C2=2*epsrb*epsz*dt/(2*epsrb*epsz*1+sigrb*dt); C3=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt); C4=1.0/(2*epsrb*epsz*1+sigrb*dt)/(epsrb*epsz); C5=2.0*epsrb*epsz; C6=2.0*epsrb*epsz; D1x=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt); D2x=2*epsrb*epsz*dt/(2*epsrb*epsz*1+sigrb*dt); D3x=1.0; D4x=1.0/(2*epsrb*epsz)/muz; D5x=2.0*epsrb*epsz+sigrb*dt; D6x=2.0*epsrb*epsz-sigrb*dt; D1y=1.0; D2y=dt; D3y=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt); D4y=1.0/(2*epsrb*epsz+sigrb*dt)/muz; D5y=2.0*epsrb*epsz+sigrb*dt;
D6y=2.0*epsrb*epsz-sigrb*dt; %Assign main domain parameters to whole region, then modify the PML region C1ez=C1*C1ez; C2ez=C2*C2ez; C3ez=C3*C3ez; C4ez=C4*C4ez; C5ez=C5*C5ez; C6ez=C6*C6ez; D1hx=D1x*D1hx; D2hx=D2x*D2hx; D3hx=D3x*D3hx; D4hx=D4x*D4hx; D5hx=D5x*D5hx; D6hx=D6x*D6hx; D1hy=D1y*D1hy; D2hy=D2y*D2hy; D3hy=D3y*D3hy; D4hy=D4y*D4hy; D5hy=D5y*D5hy; D6hy=D6y*D6hy; %assing media pointers to scatter for i=1:ie_tot for j=1:je_tot if ((i-i_cen)^2+(j-j_cen)^2)<=(0.002/delta)^2 %scatter MEDIAez(i,j)=2; MEDIAhx(i,j)=2; MEDIAhy(i,j)=2; end end end %Get index of observation points I=ones(1,2); J=ones(1,2); index=1; for i=1:ie_tot for j=1:je_tot if (((i-i_cen)^2+(j-j_cen)^2)>=(0.04/delta)^2 && ((i-i_cen)^2+(j-j_cen)^2)<(0.04/delta+1)^2) I(index)=i; J(index)=j; index=index+1; end; end end
%Get index of source locations Id=ones(1,2); Jd=ones(1,2); index=1; for i=1:ie_tot for j=1:je_tot if (((i-i_cen)^2+(j-j_cen)^2)>(0.002/delta+0.4)^2 && ((i-i_cen)^2+(j-j_cen)^2)<(0.002/delta+1.4)^2) Id(index)=i; Jd(index)=j; index=index+1; end; end end source=[i_src-i_cen 0]; phi=ones(1,size(Id,2)); for i=1:size(Id,2) a=[Id(i)-i_cen Jd(i)-j_cen]; l=sqrt(source(1)^2+source(2)^2)*sqrt(a(1)^2+a(2)^2); cfi=dot(a,source)/l; phi(i)=acos(cfi); if a(2)<0 phi(i)=2*pi-phi(i); end end for i=1:length(phi)-1 for j=i+1:length(phi) if phi(j)<phi(i) temp=phi(i); phi(i)=phi(j); phi(j)=temp; temp=Id(i); Id(i)=Id(j); Id(j)=temp; temp=Jd(i); Jd(i)=Jd(j); Jd(j)=temp; end end end eps=[epsrb epsrs 1/2*(epsrb+epsrs)]; sig=[sigrb sigrs 1/2*(sigrs+sigrb)]; mu=[1.0 1.0 1.0]; sigstar=[0.0 0.0 0.0];
%*********************************************************************** % Main Grid Coefficients %*********************************************************************** ca=(1.0-(dt*sig)./(2.0*epsz*eps))./(1.0+(dt*sig)./(2.0*epsz*eps)); cb=(dt./epsz./eps./delta)./(1.0+(dt*sig)./(2.0*epsz*eps)); da=(1.0-(sigstar*dt)./(2.0*muz*mu))./(1.0+(dt*sigstar)./(2.0*muz*mu)); db=(dt./muz./mu./delta)./(1.0+(dt*sigstar)./(2.0*muz*mu)); %*********************************************************************** % UPML Coefficients %*********************************************************************** %Update coefficients in PML region R0=exp(-16); %reflection error m=4; %order of polynomial grading d=upml*delta; %thickness of pml slabs; eta=sqrt(muz/epsrb/epsz); %x-direction sigxmax=-(m+1)*log(R0/100)/2/d/eta; kxmax=1.0; sigfactor=sigxmax/(m+1)/(d^m)/delta; kfactor=(kxmax-1)/(m+1)/(d^m)/delta; for i=1:upml %coefficients on the boundary x2=(upml-i+1.5)*delta; x1=(upml-i+0.5)*delta; sigx=(x2^(m+1)-x1^(m+1))*sigfactor; kx=1+(x2^(m+1)-x1^(m+1))*kfactor; C1=(2*epsrb*epsz*kx-sigx*dt)/(2*epsrb*epsz*kx+sigx*dt); C2=(2*epsrb*epsz*dt)/(2*epsrb*epsz*kx+sigx*dt); D5=(2*epsrb*epsz*kx+sigx*dt); D6=(2*epsrb*epsz*kx-sigx*dt); C1ez(i,:)=C1; C1ez(ie_tot-i+1,:)=C1; C2ez(i,:)=C2; C2ez(ie_tot-i+1,:)=C2; D5hx(i,:)=D5; D5hx(ie_tot-i+1,:)=D5; D6hx(i,:)=D6; D6hx(ie_tot-i+1,:)=D6; %coefficients in the center x2=(upml-i+1)*delta; x1=(upml-i)*delta; sigx=(x2^(m+1)-x1^(m+1))*sigfactor; kx=1+(x2^(m+1)-x1^(m+1))*kfactor;
D3=(2*epsrb*epsz*kx-sigx*dt)/(2*epsrb*epsz*kx+sigx*dt); D4=1.0/(2*epsrb*epsz*kx+sigx*dt)/muz; D3hy(i,:)=D3; D3hy(ih_tot-i+1,:)=D3; D4hy(i,:)=D4; D4hy(ih_tot-i+1,:)=D4; end % Model PEC walls C1ez(1,:)=-1.0; C1ez(ie_tot,:)=-1.0; C2ez(1,:)=0.0; C2ez(ie_tot,:)=0.0; %y-direction sigymax=-(m+1)*log(R0/100)/2/d/eta; kymax=1.0; sigfactor=sigymax/(m+1)/(d^m)/delta; kfactor=(kymax-1)/(m+1)/(d^m)/delta; for j=1:upml %coefficients on the boundary y2=(upml-j+1.5)*delta; y1=(upml-j+0.5)*delta; sigy=(y2^(m+1)-y1^(m+1))*sigfactor; ky=1+(y2^(m+1)-y1^(m+1))*kfactor; C3=(2*epsrb*epsz*ky-sigy*dt)/(2*epsrb*epsz*ky+sigy*dt); C4=1.0/(2*epsrb*epsz*ky+sigy*dt)/epsrb/epsz; D5=(2*epsrb*epsz*ky+sigy*dt); D6=(2*epsrb*epsz*ky-sigy*dt); C3ez(:,j)=C3; C3ez(:,je_tot-j+1)=C3; C4ez(:,j)=C4; C4ez(:,je_tot-j+1)=C4; D5hy(:,j)=D5; D5hy(:,je_tot-j+1)=D5; D6hy(:,j)=D6; D6hy(:,je_tot-j+1)=D6; %coefficients in the center y2=(upml-j+1)*delta; y1=(upml-j)*delta; sigy=(y2^(m+1)-y1^(m+1))*sigfactor; ky=1+(y2^(m+1)-y1^(m+1))*kfactor; D1=(2*epsrb*epsz*ky-sigy*dt)/(2*epsrb*epsz*ky+sigy*dt); D2=2*epsrb*epsz*dt/(2*epsrb*epsz*ky+sigy*dt); D1hx(:,j)=D1; D1hx(:,jh_tot-j+1)=D1; D2hx(:,j)=D2;
D2hx(:,jh_tot-j+1)=D2; end %*********************************************************************** % BEGIN TIME-STEPPING LOOP %*********************************************************************** ez_obs(nmax,size(I,2))=0.0; ez_boundarys=zeros(nmax,length(Id)); %store ez field on boundary at every time step hx_boundarys=zeros(nmax,length(Id)); %store ez field on boundary at every time step hy_boundarys=zeros(nmax,length(Id)); %store ez field on boundary at every time step Je=0.0; for n=1:nmax %*********************************************************************** % Update electric fields %*********************************************************************** es=ez; ez(upml+1:ie_tot-upml,upml+1:je_tot-upml)=ca(MEDIAez(upml+1:ie_tot-upml,upml+1:je_tot-upml)).*ez(upml+1:ie_tot-upml,upml+1:je_tot-upml)+... cb(MEDIAez(upml+1:ie_tot-upml,upml+1:je_tot-upml)).*... (hy(upml+1:ie_tot-upml,upml+1:je_tot-upml)-hy(upml:ih_tot-upml,upml+1:je_tot-upml)+... hx(upml+1:ie_tot-upml,upml:jh_tot-upml)-hx(upml+1:ie_tot-upml,upml+1:je_tot-upml)); ds=dz; dz(2:upml,2:je_tot-1)=C1ez(2:upml,2:je_tot-1).*dz(2:upml,2:je_tot-1)+... C2ez(2:upml,2:je_tot-1)./delta.*((hy(2:upml,2:je_tot-1)-hy(1:upml-1,2:je_tot-1))-... (hx(2:upml,2:je_tot-1)-hx(2:upml,1:je_tot-2))); ez(2:upml,2:je_tot-1)=C3ez(2:upml,2:je_tot-1).*es(2:upml,2:je_tot-1)+... C4ez(2:upml,2:je_tot-1).*(C5ez(2:upml,2:je_tot-1).*dz(2:upml,2:je_tot-1)-C6ez(2:upml,2:je_tot-1).*ds(2:upml,2:je_tot-1)); dz(upml+1:ie_tot-1,2:upml)=C1ez(upml+1:ie_tot-1,2:upml).*ds(upml+1:ie_tot-1,2:upml)+... C2ez(upml+1:ie_tot-1,2:upml)./delta.*((hy(upml+1:ie_tot-1,2:upml)-hy(upml:ie_tot-2,2:upml))-... (hx(upml+1:ie_tot-1,2:upml)-hx(upml+1:ie_tot-1,1:upml-1))); ez(upml+1:ie_tot-1,2:upml)=C3ez(upml+1:ie_tot-1,2:upml).*es(upml+1:ie_tot-1,2:upml)+... C4ez(upml+1:ie_tot-1,2:upml).*(C5ez(upml+1:ie_tot-1,2:upml).*dz(upml+1:ie_tot-1,2:upml)-... C6ez(upml+1:ie_tot-1,2:upml).*ds(upml+1:ie_tot-1,2:upml)); dz(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)=C1ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*ds(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)+... C2ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)./delta.*...
((hy(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)-hy(upml:ie_tot-2,je_tot-upml+1:je_tot-1))-... (hx(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)-hx(upml+1:ie_tot-1,je_tot-upml:je_tot-2))); ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)=C3ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*es(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)+... C4ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*... (C5ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*dz(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)-... C6ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*ds(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)); dz(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)=C1ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*ds(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)+... C2ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)./delta.*... ((hy(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)-hy(ie_tot-upml:ie_tot-2,upml+1:je_tot-upml))-... (hx(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)-hx(ie_tot-upml+1:ie_tot-1,upml:je_tot-upml-1))); ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)=C3ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*es(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)+... C4ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*... (C5ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*dz(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)-... C6ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*ds(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)); ez(i_src,j_src)=ez(i_src,j_src)-cb(MEDIAez(i_src,j_src))*delta*exp(-((n-n0)/ndecay)^2)*sin(omega*(n-n0)*dt); %*********************************************************************** % Update magnetic fields %*********************************************************************** hs=hx; hx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)=da(MEDIAhx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)).*hx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)+... db(MEDIAhx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)).*(ez(upml+1:ie_tot-upml,upml+1:jh_tot-upml)-ez(upml+1:ie_tot-upml,upml+2:je_tot-upml)); bs=bx; bx(1:upml,:)=D1hx(1:upml,:).*bx(1:upml,:)-D2hx(1:upml,:).*(ez(1:upml,2:je_tot)-ez(1:upml,1:jh_tot))./delta; hx(1:upml,:)=D3hx(1:upml,:).*hx(1:upml,:)+D4hx(1:upml,:).*(D5hx(1:upml,:).*bx(1:upml,:)-D6hx(1:upml,:).*bs(1:upml,:)); bx(upml+1:ie_tot,1:upml)=D1hx(upml+1:ie_tot,1:upml).*bs(upml+1:ie_tot,1:upml)-... D2hx(upml+1:ie_tot,1:upml).*(ez(upml+1:ie_tot,2:upml+1)-ez(upml+1:ie_tot,1:upml))./delta;
hx(upml+1:ie_tot,1:upml)=D3hx(upml+1:ie_tot,1:upml).*hs(upml+1:ie_tot,1:upml)+D4hx(upml+1:ie_tot,1:upml).*... (D5hx(upml+1:ie_tot,1:upml).*bx(upml+1:ie_tot,1:upml)-D6hx(upml+1:ie_tot,1:upml).*bs(upml+1:ie_tot,1:upml)); bx(ie_tot-upml+1:ie_tot,upml+1:jh_tot)=D1hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*bs(ie_tot-upml+1:ie_tot,upml+1:jh_tot)-... D2hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*(ez(ie_tot-upml+1:ie_tot,upml+2:jh_tot+1)-ez(ie_tot-upml+1:ie_tot,upml+1:jh_tot))./delta; hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot)=D3hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*... hs(ie_tot-upml+1:ie_tot,upml+1:jh_tot)+D4hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*... (D5hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*bx(ie_tot-upml+1:ie_tot,upml+1:jh_tot)-... D6hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*bs(ie_tot-upml+1:ie_tot,upml+1:jh_tot)); bx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)=D1hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*bs(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)-... D2hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*... (ez(upml+1:ie_tot-upml,jh_tot-upml+2:jh_tot+1)-ez(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot))./delta; hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)=D3hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*... hs(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)+D4hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*... (D5hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*bx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)-... D6hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*bs(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)); hs=hy; hy(upml+1:ih_tot-upml,upml+1:je_tot-upml)=da(MEDIAhy(upml+1:ih_tot-upml,upml+1:je_tot-upml)).*... hy(upml+1:ih_tot-upml,upml+1:je_tot-upml)+db(MEDIAhy(upml+1:ih_tot-upml,upml+1:je_tot-upml)).*... (ez(upml+2:ie_tot-upml,upml+1:je_tot-upml)-ez(upml+1:ih_tot-upml,upml+1:je_tot-upml)); bs=by; by(1:upml,:)=D1hy(1:upml,:).*by(1:upml,:)-D2hy(1:upml,:).*(-(ez(2:upml+1,1:je_tot)-ez(1:upml,1:je_tot)))./delta; hy(1:upml,:)=D3hy(1:upml,:).*hy(1:upml,:)+D4hy(1:upml,:).*(D5hy(1:upml,:).*by(1:upml,:)-D6hy(1:upml,:).*bs(1:upml,:)); by(upml+1:ih_tot,1:upml)=D1hy(upml+1:ih_tot,1:upml).*bs(upml+1:ih_tot,1:upml)-... D2hy(upml+1:ih_tot,1:upml).*(-(ez(upml+2:ih_tot+1,1:upml)-ez(upml+1:ih_tot,1:upml)))./delta; hy(upml+1:ih_tot,1:upml)=D3hy(upml+1:ih_tot,1:upml).*hs(upml+1:ih_tot,1:upml)+D4hy(upml+1:ih_tot,1:upml).*...
(D5hy(upml+1:ih_tot,1:upml).*by(upml+1:ih_tot,1:upml)-D6hy(upml+1:ih_tot,1:upml).*bs(upml+1:ih_tot,1:upml)); by(ih_tot-upml+1:ih_tot,upml+1:je_tot)=D1hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*bs(ih_tot-upml+1:ih_tot,upml+1:je_tot)-... D2hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*(-(ez(ih_tot-upml+2:ih_tot+1,upml+1:je_tot)-ez(ih_tot-upml+1:ih_tot,upml+1:je_tot)))./delta; hy(ih_tot-upml+1:ih_tot,upml+1:je_tot)=D3hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*hs(ih_tot-upml+1:ih_tot,upml+1:je_tot)+... D4hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*(D5hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*by(ih_tot-upml+1:ih_tot,upml+1:je_tot)-... D6hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*bs(ih_tot-upml+1:ih_tot,upml+1:je_tot)); by(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)=D1hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*bs(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)-... D2hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*... (-(ez(upml+2:ih_tot-upml+1,je_tot-upml+1:je_tot)-ez(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)))./delta; hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)=D3hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*hs(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)+... D4hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*... (D5hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*by(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)-... D6hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*bs(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)); for i=1:size(I,2) ez_obs(n,i)=ez(I(i),J(i)); end for i=1:length(Id) ez_boundarys(n,i)=ez(Id(i),Jd(i)); hx_boundarys(n,i)=hx(Id(i),Jd(i)); hy_boundarys(n,i)=hy(Id(i),Jd(i)); end end
4. sbc.m
function [fi Ed ez_obs Jz rc]=sbc(nmax,eoz)
%***********************************************************************
% Fundamental constants
%***********************************************************************
cc=2.99792458e8; %speed of light in free space
muz=4.0*pi*1.0e-7; %permeability of free space
epsz=1.0/(cc*cc*muz); %permittivity of free space
% nmax=1000;
%***********************************************************************
% Source Parameters
%***********************************************************************
epsrb=44.0;
sigrb=0;
epsrs=50.0;
sigrs=0;
%Parameter for lossy case
% epsrb=44.0;
% sigrb=4.162;
% epsrs=50.0;
% sigrs=4.91;
freq=5e9; %frequency
omega=2*pi*freq;
%***********************************************************************
% Grid parameters
%***********************************************************************
beta=omega*sqrt(muz*epsz*epsrb)*sqrt(1/2*(sqrt(1+(sigrb/omega/epsz/epsrb)^2)+1));
lamda=2*pi/beta;
delta=2.5e-4;%2.5e-4;%lamda/8.9/10; %space increment in 2-D lattice
dt=delta*sqrt(epsrb)/(2.0*cc); %time increment
ie=round((0.25)/delta);
je=round((0.25)/delta);
ih=ie-1;
jh=je-1;
upml=10;
ie_tot=ie+2*upml;
je_tot=je+2*upml;
ih_tot=ie_tot-1;
jh_tot=je_tot-1;
i_cen=round(ie_tot/2); %center location
j_cen=round(je_tot/2);
i_src=i_cen-round(0.075/delta); %source location
j_src=j_cen;
x=linspace(delta,ih_tot*delta,ih_tot);
y=linspace(delta,jh_tot*delta,jh_tot);
fmax=1e10;
tau=3e-10;%1/(pi*(fmax-freq));
ndecay=tau/dt;
n0=3*ndecay;
%***********************************************************************
% Material parameters
%***********************************************************************
MEDIAez=ones(ie_tot,je_tot);
MEDIAhx=ones(ie_tot,jh_tot);
MEDIAhy=ones(ih_tot,je_tot);
ez(ie_tot,je_tot)=0.0;
dz=ez;
hx(ie_tot,jh_tot)=0.0;
bx=hx;
hy(ih_tot,je_tot)=0.0;
by=hy;
C1ez=ones(size(ez));
C2ez=ones(size(ez));
C3ez=ones(size(ez));
C4ez=ones(size(ez));
C5ez=ones(size(ez));
C6ez=ones(size(ez));
D1hx=ones(size(hx));
D2hx=ones(size(hx));
D3hx=ones(size(hx));
D4hx=ones(size(hx));
D5hx=ones(size(hx));
D6hx=ones(size(hx));
D1hy=ones(size(hy));
D2hy=ones(size(hy));
D3hy=ones(size(hy));
D4hy=ones(size(hy));
D5hy=ones(size(hy));
D6hy=ones(size(hy));
C1=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt);
C2=2*epsrb*epsz*dt/(2*epsrb*epsz*1+sigrb*dt);
C3=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt);
C4=1.0/(2*epsrb*epsz*1+sigrb*dt)/(epsrb*epsz);
C5=2.0*epsrb*epsz;
C6=2.0*epsrb*epsz;
D1x=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt);
D2x=2*epsrb*epsz*dt/(2*epsrb*epsz*1+sigrb*dt);
D3x=1.0;
D4x=1.0/(2*epsrb*epsz)/muz;
D5x=2.0*epsrb*epsz+sigrb*dt;
D6x=2.0*epsrb*epsz-sigrb*dt;
D1y=1.0;
D2y=dt;
D3y=(2*epsrb*epsz*1-sigrb*dt)/(2*epsrb*epsz*1+sigrb*dt);
D4y=1.0/(2*epsrb*epsz+sigrb*dt)/muz;
D5y=2.0*epsrb*epsz+sigrb*dt;
D6y=2.0*epsrb*epsz-sigrb*dt;
%Assign main domain parameters to whole region, then modify the PML region
C1ez=C1*C1ez;
C2ez=C2*C2ez;
C3ez=C3*C3ez;
C4ez=C4*C4ez;
C5ez=C5*C5ez;
C6ez=C6*C6ez;
D1hx=D1x*D1hx;
D2hx=D2x*D2hx;
D3hx=D3x*D3hx;
D4hx=D4x*D4hx;
D5hx=D5x*D5hx;
D6hx=D6x*D6hx;
D1hy=D1y*D1hy;
D2hy=D2y*D2hy;
D3hy=D3y*D3hy;
D4hy=D4y*D4hy;
D5hy=D5y*D5hy;
D6hy=D6y*D6hy;
%assing media pointers to scatter
for i=1:ie_tot
for j=1:je_tot
if ((i-i_cen)^2+(j-j_cen)^2)<=(0.002/delta)^2 %scatter
MEDIAez(i,j)=2;
MEDIAhx(i,j)=2;
MEDIAhy(i,j)=2;
% elseif ((i-i_cen)^2+(j-j_cen)^2)<=(0.002/delta)^2 && ((i-i_cen)^2+(j-
j_cen)^2)>(0.002/delta-1)^2 %scatter
% MEDIAez(i,j)=3;
% MEDIAhx(i,j)=3;
% MEDIAhy(i,j)=3;
end
end
end
%Get index of observation points
I=ones(1,2);
J=ones(1,2);
index=1;
for i=1:ie_tot
for j=1:je_tot
if (((i-i_cen)^2+(j-j_cen)^2)>=(0.04/delta)^2 && ((i-i_cen)^2+(j-
j_cen)^2)<(0.04/delta+1)^2)
I(index)=i;
J(index)=j;
index=index+1;
end;
end
end
%Get index of source locations
Id=ones(1,2);
Jd=ones(1,2);
index=1;
for i=1:ie_tot
for j=1:je_tot
if (((i-i_cen)^2+(j-j_cen)^2)>(0.002/delta+0.4)^2 && ((i-i_cen)^2+(j-
j_cen)^2)<(0.002/delta+1.4)^2)
Id(index)=i;
Jd(index)=j;
index=index+1;
end
end
end
source=[i_src-i_cen 0];
phi=ones(1,size(Id,2));
for i=1:size(Id,2)
a=[Id(i)-i_cen Jd(i)-j_cen];
l=sqrt(source(1)^2+source(2)^2)*sqrt(a(1)^2+a(2)^2);
cfi=dot(a,source)/l;
phi(i)=acos(cfi);
if a(2)<0
phi(i)=2*pi-phi(i);
end
end
for i=1:length(phi)-1
for j=i+1:length(phi)
if phi(j)<phi(i)
temp=phi(i);
phi(i)=phi(j);
phi(j)=temp;
temp=Id(i);
Id(i)=Id(j);
Id(j)=temp;
temp=Jd(i);
Jd(i)=Jd(j);
Jd(j)=temp;
end
end
end
%***********************************************************************
% compute observation points angle
%***********************************************************************
source=[i_src-i_cen 0];
fi=ones(1,size(I,2));
for i=1:size(I,2)
a=[I(i)-i_cen J(i)-j_cen];
l=sqrt(source(1)^2+source(2)^2)*sqrt(a(1)^2+a(2)^2);
cfi=dot(a,source)/l;
fi(i)=acos(cfi);
if a(2)<0
fi(i)=2*pi-fi(i);
end
end
for i=1:size(fi,2)-1
for j=i+1:size(fi,2)
if fi(j)<fi(i)
temp=fi(i);
fi(i)=fi(j);
fi(j)=temp;
temp=I(i);
I(i)=I(j);
I(j)=temp;
temp=J(i);
J(i)=J(j);
J(j)=temp;
end
end
end
%delete some observation points, avoid 'noisy' data
i=1;
while (i<length(fi))
if abs(fi(i)-fi(i+1))<0.02
fi(i+1)=[];
I(i+1)=[];
J(i+1)=[];
else i=i+1;
end
end
eps=[epsrb epsrs 1/2*(epsrb+epsrs)];
sig=[sigrb sigrs 1/2*(sigrb+sigrs)];
mu=[1.0 1.0 1.0];
sigstar=[0.0 0.0 0.0];
disp=0.45e-3;
rc=-(sqrt(epsrs)-sqrt(epsrb))/(sqrt(epsrs)+sqrt(epsrb));
%***********************************************************************
% Compute Sources
%***********************************************************************
Jz=zeros(nmax-1,length(Id));
for i=2:nmax
Jz(i-1,:)=-(disp.*(epsrs*epsz-epsrb*epsz).*(eoz(i,:)-eoz(i-1,:))./dt+disp*(sigrs-
sigrb)*(eoz(i,:)+eoz(i-1,:))/2);
end
Jz=Jz./delta;
%***********************************************************************
% Main Grid Coefficients
%***********************************************************************
ca=(1.0-(dt*sig)./(2.0*epsz*eps))./(1.0+(dt*sig)./(2.0*epsz*eps));
cb=(dt./epsz./eps./delta)./(1.0+(dt*sig)./(2.0*epsz*eps));
da=(1.0-(sigstar*dt)./(2.0*muz*mu))./(1.0+(dt*sigstar)./(2.0*muz*mu));
db=(dt./muz./mu./delta)./(1.0+(dt*sigstar)./(2.0*muz*mu));
%***********************************************************************
% UPML Coefficients
%***********************************************************************
%Update coefficients in PML region
R0=exp(-16); %reflection error
m=4; %order of polynomial grading
d=upml*delta; %thickness of pml slabs;
eta=sqrt(muz/epsrb/epsz);
%x-direction
sigxmax=-(m+1)*log(R0/100)/2/d/eta;
kxmax=1.0;
sigfactor=sigxmax/(m+1)/(d^m)/delta;
kfactor=(kxmax-1)/(m+1)/(d^m)/delta;
for i=1:upml
%coefficients on the boundary
x2=(upml-i+1.5)*delta;
x1=(upml-i+0.5)*delta;
sigx=(x2^(m+1)-x1^(m+1))*sigfactor;
kx=1+(x2^(m+1)-x1^(m+1))*kfactor;
C1=(2*epsrb*epsz*kx-sigx*dt)/(2*epsrb*epsz*kx+sigx*dt);
C2=(2*epsrb*epsz*dt)/(2*epsrb*epsz*kx+sigx*dt);
D5=(2*epsrb*epsz*kx+sigx*dt);
D6=(2*epsrb*epsz*kx-sigx*dt);
C1ez(i,:)=C1;
C1ez(ie_tot-i+1,:)=C1;
C2ez(i,:)=C2;
C2ez(ie_tot-i+1,:)=C2;
D5hx(i,:)=D5;
D5hx(ie_tot-i+1,:)=D5;
D6hx(i,:)=D6;
D6hx(ie_tot-i+1,:)=D6;
%coefficients in the center
x2=(upml-i+1)*delta;
x1=(upml-i)*delta;
sigx=(x2^(m+1)-x1^(m+1))*sigfactor;
kx=1+(x2^(m+1)-x1^(m+1))*kfactor;
D3=(2*epsrb*epsz*kx-sigx*dt)/(2*epsrb*epsz*kx+sigx*dt);
D4=1.0/(2*epsrb*epsz*kx+sigx*dt)/muz;
D3hy(i,:)=D3;
D3hy(ih_tot-i+1,:)=D3;
D4hy(i,:)=D4;
D4hy(ih_tot-i+1,:)=D4;
end
% Model PEC walls
C1ez(1,:)=-1.0;
C1ez(ie_tot,:)=-1.0;
C2ez(1,:)=0.0;
C2ez(ie_tot,:)=0.0;
%y-direction
sigymax=-(m+1)*log(R0/100)/2/d/eta;
kymax=1.0;
sigfactor=sigymax/(m+1)/(d^m)/delta;
kfactor=(kymax-1)/(m+1)/(d^m)/delta;
for j=1:upml
%coefficients on the boundary
y2=(upml-j+1.5)*delta;
y1=(upml-j+0.5)*delta;
sigy=(y2^(m+1)-y1^(m+1))*sigfactor;
ky=1+(y2^(m+1)-y1^(m+1))*kfactor;
C3=(2*epsrb*epsz*ky-sigy*dt)/(2*epsrb*epsz*ky+sigy*dt);
C4=1.0/(2*epsrb*epsz*ky+sigy*dt)/epsrb/epsz;
D5=(2*epsrb*epsz*ky+sigy*dt);
D6=(2*epsrb*epsz*ky-sigy*dt);
C3ez(:,j)=C3;
C3ez(:,je_tot-j+1)=C3;
C4ez(:,j)=C4;
C4ez(:,je_tot-j+1)=C4;
D5hy(:,j)=D5;
D5hy(:,je_tot-j+1)=D5;
D6hy(:,j)=D6;
D6hy(:,je_tot-j+1)=D6;
%coefficients in the center
y2=(upml-j+1)*delta;
y1=(upml-j)*delta;
sigy=(y2^(m+1)-y1^(m+1))*sigfactor;
ky=1+(y2^(m+1)-y1^(m+1))*kfactor;
D1=(2*epsrb*epsz*ky-sigy*dt)/(2*epsrb*epsz*ky+sigy*dt);
D2=2*epsrb*epsz*dt/(2*epsrb*epsz*ky+sigy*dt);
D1hx(:,j)=D1;
D1hx(:,jh_tot-j+1)=D1;
D2hx(:,j)=D2;
D2hx(:,jh_tot-j+1)=D2;
end
% Model PEC walls
C3ez(:,1)=-1.0;
C3ez(:,je_tot)=-1.0;
C4ez(:,1)=0.0;
C4ez(:,je_tot)=0.0;
%***********************************************************************
% BEGIN TIME-STEPPING LOOP
%***********************************************************************
ez_obs(nmax,size(I,2))=0.0;
ftr(1,size(I,2))=0.0;
fti(1,size(I,2))=0.0;
for n=1:nmax-1
%***********************************************************************
% Update electric fields
%***********************************************************************
es=ez;
ez(upml+1:ie_tot-upml,upml+1:je_tot-upml)=ca(MEDIAez(upml+1:ie_tot-
upml,upml+1:je_tot-upml)).*ez(upml+1:ie_tot-upml,upml+1:je_tot-upml)+...
cb(MEDIAez(upml+1:ie_tot-upml,upml+1:je_tot-upml)).*...
(hy(upml+1:ie_tot-upml,upml+1:je_tot-upml)-hy(upml:ih_tot-upml,upml+1:je_tot-
upml)+...
hx(upml+1:ie_tot-upml,upml:jh_tot-upml)-hx(upml+1:ie_tot-upml,upml+1:je_tot-
upml));
ds=dz;
dz(2:upml,2:je_tot-1)=C1ez(2:upml,2:je_tot-1).*dz(2:upml,2:je_tot-1)+...
C2ez(2:upml,2:je_tot-1)./delta.*((hy(2:upml,2:je_tot-1)-hy(1:upml-1,2:je_tot-1))-...
(hx(2:upml,2:je_tot-1)-hx(2:upml,1:je_tot-2)));
ez(2:upml,2:je_tot-1)=C3ez(2:upml,2:je_tot-1).*es(2:upml,2:je_tot-1)+...
C4ez(2:upml,2:je_tot-1).*(C5ez(2:upml,2:je_tot-1).*dz(2:upml,2:je_tot-1)-
C6ez(2:upml,2:je_tot-1).*ds(2:upml,2:je_tot-1));
dz(upml+1:ie_tot-1,2:upml)=C1ez(upml+1:ie_tot-1,2:upml).*ds(upml+1:ie_tot-1,2:upml)+...
C2ez(upml+1:ie_tot-1,2:upml)./delta.*((hy(upml+1:ie_tot-1,2:upml)-hy(upml:ie_tot-
2,2:upml))-...
(hx(upml+1:ie_tot-1,2:upml)-hx(upml+1:ie_tot-1,1:upml-1)));
ez(upml+1:ie_tot-1,2:upml)=C3ez(upml+1:ie_tot-1,2:upml).*es(upml+1:ie_tot-1,2:upml)+...
C4ez(upml+1:ie_tot-1,2:upml).*(C5ez(upml+1:ie_tot-
1,2:upml).*dz(upml+1:ie_tot-1,2:upml)-...
C6ez(upml+1:ie_tot-1,2:upml).*ds(upml+1:ie_tot-1,2:upml));
dz(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)=C1ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-
1).*ds(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)+...
C2ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)./delta.*...
((hy(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)-hy(upml:ie_tot-2,je_tot-upml+1:je_tot-
1))-...
(hx(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)-hx(upml+1:ie_tot-1,je_tot-upml:je_tot-
2)));
ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)=C3ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-
1).*es(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1)+...
C4ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*...
(C5ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*dz(upml+1:ie_tot-1,je_tot-
upml+1:je_tot-1)-...
C6ez(upml+1:ie_tot-1,je_tot-upml+1:je_tot-1).*ds(upml+1:ie_tot-1,je_tot-
upml+1:je_tot-1));
dz(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)=C1ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-
upml).*ds(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)+...
C2ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)./delta.*...
((hy(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)-hy(ie_tot-upml:ie_tot-
2,upml+1:je_tot-upml))-...
(hx(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)-hx(ie_tot-upml+1:ie_tot-
1,upml:je_tot-upml-1)));
ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)=C3ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-
upml).*es(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml)+...
C4ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*...
(C5ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*dz(ie_tot-upml+1:ie_tot-
1,upml+1:je_tot-upml)-...
C6ez(ie_tot-upml+1:ie_tot-1,upml+1:je_tot-upml).*ds(ie_tot-upml+1:ie_tot-
1,upml+1:je_tot-upml));
for i=1:length(Id)
ez(Id(i),Jd(i))=ez(Id(i),Jd(i))-cb(MEDIAez(Id(i),Jd(i)))*delta*Jz(n,i);
end
%***********************************************************************
% Update magnetic fields
%***********************************************************************
hs=hx;
hx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)=da(MEDIAhx(upml+1:ie_tot-
upml,upml+1:jh_tot-upml)).*hx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)+...
db(MEDIAhx(upml+1:ie_tot-upml,upml+1:jh_tot-upml)).*(ez(upml+1:ie_tot-
upml,upml+1:jh_tot-upml)-ez(upml+1:ie_tot-upml,upml+2:je_tot-upml));
bs=bx;
bx(1:upml,:)=D1hx(1:upml,:).*bx(1:upml,:)-D2hx(1:upml,:).*(ez(1:upml,2:je_tot)-
ez(1:upml,1:jh_tot))./delta;
hx(1:upml,:)=D3hx(1:upml,:).*hx(1:upml,:)+D4hx(1:upml,:).*(D5hx(1:upml,:).*bx(1:upml,:)-
D6hx(1:upml,:).*bs(1:upml,:));
bx(upml+1:ie_tot,1:upml)=D1hx(upml+1:ie_tot,1:upml).*bs(upml+1:ie_tot,1:upml)-...
D2hx(upml+1:ie_tot,1:upml).*(ez(upml+1:ie_tot,2:upml+1)-
ez(upml+1:ie_tot,1:upml))./delta;
hx(upml+1:ie_tot,1:upml)=D3hx(upml+1:ie_tot,1:upml).*hs(upml+1:ie_tot,1:upml)+D4hx(u
pml+1:ie_tot,1:upml).*...
(D5hx(upml+1:ie_tot,1:upml).*bx(upml+1:ie_tot,1:upml)-
D6hx(upml+1:ie_tot,1:upml).*bs(upml+1:ie_tot,1:upml));
bx(ie_tot-upml+1:ie_tot,upml+1:jh_tot)=D1hx(ie_tot-
upml+1:ie_tot,upml+1:jh_tot).*bs(ie_tot-upml+1:ie_tot,upml+1:jh_tot)-...
D2hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*(ez(ie_tot-upml+1:ie_tot,upml+2:jh_tot+1)-
ez(ie_tot-upml+1:ie_tot,upml+1:jh_tot))./delta;
hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot)=D3hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*...
hs(ie_tot-upml+1:ie_tot,upml+1:jh_tot)+D4hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*...
(D5hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*bx(ie_tot-upml+1:ie_tot,upml+1:jh_tot)-...
D6hx(ie_tot-upml+1:ie_tot,upml+1:jh_tot).*bs(ie_tot-upml+1:ie_tot,upml+1:jh_tot));
bx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)=D1hx(upml+1:ie_tot-upml,jh_tot-
upml+1:jh_tot).*bs(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)-...
D2hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*...
(ez(upml+1:ie_tot-upml,jh_tot-upml+2:jh_tot+1)-ez(upml+1:ie_tot-upml,jh_tot-
upml+1:jh_tot))./delta;
hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)=D3hx(upml+1:ie_tot-upml,jh_tot-
upml+1:jh_tot).*...
hs(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot)+D4hx(upml+1:ie_tot-upml,jh_tot-
upml+1:jh_tot).*...
(D5hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*bx(upml+1:ie_tot-upml,jh_tot-
upml+1:jh_tot)-...
D6hx(upml+1:ie_tot-upml,jh_tot-upml+1:jh_tot).*bs(upml+1:ie_tot-upml,jh_tot-
upml+1:jh_tot));
hs=hy;
hy(upml+1:ih_tot-upml,upml+1:je_tot-upml)=da(MEDIAhy(upml+1:ih_tot-
upml,upml+1:je_tot-upml)).*...
hy(upml+1:ih_tot-upml,upml+1:je_tot-upml)+db(MEDIAhy(upml+1:ih_tot-
upml,upml+1:je_tot-upml)).*...
(ez(upml+2:ie_tot-upml,upml+1:je_tot-upml)-ez(upml+1:ih_tot-upml,upml+1:je_tot-
upml));
bs=by;
by(1:upml,:)=D1hy(1:upml,:).*by(1:upml,:)-D2hy(1:upml,:).*(-(ez(2:upml+1,1:je_tot)-
ez(1:upml,1:je_tot)))./delta;
hy(1:upml,:)=D3hy(1:upml,:).*hy(1:upml,:)+D4hy(1:upml,:).*(D5hy(1:upml,:).*by(1:upml,:)-
D6hy(1:upml,:).*bs(1:upml,:));
by(upml+1:ih_tot,1:upml)=D1hy(upml+1:ih_tot,1:upml).*bs(upml+1:ih_tot,1:upml)-...
D2hy(upml+1:ih_tot,1:upml).*(-(ez(upml+2:ih_tot+1,1:upml)-
ez(upml+1:ih_tot,1:upml)))./delta;
hy(upml+1:ih_tot,1:upml)=D3hy(upml+1:ih_tot,1:upml).*hs(upml+1:ih_tot,1:upml)+D4hy(u
pml+1:ih_tot,1:upml).*...
(D5hy(upml+1:ih_tot,1:upml).*by(upml+1:ih_tot,1:upml)-
D6hy(upml+1:ih_tot,1:upml).*bs(upml+1:ih_tot,1:upml));
by(ih_tot-upml+1:ih_tot,upml+1:je_tot)=D1hy(ih_tot-
upml+1:ih_tot,upml+1:je_tot).*bs(ih_tot-upml+1:ih_tot,upml+1:je_tot)-...
D2hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*(-(ez(ih_tot-upml+2:ih_tot+1,upml+1:je_tot)-
ez(ih_tot-upml+1:ih_tot,upml+1:je_tot)))./delta;
hy(ih_tot-upml+1:ih_tot,upml+1:je_tot)=D3hy(ih_tot-
upml+1:ih_tot,upml+1:je_tot).*hs(ih_tot-upml+1:ih_tot,upml+1:je_tot)+...
D4hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*(D5hy(ih_tot-
upml+1:ih_tot,upml+1:je_tot).*by(ih_tot-upml+1:ih_tot,upml+1:je_tot)-...
D6hy(ih_tot-upml+1:ih_tot,upml+1:je_tot).*bs(ih_tot-upml+1:ih_tot,upml+1:je_tot));
by(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)=D1hy(upml+1:ih_tot-upml,je_tot-
upml+1:je_tot).*bs(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)-...
D2hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*...
(-(ez(upml+2:ih_tot-upml+1,je_tot-upml+1:je_tot)-ez(upml+1:ih_tot-upml,je_tot-
upml+1:je_tot)))./delta;
hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)=D3hy(upml+1:ih_tot-upml,je_tot-
upml+1:je_tot).*hs(upml+1:ih_tot-upml,je_tot-upml+1:je_tot)+...
D4hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*...
(D5hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*by(upml+1:ih_tot-upml,je_tot-
upml+1:je_tot)-...
D6hy(upml+1:ih_tot-upml,je_tot-upml+1:je_tot).*bs(upml+1:ih_tot-upml,je_tot-
upml+1:je_tot));
%***********************************************************************
% Get obseverations, compute phasor quantities
%***********************************************************************
for i=1:size(I,2)
ez_obs(n,i)=ez(I(i),J(i));
ftr(i)=ftr(i)+ez_obs(n,i)*cos(omega*n*dt);
fti(i)=fti(i)+ez_obs(n,i)*sin(omega*n*dt);
end
end
Ed=(ftr-1j*fti);