Changeset 825


Ignore:
Timestamp:
04/30/19 18:14:37 (5 years ago)
Author:
dubos
Message:

devel/Python : moved Fortran bindings and *.pyx to dynamico/dev module + necessary changes to test/py/*.py

Location:
codes/icosagcm/devel/Python
Files:
1 added
15 edited
4 moved

Legend:

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

    r670 r825  
    1 # import openmp before NetCDF4 numpy because it uses numpy hence MKL and messes up OMP_NUM_PROCS 
    2 import sys 
    3 if 'numpy' in sys.modules: 
    4     raise ImportError('Module dynamico must be imported before NetCDF/numpy because numpy may mess up OpenMP') 
    5 import libs 
    6 libs.libicosa.dynamico_show_openmp() 
  • codes/icosagcm/devel/Python/dynamico/dev/__init__.py

    r804 r825  
     1# import openmp before NetCDF4 numpy because it uses numpy hence MKL and messes up OMP_NUM_PROCS 
     2import sys 
     3if 'numpy' in sys.modules: 
     4    raise ImportError('Module dynamico must be imported before NetCDF/numpy because numpy may mess up OpenMP') 
     5import libs 
     6libs.libicosa.dynamico_show_openmp() 
  • codes/icosagcm/devel/Python/dynamico/dev/meshes.py

    r807 r825  
    44from dynamico.meshes import Unstructured_PMesh, compute_hybrid_coefs 
    55from dynamico.meshes import DYNAMICO_Format, MPAS_Format 
    6 from dynamico import unstructured as unst 
    7 from dynamico.dev import numba 
     6from dynamico.dev import unstructured as unst 
     7from dynamico.dev import numba, parallel 
    88from dynamico.dev.numba import int32, float64 
    99 
     
    2525class Cartesian_Mesh(MeshData, meshes.Cartesian_Mesh): pass 
    2626class Unstructured_Mesh(MeshData, meshes.Unstructured_Mesh): pass 
    27 class Local_Mesh(MeshData, meshes.Local_Mesh): pass 
     27class Local_Mesh(MeshData, meshes.Local_Mesh): 
     28    Halo_Xchange = parallel.Halo_Xchange # dynamico.dev.parallel instead pf dynamico.parallel 
  • codes/icosagcm/devel/Python/dynamico/dev/wrap.py

    r807 r825  
    11#------------------- wrap C/Fortran routines -------------------#                                                                                            
    2 import getargs 
     2from dynamico import getargs 
    33log_master, log_world = getargs.getLogger(__name__) 
    44INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error 
  • codes/icosagcm/devel/Python/dynamico/dev/xios.py

    r807 r825  
    66from mpi4py import MPI 
    77 
    8 import getargs 
     8from dynamico import getargs 
    99args=getargs.parse() 
    1010log_master, log_world = getargs.getLogger(__name__) 
  • codes/icosagcm/devel/Python/dynamico/kernels.py

    r791 r825  
    1 from dynamico.precision import zeros 
     1from dynamico.dev.precision import zeros 
    22 
    33def grad(mesh, s_ik): 
  • codes/icosagcm/devel/Python/dynamico/meshes.py

    r807 r825  
     1from __future__ import absolute_import      
     2 
     3from dynamico.dev import unstructured as unst 
     4 
    15import time 
    26import math 
     
    812from matplotlib.collections import PatchCollection 
    913 
    10 import unstructured as unst 
    11 import parallel 
    12 from util import list_stencil, Base_class, inverse_list 
    13 from precision import zeros 
    14  
    15 import getargs 
     14from dynamico import parallel 
     15from dynamico.util import list_stencil, BaseClass, inverse_list 
     16from dynamico import getargs 
     17from dynamico.parmetis import partition_mesh 
     18 
    1619log_master, log_world = getargs.getLogger(__name__) 
    1720INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error 
     
    1922 
    2023radian=180/math.pi 
    21    
     24 
    2225#------------------- Hybrid mass-based coordinate ------------- 
    2326 
     
    7376    return [ np.asarray(x) for x in bp_il, mass_dak, mass_dbk ] 
    7477 
     78#----------------------- Base class for "user" meshes --------- 
     79 
     80class BaseMesh(BaseClass): 
     81    def zeros(self,dims): return np.zeros([n for n in dims if n>1]) # overriden by meshes.dev.DevMesh 
     82 
    7583#----------------------- Cartesian mesh ----------------------- 
    7684 
     
    9098    return z.transpose() 
    9199 
    92 class Cartesian_Mesh(Base_class): 
     100class Cartesian_Mesh(BaseMesh): 
    93101    def __init__(self,nx,ny,llm,nqdyn,Lx,Ly,f): 
    94102        dx,dy = Lx/nx, Ly/ny 
     
    273281        f.close() 
    274282 
    275     def field_theta(self,n=1): return zeros((n,self.nqdyn,self.ny,self.nx,self.llm)) 
    276     def field_mass(self,n=1): return zeros((n,self.ny,self.nx,self.llm)) 
    277     def field_z(self,n=1): return zeros((n,self.ny,self.nx,self.llm)) 
    278     def field_w(self,n=1): return zeros((n,self.ny,self.nx,self.llm+1)) 
    279     def field_u(self,n=1): return zeros((n,self.ny,2*self.nx,self.llm)) 
    280     def field_ps(self,n=1): return zeros((n,self.ny,self.nx)) 
    281     def field_ucomp(self,n=1): return zeros((n,self.ny,self.nx,self.llm)) 
     283    def field_theta(self,n=1): return self.zeros((n,self.nqdyn,self.ny,self.nx,self.llm)) 
     284    def field_mass(self,n=1): return self.zeros((n,self.ny,self.nx,self.llm)) 
     285    def field_z(self,n=1): return self.zeros((n,self.ny,self.nx,self.llm)) 
     286    def field_w(self,n=1): return self.zeros((n,self.ny,self.nx,self.llm+1)) 
     287    def field_u(self,n=1): return self.zeros((n,self.ny,2*self.nx,self.llm)) 
     288    def field_ps(self,n=1): return self.zeros((n,self.ny,self.nx)) 
     289    def field_ucomp(self,n=1): return self.zeros((n,self.ny,self.nx,self.llm)) 
    282290    def ucomp(self,u):  
    283291        return u[range(0,2*self.nx,2),:] if self.ny==1 else u[:,range(0,2*self.nx,2),:] 
     
    293301#---------------------- DYNAMICO format for fully unstructured mesh and curvilinear meshes ---------------------- 
    294302 
    295 class Mesh_Format(Base_class): 
     303class Mesh_Format(BaseMesh): 
    296304    def getdims(self,*names): return [len(self.nc.dimensions[name]) for name in names] 
    297305    def get_pdims(self,comm,*names): return [self.get_pdim(comm,name) for name in names] 
     
    399407    return ne 
    400408 
    401 class Abstract_Mesh(Base_class): 
     409class Abstract_Mesh(BaseMesh): 
    402410    def to_dynamico(self): pass 
    403     def field_theta(self,n=1): return zeros((n,self.nqdyn,self.primal_num,self.llm)) 
    404     def field_mass(self,n=1):  return zeros((n,self.primal_num,self.llm)) 
    405     def field_z(self,n=1):     return zeros((n,self.dual_num,self.llm)) 
    406     def field_w(self,n=1):     return zeros((n,self.primal_num,self.llm+1)) 
    407     def field_u(self,n=1):     return zeros((n,self.edge_num,self.llm)) 
    408     def field_ps(self,n=1):    return zeros((n,self.primal_num,)) 
     411    def field_theta(self,n=1): return self.zeros((n,self.nqdyn,self.primal_num,self.llm)) 
     412    def field_mass(self,n=1):  return self.zeros((n,self.primal_num,self.llm)) 
     413    def field_z(self,n=1):     return self.zeros((n,self.dual_num,self.llm)) 
     414    def field_w(self,n=1):     return self.zeros((n,self.primal_num,self.llm+1)) 
     415    def field_u(self,n=1):     return self.zeros((n,self.edge_num,self.llm)) 
     416    def field_ps(self,n=1):    return self.zeros((n,self.primal_num,)) 
    409417    def ucov2D(self, ulon, ulat):  
    410418        return self.de*(ulon*np.cos(self.angle_e)+ulat*np.sin(self.angle_e)) 
    411419    def ucov3D(self, ulon, ulat): 
    412         ucov = zeros((self.edge_num,ulon.shape[1])) 
     420        ucov = self.zeros((self.edge_num,ulon.shape[1])) 
    413421        for edge in range(self.edge_num): 
    414422            angle=self.angle_e[edge] 
     
    518526    def partition_metis(self): 
    519527        INFO('Partitioning with ParMetis...') 
    520         edge_owner = unst.partition_mesh(self.trisk_deg, self.trisk, self.comm.Get_size()) 
     528        edge_owner = partition_mesh(self.comm, self.trisk_deg, self.trisk) 
     529#        edge_owner = unst.partition_mesh(self.trisk_deg, self.trisk, self.comm.Get_size()) 
    521530        self.edge_owner = parallel.LocPArray1D(self.dim_edge, edge_owner) 
    522531        primal_owner = partition_from_stencil(self.edge_owner, self.primal_deg, self.primal_edge) 
     
    563572 
    564573class Local_Mesh(Abstract_Mesh): 
     574    Halo_Xchange = parallel.Halo_Xchange # overriden in dev.meshes 
    565575    def __init__(self, pmesh, llm, nqdyn, mapping): 
    566576        comm, dim_primal, primal_owner, dim_edge, edge_owner, dim_dual, dual_owner = pmesh.members( 
     
    620630        # construct own dual mesh for XIOS output 
    621631        dual_own_glo = find_my_cells(dual_owner) 
    622         dual_own_glo = np.asarray(primal_own_glo, dtype=np.int32) 
     632        dual_own_glo = np.asarray(dual_own_glo, dtype=np.int32) 
    623633        dual_own_loc = [dict_V1[i] for i in dual_own_glo] 
    624634         
     
    655665        self.to_dynamico() 
    656666        # setup halo transfers - NB : llm must be set before we call set_dynamico_transfer 
    657         self.com_primal = parallel.Halo_Xchange( 
     667        self.com_primal = self.Halo_Xchange( 
    658668            42, dim_primal, cells_C1, get_all_cells(primal_owner)) 
    659         self.com_edges = parallel.Halo_Xchange( 
     669        self.com_edges = self.Halo_Xchange( 
    660670            73, dim_edge, edges_E2, get_all_edges(edge_owner)) 
    661671        self.com_primal.set_dynamico_transfer('primal') 
  • codes/icosagcm/devel/Python/dynamico/parallel.py

    r802 r825  
    1010        return lst,order   
    1111 
    12 from unstructured import ker 
    13  
    14 import getargs 
     12from dynamico import getargs 
    1513log_master, log_world = getargs.getLogger(__name__) 
    1614INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error 
     
    163161            for x in send_rank, send_len, send_list, recv_rank, recv_len, recv_list ] 
    164162        send_list, recv_list = send_list+1, recv_list+1 # Fortran expects that indices start at 1 
    165         ker.dynamico_init_transfer(index, send_num, send_size, send_rank, send_len, send_list, 
     163        self.dynamico_init_transfer(index, send_num, send_size, send_rank, send_len, send_list, 
    166164                                       recv_num, recv_size, recv_rank, recv_len, recv_list) 
     165    def dynamico_init_transfer(*args) : pass # overriden in dev.parallel 
     166 
    167167class LocalArray: # a base class for arrays with halos 
    168168    def read_own(self, parray): self.put(self.halo.own_local, self.halo.get_own(parray)) 
  • codes/icosagcm/devel/Python/dynamico/util.py

    r804 r825  
    77            s=stencil[i,j] 
    88            if cond(s): yield stencil[i,j] 
    9                  
    109 
    11 class Base_class(object): 
     10class BaseClass(object): 
    1211    def set_members(self, loc, *names): 
    1312        for name in names : 
  • codes/icosagcm/devel/Python/src/cxios.pyx

    r802 r825  
    1 from dynamico.libs import libxios 
    2 import dynamico.wrap as wrap 
     1from dynamico.dev.libs import libxios 
     2from dynamico.dev import wrap 
    33import numpy as np 
    44 
     
    77c_void_p_byref=type(byref(c_void_p())) # used in py2c because byref creates an object of this type, not c_void_pp 
    88 
    9 import getargs 
     9from dynamico import getargs 
    1010log_master, log_world = getargs.getLogger(__name__) 
    1111INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error 
  • codes/icosagcm/devel/Python/src/unstructured.pyx

    r802 r825  
    11import time 
    22import math 
    3 import wrap 
    4 from libs import libicosa 
    5 from util import list_stencil 
     3from dynamico.dev import wrap 
     4from dynamico.dev.libs import libicosa 
     5from dynamico.util import list_stencil 
    66 
    77from ctypes import c_void_p, c_int, c_double, c_float, c_bool 
     
    1010import numpy as np 
    1111 
    12 import getargs 
     12from dynamico import getargs 
    1313log_master, log_world = getargs.getLogger(__name__) 
    1414INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error 
  • codes/icosagcm/devel/Python/test/py/Baroclinic_3D_ullrich.py

    r806 r825  
    3030INFO, DEBUG, DEBUG_ALL, ERROR = log_master.info, log_master.debug, log_world.debug, log_world.error 
    3131 
    32 from dynamico import unstructured as unst 
     32from dynamico.dev import unstructured as unst 
     33from dynamico.dev import meshes 
     34from dynamico.dev import xios 
     35from dynamico.dev import precision as prec 
    3336from dynamico import dyn 
    3437from dynamico import time_step 
    3538from dynamico import DCMIP 
    36 from dynamico import meshes 
    3739from dynamico import maps 
    38 from dynamico import xios 
    39 from dynamico import precision as prec 
    4040from dynamico.kernels import grad, curl, div, KE 
    4141from dynamico.LAM import Davies 
  • codes/icosagcm/devel/Python/test/py/RSW2_MPAS_W02.py

    r807 r825  
    2525 
    2626INFO('Loading DYNAMICO modules ...') 
    27 from dynamico import unstructured as unst 
     27from dynamico.dev import unstructured as unst 
    2828from dynamico.dev.meshes import MPAS_Format, Unstructured_PMesh as PMesh, Local_Mesh as Mesh 
    2929from dynamico.dev import meshes 
  • codes/icosagcm/devel/Python/test/py/dump_partition.py

    r812 r825  
    1616 
    1717args = getargs.parse() 
     18for arg in vars(args): print arg, getattr(args, arg) 
    1819 
    1920log_master, log_world = getargs.getLogger() 
     
    2930 
    3031INFO('Loading DYNAMICO modules ...') 
    31 from dynamico import unstructured as unst 
     32from dynamico.dev import unstructured as unst 
    3233from dynamico.dev.meshes import MPAS_Format, Unstructured_PMesh as PMesh, Local_Mesh as Mesh 
    3334from dynamico.dev import meshes 
     
    140141                    ("primal_own_deg","f8",self._mesh.primal_own_deg), 
    141142                    ("primal_own_glo","f8",self._mesh.primal_own_glo), 
    142                     ("primal_own_loc","f8",self._mesh.primal_own_loc), 
    143                     ("dual_own_loc","f8",self._mesh.dual_own_loc) ]) 
     143                    ("primal_own_loc","f8",self._mesh.primal_own_loc) ]) 
    144144     
    145145        self.create_vars(f,("primal_cell","primal_edge_or_vertex"), 
     
    156156                    ("lat_v","f8",self._mesh.lat_v), 
    157157                    ("ref_lat_v","f8",self._mesh.ref_lat_v), 
    158                     ("vertices_V1","f8",self._mesh.vertices_V1) ]) 
     158                    ("vertices_V1","f8",self._mesh.vertices_V1), 
     159                    ("dual_own_loc","f8",self._mesh.dual_own_loc)  ]) 
    159160     
    160161        self.create_vars(f,("dual_cell","dual_edge_or_vertex"), 
  • codes/icosagcm/devel/Python/test/py/partition.py

    r760 r825  
    11print 'Starting' 
     2 
     3from dynamico import meshes 
     4from dynamico import parallel 
     5from dynamico.dev import unstructured as unst 
     6from dynamico import maps 
     7from dynamico.parmetis import partition_graph 
    28 
    39from mpi4py import MPI 
     
    713 
    814#from dynamico import partition 
    9 from dynamico import parallel, meshes 
    10 from dynamico import unstructured as unst 
    1115 
    1216import math as math 
     
    4650    part = 0*xadj_loc[0:-1]; 
    4751 
    48     unst.ker.dynamico_partition_graph(mpi_rank, mpi_size, vtxdist, xadj_loc, adjncy_loc, 4, part) 
     52#    unst.ker.dynamico_partition_graph(mpi_rank, mpi_size, vtxdist, xadj_loc, adjncy_loc, 4, part) 
     53    partition_graph(comm, vtxdist, xadj_loc, adjncy_loc, part, nparts=4) 
    4954 
    50 #    for i in range(len(part)): 
    51 #        print 'vertex', i+idx_start, 'proc', part[i] 
     55    for i in range(len(part)): 
     56        print 'vertex', i+idx_start, 'proc', part[i] 
    5257 
    5358#-----------------------------------------------------------------------------# 
     
    8489def coriolis(lon,lat): return 0.*lat 
    8590llm, nqdyn, radius = 1,1,1. 
    86 lmesh = meshes.Local_Mesh(pmesh, llm, nqdyn, radius, coriolis) 
     91planet = maps.SphereMap(radius, 0.) 
     92lmesh = meshes.Local_Mesh(pmesh, llm, nqdyn, planet) 
    8793 
    8894(primal_deg, primal_vertex, dim_vertex, dim_cell, cell_owner,  
  • codes/icosagcm/devel/Python/test/py/write_Cartesian_mesh.py

    r807 r825  
    1414 
    1515args = getargs.parse() 
     16for arg in vars(args): print arg, getattr(args, arg) 
    1617 
    17 from dynamico.meshes import zeros 
    1818from dynamico import meshes 
    1919import numpy as np 
  • codes/icosagcm/devel/Python/test/python.sh

    r804 r825  
    2121    shift 
    2222    rm -f xios_client*.* 
    23     mpirun -np $NB_MPI python -u $* 2>&1 | tee dynamico.log 
     23    mpirun --mca mpi_warn_on_fork 0 -np $NB_MPI python -u $* 2>&1 | tee dynamico.log 
    2424} 
    2525 
     
    2929cd $DYNAMICO_ROOT 
    3030 
    31 cp -i -u -r Python/dynamico/* lib/dynamico/ 
     31cp -i -u Python/dynamico/*.py lib/dynamico/ 
     32cp -i -u Python/dynamico/dev/*.py lib/dynamico/dev/ 
    3233 
    3334. arch.env 
Note: See TracChangeset for help on using the changeset viewer.