Ignore:
Timestamp:
02/08/19 08:10:04 (5 years ago)
Author:
dubos
Message:

devel/Python : moving Fortran-based features to dynamico.dev module (TBC)

File:
1 edited

Legend:

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

    r804 r805  
    9090    return z.transpose() 
    9191 
    92 class Cartesian_mesh(Base_class): 
     92class Cartesian_Mesh(Base_class): 
    9393    def __init__(self,nx,ny,llm,nqdyn,Lx,Ly,f): 
    9494        dx,dy = Lx/nx, Ly/ny 
     
    115115        def zeros(shape,n=1): return [np.zeros(shape) for i in range(n)] if n>1 else np.zeros(shape) 
    116116        def indices(shape,n=1): return [np.zeros(shape,np.int32) for i in range(n)] if n>1 else np.zeros(shape,np.int32) 
     117 
     118        primal_num, dual_num, edge_num = nx*ny, nx*ny, 2*nx*ny 
    117119 
    118120        Aiv, lon_i,lon_v,lat_i,lat_v   = zeros( nx*ny,   5) 
     
    178180 
    179181        Aiv[:]=dx*dy # Ai=Av=dx*dy 
    180         le_de=le/de 
    181         unst.init_mesh(llm,nqdyn,2*nx*ny,nx*ny,nx*ny,4,4,4, 
    182                   primal_deg,primal_edge,primal_ne, 
    183                   dual_deg,dual_edge,dual_ne,dual_vertex, 
    184                   left,right,down,up,trisk_deg,trisk, 
    185                   Aiv,Aiv,f+0.*Aiv,le_de,Riv2,wee) 
    186         self.set_members(locals(), 'primal_deg', 'primal_edge', 'primal_ne', 'primal_vertex', 
     182        le_de, fv = le/de, f+0.*Aiv 
     183         
     184        self.set_members(locals(), 'primal_num',  'dual_num', 'edge_num', 
     185                         'primal_deg', 'primal_edge', 'primal_ne', 'primal_vertex', 
    187186                         'dual_deg', 'dual_edge', 'dual_ne', 'dual_vertex', 
    188187                         'left','right','down','up', 
    189188                         'trisk_deg','trisk','Riv2','wee', 
    190                          'lon_i','lat_i','lon_v','lat_v', 
     189                         'lon_i','lat_i','lon_v','lat_v', 'fv', 
    191190                         'le_de','le','de','lon_e','lat_e','angle_e', 
    192191                         'primal_i','primal_j','edge_i','edge_j') 
    193192        self.Ai, self.Av = Aiv, Aiv 
     193        self.to_dynamico() 
     194    def to_dynamico(self): pass 
    194195    def ncwrite(self, name): 
    195196        """The method writes Cartesian mesh on the disc. 
     
    399400 
    400401class Abstract_Mesh(Base_class): 
     402    def to_dynamico(self): pass 
    401403    def field_theta(self,n=1): return zeros((n,self.nqdyn,self.primal_num,self.llm)) 
    402404    def field_mass(self,n=1):  return zeros((n,self.primal_num,self.llm)) 
     
    436438        self.lon_v, self.lat_v = mapping.map(self.lon_v, self.lat_v) 
    437439        self.lon_e, self.lat_e = mapping.map(self.lon_e, self.lat_e) 
    438      
     440 
    439441class Unstructured_Mesh(Abstract_Mesh): 
    440442    def __init__(self, gridfile, llm, nqdyn, radius, f): 
     
    466468                         'primal_num', 'dual_num', 'edge_num', 'primal_deg', 'primal_vertex', 'primal_ne', 
    467469                         'lat_i', 'lon_i', 'lat_v', 'lon_v', 'lat_e', 'lon_e', 'angle_e', 
    468                          'Ai', 'Av', 'fv', 'le', 'de', 'le_de', 
     470                         'Ai', 'Av', 'fv', 'le', 'de', 'down', 'up', 'le_de', 
    469471                         'trisk_deg', 'trisk', 'wee', 'Riv2', 'dual_ne', 
    470472                         'left', 'right', 
    471473                         'primal_edge') 
    472474        gridfile.normalize(self) 
    473         max_primal_deg, max_dual_deg, max_trisk_deg = [ x.shape[1] for x in primal_edge, dual_edge, trisk] 
    474         unst.init_mesh(llm, nqdyn, edge_num, primal_num,dual_num, 
    475                   max_trisk_deg, max_primal_deg, max_dual_deg, 
    476                   primal_deg,primal_edge,primal_ne, 
    477                   dual_deg,dual_edge,dual_ne,dual_vertex, 
    478                   left,right,down,up,trisk_deg,trisk, 
    479                   self.Ai,self.Av,self.fv,le_de,Riv2,wee) 
     475        self.to_dynamico() 
    480476        self.primal  = tri.Triangulation(lon_i*radian, lat_i*radian) 
    481477        self.dual    = tri.Triangulation(lon_v*radian, lat_v*radian) 
     
    604600        for edge in range(edge_num):  
    605601            if edge_deg[edge]<2: up[edge]=down[edge] 
    606         max_primal_deg, max_dual_deg, max_trisk_deg = [x.shape[1] for x in primal_edge, dual_edge, trisk] 
    607602 
    608603        # construct own primal mesh for XIOS output 
     
    638633                         'trisk_deg', 'trisk', 'wee', 
    639634                         'dual_deg', 'dual_edge', 'dual_ne', 'dual_vertex', 'Riv2', 
    640                          'left','right','primal_deg','primal_edge','primal_ne', 
     635                         'left', 'right', 'down', 'up',  
     636                         'primal_deg', 'primal_edge', 'primal_ne', 
    641637                         'vertices_V1', 'edges_E2', 
    642638                         'lon_i', 'lat_i', 'Ai', 
     
    651647        self.fv = mapping.coriolis(self.lon_v,self.lat_v) # Coriolis parameter 
    652648        # propagate info to Fortran side 
    653         unst.init_mesh(llm, nqdyn, self.edge_num, self.primal_num, self.dual_num, 
    654                   max_trisk_deg, max_primal_deg, max_dual_deg, 
    655                   primal_deg,primal_edge,primal_ne, 
    656                   dual_deg,dual_edge,dual_ne,dual_vertex, 
    657                   left,right,down,up,trisk_deg,trisk, 
    658                   self.Ai,self.Av,self.fv,self.le_de,self.Riv2,self.wee) 
    659  
     649        self.to_dynamico() 
    660650        # setup halo transfers - NB : llm must be set before we call set_dynamico_transfer 
    661651        self.com_primal = parallel.Halo_Xchange( 
     
    767757    return bounds 
    768758 
    769 class Stencil_glob: 
     759class Stencil_glob(object): 
    770760    def __init__(self, degree, neigh, weight=None): 
    771761        self.degree, self.neigh, self.weight = degree, neigh, weight 
     
    773763        return Stencil(cells, self.degree, self.neigh, neigh_dict, self.weight) 
    774764             
    775 class Stencil: 
     765class Stencil(object): 
    776766    def __init__(self, cells, degree, neigh, neigh_dict, weight=None): 
    777767        get = degree.dim.getter(cells) 
Note: See TracChangeset for help on using the changeset viewer.