Changeset 801 for codes/icosagcm/devel/Python/dynamico/meshes.py
- Timestamp:
- 01/17/19 10:42:38 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/Python/dynamico/meshes.py
r800 r801 381 381 if abs(r-1.)>1e-6 : print 'error with Riv2 at vertex ', ivertex 382 382 # scale lengths and areas 383 # this is now done by apply_map _factor383 # this is now done by apply_map 384 384 # mesh.le, mesh.de, mesh.Av, mesh.Ai = radius*le, radius*de, r2*Av, r2*Ai 385 385 … … 422 422 def plot_e(self,data, **kwargs): 423 423 self.plot(self.triedge,data, **kwargs) 424 def apply_map(self, mapping , le, de, Ai, Av):424 def apply_map(self, mapping): 425 425 """Before calling apply_map, lat and lon are coordinates in the reference domain. 426 426 After calling apply_map, lat and lon are coordinates in the physical domain.""" 427 427 factor_e = mapping.map_factor(self.lon_e, self.lat_e) 428 factor _i = mapping.map_factor(self.lon_i, self.lat_i)**2429 factor _v = mapping.map_factor(self.lon_v, self.lat_v)**2430 self.le, self.de, self.Av, self.Ai = factor_e*le, factor_e*de, Av*factor_v, Ai*factor_i428 factor2_i = mapping.map_factor(self.lon_i, self.lat_i)**2 429 factor2_v = mapping.map_factor(self.lon_v, self.lat_v)**2 430 self.le, self.de, self.Av, self.Ai = self.le*factor_e, self.de*factor_e, self.Av*factor2_v, self.Ai*factor2_i 431 431 self.lon_i, self.lat_i = mapping.map(self.lon_i, self.lat_i) 432 432 self.lon_v, self.lat_v = mapping.map(self.lon_v, self.lat_v) … … 503 503 self.edge2edge = Stencil_glob(trisk_deg, trisk, wee) 504 504 self.set_members(locals(), 'dim_primal', 'dim_dual', 'dim_edge', 505 'primal_deg', 'primal_vertex', 'primal_edge', 'trisk_deg', 'trisk', 505 'primal_deg', 'primal_vertex', 'primal_edge', 506 'trisk_deg', 'trisk', 'dual_deg', 'dual_edge', 506 507 'lon_v', 'lat_v', 'Av', 'lon_i', 'lat_i', 'Ai', 507 508 'le', 'de', 'lon_e', 'lat_e', 'angle_e') … … 566 567 get_all_duals, get_all_edges = dim_dual.getter(vertices_V1), dim_edge.getter(edges_E2) 567 568 568 # read from mesh file coordinates in reference domain569 self.lon_i, self.lat_i, Ai = pmesh.get(get_all_cells, 'lon_i', 'lat_i', 'Ai')570 self.lon_v, self.lat_v, Av = pmesh.get(get_all_duals, 'lon_v', 'lat_v', 'Av')571 le, de, self.lon_e, self.lat_e, self.angle_e = pmesh.get(572 get_all_edges, 'le', 'de', 'lon_e', 'lat_e', 'angle_e')573 # map from reference domain to physical domain574 self.apply_map(mapping, le, de, Ai, Av)575 # now latitudes and longitudes refer to the physical domain576 self.fv = mapping.coriolis(self.lon_v,self.lat_v) # Coriolis parameter577 569 primal_num, dual_num, edge_num = map(len, (cells_C1, vertices_V1, edges_E2)) 578 570 … … 627 619 left, right, down, up = left+1, right+1, down+1, up+1 628 620 629 # store what we have computed 630 le_de = self.le/self.de 621 # read from mesh file : coordinates, lengths and areas in reference domain 622 lon_i, lat_i, Ai = pmesh.get(get_all_cells, 'lon_i', 'lat_i', 'Ai') 623 lon_v, lat_v, Av = pmesh.get(get_all_duals, 'lon_v', 'lat_v', 'Av') 624 le, de, lon_e, lat_e, angle_e = pmesh.get(get_all_edges, 'le', 'de', 'lon_e', 'lat_e', 'angle_e') 625 le_de = le/de 626 627 # store what we have read/computed 631 628 self.set_members(locals(), 'nqdyn', 'llm', 'primal_num', 'dual_num', 'edge_num', 632 629 'primal_own_glo', 'primal_own_loc', 'primal_own_deg', 633 630 'primal_deg', 'primal_vertex', 'displ', 'dual_own_loc', 634 'trisk_deg', 'trisk', 'wee', 631 'trisk_deg', 'trisk', 'wee', 635 632 'dual_deg', 'dual_edge', 'dual_ne', 'dual_vertex', 'Riv2', 636 'left','right','primal_deg','primal_edge','primal_ne','le_de', 637 'vertices_V1', 'edges_E2') 638 639 # normalize and propagate info to Fortran side 633 'left','right','primal_deg','primal_edge','primal_ne', 634 'vertices_V1', 'edges_E2', 635 'lon_i', 'lat_i', 'Ai', 636 'lon_v', 'lat_v', 'Av', 637 'le', 'de', 'le_de', 'lon_e', 'lat_e', 'angle_e') 638 639 # normalize data read from file depending on file format 640 640 pmesh.gridfile.normalize(self) 641 # map from reference domain to physical domain 642 self.apply_map(mapping) 643 # now latitudes and longitudes refer to the physical domain 644 self.fv = mapping.coriolis(self.lon_v,self.lat_v) # Coriolis parameter 645 # propagate info to Fortran side 641 646 unst.init_mesh(llm, nqdyn, self.edge_num, self.primal_num, self.dual_num, 642 647 max_trisk_deg, max_primal_deg, max_dual_deg, … … 644 649 dual_deg,dual_edge,dual_ne,dual_vertex, 645 650 left,right,down,up,trisk_deg,trisk, 646 self.Ai,self.Av,self.fv, le_de,Riv2,wee)651 self.Ai,self.Av,self.fv,self.le_de,self.Riv2,self.wee) 647 652 648 653 # setup halo transfers - NB : llm must be set before we call set_dynamico_transfer
Note: See TracChangeset
for help on using the changeset viewer.