Ignore:
Timestamp:
02/16/18 18:06:01 (6 years ago)
Author:
dubos
Message:

devel/unstructured : XIOS output with MPI

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/Python/test/py/test_xios.py

    r680 r682  
    33import dynamico.unstructured as unst 
    44import dynamico.xios as xios 
    5 from dynamico.meshes import MPAS_Format, Unstructured_Mesh, radian 
     5#from dynamico.meshes import MPAS_Format, Unstructured_Mesh, radian 
     6from dynamico.meshes import radian, MPAS_Format, Unstructured_Mesh, Unstructured_PMesh as PMesh, Local_Mesh as Mesh 
    67 
    78from mpi4py import MPI 
     
    1112 
    1213import numpy as np 
     14import cProfile 
     15import re 
    1316 
    1417def boundaries(degree,points,lon,lat): 
     
    2831#----------------------------- read MPAS mesh -------------------------------- 
    2932 
    30 grid, llm, nqdyn, nqtot = 10242, 1,1,1 # 2562, 10242, 40962   
     33grid, llm, nqdyn, nqtot = 2562, 4,1,1 # 2562, 10242, 40962   
    3134Omega, radius, g, gh0 = 2.*np.pi/86400., 6.4e6, 1., 2.94e4 
    3235N, T, courant = 40, 10800., 1.2 # simulation length = N*T 
     
    3639print 'Reading MPAS mesh ...' 
    3740meshfile = MPAS_Format('grids/x1.%d.grid.nc'%grid) 
    38 mesh = Unstructured_Mesh(meshfile, llm, nqdyn, radius, f) 
     41#mesh = Unstructured_Mesh(meshfile, llm, nqdyn, radius, f) 
     42pmesh = PMesh(comm,meshfile) 
     43mesh = Mesh(pmesh, llm, nqdyn, radius, f) 
     44ni_glo = pmesh.dim_primal.n 
     45ni_loc = len(mesh.primal_own_glo) 
    3946print '...Done' 
    4047 
     
    4350#--------------------------------- initialize XIOS -------------------------- 
    4451 
    45 def setup_domain(cat,id, degree,vertex,lon,lat,lon_v,lat_v): # cat in 'domain','domaingroup' 
     52def setup_domain(cat,id, degree,vertex,lon,lat,lon_v,lat_v, ncell_glo=None, index_glo=None, displ=None): # cat in 'domain','domaingroup' 
    4653    bnd_lon, bnd_lat = boundaries(degree, vertex, lon_v, lat_v) 
    47     ncell_tot, nvertex = bnd_lon.shape 
     54    ncell, nvertex = bnd_lon.shape 
     55    if ncell_glo is None : 
     56        ncell_glo = ncell 
     57        index_glo = np.arange(ncell, dtype=np.int32) 
     58        displ = 0 
    4859    mesh = xios.Handle(cat,id) 
    4960    mesh.set_attr(type='unstructured') 
    50     mesh.set_attr(ni_glo=ncell_tot, ibegin=0, ni=ncell_tot) 
    51     mesh.set_attr(i_index=np.arange(ncell_tot,dtype=np.int32)) 
     61    mesh.set_attr(ni_glo=ncell_glo, ni=ncell, ibegin=displ, i_index=index_glo) 
    5262    mesh.set_attr(lonvalue_1d=lon, latvalue_1d=lat) 
    5363    mesh.set_attr(nvertex=nvertex,bounds_lon_1d=bnd_lon, bounds_lat_1d=bnd_lat) 
     
    6070    levp1.set_attr(n_glo=llm+1, value=np.arange(llm+1)) 
    6171    nq.set_attr(n_glo=nqtot, value=np.arange(nqtot)) 
    62     mesh_i=setup_domain('domaingroup','i', mesh.primal_deg, mesh.primal_vertex-1, lon_i, lat_i, lon_v, lat_v) # primal mesh 
     72     # primal mesh 
     73    mesh_i=setup_domain('domaingroup','i', mesh.primal_own_deg, mesh.primal_vertex, 
     74                            lon_i[mesh.primal_own_loc], lat_i[mesh.primal_own_loc], 
     75                            lon_v, lat_v, 
     76                            pmesh.dim_primal.n, mesh.primal_own_glo, mesh.displ) 
     77#    mesh_i=setup_domain('domaingroup','i', mesh.primal_deg, mesh.primal_vertex-1, lon_i, lat_i, lon_v, lat_v) # primal mesh 
    6378#    mesh_v=setup_domain('domain','v', mesh.dual_deg, mesh.dual_vertex-1, lon_v, lat_v, lon_i, lat_i) # dual mesh 
    6479 
     
    92107    xios.context_close_definition() 
    93108 
     109lat_ik, junk  = np.meshgrid(lat_i, np.arange(llm), indexing='xy') 
     110 
     111def send_field1_primal(name, data): 
     112#    print 'send_field1_primal :', data.shape 
     113    data = data[mesh.primal_own_loc] 
     114    data = np.ascontiguousarray(data) 
     115    print 'send_field1_primal :', data.shape 
     116    xios.send_field(name, data) 
     117def send_field2_primal(name, data): 
     118#    print 'send_field2_primal :', data.shape 
     119    data = data[:,mesh.primal_own_loc] 
     120    data = np.ascontiguousarray(data) 
     121    print 'send_field2_primal :', data.shape 
     122    xios.send_field(name, data) 
     123     
    94124no_error=True 
    95125try: 
     
    100130            xios.update_calendar(i) 
    101131        print 'send_field', i 
    102         xios.send_field('ps', lat_i) 
     132        send_field1_primal('ps', lat_i) 
     133        send_field2_primal('theta', lat_ik) 
    103134except: 
    104135    print 'An error has occured, trying to close XIOS properly' 
Note: See TracChangeset for help on using the changeset viewer.