Shawkat,

I have added better support for Harminv.

The code has been checked in on the Intec branch.
Attached is a sample.

Can you tell me if you have any remarks to this implementation?
I'd appreciate if you could reply in short notice, as people here in the
group are waiting to have this available.

thanks!

regards,
Emmanuel

'''
Example of using harminv to find the resonant modes in a ring

@author: emmanuel.lamb...@intec.ugent.be
'''

from meep_mpi import *  # make it 'meep_mpi' for MPI-meep and 'meep' for 
non-MPI meep

from math import *
import numpy 
import matplotlib.pyplot
import sys
import glob

res = 10.0

width = 1.0
innerRadius = 1.0
outerRadius = innerRadius+width
pad = 4.0
dpml = 2.0
gridSizeX = 2 * (innerRadius + width + pad + dpml)
gridSizeY = gridSizeX

srcFreqCenter = 0.15 #gaussian source center frequency
srcPulseWidth = 0.10 #gaussian source pulse width
srcComp = Ez #gaussian source component

#this function plots the waveguide material as a function of a vector(X,Y) 
class epsilon(Callback):
    def __init__(self):
        Callback.__init__(self)
        master_printf("Callback function for epsilon activated.\n")

    def double_vec(self,vec):
        x = vec.x()
        y = vec.y()
        r = sqrt(x*x+y*y)
        if (r>innerRadius) and (r<=outerRadius):
           return 11.56
        else:
           return 1.0

def runSimul():
        master_printf("Starting the simulation script...\n")

        #create the computational grid 
        master_printf("Size of computational volume: %f x %f with resolution 
%f\n" %(gridSizeX,gridSizeY,res))
        ringWgVol = voltwo(gridSizeX,gridSizeY,res)
        ringWgVol.center_origin()

        #create the field : we create a structure with PML of thickness = 1.0 
on all boundaries, in all directions, using the material function EPS
        material = epsilon()
        set_EPS_Callback(material.__disown__())        
        s = structure(ringWgVol, EPS, pml(dpml))      
        ringField = fields(s)      

        #define a gaussian line source 
        srcGaussian = gaussian_src_time(srcFreqCenter, srcPulseWidth )       
        ringField.add_point_source(srcComp, srcGaussian, vec(innerRadius + 
0.1,0))
        master_printf("Field created...\n")
        filenameEps = "./harminv_Eps.h5" 
        filenameComp = "./harminv_Comp.h5" 

        #export the dielectric structure (so that we can visually verify the 
waveguide structure)
        ringDielectricFile =  prepareHDF5File(filenameEps)
        ringField.output_hdf5(Dielectric, ringWgVol.surroundings(), 
ringDielectricFile)

        #create the file for the field components 
        ringWgFileOutputComp = prepareHDF5File(filenameComp)

        master_printf("Calculating...")
        ringWgProbingPoint =  vec(innerRadius + 0.1,0)
        """Now run the field pField until all sources have extinct. Then run 
for an extra 'pTimeAfterSources = 300' while
        collecting data for Harminv analysis at the probing point 
'pProbingPoint = ringWgProbingPoint'. 
        After harminv analysis, run for 'pAdditionalTimeAfterHarminv' and send 
HDF5 output every 'pH5OutputIntervalSteps' (default 5)
        to the HDF5 file specified by 'pHDF5OutputFile'
        """
        results = runWithHarminv(ringField, ringWgVol, srcComp, 
ringWgProbingPoint, srcFreqCenter, srcPulseWidth, 100, 
pOutputHDF5OnlyAfterAnalysis = True, pAdditionalTimeAfterHarminv = (1.0 / 
srcFreqCenter), pTimeAfterSources = 300, pH5OutputIntervalSteps=6, 
pHDF5OutputFile = ringWgFileOutputComp)
        master_printf("Done..!")

        del_EPS_Callback()

        print results


master_printf("** Sample for using Harminv, version 21-01-2010 (equivalent of 
ring.ctl included with Meep) **\n")

master_printf("Running on %d processor(s)...\n",count_processors())

runSimul()






_______________________________________________
Mailing list: https://launchpad.net/~python-meep
Post to     : python-meep@lists.launchpad.net
Unsubscribe : https://launchpad.net/~python-meep
More help   : https://help.launchpad.net/ListHelp

Reply via email to