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
1.3.9.1