Changeset 825
- Timestamp:
- 04/30/19 18:14:37 (5 years ago)
- 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_PROCS2 import sys3 if 'numpy' in sys.modules:4 raise ImportError('Module dynamico must be imported before NetCDF/numpy because numpy may mess up OpenMP')5 import libs6 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 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/meshes.py
r807 r825 4 4 from dynamico.meshes import Unstructured_PMesh, compute_hybrid_coefs 5 5 from dynamico.meshes import DYNAMICO_Format, MPAS_Format 6 from dynamico import unstructured as unst7 from dynamico.dev import numba 6 from dynamico.dev import unstructured as unst 7 from dynamico.dev import numba, parallel 8 8 from dynamico.dev.numba import int32, float64 9 9 … … 25 25 class Cartesian_Mesh(MeshData, meshes.Cartesian_Mesh): pass 26 26 class Unstructured_Mesh(MeshData, meshes.Unstructured_Mesh): pass 27 class Local_Mesh(MeshData, meshes.Local_Mesh): pass 27 class 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 1 1 #------------------- wrap C/Fortran routines -------------------# 2 import getargs2 from dynamico import getargs 3 3 log_master, log_world = getargs.getLogger(__name__) 4 4 INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error -
codes/icosagcm/devel/Python/dynamico/dev/xios.py
r807 r825 6 6 from mpi4py import MPI 7 7 8 import getargs8 from dynamico import getargs 9 9 args=getargs.parse() 10 10 log_master, log_world = getargs.getLogger(__name__) -
codes/icosagcm/devel/Python/dynamico/kernels.py
r791 r825 1 from dynamico. precision import zeros1 from dynamico.dev.precision import zeros 2 2 3 3 def grad(mesh, s_ik): -
codes/icosagcm/devel/Python/dynamico/meshes.py
r807 r825 1 from __future__ import absolute_import 2 3 from dynamico.dev import unstructured as unst 4 1 5 import time 2 6 import math … … 8 12 from matplotlib.collections import PatchCollection 9 13 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 14 from dynamico import parallel 15 from dynamico.util import list_stencil, BaseClass, inverse_list 16 from dynamico import getargs 17 from dynamico.parmetis import partition_mesh 18 16 19 log_master, log_world = getargs.getLogger(__name__) 17 20 INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error … … 19 22 20 23 radian=180/math.pi 21 24 22 25 #------------------- Hybrid mass-based coordinate ------------- 23 26 … … 73 76 return [ np.asarray(x) for x in bp_il, mass_dak, mass_dbk ] 74 77 78 #----------------------- Base class for "user" meshes --------- 79 80 class BaseMesh(BaseClass): 81 def zeros(self,dims): return np.zeros([n for n in dims if n>1]) # overriden by meshes.dev.DevMesh 82 75 83 #----------------------- Cartesian mesh ----------------------- 76 84 … … 90 98 return z.transpose() 91 99 92 class Cartesian_Mesh(Base _class):100 class Cartesian_Mesh(BaseMesh): 93 101 def __init__(self,nx,ny,llm,nqdyn,Lx,Ly,f): 94 102 dx,dy = Lx/nx, Ly/ny … … 273 281 f.close() 274 282 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)) 282 290 def ucomp(self,u): 283 291 return u[range(0,2*self.nx,2),:] if self.ny==1 else u[:,range(0,2*self.nx,2),:] … … 293 301 #---------------------- DYNAMICO format for fully unstructured mesh and curvilinear meshes ---------------------- 294 302 295 class Mesh_Format(Base _class):303 class Mesh_Format(BaseMesh): 296 304 def getdims(self,*names): return [len(self.nc.dimensions[name]) for name in names] 297 305 def get_pdims(self,comm,*names): return [self.get_pdim(comm,name) for name in names] … … 399 407 return ne 400 408 401 class Abstract_Mesh(Base _class):409 class Abstract_Mesh(BaseMesh): 402 410 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,)) 409 417 def ucov2D(self, ulon, ulat): 410 418 return self.de*(ulon*np.cos(self.angle_e)+ulat*np.sin(self.angle_e)) 411 419 def ucov3D(self, ulon, ulat): 412 ucov = zeros((self.edge_num,ulon.shape[1]))420 ucov = self.zeros((self.edge_num,ulon.shape[1])) 413 421 for edge in range(self.edge_num): 414 422 angle=self.angle_e[edge] … … 518 526 def partition_metis(self): 519 527 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()) 521 530 self.edge_owner = parallel.LocPArray1D(self.dim_edge, edge_owner) 522 531 primal_owner = partition_from_stencil(self.edge_owner, self.primal_deg, self.primal_edge) … … 563 572 564 573 class Local_Mesh(Abstract_Mesh): 574 Halo_Xchange = parallel.Halo_Xchange # overriden in dev.meshes 565 575 def __init__(self, pmesh, llm, nqdyn, mapping): 566 576 comm, dim_primal, primal_owner, dim_edge, edge_owner, dim_dual, dual_owner = pmesh.members( … … 620 630 # construct own dual mesh for XIOS output 621 631 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) 623 633 dual_own_loc = [dict_V1[i] for i in dual_own_glo] 624 634 … … 655 665 self.to_dynamico() 656 666 # 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( 658 668 42, dim_primal, cells_C1, get_all_cells(primal_owner)) 659 self.com_edges = parallel.Halo_Xchange(669 self.com_edges = self.Halo_Xchange( 660 670 73, dim_edge, edges_E2, get_all_edges(edge_owner)) 661 671 self.com_primal.set_dynamico_transfer('primal') -
codes/icosagcm/devel/Python/dynamico/parallel.py
r802 r825 10 10 return lst,order 11 11 12 from unstructured import ker 13 14 import getargs 12 from dynamico import getargs 15 13 log_master, log_world = getargs.getLogger(__name__) 16 14 INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error … … 163 161 for x in send_rank, send_len, send_list, recv_rank, recv_len, recv_list ] 164 162 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, 166 164 recv_num, recv_size, recv_rank, recv_len, recv_list) 165 def dynamico_init_transfer(*args) : pass # overriden in dev.parallel 166 167 167 class LocalArray: # a base class for arrays with halos 168 168 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 7 7 s=stencil[i,j] 8 8 if cond(s): yield stencil[i,j] 9 10 9 11 class Base _class(object):10 class BaseClass(object): 12 11 def set_members(self, loc, *names): 13 12 for name in names : -
codes/icosagcm/devel/Python/src/cxios.pyx
r802 r825 1 from dynamico. libs import libxios2 import dynamico.wrap aswrap1 from dynamico.dev.libs import libxios 2 from dynamico.dev import wrap 3 3 import numpy as np 4 4 … … 7 7 c_void_p_byref=type(byref(c_void_p())) # used in py2c because byref creates an object of this type, not c_void_pp 8 8 9 import getargs9 from dynamico import getargs 10 10 log_master, log_world = getargs.getLogger(__name__) 11 11 INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error -
codes/icosagcm/devel/Python/src/unstructured.pyx
r802 r825 1 1 import time 2 2 import math 3 import wrap4 from libs import libicosa5 from util import list_stencil3 from dynamico.dev import wrap 4 from dynamico.dev.libs import libicosa 5 from dynamico.util import list_stencil 6 6 7 7 from ctypes import c_void_p, c_int, c_double, c_float, c_bool … … 10 10 import numpy as np 11 11 12 import getargs12 from dynamico import getargs 13 13 log_master, log_world = getargs.getLogger(__name__) 14 14 INFO, DEBUG, ERROR = log_master.info, log_master.debug, log_world.error -
codes/icosagcm/devel/Python/test/py/Baroclinic_3D_ullrich.py
r806 r825 30 30 INFO, DEBUG, DEBUG_ALL, ERROR = log_master.info, log_master.debug, log_world.debug, log_world.error 31 31 32 from dynamico import unstructured as unst 32 from dynamico.dev import unstructured as unst 33 from dynamico.dev import meshes 34 from dynamico.dev import xios 35 from dynamico.dev import precision as prec 33 36 from dynamico import dyn 34 37 from dynamico import time_step 35 38 from dynamico import DCMIP 36 from dynamico import meshes37 39 from dynamico import maps 38 from dynamico import xios39 from dynamico import precision as prec40 40 from dynamico.kernels import grad, curl, div, KE 41 41 from dynamico.LAM import Davies -
codes/icosagcm/devel/Python/test/py/RSW2_MPAS_W02.py
r807 r825 25 25 26 26 INFO('Loading DYNAMICO modules ...') 27 from dynamico import unstructured as unst27 from dynamico.dev import unstructured as unst 28 28 from dynamico.dev.meshes import MPAS_Format, Unstructured_PMesh as PMesh, Local_Mesh as Mesh 29 29 from dynamico.dev import meshes -
codes/icosagcm/devel/Python/test/py/dump_partition.py
r812 r825 16 16 17 17 args = getargs.parse() 18 for arg in vars(args): print arg, getattr(args, arg) 18 19 19 20 log_master, log_world = getargs.getLogger() … … 29 30 30 31 INFO('Loading DYNAMICO modules ...') 31 from dynamico import unstructured as unst32 from dynamico.dev import unstructured as unst 32 33 from dynamico.dev.meshes import MPAS_Format, Unstructured_PMesh as PMesh, Local_Mesh as Mesh 33 34 from dynamico.dev import meshes … … 140 141 ("primal_own_deg","f8",self._mesh.primal_own_deg), 141 142 ("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) ]) 144 144 145 145 self.create_vars(f,("primal_cell","primal_edge_or_vertex"), … … 156 156 ("lat_v","f8",self._mesh.lat_v), 157 157 ("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) ]) 159 160 160 161 self.create_vars(f,("dual_cell","dual_edge_or_vertex"), -
codes/icosagcm/devel/Python/test/py/partition.py
r760 r825 1 1 print 'Starting' 2 3 from dynamico import meshes 4 from dynamico import parallel 5 from dynamico.dev import unstructured as unst 6 from dynamico import maps 7 from dynamico.parmetis import partition_graph 2 8 3 9 from mpi4py import MPI … … 7 13 8 14 #from dynamico import partition 9 from dynamico import parallel, meshes10 from dynamico import unstructured as unst11 15 12 16 import math as math … … 46 50 part = 0*xadj_loc[0:-1]; 47 51 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) 49 54 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] 52 57 53 58 #-----------------------------------------------------------------------------# … … 84 89 def coriolis(lon,lat): return 0.*lat 85 90 llm, nqdyn, radius = 1,1,1. 86 lmesh = meshes.Local_Mesh(pmesh, llm, nqdyn, radius, coriolis) 91 planet = maps.SphereMap(radius, 0.) 92 lmesh = meshes.Local_Mesh(pmesh, llm, nqdyn, planet) 87 93 88 94 (primal_deg, primal_vertex, dim_vertex, dim_cell, cell_owner, -
codes/icosagcm/devel/Python/test/py/write_Cartesian_mesh.py
r807 r825 14 14 15 15 args = getargs.parse() 16 for arg in vars(args): print arg, getattr(args, arg) 16 17 17 from dynamico.meshes import zeros18 18 from dynamico import meshes 19 19 import numpy as np -
codes/icosagcm/devel/Python/test/python.sh
r804 r825 21 21 shift 22 22 rm -f xios_client*.* 23 mpirun - np $NB_MPI python -u $* 2>&1 | tee dynamico.log23 mpirun --mca mpi_warn_on_fork 0 -np $NB_MPI python -u $* 2>&1 | tee dynamico.log 24 24 } 25 25 … … 29 29 cd $DYNAMICO_ROOT 30 30 31 cp -i -u -r Python/dynamico/* lib/dynamico/ 31 cp -i -u Python/dynamico/*.py lib/dynamico/ 32 cp -i -u Python/dynamico/dev/*.py lib/dynamico/dev/ 32 33 33 34 . arch.env
Note: See TracChangeset
for help on using the changeset viewer.