Changeset 6229 for TOOLS


Ignore:
Timestamp:
08/09/22 09:31:27 (21 months ago)
Author:
omamce
Message:

O.M: CPLRESTART. Corrections on create_flxat.py

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TOOLS/CPLRESTART/create_flxat.py

    r6228 r6229  
    5454d_In = xr.open_dataset (myargs.input) 
    5555 
    56 lon       = d_In.lon.astype(np.float64) 
    57 lat       = d_In.lat.astype(np.float64) 
    58 evap_oce  = d_In.evap_oce.astype(np.float64) 
    59 evap_sic  = d_In.evap_sic.astype(np.float64) 
    60 fract_oce = d_In.fract_oce.astype(np.float64) 
    61 fract_sic = d_In.fract_sic.astype(np.float64) 
    62 precip    = d_In.precip.astype(np.float64) 
    63 snow      = d_In.snow.astype(np.float64) 
    64 soll      = d_In.soll.astype(np.float64) 
    65 sols      = d_In.sols.astype(np.float64) 
    66 taux_oce  = d_In.taux_oce.astype(np.float64) 
    67 taux_sic  = d_In.taux_sic.astype(np.float64) 
    68 tauy_oce  = d_In.tauy_oce.astype(np.float64) 
    69 tauy_sic  = d_In.tauy_sic.astype(np.float64) 
    70 wind10m   = d_In.wind10m.astype(np.float64) 
     56lon       = d_In.lon.astype(np.float64).values 
     57lat       = d_In.lat.astype(np.float64).values 
     58evap_oce  = d_In.evap_oce.astype(np.float64).values 
     59evap_sic  = d_In.evap_sic.astype(np.float64).values 
     60fract_oce = d_In.fract_oce.astype(np.float64).values 
     61fract_sic = d_In.fract_sic.astype(np.float64).values 
     62precip    = d_In.precip.astype(np.float64).values 
     63snow      = d_In.snow.astype(np.float64).values 
     64soll      = d_In.soll.astype(np.float64).values 
     65sols      = d_In.sols.astype(np.float64).values 
     66taux_oce  = d_In.taux_oce.astype(np.float64).values 
     67taux_sic  = d_In.taux_sic.astype(np.float64).values 
     68tauy_oce  = d_In.tauy_oce.astype(np.float64).values 
     69tauy_sic  = d_In.tauy_sic.astype(np.float64).values 
     70wind10m   = d_In.wind10m.astype(np.float64).values 
     71 
     72## 
     73yxshape = lat.shape 
     74ny, nx = yxshape 
    7175 
    7276## Computations 
    73  
     77np.seterr (divide='ignore', invalid='ignore') 
    7478fract_oce_plus_sic  = (fract_oce + fract_sic) ; ## ocean fraction 
    75 fract_oce_norm = xr.where (fract_oce_plus_sic >  0.0, (fract_oce)/fract_oce_plus_sic, 0.0) # free ocean vs. total ocen fraction 
    76 fract_sic_norm = xr.where (fract_oce_plus_sic >  0.0, (fract_sic)/fract_oce_plus_sic, 0.0) # sea ice vs. total ocean fraction 
    77 ## 
    78 COTOTRAI = precip-snow    ##  Liquid precip 
    79 COTOTSNO = snow           ##  Solid precipitation 
    80 COTOTEVA = evap_oce*fract_oce_norm + evap_sic*fract_sic_norm 
    81 COICEVAP = evap_sic       ## Evaporation on sea ice 
    82 COQSRMIX = sols           ## Heat flux short wave 
    83 COQNSMIX = soll           ## Heat flux minus short wave 
    84 COSHFICE = sols           ## Heat flux short wave over sea ice 
    85 CONSFICE = soll           ## Heat flux minus short wave over sea ice 
    86 CODFLXDT = -20.0          ## W/m2 - dQ/dt 
    87 COCALVIN =   0.0          ## Calving of icebergs, solid 
    88 COLIQRUN =   0.0          ## River run-off , liquid 
    89 COWINDSP = wind10m        ## Wind speed at 10m high 
    90 COTAUMOD =   0.0          ## Wind stress modulus 
     79fract_oce_norm = np.where (fract_oce_plus_sic >  0.0, fract_oce/fract_oce_plus_sic, 0.0) # free ocean vs. total ocen fraction 
     80fract_sic_norm = np.where (fract_oce_plus_sic >  0.0, fract_sic/fract_oce_plus_sic, 0.0) # sea ice vs. total ocean fraction 
     81## 
     82COTOTRAI = xr.DataArray (precip-snow, dims=('y', 'x')) 
     83COTOTRAI.attrs['long_name'] = 'Liquid precip' 
     84COTOTRAI.attrs['coordinates'] = "lat lon" 
     85 
     86COTOTSNO = xr.DataArray (snow       , dims=('y', 'x')) 
     87COTOTSNO.attrs['long_name'] ='Solid precipitation' 
     88COTOTSNO.attrs['coordinates'] = "lat lon" 
     89 
     90COTOTEVA = xr.DataArray (evap_oce*fract_oce_norm + evap_sic*fract_sic_norm, dims=('y', 'x'))   
     91COTOTEVA.attrs['coordinates'] = "lat lon" 
     92 
     93COICEVAP = xr.DataArray (evap_sic   , dims=('y', 'x')) 
     94COICEVAP.attrs['long_name'] = 'Evaporation on sea ice' 
     95COICEVAP.attrs['coordinates'] = "lat lon" 
     96 
     97COQSRMIX = xr.DataArray (sols       , dims=('y', 'x')) 
     98COQSRMIX.attrs['long_name'] = 'Heat flux short wave' 
     99COQSRMIX.attrs['units'] = 'W/m2' 
     100COQSRMIX.attrs['coordinates'] = "lat lon" 
     101 
     102COQNSMIX = xr.DataArray (soll       , dims=('y', 'x')) 
     103COQNSMIX.attrs['long_name'] = 'Heat flux minus short wave' 
     104COQNSMIX.attrs['units'] = 'W/m2' 
     105COQNSMIX.attrs['coordinates'] = "lat lon" 
     106 
     107COSHFICE = xr.DataArray (sols       , dims=('y', 'x')) 
     108COSHFICE.attrs['long_name'] = 'Heat flux short wave over sea ice' 
     109COSHFICE.attrs['units'] = 'W/m2' 
     110COSHFICE.attrs['coordinates'] = "lat lon" 
     111 
     112CONSFICE = xr.DataArray (soll       , dims=('y', 'x')) 
     113CONSFICE.attrs['long_name'] = 'Heat flux minus short wave over sea ice' 
     114CONSFICE.attrs['units'] = 'W/m2' 
     115CONSFICE.attrs['coordinates'] = "lat lon" 
     116 
     117COWINDSP = xr.DataArray (wind10m    , dims=('y', 'x')) 
     118COWINDSP.attrs['long_name'] = 'Wind speed at 10m high' 
     119COWINDSP.attrs['units'] = 'm/s' 
     120COWINDSP.attrs['coordinates'] = "lat lon" 
     121 
     122CODFLXDT = xr.DataArray (-20.0*np.ones(yxshape), dims=('y', 'x')) 
     123CODFLXDT.attrs['long_name'] = 'dQ/dT - Derivative over temperatue of turbulent heat fluxes' 
     124CODFLXDT.attrs['units'] = 'W/m2/K'      
     125CODFLXDT.attrs['coordinates'] = "lat lon" 
     126 
     127COCALVIN = xr.DataArray (  0.0*np.ones(yxshape), dims=('y', 'x')) 
     128COCALVIN.attrs['long_name'] = 'Calving of icebergs, solid' 
     129COCALVIN.attrs['coordinates'] = "lat lon" 
     130 
     131COLIQRUN = xr.DataArray (  0.0*np.ones(yxshape), dims=('y', 'x')) 
     132COLIQRUN.attrs['long_name'] = 'River run-off, liquid' 
     133COLIQRUN.attrs['coordinates'] = "lat lon" 
    91134 
    92135## Wind stress 
    93 tau_x = (taux_oce*fract_oce_norm + taux_sic*fract_sic_norm) ;  
    94 tau_y = (tauy_oce*fract_oce_norm + tauy_sic*fract_sic_norm) ; 
    95 COTAUMOD = np.sqrt ( (tau_x*tau_x + tau_y*tau_y) )  ; 
     136tau_x = (taux_oce*fract_oce_norm + taux_sic*fract_sic_norm) 
     137tau_y = (tauy_oce*fract_oce_norm + tauy_sic*fract_sic_norm) 
     138COTAUMOD = xr.DataArray (np.sqrt ( (tau_x*tau_x + tau_y*tau_y) ) , dims=('y', 'x')) 
     139COTAUMOD.attrs['long_name'] = 'Wind stress modulus' 
     140COTAUMOD.attrs['units'] = 'Pa' 
     141COTAUMOD.attrs['coordinates'] = "lat lon" 
    96142 
    97143## Wind stress, from east/north components to geocentric 
    98 rad = np.deg2rad(1.0) 
    99 COTAUXXU = -tau_x * np.sin(rad * lon) - tau_y * np.sin(rad * lat) * np.cos(rad * lon)  
    100 COTAUYYU =  tau_x * np.cos(rad * lon) - tau_y * np.sin(rad * lat) * np.sin(rad * lon) 
    101 COTAUZZU =  tau_y * np.cos(rad * lat) 
     144rad = np.deg2rad (1.0) 
     145COTAUXXU = xr.DataArray (-tau_x * np.sin(rad * lon) - tau_y * np.sin(rad * lat) * np.cos(rad * lon) , dims=('y', 'x')) 
     146COTAUYYU = xr.DataArray ( tau_x * np.cos(rad * lon) - tau_y * np.sin(rad * lat) * np.sin(rad * lon) , dims=('y', 'x')) 
     147COTAUZZU = xr.DataArray ( tau_y * np.cos(rad * lat)                                                 , dims=('y', 'x')) 
     148 
    102149 
    103150## Value at North Pole 
    104  
    105151if myargs.IsUnstructured == 'yes' : 
    106152    ## Value at North Pole for DYNAMICO grid  
     
    119165 
    120166## 
     167COTAUXXU.attrs['long_name'] = 'Wind stress in geocentric referential - x-component' 
     168COTAUYYU.attrs['long_name'] = 'Wind stress in geocentric referential - y-component' 
     169COTAUZZU.attrs['long_name'] = 'Wind stress in geocentric referential - z-component' 
     170 
     171COTAUXXU.attrs['units'] = 'Pa' 
     172COTAUYYU.attrs['units'] = 'Pa' 
     173COTAUZZU.attrs['units'] = 'Pa' 
     174 
     175COTAUXXU.attrs['coordinates'] = "lat lon" 
     176COTAUYYU.attrs['coordinates'] = "lat lon" 
     177COTAUZZU.attrs['coordinates'] = "lat lon" 
     178 
    121179COTAUXXV = COTAUXXU ; COTAUYYV = COTAUYYU ; COTAUZZV = COTAUZZU 
    122 ## 
     180 
    123181 
    124182## Creates final Dataset 
    125  
    126 d_Out = xr.Dataset ( { 
     183lon = xr.DataArray (lon, dims=('y', 'x')) 
     184lon.attrs['name']      = 'longitude' 
     185lon.attrs['long_name'] = 'Longitude' 
     186lon.attrs['units']     = 'degrees_east' 
     187lon.attrs['bounds']    = 'bounds_lon' 
     188 
     189lat = xr.DataArray (lat, dims=('y', 'x')) 
     190lat.attrs['name']      = 'latitude' 
     191lat.attrs['long_name'] = 'Latitude' 
     192lat.attrs['units']     = 'degrees_north' 
     193lat.attrs['bounds']    = 'bounds_lat' 
     194 
     195bounds_lon = d_In.bounds_lon.values.astype (np.float64) 
     196bounds_lat = d_In.bounds_lat.values.astype (np.float64) 
     197nvertex = bounds_lon.shape[-1] 
     198 
     199bounds_lon = xr.DataArray ( np.reshape (bounds_lon, (ny,nx,nvertex)), dims=('y', 'x', 'nvertex')) 
     200bounds_lat = xr.DataArray ( np.reshape (bounds_lat, (ny,nx,nvertex)), dims=('y', 'x', 'nvertex')) 
     201 
     202bounds_lon.attrs['units'] = 'degrees_east' 
     203bounds_lat.attrs['units'] = 'degrees_north' 
     204 
     205d_Out = xr.Dataset ( {'lat':lat, 'lon':lon, 'bounds_lon':bounds_lon, 'bounds_lat':bounds_lat,  
    127206    'COTOTRAI':COTOTRAI, 
    128207    'COTOTSNO':COTOTSNO, 
     
    145224    'COTAUZZV':COTAUZZV } ) 
    146225 
     226d_Out.attrs['Associated files'] = myargs.input 
     227d_Out.attrs['Conventions']     = "CF-1.6" 
     228d_Out.attrs['source']          = "IPSL Earth system model" 
     229d_Out.attrs['group']           = "ICMC IPSL Climate Modelling Center" 
     230d_Out.attrs['Institution']     = "IPSL https.//www.ipsl.fr" 
     231try    : d_Out.attrs['directory'] = os.getcwd () 
     232except : pass 
     233try    : d_Out.attrs['HOSTNAME'] = platform.node () 
     234except : pass 
     235try    : d_Out.attrs['LOGNAME']  = os.getlogin () 
     236except : pass 
     237try    : d_Out.attrs['Python']   = "Python version " +  platform.python_version () 
     238except : pass 
     239try    : d_Out.attrs['OS']       = platform.system () 
     240except : pass 
     241try    : d_Out.attrs['release']  = platform.release () 
     242except : pass 
     243try    : d_Out.attrs['hardware'] = platform.machine () 
     244except : pass 
     245d_Out.attrs['conventions']     = "SCRIP" 
     246d_Out.attrs['dest_grid']       = "curvilinear" 
     247d_Out.attrs['Model']           = "IPSL CM6" 
     248d_Out.attrs['SVN_Author']      = "$Author: omamce $" 
     249d_Out.attrs['SVN_Date']        = "$Date: 2022-07-06 11:06:07 +0200 (Wed, 06 Jul 2022) $" 
     250d_Out.attrs['SVN_Revision']    = "$Revision: 6190 $" 
     251d_Out.attrs['SVN_Id']          = "$Id: CalvingWeights.py 6190 2022-07-06 09:06:07Z omamce $" 
     252d_Out.attrs['SVN_HeadURL']     = "$HeadURL: svn+ssh://omamce@forge.ipsl.jussieu.fr/ipsl/forge/projets/igcmg/svn/TOOLS/MOSAIX/CalvingWeights.py $" 
     253 
     254 
    147255d_Out.to_netcdf ( myargs.output, format=NcFormat ) 
    148  
     256d_Out.close() 
    149257## =========================================================================== 
    150258## 
Note: See TracChangeset for help on using the changeset viewer.