Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

propagation_plan.h

Go to the documentation of this file.
00001 /*
00002 Arroyo - software for the simulation of electromagnetic wave propagation
00003 through turbulence and optics.
00004 
00005 Copyright (c) 2000-2004 California Institute of Technology.  Written by
00006 Dr. Matthew Britton.  For comments or questions about this software,
00007 please contact the author at mbritton@astro.caltech.edu.
00008 
00009 This program is free software; you can redistribute it and/or modify it
00010 under the terms of the GNU General Public License as  published by the
00011 Free Software Foundation; either version 2 of the License, or (at your
00012 option) any later version.
00013 
00014 This program is provided "as is" and distributed in the hope that it
00015 will be useful, but WITHOUT ANY WARRANTY; without even the implied
00016 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  In no
00017 event shall California Institute of Technology be liable to any party
00018 for direct, indirect, special, incidental or consequential damages,
00019 including lost profits, arising out of the use of this software and its
00020 documentation, even if the California Institute of Technology has been
00021 advised of the possibility of such damage.   The California Institute of
00022 Technology has no obligation to provide maintenance, support, updates,
00023 enhancements or modifications.  See the GNU General Public License for
00024 more details.
00025 
00026 You should have received a copy of the GNU General Public License along
00027 with this program; if not, write to the Free Software
00028 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
00029 */
00030 
00031 #ifndef PROPAGATION_PLAN_H
00032 #define PROPAGATION_PLAN_H
00033 
00034 #include "wavefront_header.h"
00035 
00036 namespace Arroyo {
00037 
00038 
00042 
00043   class propagation_plan {
00044 
00045   public:
00046 
00049     propagation_plan(){};
00050 
00053     virtual ~propagation_plan(){};
00054 
00068     virtual diffractive_wavefront_header<float> 
00069       pad(const diffractive_wavefront_header<float> & dwf, double dist) const = 0;
00070 
00084     virtual diffractive_wavefront_header<double> 
00085       pad(const diffractive_wavefront_header<double> & dwf, double dist) const = 0;
00086 
00087   };
00088 
00092 
00093   class geometric_propagation_plan :
00094     public propagation_plan {
00095 
00096   public:
00097     
00100     geometric_propagation_plan(){};
00101 
00104     ~geometric_propagation_plan(){};
00105 
00110     diffractive_wavefront_header<float> 
00111       pad(const diffractive_wavefront_header<float> & dwf, double dist) const {
00112       return (dwf);
00113     };
00114 
00119     diffractive_wavefront_header<double> 
00120       pad(const diffractive_wavefront_header<double> & dwf, double dist) const {
00121       return (dwf);
00122     };
00123 
00124   };
00125 
00126 
00130 
00131   class near_field_fresnel_propagation_plan :
00132     public propagation_plan {
00133 
00134   private:
00135 
00139     template<class T>
00140       diffractive_wavefront_header<T> private_pad(const diffractive_wavefront_header<T> & dwf, double dist) const;
00141     
00142   public:
00143 
00146     near_field_fresnel_propagation_plan(){};
00147 
00150     ~near_field_fresnel_propagation_plan(){};
00151 
00156     diffractive_wavefront_header<float> 
00157       pad(const diffractive_wavefront_header<float> & dwf, double dist) const;
00158 
00163     diffractive_wavefront_header<double> 
00164       pad(const diffractive_wavefront_header<double> & dwf, double dist) const;
00165 
00166   };
00167 
00168 }
00169 
00170 #endif

Generated on Thu Nov 29 17:16:30 2007 for arroyo by  doxygen 1.3.9.1