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
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
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
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)
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