On Thu, 19 Apr 2007, secondlw wrote: > Dear Steven and others, How can I get the reflection phase of a > structure if I use a monochromatic plane wave ? If I set meep to > calculate with complex field true will help me? Thanks in advance! BR > Huang
First, your question is not necessarily well-defined. You only have a well-defined phase if you can isolate the reflection of a single propagating mode. For example, this is true for structures that are uniform in the directions transverse to the incident direction (e.g. multilayer films), or more generally for periodic structures with periodicity shorter than the diffraction limit so that there are no non-specular reflections. It is also true if you have a single-mode waveguide, in which case if you look far enough away you will see just the one guided mode in the waveguide. I will assume that this is true in the remainder of the email. Otherwise, you have to define more precisely what you mean by "the" phase. In this case, it is quite straightforward to get the reflected phase, and even the reflected phase as a function of frequency, because when you have a single mode the complex reflection coefficient can be determined by the field at a single point (*any* point where the field is non-zero and you have a single mode). Just do something like the following: 1) As your source, input a short Gaussian pulse. 2) Pick a point where you want to measure the reflected field. This should be a point *outside* the PML, and *far* enough from the structure so that any evanescent fields etc. have died away. Also, put your point in *front* of the source so that you can also use it to measure transmission in your normalization run, below. Also, pick a field component to look at -- it can be any field component that is non-zero. Define a couple of variables to record this information so you can refer to it later and easily change it (define-param R-comp Ez) ; field component to measure reflection (define-param R-pt (vector3 1 2 3)) ; point to measure reflection 3) For your run command, do something like: (run-until 400 (at-beginning output-epsilon) (in-volume (volume (center R-pt) (size 0 0 0)) (to-appended "R" (output-component R-comp)))) (print "dt = " (meep-fields-dt-get fields) "\n") What this will do is to output an HDF5 file R.h5 containing a 1-dimensional data set given by the field R-comp at R-pt as a function of time. You should replace "400" with however long it takes the fields to decay. In principle you could use (stop-when-decayed R-comp R-pt 1e-3), but I put in a fixed time so that both your simulation and the normalization run (below) take the same number of time steps. The last line is to print out the time-step size, delta t, which will be needed below. 4) Then, you will run the simulation *twice*, once with your structure, outputting R.h5, and once with *no* scattering structure, outputting R0.h5. The latter file is used for normalization. 5) Read both files into some program, e.g. Matlab or your favorite spreadsheet (via h5totxt). e.g. in Matlab: R = hdf5read("R.h5", "ez"); R0 = hdf5read("R0.h5", "ez"); Also, paste in the value of "dt" printed out above, into a variable dt. 6) Now, to compute the reflected phase as a function of frequency, you just need to compute the Fourier transform of R - R0. In Matlab: N = length(R); Rangle = arg(fft(R - R0)); Rangle = Rangle(1:N/2); % frequencies above Nyquist are redundant freq = [0:length(Rangle)-1] / (N * dt); plot(freq, Rangle) The final command should plot the phase angle (in radians) vs. frequency, for the usual Meep frequency units. I'm just typing the above commands off the top of my head, so I may have made a few mistakes, but hopefully you get the idea. Cordially, Steven G. Johnson _______________________________________________ meep-discuss mailing list meep-discuss@ab-initio.mit.edu http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss