def get_weights_ll2cs(self, dst, lat, lon, idxs): cs_obj = self.cs_obj ll_obj = self.ll_obj idx1, idx2, idx3, idx4 = idxs lat1, lon1 = ll_obj.latlons[idx1] lat2, lon2 = ll_obj.latlons[idx2] lat3, lon3 = ll_obj.latlons[idx3] lat4, lon4 = ll_obj.latlons[idx4] assert np.fabs(lon1-lon3)<1e-15 assert np.fabs(lon2-lon4)<1e-15 assert np.fabs(lat1-lat2)<1e-15 assert np.fabs(lat3-lat4)<1e-15 if lon2 < lon1: lon2 = lon1 + ll_obj.dlon if lon4 < lon3: lon4 = lon3 + ll_obj.dlon if np.fabs(lon-lon1) > np.pi: lon += 2*np.pi assert flge(lon1,lon,lon2), "dst={}, lon1={}, lon2={}, lon={}".format(dst,lon1,lon2,lon) assert flge(lat1,lat,lat3), "dst={}, lat1={}, lat3={}, lat={}".format(dst,lat1,lat2,lat) # weights x, y = lon, lat x1, x2 = lon1, lon2 y1, y2 = lat1, lat3 return self.get_bilinear_weights(dst, (x,y), (x1,y1), (x2,y2))
def get_weights_cs2ll(self, dst, alpha, beta, panel, gids): cs_obj = self.cs_obj (a1,b1), (a2,b2), (a3,b3), (a4,b4) = \ [cs_obj.alpha_betas[gid] for gid in gids] assert np.fabs(a1-a3)<1e-15 assert np.fabs(a2-a4)<1e-15 assert np.fabs(b1-b2)<1e-15 assert np.fabs(b3-b4)<1e-15 assert flge(a1,alpha,a2), "dst={}, a1={}, a2={}, alpha={}".format(dst,a1,a2,alpha) assert flge(b1,beta,b3), "dst={}, b1={}, b3={}, beta={}".format(dst,b1,b3,beta) panels = [cs_obj.gq_indices[gid,0] for gid in gids] for p in panels: if p != panel: print("(alpha,beta) ({},{})".foramt(alpha, beta)) print("panel: {}, {}".format(panel, panels)) print("dst: {}".format(dst)) print("gids: {}".format(gids)) sys.exit() # weights x, y = alpha, beta x1, x2 = a1, a2 y1, y2 = b1, b3 return self.get_bilinear_weights(dst, (x,y), (x1,y1), (x2,y2))