data_grid_mackenzie.h

00001 
00005 #pragma once
00006 
00007 #include <usml/types/data_grid.h>
00008 
00009 namespace usml {
00010 namespace ocean {
00011 
00014 
00057 class data_grid_mackenzie {
00058 
00059   public:
00060 
00061     //**************************************************
00062     // initialization
00063 
00074     static data_grid<double,3>* construct(
00075         const data_grid<double,3>* temperature,
00076         const data_grid<double,3>* salinity,
00077         bool clean_up=true )
00078     {
00079         data_grid<double,3>* ssp = new data_grid<double,3>(*temperature,false) ;
00080         ssp->interp_type(0,GRID_INTERP_PCHIP) ;
00081         ssp->interp_type(1,GRID_INTERP_LINEAR) ;
00082         ssp->interp_type(2,GRID_INTERP_LINEAR) ;
00083 
00084         size_t index[3] ;
00085         for ( index[0]=0 ; index[0] < temperature->axis(0)->size() ; ++index[0] ) {
00086             for ( index[1]=0 ; index[1] < temperature->axis(1)->size() ; ++index[1] ) {
00087                 for ( index[2]=0 ; index[2] < temperature->axis(2)->size() ; ++index[2] ) {
00088 
00089                     // extract depth, temperature, and salinity at this point
00090 
00091                     double D = wposition::earth_radius -
00092                                (*temperature->axis(0))[ index[0] ] ;
00093                     double T = temperature->data( index ) ;
00094                     double S = salinity->data( index ) ;
00095 
00096                     // compute sound speed
00097 
00098                     double c =  1448.96 + 4.591 * T - 5.304e-2 * T*T
00099                              + 2.374e-4 * T*T*T
00100                              + ( 1.340 - 1.025e-2 * T ) * ( S - 35.0 )
00101                              + 1.630e-2 * D + 1.675e-7 * D*D
00102                              - 7.139e-13 * T * D*D*D ;
00103 
00104                     ssp->data( index, c ) ;
00105                 }
00106             }
00107         }
00108         if( clean_up ) {
00109             delete temperature ;
00110             delete salinity ;
00111         }
00112         return ssp ;
00113     }
00114 
00115 };
00116 
00118 }  // end of namespace ocean
00119 }  // end of namespace usml

Generated on 4 May 2015 for USML by  doxygen 1.6.1