Changeset 756 for codes/icosagcm


Ignore:
Timestamp:
10/09/18 14:28:53 (6 years ago)
Author:
dubos
Message:

devel/Python : moved DYNAMICO_Format to meshes.py + cleanup

Location:
codes/icosagcm/devel/Python
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/Python/dynamico/meshes.py

    r753 r756  
    190190    def vcomp(self,u): return u[:,range(1,2*self.nx,2),:] 
    191191 
    192 #---------------------- MPAS fully unstructured mesh ------------------------ 
     192#---------------------- DYNAMICO format for fully unstructured mesh and curvilinear meshes ---------------------- 
    193193 
    194194class Mesh_Format(Base_class): 
     
    203203            return ret 
    204204     
     205class DYNAMICO_Format(Mesh_Format): 
     206    """ Helps class Unstructured_Mesh to read a DYNAMICO mesh file.""" 
     207    start_index=1 # indexing starts at 1 as in Fortran 
     208    def __init__(self,gridfilename): 
     209        self.nc = cdf.Dataset(gridfilename, "r") 
     210        print('#NC4: Opening file:',gridfilename) 
     211    def get_pdim(self,comm,name): return parallel.PDim(self.nc.dimensions[name], comm) 
     212    def getvar(self,name): return self.nc.variables[name][:] 
     213    def get_pvar(self,pdim,name): 
     214        # provides parallel access to a NetCDF variable, with name translation 
     215        # first deal with special cases 
     216        if name == 'edge_deg': return parallel.CstPArray1D(pdim, np.int32, 2) 
     217        # general case 
     218        return parallel.PArray(pdim, self.nc.variables[name]) 
     219    def normalize(self, mesh, radius): pass 
     220 
     221#---------------------- MPAS fully unstructured mesh ------------------------ 
     222 
    205223class MPAS_Format(Mesh_Format): 
     224    """ Helps class Unstructured_Mesh to read a MPAS mesh file.""" 
    206225    start_index=1 # indexing starts at 1 as in Fortran 
    207226    translate= { 
    208         'primal_num':'nCells', 
    209         'edge_num':'nEdges', 
    210         'dual_num':'nVertices', 
     227        'primal_num':'nCells', 'edge_num':'nEdges', 'dual_num':'nVertices', 
    211228        'primal_deg':'nEdgesOnCell', 'trisk_deg':'nEdgesOnEdge', 
    212         'primal_edge':'edgesOnCell', 'left_right':'cellsOnEdge', 
    213         'dual_edge':'edgesOnVertex', 'down_up':'verticesOnEdge', 
     229        'primal_edge':'edgesOnCell', 'dual_edge':'edgesOnVertex',  
    214230        'primal_vertex':'verticesOnCell', 'dual_vertex':'cellsOnVertex', 
    215         'trisk':'edgesOnEdge', 'down_up':'verticesOnEdge', 'left_right':'cellsOnEdge', 
     231        'trisk':'edgesOnEdge', 'edge_down_up':'verticesOnEdge', 'edge_left_right':'cellsOnEdge', 
    216232        'le':'dvEdge', 'de':'dcEdge', 'Ai':'areaCell', 'Av':'areaTriangle', 
    217233        'lat_i':'latCell','lon_i':'lonCell','lat_v':'latVertex','lon_v':'lonVertex', 
     
    319335        # get indices for stencils  
    320336        # primal <-> edges 
    321         primal_edge, left_right = getvars('primal_edge','left_right') 
     337        primal_edge, left_right = getvars('primal_edge','edge_left_right') 
    322338        left,right = left_right[:,0], left_right[:,1] 
    323339        primal_ne = compute_ne(primal_num,primal_deg,primal_edge,left,right) 
    324340        # dual <-> edges 
    325         dual_edge, down_up = getvars('dual_edge','down_up') 
     341        dual_edge, down_up = getvars('dual_edge','edge_down_up') 
    326342        down,up = down_up[:,0], down_up[:,1] 
    327343        dual_ne = compute_ne(dual_num,dual_deg,dual_edge,up,down) 
     
    357373            dim_primal, 'primal_deg', 'primal_vertex', 'primal_edge', 'lon_i', 'lat_i', 'Ai' ) 
    358374        edge_deg, trisk_deg, left_right, down_up, trisk, le, de, wee, lon_e, lat_e, angle_e = get_pvars( 
    359              dim_edge, 'edge_deg', 'trisk_deg', 'left_right', 'down_up',  
     375             dim_edge, 'edge_deg', 'trisk_deg', 'edge_left_right', 'edge_down_up',  
    360376             'trisk', 'le', 'de', 'wee', 'lon_e', 'lat_e', 'angle_e') 
    361377        dual_deg, dual_vertex, dual_edge, Riv2, lon_v, lat_v, Av = get_pvars( 
  • codes/icosagcm/devel/Python/test/py/RSW_2D_mesh.py

    r747 r756  
    22from dynamico import unstructured as unst 
    33from dynamico import time_step 
     4from dynamico import precision as prec 
    45 
    56import math as math 
     
    78import numpy as np 
    89import netCDF4 as cdf 
    9  
    10 class DYNAMICO_Format(meshes.Mesh_Format): 
    11     """ Netcdf input file handling. 
    12     Creates a dictionary of names corresponding to original data file.""" 
    13  
    14     start_index=1 # indexing starts at 1 as in Fortran 
    15     translate = { 'down_up':'edge_down_up', 'left_right':'edge_left_right' } #new name is edge_left_right 
    16  
    17     def __init__(self,gridfilename): 
    18         try: 
    19             self.nc = cdf.Dataset(gridfilename, "r") 
    20             print('#NC4: Opening file:',gridfilename) 
    21         except RuntimeError: 
    22             print """ Unable to open grid file %s, maybe you forgot to download it ? 
    23             To do so, go to the 'Python/' dir and execute './get_MPAS_grids.sh'. 
    24             """ % gridfile 
    25             raise 
    26     def get_pdim(self,comm,name): 
    27         if name in self.translate: name = self.translate[name] 
    28         return parallel.PDim(self.nc.dimensions[name], comm) 
    29     def getvar(self,name): 
    30         if name in self.translate: name = self.translate[name] 
    31         return self.nc.variables[name][:] 
    32     def get_pvar(self,pdim,name): 
    33         # provides parallel access to a NetCDF variable, with name translation 
    34         # first deal with special cases 
    35         if name == 'edge_deg': return parallel.CstPArray1D(pdim, np.int32, 2) 
    36         # general case 
    37         if name in self.translate: name = self.translate[name] 
    38         return parallel.PArray(pdim, self.nc.variables[name]) 
    39     def normalize(self, mesh, radius): pass 
    4010 
    4111#--------------------------------- Main program ----------------------------- 
     
    4515dx,dy=Lx/nx,Ly/ny 
    4616 
    47 filename, llm, nqdyn, g, f, radius = 'cart128.nc', 1, 1, 1., 1., None 
     17filename, llm, nqdyn, g, f, radius = 'cart_128.nc', 1, 1, 1., 1., None 
    4818unst.setvar('g',g) 
    4919 
    5020print 'Reading Cartesian mesh ...' 
    51 meshfile = DYNAMICO_Format(filename) 
    52 #print("#NC4: check point: 0") 
    53 #print(meshfile) 
     21meshfile = meshes.DYNAMICO_Format(filename) 
    5422 
    5523def coriolis(lon,lat): 
     
    5826mesh=meshes.Unstructured_Mesh(meshfile, llm, nqdyn, radius, coriolis) 
    5927caldyn = unst.Caldyn_RSW(mesh) 
    60 #print(caldyn.__dict__.keys()) 
    6128 
    6229xx = (mesh.lat_i-nx/2.)*dx 
     
    6734h0 = 1+0.1*(np.exp(-2.*(x1*x1+yy*yy))+ 
    6835            np.exp(-2.*(x2*x2+yy*yy))) 
    69 flow0=meshes.asnum([h0,u0]) 
    70  
    71 #print('h0 : ', h0[1234]-1.) 
    72 #print('h0 : ', h0[2345]-1.) 
     36flow0=prec.asnum([h0,u0]) 
    7337 
    7438cfl = .8 
     
    9155for i in range(10): 
    9256    h,u=flow 
    93     flow, fast, slow = caldyn.bwd_fast_slow(flow, unst.zero_num) 
     57    flow, fast, slow = caldyn.bwd_fast_slow(flow, prec.zero) 
    9458    junk, du_fast = fast 
    9559    dh, du_slow = slow 
Note: See TracChangeset for help on using the changeset viewer.