Пример #1
0
    def get_current(self, t, lat, lon, z, convert_to_decimal=True):
        ''' returns netcdf data for u, S T eta and depth for given
            lat/lon and interpolated to glider time.
            z is not used.
        '''
        if t < self.t_min or t > self.t_max:
            raise ValueError(
                "Can't find the time. No nc file of requested time is present?"
            )
        if convert_to_decimal:
            dec_lat = convertToDecimal(lat)
            dec_lon = convertToDecimal(lon)
        else:
            dec_lat = lat
            dec_lon = lon
        #

        fn, index, ft = self.__selectFile(t)
        self.__openNC(fn)
        k, l = self.__find_ij(dec_lat, dec_lon, 'X')
        u0, v0, eta0, S0, T0 = self.get_current_at_time(
            fn, index, dec_lat, dec_lon, k, l)
        #
        fn1, index1, ft1 = self.__selectFile(t + self.DT)
        self.__openNC(fn1)
        u1, v1, eta1, S1, T1 = self.get_current_at_time(
            fn1, index1, dec_lat, dec_lon, k, l)
        #
        u = u0 * (1 - ft) + ft * u1
        v = v0 * (1 - ft) + ft * v1
        S = S0 * (1 - ft) + ft * S1
        T = T0 * (1 - ft) + ft * T1
        eta = eta0 * (1 - ft) + ft * eta1
        return u, v, 0, 0, eta, S, T
Пример #2
0
 def get_current(self,t,lat,lon,z, convert_to_decimal=True):
     ''' returns netcdf data for u, S T eta and depth for given
         lat/lon and interpolated to glider time.
     '''
     #print "Setting glider depth for u to 800 m in nemo.py l.309"
     #z=800
     if t<self.t_min or t>self.t_max:
         return 0,0,0,100
     if convert_to_decimal:
         dec_lat=convertToDecimal(lat)
         dec_lon=convertToDecimal(lon)
     else:
         dec_lat=lat
         dec_lon=lon
     #
     fn,index,ft=self.__selectFile(t)
     fn1,index1,ft1=self.__selectFile(t+self.DT)
     self.__openNC([fn,fn1])
     k,l=self.__find_ij(dec_lat,dec_lon,'X')
     d=NemoEnvironment.BATHYMETRY[l-1:l+1,k-1:k+1] 
     if np.all(z>d):
         z=d.min()-5
     u0,v0,w0,eta0,S0,T0,d0=self.get_current_at_time(fn,index,dec_lat,dec_lon,z,k,l,d)
     u1,v1,w1,eta1,S1,T1,d1=self.get_current_at_time(fn1,index1,dec_lat,dec_lon,z,k,l,d)
     #
     u=u0*(1-ft)+ft*u1
     v=v0*(1-ft)+ft*v1
     w=w0*(1-ft)+ft*w1
     eta=eta0*(1-ft)+ft*eta1
     S=S0*(1-ft)+ft*S1
     T=T0*(1-ft)+ft*T1
     dp=d0*(1-ft)+ft*d1
     return u,v,w,dp,eta,S,T
Пример #3
0
 def get_current(self, t, lat, lon, z, convert_to_decimal=True):
     ''' returns netcdf data for u, S T eta and depth for given
         lat/lon and interpolated to glider time.
     '''
     if convert_to_decimal:
         dec_lat = convertToDecimal(lat)
         dec_lon = convertToDecimal(lon)
     else:
         dec_lat = lat
         dec_lon = lon
     try:
         d = self.bathymetry.get_water_depth(dec_lat, dec_lon)
     except:
         if self.__warning_counter == 0:
             print(
                 "Failed to read water depth from NC file. Use default value."
             )
             self.__warning_counter += 1
         d = TimeseriesEnvironment.DEFAULT_DEPTH
     u = self.u(t)
     v = self.v(t)
     w = 0
     dp = d
     eta = 0
     S = self.Sref
     T = self.Tref
     return u, v, w, dp, eta, S, T
Пример #4
0
    def get_environmental_data(self, t, lat, lon, z):
        '''Method to get environmental data. 
        Should be provided by a subclassed instance.
        For now, return some sensible values to keep going.

        When subclassed, this method should check for the
        reasonability of the values to be returned.
        '''

        if self.environment_model is None:
            u_ocean = v_ocean = w_ocean = 0
            S = 35
            T = 15
            eta = 0
            water_depth = 40
            rho = 1025
            return u_ocean, v_ocean, w_ocean, water_depth, eta, S, T, rho
        else:
            declat = convertToDecimal(lat)
            declon = convertToDecimal(lon)
            return self.environment_model.get_data(t, declat, declon, z)
Пример #5
0
 def initialise_gliderstate(self, datestr, timestr, lat, lon,
                            mission_start):
     gs = {}
     gs['m_depth'] = 0
     gs['m_present_secs_into_mission'] = 0.
     gs['samedepth_for'] = 0
     if datestr:
         if timestr:
             gs['m_present_time'] = strptimeToEpoch(datestr + timestr,
                                                    "%Y%m%d%H:%M")
         else:
             gs['m_present_time'] = strptimeToEpoch(datestr, "%Y%m%d")
     else:
         gs['m_present_time'] = 0.
     gs['stack'] = 1  # number of commands given.
     gs['bpump_stack'] = 0
     gs['fin_stack'] = 0
     gs['pitch_stack'] = 0
     gs['m_ballast_pumped'] = 0.
     gs['m_dist_to_wpt'] = 0.
     gs['c_ballast_pumped'] = 230
     gs['c_battpos'] = 1
     gs['c_fin'] = 0
     gs['m_fin'] = 0
     gs['m_pitch'] = 0.
     gs['c_pitch'] = 0.
     gs['m_altitude'] = 1e9
     gs['hover_for'] = 0
     gs['stalled_for'] = 0
     if lat:
         gs['m_lat'] = lat
     else:
         gs['m_lat'] = 0
     if lon:
         gs['m_lon'] = lon
     else:
         gs['m_lon'] = 0
     gs['m_lmc_x'] = 0
     gs['m_lmc_y'] = 0
     gs['c_wpt_lat'] = -1.
     gs['c_wpt_lon'] = -1.
     gs['c_wpt_lmc_x'] = 0
     gs['c_wpt_lmc_y'] = 0
     gs['m_dist_to_wpt'] = 9e9
     gs['m_heading'] = 0.
     gs['m_heading_rate'] = 0.
     gs['m_battpos'] = 0.
     gs['c_heading'] = 0
     gs['nocomms'] = 0
     gs['time_since_cycle_start'] = 0
     gs['x_lmc_x'] = 0
     gs['x_lmc_y'] = 0
     gs['x_lmc_z'] = 0
     gs['m_gps_status'] = 0
     gs['c_gps_on'] = 0
     utm_0 = latlon2UTM(convertToDecimal(lat), convertToDecimal(lon))
     gs['utm_0'] = None
     gs['x_u'] = 0.
     gs['x_v'] = 0.
     gs['x_w'] = 0.
     gs['temp'] = 0.
     gs['salt'] = 0.
     gs['rho'] = 0.
     gs['water_depth'] = 0.
     gs['m_speed'] = 0.
     gs['x_speed'] = 0.
     gs['x_cycle_index'] = 0
     gs['u_use_current_correction'] = 0
     gs['m_water_vx'] = 0.
     gs['m_water_vy'] = 0.
     gs['keep_stack_busy'] = 0
     gs['x_gps_lmc_x_dive'] = 0
     gs['x_gps_lmc_y_dive'] = 0
     gs['x_time_dive'] = 0
     gs['_init_dive_time'] = 80.  # time for glider to open files/init devices. etc.
     gs['x_lat'] = 0
     gs['x_lon'] = 0
     gs['x_water_depth'] = 0
     gs['x_last_wpt_lat'] = 69696969.
     gs['x_last_wpt_lon'] = 69696969.
     gs['x_eastward_glider_velocity'] = 0.
     gs['x_northward_glider_velocity'] = 0.
     gs['x_upward_glider_velocity'] = 0.
     gs['m_segment_number'] = 0
     gs['_pickup'] = (mission_start == "pickup")  # If true, then
     # c_wpt_* will be set by specified sensors
     # during start of the mission, rather than
     # from the waypoint list algorithm,
     # mimicking the continuation of the the
     # mission. This affects the behavior
     # goto_l
     self.gs = gs