User Tools

Site Tools


initial_conditions:oceanic

This is an old revision of the document!


Brief description

Please note that Ec-Earth2 includes NEMO2.2 and Ec-Earth3 includes NEMO3.3

ID OCEAN MODEL GRID FIRST LAST INTERVAL (MONTH) MEMBERS Comments References
s4 NEMO2.2 / NEMO3.2 / NEMO3.3 ORCA1 and ORCAL46 19580101 20141201 02, 05, 08, 11 fc0 - f4 ocean reanalysis - mask corrected for ORCA1 - vertically interpolated and extrapolated for ORCA1L46 Mogensen et al(2011), Balmaseda et al (2012)
GLORYS2V1 NEMO3.3 ORCA1L46 19921101 20091101 05,11 fc0 Interpolated initial conditions from an ocean reanalysis Ferry et al (2010)
GLORYS2V1 NEMO3.3 ORCA025L46 19921101 20091101 05,11 fc0 Interpolated initial conditions from an ocean reanalysis Ferry et al (2010)
GLORYS2V1 NEMO3.3 ORCA025L75 19921101 20091101 05,11 fc0 ocean reanalysis Ferry et al (2010)
GLOSEA5 NEMO3.3 ORCA025L75 19930430 20131031 05,11 fc0 ocean reanalysis, extrapolated horizontally to match the mask of the NEMO version we use Mogensen et al (2009)
GLOSEA5 NEMO3.3 ORCA1L46 19930430 20131031 05,11 fc0 Interpolated initial conditions from an ocean reanalysis Mogensen et al (2009)
ORAP5 NEMO3.3 ORCA025L75 19790430 20131031 05,11 fc0 ocean reanalysis Hao et al (2015)
ORAP5 NEMO3.3 ORCA1L46 19790430 20131031 05,11 fc0 Interpolated initial conditions from an ocean reanalysis Hao et al (2015)
m01x NEMO3.3 ORCA1L46 19921101 20091101 02,05,08,11 fc0 Initial conditions produced by nudging the ocean component in EC-Earth3.0.1 toward the monthly T and S from GLORYS2V1 ocean reanalysis no reference yet
m01w NEMO3.3 ORCA025L46 19921101 20091101 02,05,08,11 fc0 Initial conditions produced by nudging the ocean component in EC-Earth3.0.1 toward the monthly T and S from GLORYS2V1 ocean reanalysis no reference yet
m01u NEMO3.3 ORCA025L75 19921101 20091101 02,05,08,11 fc0 Initial conditions produced by nudging the ocean component in EC-Earth3.0.1 toward the monthly T and S from GLORYS2V1 ocean reanalysis no reference yet

|

Need for new ocean initial conditions

These are ranked by priority :

1) ORAS4 ORCA1L75 configuration for 1958 to present

2) GLORYS2v1 ORCA1L75 configuration for 1993 to 2009

3) ORAS4 all configurations whole period

4) GLORYS2V3 all configurations whole period

References

Balmaseda M.A., Mogensen K.S., Weaver A.T., 2012, Evaluation of the ECMWF Ocean Reanalysis ORAS4. Quart J Roy Meteor Soc DOI 10.1002/qj.2063.

Ferry N et al., 2010, Mercator global eddy permitting ocean reanalysis GLORYS1v1: description and results. Mercator Ocean Quart. Newsl, 36, 15-27.

Mogensen K.S., Balmaseda M.A., Weaver A., 2011, The NEMOVAR ocean data assimilation as implemented in the ECMWF ocean analysis for system 4. ECMWF Technical Memorandum, 668.

Mogensen K.S., Balmaseda M.A., Weaver A., Martin M.J., Vidard A., 2009, NEMOVAR: A variational data assimilation system for the NEMO ocean model. ECMWF newsletter.

Hao Z., Balmaseda M. A., Mogensen K., 2015, The new eddy-permitting ORAP5 ocean reanalysis: description, evaluation and uncertainties in climate signals. Climate Dynamics (2015): 1-21.

How_to_generate_new_ocean_initial_conditions

ORAP5, ORCA025L75

1. Update the ecaccess-certificate-create tool, which gives 7 days of access to ECMWF repositories.

2. Fetch the data locally by running the script.sh below (in moore or amdahl with sbatch script.sh)

#!/bin/bash
#SBATCH -n 1
#SBATCH -t 10-12:00:00
#SBATCH -J fetchORAP5
#SBATCH --mem=60000
#SBATCH -o fetch-orap5-%j.log   
    
set -evx
TMPDIR=/scratch/$(whoami)/$$
mkdir -p $TMPDIR
cd $TMPDIR   
  
module load ECAC   
 
DATASOURCE="ec:/RDX/prepIFS/g0tx" # Root of the path where to find ORAS4 on ECFS
YEARI=2000 # First eyar to download  
YEARF=2013 # Last year to download
MEMBER_LST="0" # List of members to download
YEAR=$YEARI    
  
workdir=`pwd`   
     
echo $YEAR
for year in `seq $YEARI $YEARF`; do
mkdir -p /esnas/reconstructions/ecmwf/orap5/restarts/$YEAR
for mem in $MEMBER_LST ; do
  for file in $( ecaccess-file-dir ${DATASOURCE}/opa${mem}/restart/${YEAR}/g0tx_${YEAR}*_*_restart.tar.gz )
  do
    if [[ "$file" != "ECFS" ]];then
      echo $file
      if [[ ! -f /esnas/reconstructions/ecmwf/orap5/restarts/${YEAR}/$file ]]; then
        while [[ ! -f /esnas/reconstructions/ecmwf/orap5/restarts/${YEAR}/$file ]]
        do
          ecaccess-file-get -progress ${DATASOURCE}/opa${mem}/restart/${YEAR}/$file $file
          mv $file /esnas/reconstructions/ecmwf/orap5/restarts/${YEAR}/.
        done
      fi
    fi
  done
done
YEAR=$((YEAR+1))
done
 
rm -rf $TMPDIR

3. Copy the data using the correct naming, in the repository of the initial conditions.

- Pay attention that for initial conditions for 1st May and 1st November we use the closest available dates in the original data, which are not always the same for each year.

- Also, we check the size in the original data, because some dates have half size, which means that they do not have all the variables we need for interpolation. For example, the restart of 19930430 is not suitable for using as initial condition:

ll /esnas/reconstructions/ecmwf/orap5/restarts/1993/*199304*

-rw-r--r-- 1 pbretonn Earth 9184196770 Oct  7 04:31 /esnas/reconstructions/ecmwf/orap5/restarts/1993/g0tx_19930401_00021960_restart.tar.gz
-rw-r--r-- 1 pbretonn Earth 9181022277 Oct  7 04:54 /esnas/reconstructions/ecmwf/orap5/restarts/1993/g0tx_19930406_00022320_restart.tar.gz
-rw-r--r-- 1 pbretonn Earth 9183757715 Oct  7 05:17 /esnas/reconstructions/ecmwf/orap5/restarts/1993/g0tx_19930411_00022680_restart.tar.gz
-rw-r--r-- 1 pbretonn Earth 9181268805 Oct  7 05:45 /esnas/reconstructions/ecmwf/orap5/restarts/1993/g0tx_19930416_00023040_restart.tar.gz
-rw-r--r-- 1 pbretonn Earth 9178049931 Oct  7 06:13 /esnas/reconstructions/ecmwf/orap5/restarts/1993/g0tx_19930421_00023400_restart.tar.gz
-rw-r--r-- 1 pbretonn Earth 9179559914 Oct  7 06:35 /esnas/reconstructions/ecmwf/orap5/restarts/1993/g0tx_19930426_00023760_restart.tar.gz
-rw-r--r-- 1 pbretonn Earth 4927336766 Oct  7 06:50 /esnas/reconstructions/ecmwf/orap5/restarts/1993/g0tx_19930430_00024048_restart.tar.gz

After the manual checking, we run the following script:

#!/bin/bash
#SBATCH -n 1
#SBATCH -t 10-12:00:00
#SBATCH -J fetchORAP5
#SBATCH --mem=60000
#SBATCH -o fetch-orap5-%j.log     
     
set -evx
TMPDIR=/scratch/$(whoami)/$$
mkdir $TMPDIR
cd $TMPDIR
 
dir=/esnas/reconstructions/ecmwf/orap5/restarts/ 
outdir=/esnas/releases/ic/ocean/ORCA025L75/ORAP5
curdir=`pwd`   
 
for year in {2005..2007} ; do 
 ##May start dates 
echo $year 
dirin=${dir}/${year} 
if [ -e $dirin  ] ; then   
	cd $dirin 
              for file in $( ls   g0tx_${year}0428* ) ; do 
		inname=$(echo $file | cut -f1 -d"." )
		ofile=ORAP5_fc0_${year}0430_restart.nc.gz
		if [ ! -e  ${outdir}/${ofile}  ]  ; then   
		cd $curdir 
		gunzip -c   ${dirin}/$file  >  ${inname}.tar  
		tar xfv ${inname}.tar  
		gzip -c ${inname}.nc >  ${outdir}/${ofile} 
		rm -rf  ${curdir}/g0tx*tar  ${curdir}/g0t*nc 
	fi 
done 
fi 
     
 # November start dates 
    	echo $year 
dirin=${dir}/${year} 
if [ -e $dirin  ] ; then   
	cd $dirin 
              for file in $( ls   g0tx_${year}1030* ) ; do 
		inname=$(echo $file | cut -f1 -d"." )
		ofile=ORAP5_fc0_${year}1031_restart.nc.gz
		if [ ! -e  ${outdir}/${ofile}  ]  ; then   
		cd $curdir 
		gunzip -c   ${dirin}/$file  >  ${inname}.tar  
		tar xfv ${inname}.tar  
		gzip -c ${inname}.nc >  ${outdir}/${ofile} 
		rm -rf  ${curdir}/g0tx*tar  ${curdir}/g0t*nc 
	fi 
done 
fi 
done    
  
  
rm -rf $TMPDIR
ORAP5, ORCA1L46

We use a software called SOSIE http://sosie.sourceforge.net/ to interpolate the data. We run the script.sh below (on moore or amdahl by sbatch script.sh). We need two files:

- The executable sosie.x

- The weights for the interpolation ORCA025-ORCA1.map

Both files are available on cfutools in branch develop-eleftheria, in the directory

prep_restarts/sources_for_ORCA025-ORCA1  

The script.sh is:

 
  #!/bin/bash
  #SBATCH -n 1
  #SBATCH -t 10-12:00:00
  #SBATCH -J orap5-LR 
  #SBATCH --mem=60000
  #SBATCH -o orap5-LR-%j.log
 

  set -evx
  TMPDIR=/scratch/$(whoami)/$$
  mkdir -p $TMPDIR
  cd $TMPDIR
 
  
  # Copy the masks of the input file and the output file: 
  maskin='mesh_mask_nemo.Ec3.0_O25L75.nc' 
  maskout='mesh_mask_nemo.Ec3.0_O1L46.nc'
  ln -sf  /esnas/autosubmit/con_files/$maskin 
  ln -sf  /esnas/autosubmit/con_files/$maskout 

  
  cp  /${cfutools}/prep_restarts/sources_for_ORCA025-ORCA1/sosie.x             . 
  cp  /${cfutools}/prep_restarts/sources_for_ORCA025-ORCA1/ORCA025-ORCA1.map   . 

  #!/bin/bash
   
  set -evx 
  # This script extrapolates horizontally, interpolates horizontally and interpolates vertically 
  # the scalar fields   
  #   
  # History : Eleftheria Exarchou  - Initial version           June 2015 
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  #                                Arguments
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  # The masks of the input file, which here is in ORAP5 ORCA05L75 
  # and the output file, which is the ORCA01L46
  maskin='mesh_mask_nemo.Ec3.0_O25L75.nc' 
  maskout='mesh_mask_nemo.Ec3.0_O1L46.nc'

  dirhigh=/esnas/releases/ic/ocean/ORCA025L75/ORAP5/
  dirlow=/esnas/releases/ic/ocean/ORCA1L46/ORAP5/
  curdir=`pwd`


  listdates=( '0430' '1031'  )

  for year in {1998..2000} ; do 
	echo $year 

  for date in ${listdates[@]} ; do
  file_final=ORAP5_fc0_${year}${date}_restart 

        # check if interpolated file exists already in esnas
	if [ ! -e  /esnas/releases/ic/ocean/ORCA1L46/ORAP5/${file_final}.nc.gz ] ; then   
	# check if the HR file exists 
	if  [  -e ${dirhigh}/ORAP5_fc0_${year}${date}_restart.nc.gz ] ; then  
        # check if file is locally here already (or: use gunzip -f to force overwrite, but this is slower )
	if [ ! -e  ${curdir}/ORAP5_fc0_${year}${date}_restart.nc ] ; then   
	gunzip -c  ${dirhigh}/ORAP5_fc0_${year}${date}_restart.nc.gz   > ${curdir}/ORAP5_fc0_${year}${date}_restart.nc
        fi 
	# Input/output restart file names 
	restart_in=ORAP5_fc0_${year}${date}_restart  
	restart_out=ORAP5_fc0_${year}${date}_restart_int



    listvars3d=( 'en' 'avt' 'avm' 'avmu' 'avmv' 'dissl' 'un' 'vn' 'tn' 'sn' 'rotn' 'hdivn' 'rhop' 'ub' 'vb' 'tb' 'sb' 'rotb' 'hdivb' 'ssu_m' 'ssv_m' 'sst_m' 'sss_m' 'ssh_m' 'rnf_b' 'rnf_hc_b' 'rnf_sc_b' 'utau_b' 'vtau_b' 'qns_b' 'emp_b' 'emps_b' 'sshn sshb' 'gcx' 'gcxb' )
   varscopy='nn_fsbc,rdt,rdttra1,kt,ndastp,adatrj,slim'


  # Create the initial restart file with the basic set of 0 dimensional variables 
  if [[ ! -e ${restart_out}.nc ]] ; then
  ncks -O -v $varscopy ${restart_in}.nc ${restart_out}.nc
  ncks -A -v nav_lon,nav_lat,nav_lev    $maskout ${restart_out}.nc
  fi 

  # Specify the masks etc that correspond to each variable
  for var in ${listvars3d[@]} ; do
  case $var in
   'avmu'|'un'|'ub') mask='umask' ; interp3d='0'  ;;
   'ssu_m'|'utau_b') mask='umask' ; interp3d='1'  ;;
   'avmv'|'vn'|'vb') mask='vmask' ; interp3d='0'  ;;
   'ssv_m'|'vtau_b') mask='vmask' ; interp3d='1'  ;;
   'rotb'|'rotn')    mask='fmask' ; interp3d='0'  ;;
   'avt'|'avm'|'en'|'dissl'|'hdivb'|'hdivn'|'rhop'|'sn'|'tn'|'sb'|'tb') mask='tmask' ; interp3d=0  ;;
   'qns_b'|'emp_b'|'emps_b'|'sst_m'|'sss_m'|'ssh_m'|'rnf_b'|'rnf_hc_b'|'rnf_sc_b') mask='tmask' ; interp3d=1  ;;
   'gcx'|'gcxb'|'sshb'|'sshn')  mask='tmask' ;  interp3d=1  ;;
  esac


  # Check if interpolation for this particular variable is already done 
  if [ ! -e ${var}_ORCA025-ORCA1_restart_${year}${date}_miss.nc ] ;  then  

  file_in=${var}_in.nc 
  ncks -O  -v ${var},nav_lon,nav_lat,nav_lev,time_counter ${restart_in}.nc $file_in
  ncrename -d t,time  $file_in

  cat <<EOF > namelist_$var 

!! ------------------- 
!! Namelist for SOSIE 
!! ------------------- 
!! 
!! 
!! *********************** 
!! Input characteristics : 
!! *********************** 
!! 
!! ivect : vector correction control on treated field [integer] 
!!         ivect = 0 : input field is not a component of a vector 
!!         or the target grid is regular (lregout = T) 
!!         * if non-regular distorted target grids (like ORCAX): 
!!         ivect = 1 : input field is a zonal (X) component of a vector 
!!         ivect = 2 : input field is a meridional (Y) component of a vector 
!! 
!! lregin : is the source grid regular? [logical] 
!!          (ie : are input longitude and latitude 1D?) 
!! 
!! cf_in   : file containing the input field to be interpolated [char]
!! cv_in   : name of treated variable (in input field file) [char]
!!
!! cv_t_in : name of time record variable in the input file [char]
!!           or 'missing_rec' if no time record is present in the input file
!!
!! jt1     : first time record to be interpolated
!! jt2     : last  time record to be interpolated
!!           => set jt1 and jt2 to 0 if you want to skip this option 
!!              and interpolate the nt time steps of the current field
!! 
!! jplev : level to treat if your file is 3D (spatial), has no influence if 
!!         your file is 2D !
!!         jplev > 0 = level to treat (ex : jplev = 1 will interpolate only 
!!                     surface field corresponding to the 1st level )
!!       ------------------------------------------------------------------
!!       | jplev = 0 : perform 3D interpolation (if input file is 3D) !!! |
!!       ------------------------------------------------------------------
!!
!! cf_x_in   : file containing the input grid (usually = cf_in) [char] 
!! cv_lon_in : name of longitude in the input grid file [char] 
!! cv_lat_in : name of latitude in the input grid file [char] 
!! 
!! cf_lsm_in : file containing the input land-sea mask [char]
!!             or specify 'missing_value' if a 'missing_value' netcdf
!!             attribute defines the mask on the input data field
!!             (not needed if "ldrown = .FALSE." --> '')

!! cv_lsm_in : name of land-sea mask variable [char]
!!             (not needed if "ldrown = .FALSE." 
!!              or if cf_lsm_in = 'missing_value'--> '')
!!             by default ocean is flagged with value 1
!!             and continents are flagged with value 0
!!
!! ldrown : whether we call DROWN land filling procedure [logical] 
!!
!! ewper : east-west periodicity on the input file/grid [integer] 
!!         = -1 --> no periodicity 
!!         >= 0 --> periodicity with overlap of ewper points 
!! 
!! vmax : upper bound not to exceed for treated variable [real] 
!! vmin : lower bound not to exceed for treated variable [real] 
!!-------------------------------------------------------------------------- 
!! 
&ninput
ivect     = 0
lregin    = F  ! F becuase the input grid is not regular 
cf_in     = '$file_in'
cv_in     = '${var}'
cv_t_in   = 'time_counter' 
jt1       = 0   ! sdfgdfhgdfgh
jt2       = 0
jplev     = $interp3d  ! use 0 for 3D interpolation 
cf_x_in   = '$file_in' 
cv_lon_in = 'nav_lon'
cv_lat_in = 'nav_lat'
cf_lsm_in = '$maskin'
cv_lsm_in = '$mask'
ldrown    = T
ewper     = 0
vmax      =  1.E10
vmin      = -1.E10
/
!!
!!
!!
!!
!! ***********************************
!!  IF 3D INTERPOLATION ( jplev = 0 )
!! ***********************************
!!
!! Only mind if you do want to perform a 3D (spatial) interpolation
!! 
!! Mind only if you do want to perform a 3D interpolation !
!! First, make sure that jplev is set to 0 !
!!
!! cf_z_in  : file containing the input depth vector (associates a depth to a 
!!            given level). In most cases should be the same file than cf_x_in.
!! cv_z_in  : name of the variable for the input depth vector
!!
!! cf_z_out : file containing the output depth vector (associates a depth to a 
!!            given level). In most cases should be the same file than cf_x_in.
!! cv_z_out : name of the variable for the output depth vector in file 'cf_z_out'
!! cv_z_out_name: name you wish to give to depth variable in file to be created...
!!
!!
&n3d
cf_z_in  = '$file_in'
cv_z_in  = 'nav_lev'
cf_z_out = '$maskout'
cv_z_out = 'nav_lev'
cv_z_out_name = 'lev'
/
!! 
!!
!!
!!
!!
!! ***************************** 
!! Output Grid characteristics : 
!! ***************************** 
!! 
!! lregout : is the target grid regular ? [logical] 
!!           (ie : are output longitude and latitude 1D?) 
!!
!! cf_x_out   : file containing the target grid [char] 
!! cv_lon_out : name of longitude variable [char] 
!! cv_lat_out : name of latitude variable [char] 
!!
!! TRICK:  for interpolating onto a global regular spherical grid
!! ------  with a resolution of dx deg. of longitude and dy deg. of latitude
!!         * cf_x_out   = 'spheric' ! tells SOSIE to build a spherical output grid
!!         * cv_lon_out = '1.0'  ! your dx, here 1.0 deg. 
!!         * cv_lat_out = '1.0'  ! your dy, here 1.0 deg.
!!
!!
!! cf_lsm_out : file containing output land-sea mask [char] 
!!              MUST BE 3D for 3D interpolation!
!!              or specify 'missing_value' if a 'missing_value' netcdf
!!              attribute defines the mask on a field 'X' in file 'cf_x_out'
!!              (not needed if "lmout = .FALSE." --> '') 
!!
!! cv_lsm_out : name of land-sea mask variable in 'cf_lsm_out'     [char]
!!              or name of field 'X' in 'cf_x_out' if you specified 
!!              cf_lsm_out = 'missing_value'
!!              (not needed if "lmout = .FALSE." --> '') 
!!
!! lmout : whether to mask the interpolated field on the output file [logical] 
!!
!! rmaskvalue : missing value given to output field (for continents) [logical] 
!!
!! lct   : whether to control or not time variable [logical] 
!!         TRUE -> specify time array with starting time 't0' and step 't_stp' 
!!         FALSE -> same time array as in input file is used 
!! t0    : time to start (if lct is set to .TRUE.) [real] 
!! t_stp : time step (if lct is set to .TRUE.) [real] 
!!
!!
&noutput
lregout    = F   ! the output grid is not regular
cf_x_out   = '$maskout'
cv_lon_out = 'nav_lon'
cv_lat_out = 'nav_lat'
cf_lsm_out = '$maskout'
cv_lsm_out = '$mask'
lmout      = T
rmaskvalue = 1.e+20 ! -9999.
lct        = F
t0         = 0.
t_stp      = 0.25
/
!! 
!! 
!! 
!! 
!! ******************************* 
!! Netcdf output characteristics : 
!! ******************************* 
!! 
!! This mostly deals with how the output file to be created is going to look like!
!!
!! cmethod  : the 2D interpolation method to be used
!!            use 'akima' if your input domain is regular (non-distorted grid)
!!            use 'bilin' otherwise, which is bilinear 2D interpolation
!!
!! *** Into the netcdf file to be created : *** 
!! cv_l_out : name for longitude on the output file [char] 
!! cv_p_out : name for latitude on the output file [char] 
!! cv_t_out : name for time on the output file [char] 
!! cv_out   : name for treated variable on the output file [char] 
!! cu_out   : treated variable units [char] 
!! cu_t     : time unit [char]
!! cln_out  : treated variable long name [char] 
!! cd_out   : directory to create output file to [char]
!! 
!! *** Name of the output file : *** 
!! csource  : short string to describe origin of the file [char] 
!! ctarget  : short string to describe the target grid [char] 
!! cextra   : short extra indication about the file [char] 
!! 
&nnetcdf
cmethod  = 'bilin'
cv_l_out = 'x'  ! 'var_lon'
cv_p_out = 'y'  ! 'var_lat'
cv_t_out = 'time_counter'
cv_out   = '${var}'
cu_out   = ' '
cu_t     = 'unknown'
cln_out  = ' '
cd_out   = '.'
csource  = 'ORCA025'
ctarget  = 'ORCA1'
cextra   = 'restart_${year}${date}'
/ 
!!


EOF

./sosie.x  -f namelist_$var 


cdo setmisstoc,0  ${var}_ORCA025-ORCA1_restart_${year}${date}.nc  ${var}_ORCA025-ORCA1_restart_${year}${date}_miss.nc

ncks -A ${var}_ORCA025-ORCA1_restart_${year}${date}_miss.nc  ${restart_out}.nc 

rm -rf  ${var}_ORCA025-ORCA1_restart_${year}${date}_*.nc   
fi
done 


# Some variables have negative values in some points, 
# whereas they should be always positive. We fix it by
# making these values equal to 0. These vars are 
# avt,avm,avmu,avmv,dissl 

file1=ORAP5_fc0_${year}${date}_restart_int.nc   
file2=ORAP5_fc0_${year}${date}_restart_int_needtofix.nc                              
file3=ORAP5_fc0_${year}${date}_restart_int_fixed.nc                   
file4=ORAP5_fc0_${year}${date}_restart_int_valuesfixed.nc    
file5=ORAP5_fc0_${year}${date}_restart_int_valuesfixed_percision.nc    

cdo selvar,avt,avm,avmu,avmv,dissl  $file1  $file2
cdo setrtoc,-1000000000,0,0         $file2  $file3

cdo replace  $file1     $file3  $file4
cdo  -b 64 copy         $file4  $file5 

gzip -c  $file5  >  /esnas/releases/ic/ocean/ORCA1L46/ORAP5/${file_final}.nc.gz 
rm  -rf  ${curdir}/ORAP5_fc0_${year}${date}_restart.nc

fi 
fi 
done 
done 

rm -rf $TMPDIR

   
GLOSEA5, ORCA025L75

We need to extrapolate the files to the mask we use in the in-house model version of NEMO. We run the script.sh (sbatch script.sh in moore/amdahl)

#!/bin/bash
  #SBATCH -n 1
  #SBATCH -t 10-12:00:00
  #SBATCH -J gs5-HR 
  #SBATCH --mem=60000
  #SBATCH -o gs5-HR-%j.log

#!/bin/bash

set -evx
TMPDIR=/scratch/$(whoami)/$$
mkdir $TMPDIR
cd $TMPDIR

year=1994
mon=05

((mon1=$mon -1 ))


cp /home/Earth/$(whoami)/git-stuff/cfutools/prep_restarts/generate_restarts_gs5_HR/19940501/script_interp_vert_ocean_restart_GS5_ORCA025L75.bash  . 
ln -sf /cfunas/exp/MetOffice/GS5/restarts/${year}/${year}${mon}01__restart00.tar  ${year}${mon}01__restart00.tar  
ln -sf /cfu/autosubmit/con_files/mesh_mask_nemo.Ec3.0_O25L75_ClosedSeas.nc mesh_mask_nemo.Ec3.0_O25L75_ClosedSeas.nc 
ln -sf /cfu/autosubmit/con_files/new_mask.GloSea5_O25L75.nc mask_GS5.nc
ln -sf /cfu/pub/scripts/prep_restarts/auxfiles/masks/Tofill_ecearth.v3.0.ORCA025L75.extrap.glosea5.nc Tofill_extrap.nc 
ln -sf /cfu/pub/scripts/prep_restarts/auxfiles/masks/Tofill_ecearth.v3.0.ORCA025L75.clim.glosea5.nc   Tofill_clim.nc  

tar xvf  ${year}${mon}01__restart00.tar  
gunzip restart.nc.gz

./script_interp_vert_ocean_restart_GS5_ORCA025L75.bash  restart  restart_out  11 

ncecat -O -h restart_out.nc    tmp1.nc
ncrename -d record,t  tmp1.nc  tmp2.nc
cdo setmisstoc,0  tmp2.nc      GLOSEA5_fc0_${year}0${mon1}30_restart.nc

gzip -c GLOSEA5_fc0_${year}0${mon1}30_restart.nc > GLOSEA5_fc0_${year}0${mon1}30_restart.nc.gz  
mv  GLOSEA5_fc0_${year}0${mon1}30_restart.nc.gz  /cfu/releases/ic/ocean/ORCA025L75/GLOSEA5/

Where the script script_interp_vert_ocean_restart_GS5_ORCA025L75.bash is

#!/bin/bash
set -evx 
# 
# This script extrapolates horizontally,
# fills up empty seas with climatologies, extrapolate vertically, for GloSea5 restarts. 
#
# History : Virginie Guemas - Initial version                           2012 
#           Virginie Guemas - ORAS4 + vertical extrapolation + 
#                             commenting and clarifying         - March 2014
#           Eleftheria Exarchou - GloSea5                       - January 2015
# 
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#                                Arguments
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
type='glosea5' # 'glorys' / 'metoffice' : if you add another type, you'll have
             # to adapt the list of variables this restart contains below.
             # Look for the variable $type in the script.
fillinrot='TRUE' # Extrapolate or not the rotational rotn / rotb
                  # TRUE increases subtantially the interpolation time 
                  # FALSE has negligible effects ( u, v, t, s are initialized )
restart_in=$1 # Input restart file name without the .nc extension
#meshmaskin='/cfu/autosubmit/con_files/mesh_mask_nemo.nemovar_O1L42_new.nc'
meshmaskin='mask_GS5.nc'
    # Meshmask of the input reanalysis. Example:
    #'/cfu/autosubmit/con_files/mesh_mask_nemo.glorys2v1_O25L75.nc'
confout='ORCA025L75' # output configuration
#vertgridout='/cfu/autosubmit/con_files/mesh_mask_nemo.Ec3.0_O25L75.nc'
vertgridout='mesh_mask_nemo.Ec3.0_O25L75_ClosedSeas.nc'
    # Meshmask of the output restart, i.e. model and grid to be used in
    # climate prediction 
#Ptoextrap='/cfu/pub/scripts/prep_restarts/auxfiles/masks/Tofill_ecearth.v3.0.ORCA1L46.extrap.oras4.nc'
Ptoextrap='Tofill_extrap.nc'
    # Locations of the points where to extrapolate horizontally the restarts after
    # interpolation = 1 in the netcdf file, 0 everywhere else. Locations available
    # for the tmask, umask, vmask and fmask grid. If you don't know about those
    # four variables read about the NEMO documentation about the grid.
    # To obtain the Ptoextrap netcdf file, it is necessary to run once this script
    # without extrapolation and filling of the empty seas and compare the output
    # restart with the output meshmask. To do so, set 0 everywhere in Ptoextrap
    # and use build_Tofill.bash afterwards.
#Ptofillclim='/cfu/pub/scripts/prep_restarts/auxfiles/masks/Tofill_ecearth.v3.0.ORCA1L46.clim.nc'
Ptofillclim='Tofill_clim.nc'
    # Locations of the empty seas that need to be filled up with a climatology after
    # interpolation = 1 in the netcdf file, 0 everywhere else. Locations available
    # for the tmask, umask, vmask and fmask grid. If you don't know about those
    # four variables read about the NEMO documentation about the grid.
    # To obtain the Ptofillclim netcdf file, it is necessary to run once this script
    # without extrapolation and filling of the empty seas and compare the output
    # restart with the output meshmask. To do so, set 0 everywhere in Ptofillclim
    # and use build_Tofill.bash afterwards.
mon=$3 # Month of the restart on 2 digits MM
restart_out=$2 # Output restart file name without the .nc extension
cfutools='/home/eexarchou/git-stuff/cfutools'
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

case $type in
  'glorys') 
# List of 3d variables = that need to be vertically interpolated 
   listvarsinterp=( 'en' 'avt' 'avmt' 'avmu' 'avmv' 'dissl' 'ub' 'vb' 'tb' 'sb' 'rotb' 'hdivb' 'un' 'vn' 'tn' 'sn' 'rotn' 'hdivn' 'rhop' )
# List of 2d variables = that only need extrapolation  
   listvarsextrap=( 'gcx' 'gcxb' 'gcxbfs' 'gru' 'grv' 'gsu' 'gsv' 'gtu' 'gtv' 'ssh_m' 'sshb' 'sshn' 'sss_m' 'sst_m' 'ssu_m' 'ssv_m' )
# List of 0d variables = that need to be copied to the output restart
   varscopy='nn_fsbc,rdt,rdttra1'
  ;;
  'oras4')
   listvarsinterp=( 'en' 'ub' 'vb' 'tb' 'sb' 'rotb' 'hdivb' 'un' 'vn' 'tn' 'sn' 'rotn' 'hdivn' )
   listvarsextrap=('alb_ice' 'gcx' 'gcxb' 'sshb' 'sshn' 'u_io' 'v_io' 'sst_io' 'sss_io' ) 
   varscopy='nfice,rdt,rdttra1,ndastp,adatrj'
  ;;
  'glosea5')
   listvarsinterp=( 'tb' )
   listvarsextrap=('gcx' 'gcxb' 'sshb' 'sshn' ) 
   varscopy='rdt,rdttra1,kt,ndastp,adatrj'
  ;;
esac

source ${cfutools}/prep_restarts/library/library.bash

if [[ $fillinrot == 'FALSE' ]] ; then
 cp ${Ptoextrap} Ptoextrap.nc 
 ncks -v fmask Ptoextrap.nc tmp1.nc
 cdo mulc,0 tmp1.nc tmp2.nc
 ncks -A tmp2.nc Ptoextrap.nc
 rm -f tmp1.nc tmp2.nc
 Ptoextrap='Ptoextrap.nc'
fi

# Copy the 0d variables from the input restart to the output restart


if [[ ! -e ${restart_out}.nc ]] ; then
ncks -O -v $varscopy ${restart_in}.nc ${restart_out}.nc
ncks -A -v nav_lon,nav_lat $meshmaskin ${restart_out}.nc
ncks -A -v nav_lev $vertgridout ${restart_out}.nc
fi 

# Fist loop is: Vertical interpolation + horizontal extrapolation at each level + filling empty seas + vertical extrapolation
cdo vertsum -selvar,tmask,vmask,umask,fmask $meshmaskin mask2din.nc
for var in ${listvarsinterp[@]} ; do
  case $var in
   'avmu'|'un'|'ub') mask='umask' ; varlon='glamu' ; varlat='gphiu' ; fill='umask' ;;
   'avmv'|'vn'|'vb') mask='vmask' ; varlon='glamv' ; varlat='gphiv' ; fill='vmask' ;;
   'rotb'|'rotn') mask='fmask' ; varlon='glamf' ; varlat='gphif' ; fill='fmask' ;;
   'avt'|'avmt'|'en'|'dissl'|'hdivb'|'hdivn'|'rhop'|'sn'|'tn'|'sb'|'tb') mask='tmask' ; varlon='glamt' ; varlat='gphit' ;  fill='tmask' ;;
  esac
#  # The vertical interpolation is performed below
#  python ${cfutools}/interpolation/interp_vert.py ${restart_in}.nc $var $meshmaskin e3t_0 mask2din.nc $mask $vertgridout e3t_0 gdept_0 ${var}_${restart_out}_int.nc


  # The function extrap extrapolates horizontally and fill in the empty seas with a climatology
  #extrap ${var}_${restart_out}_int.nc ${var} ${meshmaskin} ${varlon} ${varlat} ${Ptoextrap} ${Ptofillclim} ${fill} ${var}_${restart_out}_int2.nc 3d $cfutools $confout $mon 

  if [ ! -e ${fill}.nc ] ; then
  cdo -setctomiss,0 -selvar,${fill}  $meshmaskin  ${fill}.nc 
  fi 
  cdo  -ifthen ${fill}.nc  -selvar,${var} ${restart_in}.nc  ${var}_${restart_in}.nc
# Modify the missing value to 1e20 
  ncatted -O -a _FillValue,${var},m,f,1e20      ${var}_${restart_in}.nc
  ncatted -O -a  missing_value,${var},m,f,1e20  ${var}_${restart_in}.nc
  extrap ${var}_${restart_in}.nc ${var} ${meshmaskin} ${varlon} ${varlat} ${Ptoextrap} ${Ptofillclim} ${fill} ${var}_${restart_out}_int.nc 3d $cfutools $confout $mon 

  # The vertical extrapolation to empty levels is performed below
# python ${cfutools}/interpolation/vertextrap.py  ${var}_${restart_out}_int2.nc ${var} $vertgridout nav_lev ${var}_${restart_out}_int3.nc
# python ${cfutools}/interpolation/vertextrap.py  ${restart_in}.nc ${var} $vertgridout nav_lev ${var}_${restart_out}_int3.nc

  # Apply the mask
  applymask $vertgridout $mask ${var}_${restart_out}_int.nc $var ${var}_${restart_out}.nc

  # Pasting the output to ${restart_out}.nc
  gathervar ${restart_out}.nc ${var}_${restart_out}.nc
  # for some un known reason (nco bug?) after ncks -A of gathervar, the zaxis gets corrupted, so I reset it. 
  cdo -O  setzaxis,L75   ${restart_out}.nc    ${restart_out}_2.nc  
  mv   ${restart_out}_2.nc  ${restart_out}.nc 
#  rm -f ${var}_${restart_out}.nc ${var}_${restart_out}_int?.nc  
done

##---------------------------------------------------------------------------------
##---------------------------------------------------------------------------------
## Second loop is: horizontal extrapolation at each level + filling empty seas for 2D variables. 
# Horizontal extrapolation and filling empty seas of 2d variables
ncks -O -d lev,0 ${Ptoextrap} Ptoextrap_lev0.nc
ncks -O -d lev,0 ${Ptofillclim} Ptofillclim_lev0.nc
ncks -O -d z,0 $vertgridout mask_lev0.nc
ncks -O -d z,0 $meshmaskin maskin_lev0.nc

for var in ${listvarsextrap[@]} ; do
  case $var in
   'gru'|'gsu'|'gtu'|'ssu_m'|'u_io') varlon='glamu' ; varlat='gphiu' ; fill='umask' ;;
   'grv'|'gsv'|'gtv'|'ssv_m'|'v_io') varlon='glamv' ; varlat='gphiv' ; fill='vmask' ;;
   'gcx'|'gcxb'|'gcxbfs'|'ssh_m'|'sshb'|'sshn'|'sss_m'|'sst_m'|'alb_ice'|'sst_io'|'sss_io') varlon='glamt' ; varlat='gphit' ; fill='tmask' ;;
  esac

  # Apply the input mask
  cdo selvar,${var} ${restart_in}.nc  ${var}_${restart_in}_withoutmask.nc 
  applymask maskin_lev0.nc $fill ${var}_${restart_in}_withoutmask.nc $var ${var}_${restart_in}.nc

  # Horizontal extrapolation and fillup the empty seas with a climatology
  extrap ${var}_${restart_in}.nc ${var} ${meshmaskin} ${varlon} ${varlat} Ptoextrap_lev0.nc Ptofillclim_lev0.nc ${fill} ${var}_${restart_out}_int.nc 2d $cfutools $confout $mon
 
  # Apply the output mask
  applymask mask_lev0.nc $fill ${var}_${restart_out}_int.nc $var ${var}_${restart_out}.nc

  # Pasting the output to ${restart_out}.nc
  gathervar ${restart_out}.nc ${var}_${restart_out}.nc
#  rm -f ${var}_${restart_out}.nc ${var}_${restart_out}_int.nc ${var}_${restart_in}.nc
done

#  rm -f Ptoextrap_lev0.nc Ptofillclim_lev0.nc mask2din.nc mask_lev0.nc tmpmask.nc maskin_lev0.nc
if [[ -e Ptoextrap.nc ]] ; then rm -f Ptoextrap.nc ; fi
GLOSEA5, ORCA1L46

Similarly, as in ORAP5 ORCA1L46, we need to interpolate by using a software called SOSIE http://sosie.sourceforge.net/ to interpolate the data. We run the script.sh below (on moore or amdahl by sbatch script.sh). We need two files:

- The executable sosie.x

- The weights for the interpolation ORCA025-ORCA1.map

Both files are available on cfutools in branch develop-eleftheria, in the directory

prep_restarts/sources_for_ORCA025-ORCA1  

We run the script.sh (in amdahl/moore we type sbatch script.sh)

   #!/bin/bash
#SBATCH -n 1
#SBATCH -t 10-12:00:00
#SBATCH -J GS5-LR 
#SBATCH --mem=60000
#SBATCH -o GS5-LR-%j.log
 

set -evx
TMPDIR=/scratch/$(whoami)/$$
mkdir -p $TMPDIR
cd $TMPDIR

# The masks of the input file, which here is in GLOSEA5 ORCA05L75 
# and the output file, which is the ORCA01L46
maskin='mesh_mask_nemo.Ec3.0_O25L75_ClosedSeas.nc' 
maskout='mesh_mask_nemo.Ec3.0_O1L46.nc'
ln -sf  /esnas/autosubmit/con_files/$maskin 
ln -sf  /esnas/autosubmit/con_files/$maskout 

cp  /home/Earth/$(whoami)WORK/stargate/generate_restarts_gs5_LR/remap_ocean_ORCA025L75_ORCA15L46_final.sh    . 
cp  /home/Earth/$(whoami)WORK/stargate/generate_restarts_gs5_LR/sosie.x             . 
cp  /home/Earth/$(whoami)WORK/stargate/generate_restarts_gs5_LR/ORCA025-ORCA1.map   . 

./remap_ocean_ORCA025L75_ORCA15L46_final.sh 

Where ./remap_ocean_ORCA025L75_ORCA15L46_final.sh is

#!/bin/bash

set -evx 
# 
# This script extrapolates horizontally, interpolates horizontally and interpolates vertically 
# the scalar fields 
#
# History : Eleftheria Exarchou  - Initial version           June 2015 
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#                                Arguments
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

dirhigh=/esnas/releases/ic/ocean/ORCA025L75/GLOSEA5/
dirlow=/esnas/releases/ic/ocean/ORCA1L46/GLOSEA5/
curdir=`pwd`
cd  $curdir 

# The masks of the input file, which here is in GLOSEA5 ORCA05L75 
# and the output file, which is the ORCA01L46
maskin='mesh_mask_nemo.Ec3.0_O25L75_ClosedSeas.nc' 
maskout='mesh_mask_nemo.Ec3.0_O1L46.nc'

listdates=( '0430' '1031'  )

for year in {1997..2013} ; do 
	echo $year 

for date in ${listdates[@]} ; do
file_final=GLOSEA5_fc0_${year}${date}_restart

        # check if interpolated file exists already in esnas
	if [ ! -e  /esnas/releases/ic/ocean/ORCA1L46/GLOSEA5/${file_final}.nc.gz ] ; then   
	# check if the HR file exists 
	if  [  -e ${dirhigh}/GLOSEA5_fc0_${year}${date}_restart.nc.gz ] ; then  
        
	# check if file is locally here already (or: use gunzip -f to force overwrite, but this is slower )
	if [ ! -e  ${curdir}/GLOSEA5_fc0_${year}${date}_restart.nc ] ; then   
	gunzip -c  ${dirhigh}/GLOSEA5_fc0_${year}${date}_restart.nc.gz   > ${curdir}/GLOSEA5_fc0_${year}${date}_restart.nc
        fi 
	# Input/output restart file names 
	restart_in=GLOSEA5_fc0_${year}${date}_restart  
	restart_out=GLOSEA5_fc0_${year}${date}_restart_int


listvars=( 'en' 'ub' 'vb' 'tb' 'sb' 'rotb' 'hdivb' 'un' 'vn' 'tn' 'sn' 'rotn' 'hdivn' 'dissl' 'avt' 'avm' 'avmu' 'avmv' 'rhop' 'gcx' 'gcxb' 'sshb' 'sshn')
varscopy='rdt,rdttra1,kt,ndastp,adatrj'


# Create the initial restart file with the basic set of 0 dimensional variables 
if [[ ! -e ${restart_out}.nc ]] ; then
ncks -O -v $varscopy ${restart_in}.nc ${restart_out}.nc
ncks -A -v nav_lon,nav_lat,nav_lev    $maskout ${restart_out}.nc
fi 


# Specify the masks etc that correspond to each variable
for var in ${listvars[@]} ; do
  case $var in
   'avmu'|'un'|'ub') mask='umask' ; interp3d='0'  ;;
   'avmv'|'vn'|'vb') mask='vmask' ; interp3d='0'  ;;
   'rotb'|'rotn')    mask='fmask' ; interp3d='0'  ;;
   'avt'|'avmt'|'en'|'dissl'|'hdivb'|'hdivn'|'rhop'|'sn'|'tn'|'sb'|'tb') mask='tmask'  ;;
   'gcx'|'gcxb'|'sshb'|'sshn')  mask='tmask' ;  interp3d=1  ;;
  esac


# Check if interpolation for this particular variable is already done 
if [ ! -e ${var}_ORCA025-ORCA1_restart_${year}${date}_miss.nc ] ;  then 

file_in=${var}_in.nc 
ncks -O  -v ${var},nav_lon,nav_lat,nav_lev ${restart_in}.nc $file_in

cat <<EOF > namelist_$var 

!! ------------------- 
!! Namelist for SOSIE 
!! ------------------- 
!! 
!! 
!! *********************** 
!! Input characteristics : 
!! *********************** 
!! 
!! ivect : vector correction control on treated field [integer] 
!!         ivect = 0 : input field is not a component of a vector 
!!         or the target grid is regular (lregout = T) 
!!         * if non-regular distorted target grids (like ORCAX): 
!!         ivect = 1 : input field is a zonal (X) component of a vector 
!!         ivect = 2 : input field is a meridional (Y) component of a vector 
!! 
!! lregin : is the source grid regular? [logical] 
!!          (ie : are input longitude and latitude 1D?) 
!! 
!! cf_in   : file containing the input field to be interpolated [char]
!! cv_in   : name of treated variable (in input field file) [char]
!!
!! cv_t_in : name of time record variable in the input file [char]
!!           or 'missing_rec' if no time record is present in the input file
!!
!! jt1     : first time record to be interpolated
!! jt2     : last  time record to be interpolated
!!           => set jt1 and jt2 to 0 if you want to skip this option 
!!              and interpolate the nt time steps of the current field
!! 
!! jplev : level to treat if your file is 3D (spatial), has no influence if 
!!         your file is 2D !
!!         jplev > 0 = level to treat (ex : jplev = 1 will interpolate only 
!!                     surface field corresponding to the 1st level )
!!       ------------------------------------------------------------------
!!       | jplev = 0 : perform 3D interpolation (if input file is 3D) !!! |
!!       ------------------------------------------------------------------
!!
!! cf_x_in   : file containing the input grid (usually = cf_in) [char] 
!! cv_lon_in : name of longitude in the input grid file [char] 
!! cv_lat_in : name of latitude in the input grid file [char] 
!! 
!! cf_lsm_in : file containing the input land-sea mask [char]
!!             or specify 'missing_value' if a 'missing_value' netcdf
!!             attribute defines the mask on the input data field
!!             (not needed if "ldrown = .FALSE." --> '')

!! cv_lsm_in : name of land-sea mask variable [char]
!!             (not needed if "ldrown = .FALSE." 
!!              or if cf_lsm_in = 'missing_value'--> '')
!!             by default ocean is flagged with value 1
!!             and continents are flagged with value 0
!!
!! ldrown : whether we call DROWN land filling procedure [logical] 
!!
!! ewper : east-west periodicity on the input file/grid [integer] 
!!         = -1 --> no periodicity 
!!         >= 0 --> periodicity with overlap of ewper points 
!! 
!! vmax : upper bound not to exceed for treated variable [real] 
!! vmin : lower bound not to exceed for treated variable [real] 
!!-------------------------------------------------------------------------- 
!! 
&ninput
ivect     = 0
lregin    = F  ! F becuase the input grid is not regular 
cf_in     = '$file_in'
cv_in     = '${var}'
cv_t_in   = 'time' 
jt1       = 0   ! sdfgdfhgdfgh
jt2       = 0
jplev     = $interp3d  ! use 0 for 3D interpolation 
cf_x_in   = '$file_in' 
cv_lon_in = 'nav_lon'
cv_lat_in = 'nav_lat'
cf_lsm_in = '$maskin'
cv_lsm_in = '$mask'
ldrown    = T
ewper     = 0
vmax      =  1.E10
vmin      = -1.E10
/
!!
!!
!!
!!
!! ***********************************
!!  IF 3D INTERPOLATION ( jplev = 0 )
!! ***********************************
!!
!! Only mind if you do want to perform a 3D (spatial) interpolation
!! 
!! Mind only if you do want to perform a 3D interpolation !
!! First, make sure that jplev is set to 0 !
!!
!! cf_z_in  : file containing the input depth vector (associates a depth to a 
!!            given level). In most cases should be the same file than cf_x_in.
!! cv_z_in  : name of the variable for the input depth vector
!!
!! cf_z_out : file containing the output depth vector (associates a depth to a 
!!            given level). In most cases should be the same file than cf_x_in.
!! cv_z_out : name of the variable for the output depth vector in file 'cf_z_out'
!! cv_z_out_name: name you wish to give to depth variable in file to be created...
!!
!!
&n3d
cf_z_in  = '$file_in'
cv_z_in  = 'nav_lev'
cf_z_out = '$maskout'
cv_z_out = 'nav_lev'
cv_z_out_name = 'lev'
/
!! 
!!
!!
!!
!!
!! ***************************** 
!! Output Grid characteristics : 
!! ***************************** 
!! 
!! lregout : is the target grid regular ? [logical] 
!!           (ie : are output longitude and latitude 1D?) 
!!
!! cf_x_out   : file containing the target grid [char] 
!! cv_lon_out : name of longitude variable [char] 
!! cv_lat_out : name of latitude variable [char] 
!!
!! TRICK:  for interpolating onto a global regular spherical grid
!! ------  with a resolution of dx deg. of longitude and dy deg. of latitude
!!         * cf_x_out   = 'spheric' ! tells SOSIE to build a spherical output grid
!!         * cv_lon_out = '1.0'  ! your dx, here 1.0 deg. 
!!         * cv_lat_out = '1.0'  ! your dy, here 1.0 deg.
!!
!!
!! cf_lsm_out : file containing output land-sea mask [char] 
!!              MUST BE 3D for 3D interpolation!
!!              or specify 'missing_value' if a 'missing_value' netcdf
!!              attribute defines the mask on a field 'X' in file 'cf_x_out'
!!              (not needed if "lmout = .FALSE." --> '') 
!!
!! cv_lsm_out : name of land-sea mask variable in 'cf_lsm_out'     [char]
!!              or name of field 'X' in 'cf_x_out' if you specified 
!!              cf_lsm_out = 'missing_value'
!!              (not needed if "lmout = .FALSE." --> '') 
!!
!! lmout : whether to mask the interpolated field on the output file [logical] 
!!
!! rmaskvalue : missing value given to output field (for continents) [logical] 
!!
!! lct   : whether to control or not time variable [logical] 
!!         TRUE -> specify time array with starting time 't0' and step 't_stp' 
!!         FALSE -> same time array as in input file is used 
!! t0    : time to start (if lct is set to .TRUE.) [real] 
!! t_stp : time step (if lct is set to .TRUE.) [real] 
!!
!!
&noutput
lregout    = F   ! the output grid is not regular
cf_x_out   = '$maskout'
cv_lon_out = 'nav_lon'
cv_lat_out = 'nav_lat'
cf_lsm_out = '$maskout'
cv_lsm_out = '$mask'
lmout      = T
rmaskvalue = 1.e+20 ! -9999.
lct        = F
t0         = 0.
t_stp      = 0.25
/
!! 
!! 
!! 
!! 
!! ******************************* 
!! Netcdf output characteristics : 
!! ******************************* 
!! 
!! This mostly deals with how the output file to be created is going to look like!
!!
!! cmethod  : the 2D interpolation method to be used
!!            use 'akima' if your input domain is regular (non-distorted grid)
!!            use 'bilin' otherwise, which is bilinear 2D interpolation
!!
!! *** Into the netcdf file to be created : *** 
!! cv_l_out : name for longitude on the output file [char] 
!! cv_p_out : name for latitude on the output file [char] 
!! cv_t_out : name for time on the output file [char] 
!! cv_out   : name for treated variable on the output file [char] 
!! cu_out   : treated variable units [char] 
!! cu_t     : time unit [char]
!! cln_out  : treated variable long name [char] 
!! cd_out   : directory to create output file to [char]
!! 
!! *** Name of the output file : *** 
!! csource  : short string to describe origin of the file [char] 
!! ctarget  : short string to describe the target grid [char] 
!! cextra   : short extra indication about the file [char] 
!! 
&nnetcdf
cmethod  = 'bilin'
cv_l_out = 'x'  ! 'var_lon'
cv_p_out = 'y'  ! 'var_lat'
cv_t_out = 'time'
cv_out   = '${var}'
cu_out   = ' '
cu_t     = 'unknown'
cln_out  = ' '
cd_out   = '.'
csource  = 'ORCA025'
ctarget  = 'ORCA1'
cextra   = 'restart_${year}${date}'
/ 
!!


EOF

./sosie.x  -f namelist_$var 

cdo setmisstoc,0  ${var}_ORCA025-ORCA1_restart_${year}${date}.nc  ${var}_ORCA025-ORCA1_restart_${year}${date}_miss.nc

ncks -A ${var}_ORCA025-ORCA1_restart_${year}${date}_miss.nc  ${restart_out}.nc 
rm -rf  ${var}_ORCA025-ORCA1_restart_${year}${date}*.nc   
fi 
done 

# Some variables have negative values in some points, 
# whereas they should be always positive. We fix it by
# making these values equal to 0. These vars are 
# avt,avm,avmu,avmv,dissl 

file1=GLOSEA5_fc0_${year}${date}_restart_int.nc   
file2=GLOSEA5_fc0_${year}${date}_restart_int_needtofix.nc                              
file3=GLOSEA5_fc0_${year}${date}_restart_int_fixed.nc                   
file4=GLOSEA5_fc0_${year}${date}_restart_int_valuesfixed.nc    
file5=GLOSEA5_fc0_${year}${date}_restart_int_valuesfixed_precision.nc    
#file_final=GLOSEA5_fc0_${year}${date}_restart

cdo selvar,avt,avm,avmu,avmv,dissl  $file1  $file2
cdo setrtoc,-1000000000,0,0         $file2  $file3

cdo replace  $file1     $file3  $file4
cdo  -b 64 copy         $file4  $file5 

gzip -c  $file5  >  /esnas/releases/ic/ocean/ORCA1L46/GLOSEA5/${file_final}.nc.gz 
rm  -rf ${curdir}/GLOSEA5_fc0_${year}${date}_restart.nc

fi 
fi 
done 
done 




initial_conditions/oceanic.1452268924.txt.gz · Last modified: 2016/01/08 16:02 by eexarcho