Changeset 4259 for TOOLS/MOSAIX/nemo.py


Ignore:
Timestamp:
02/07/19 10:04:07 (5 years ago)
Author:
omamce
Message:

O.M. : MOSAIX

  • Two versions of fraction on atmosphere grid to be compatible with both DYNAMICO and LMDZ
  • Various improvments
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TOOLS/MOSAIX/nemo.py

    r4083 r4259  
    2121__HeadURL    = "$HeadURL$" 
    2222 
    23 def lbc (ptab, nperio=6, cd_type='T', psgn=1.0) : 
    24     # Set periodicity on input fields 
     23import sys, numpy as np 
     24 
     25def __guessNperio__ (jpi, nperio) : 
    2526    """ 
     27    Tries to guess the value of nperio 
     28    """ 
     29    if nperio == None : 
     30        if jpi ==  182 : nperio = 4 #   ORCA2. We choose legacy orca2 
     31        if jpi ==  362 : nperio = 6 #   ORCA1. 
     32        if jpi == 1442 : nperio = 6 # ORCA025. 
     33        # 
     34        if nperio == None : 
     35            sys.exit ('in nemo.lbc : nperio not found, and cannot by guessed' ) 
     36        else : 
     37            print ('nperio set as {:d} (deduced from jpi={:d}'.format(nperio, jpi)) 
     38 
     39    return nperio     
     40             
     41def lbc (ptab, nperio=None, cd_type='T', psgn=1.0) : 
     42    """ 
     43    Set periodicity on input fields 
    2644    ptab      : Input array 
    27       rank 2 at least : patb[...., lat, lon] 
     45      rank 2 at least : ptab[...., lat, lon] 
    2846    nperio    : Type of periodicity 
    2947      1, 4, 6 : Cyclic on i dimension (generaly longitudes) 
     
    3250      5, 6    : North fold F-point pivot (ORCA1, ORCA025, ORCA2 with new grid for paleo) 
    3351    cd_type   : Grid specification : T, U, V or F 
    34     psgn      : For change of sign for vector components 
     52    psgn      : For change of sign for vector components (1 for scalars, -1 for vector components) 
    3553     
    3654    See NEMO documentation for further details 
    3755    """ 
    3856         
    39     jpi = ptab.shape[-1] 
     57    jpi    = ptab.shape[-1] 
     58    nperio = __guessNperio__ ( jpi, nperio ) 
     59    psgn   = ptab.dtype.type(psgn) 
    4060     
    4161    # 
    4262    #> East-West boundary conditions 
    43     # -------------------------------- 
     63    # ------------------------------ 
    4464 
    4565    if nperio in [1, 4, 6] : 
     
    5070    # 
    5171    #> North-South boundary conditions 
    52     # ---------------------------------- 
    53     if nperio in [3, 4] :  # North fold T-point pivot      
     72    # -------------------------------- 
     73    if nperio in [3, 4] :  # North fold T-point pivot 
    5474        if cd_type in [ 'T', 'W' ] : # T-, W-point 
    5575            ptab[..., -1, 1:       ] = psgn * ptab[..., -3, -1:0:-1      ]       
     
    84104        if cd_type == 'V' : 
    85105            ptab[..., -1, 0:       ] = psgn * ptab[..., -3, -1::-1       ] 
    86             ptab[..., -2, jpi/2:   ] = psgn * ptab[..., -2, jpi/2-1::-1 ] 
     106            ptab[..., -2, jpi//2:  ] = psgn * ptab[..., -2, jpi//2-1::-1 ] 
    87107                              
    88108        if cd_type == 'F' : 
     
    94114 
    95115 
    96 def lbc_mask (ptab, nperio=6, cd_type='T', psgn=1.0) : 
    97     # Mask fields on duplicate points 
     116def lbc_mask (ptab, nperio=None, cd_type='T') : 
     117    # 
    98118    """ 
     119    Mask fields on duplicated points 
    99120    ptab      : Input array 
    100       rank 2 at least : patb[...., lat, lon] 
     121      rank 2 at least : ptab[...., lat, lon] 
    101122    nperio    : Type of periodicity 
    102123      1, 4, 6 : Cyclic on i dimension (generaly longitudes) 
     
    105126      5, 6    : North fold F-point pivot (ORCA1, ORCA025, ORCA2 with new grid for paleo) 
    106127    cd_type   : Grid specification : T, U, V or F 
    107     psgn      : For change of sign for vector components 
    108128     
    109129    See NEMO documentation for further details 
    110130    """ 
    111          
    112     jpi = ptab.shape[-1] 
    113     # 
    114     zero = 0 
     131 
     132    jpi    = ptab.shape[-1] 
     133    nperio = __guessNperio__ ( jpi, nperio ) 
     134    zero   = ptab.dtype.type(0) 
    115135     
    116136    # 
    117137    #> East-West boundary conditions 
    118     # -------------------------------- 
    119  
     138    # ------------------------------ 
    120139    if nperio in [1, 4, 6] : 
    121140        # ... cyclic 
    122141        ptab [...,:,  0] = zero 
    123142        ptab [...,:, -1] = zero 
    124     
     143 
     144    # 
     145    #> South (in which nperio cases ?) 
     146    # -------------------------------- 
     147    if nperio in [1, 3, 4, 5, 6] : 
     148        ptab[...,0,:] = zero 
     149         
    125150    # 
    126151    #> North-South boundary conditions 
    127     # ---------------------------------- 
     152    # -------------------------------- 
    128153    if nperio in [3, 4] :  # North fold T-point pivot      
    129154        if cd_type in [ 'T', 'W' ] : # T-, W-point 
     
    146171            ptab[..., -2, 0:-1     ] = zero 
    147172            ptab[..., -1, 0:-1     ] = zero 
    148             ptab[..., -1,  0       ] =zero 
     173            ptab[..., -1,  0       ] = zero 
    149174            ptab[..., -1, -1       ] = zero 
    150175       
     
    159184        if cd_type == 'V' : 
    160185            ptab[..., -1, 0:       ] = zero 
    161             ptab[..., -2, jpi/2:   ] = zero 
     186            ptab[..., -2, jpi//2:  ] = zero 
    162187                              
    163188        if cd_type == 'F' : 
Note: See TracChangeset for help on using the changeset viewer.