how to create mask with cdo
Added by pooran khedri over 6 years ago
Hi everbody,
I have downloaded the Ecmwf data and then I need to create the land-sea mask for this file , my file contains seven variables(temperature wind,mean sea level,precipitation,...). Is there a way to create land-sea mask for this file with cdo command ?
I would be grateful if you could explain to me hoe to do it.
looking forward to any suggestions.
Best regards,
Pooran
Replies (10)
RE: how to create mask with cdo - Added by pooran khedri over 6 years ago
pooran khedri wrote:
Hi everbody,
I have downloaded the Ecmwf data and then I need to create the land-sea mask for this file , my file contains seven variables(temperature wind,mean sea level,precipitation,...). Is there a way to create land-sea mask for this file with cdo command ?
I would be grateful if you could explain to me hoe to do it.
looking forward to any suggestions.Best regards,
Pooran
I could solve my problem about this problem, Now I have another problem, I need to interpolate and extrapolate the ecmwf file on my grid, could you please explain how to do it with cdo?
THank you in advance
RE: how to create mask with cdo - Added by Ralf Mueller over 6 years ago
docu on interpolation is pretty extensive, just have a look into this starting at page 149, you will find the chapter about interpolation
hth
ralf
RE: how to create mask with cdo - Added by pooran khedri over 6 years ago
Ralf Mueller wrote:
docu on interpolation is pretty extensive, just have a look into this starting at page 149, you will find the chapter about interpolation
hth
ralf
Hi,
Thank you so much for your reply, I studied the manual and tried some commands, but I got unusual results. I was wondering if you could explain to me with more details because I am new to use Cdo.
I would really appreciate any suggestions in advance.
Best Regards,
Pooran
RE: how to create mask with cdo - Added by Ralf Mueller over 6 years ago
it depends on your input data and your target grid. if possible you might upload some stuff
RE: how to create mask with cdo - Added by pooran khedri over 6 years ago
Ralf Mueller wrote:
it depends on your input data and your target grid. if possible you might upload some stuff
RE: how to create mask with cdo - Added by pooran khedri over 6 years ago
pooran khedri wrote:
Ralf Mueller wrote:
it depends on your input data and your target grid. if possible you might upload some stuff
Hi,
I would really appreciate for quick reply.
I have attached the files that you requested. one of the files is the Ecmwf data and another is the grid file,
I used the Ecmwf data to create forcing file for ocean model, but I got the unusual results, I think I have to extrapolate before interpolation.
I would be grateful if you could tell me the appropriate command about it.
Thank you so much.
Best regards,
ocn_roms_grid.nc (455 KB) ocn_roms_grid.nc | |||
atm_regcm.nc (27.7 MB) atm_regcm.nc |
RE: how to create mask with cdo - Added by Ralf Mueller over 6 years ago
I used bilinear interpolation like this
cdo remapbil,ocn_roms_grid.nc atm_regcm.nc atm_regcm_roms_grid_remapbil.nc
output is uploaded on ftp://ftp.mpimet.mpg.de:/outgoing/ram/atm_regcm_roms_grid_remapbil.nc (1.2GB)
This interpolated the fields from atm_regcm.nc
on the grid defined in ocn_roms_grid.nc
.
hope, that's what you were looking for ;-) in case bilinerar is not what you wanted, just take anthother remaping operators.
RE: how to create mask with cdo - Added by pooran khedri over 6 years ago
Ralf Mueller wrote:
I used bilinear interpolation like this[...]
output is uploaded on ftp://ftp.mpimet.mpg.de:/outgoing/ram/atm_regcm_roms_grid_remapbil.nc (1.2GB)
This interpolated the fields from
atm_regcm.nc
on the grid defined inocn_roms_grid.nc
.hope, that's what you were looking for ;-) in case bilinerar is not what you wanted, just take another remaining operators.
Thank you so much for all your help, but I need to do different work, I got unusual temperature result near coast in ocean model, someone said to me, " This looks to me like you are interpolating zero values from the ECMWF land mask into your coastal ocean. You instead need to be extrapolating ocean values into the land areas before you do any interpolation."
I am looking for a way to extrapolate.
I would really appreciate to tell me how to do it with cdo.
Best regards,
Pooran
RE: how to create mask with cdo - Added by Ralf Mueller over 6 years ago
Problem looks like this:
ECMWD land-see-mask is different from your ocean-land-see-mask
Hence locations which are on land at within the ECMWF context can be open water in the target ocean grid. Esp. for wind stress components this can lead to strange errors. Here is how we handle this issue
- create a 0-1-lsm file from the ECMWF source with something like
cdo gtc,1.0e-4 land_sea_mask.ECMWF.nc ${lsmFile}
- I expect
land_sea_mask.ECMWF.nc
to hold some kind if orography valid for the ECMWF dataset you use
- I expect
- create the target interpolation weights with filling the missing value in-between:
cdo -P ${THREADS} ${remapOperator},${targetGrid} -fillmiss -ifnotthen ${lsmFile} -seltimestep,1 ${test_data} ${targetWeight}
- remapOperators should be selected by you, good candidates are
genbil
orgencon
- these operators for not interpolate data, but create the interpolation weights. Those can be appplied afterwards with theremap
operator - targetGrid is your ocean grid
- THREADS can be upto the number of cores of your machine - if unsure, leave out the
-P ${THREADS}
part - will slow down stuff, but not change the results test_data
is your input from ECMWF- targetWeight will be the file holding the interpolation weights
- remapOperators should be selected by you, good candidates are
- mask your input with the land-see-mask of ECMWF - this is importent, because here, the wrong values are removed from the input fields and replaced by something different
cdo -fillmiss -ifnotthen ${lsmFile} $file ${_oFile}
file
is the complete ECMWF input you want to interpolate_oFile
is temporary output - set is as you like - it's just temporary
- remap the input fields with
cdo remap,${targetGrid},${targetWeight} ${_oFile} ${oFile}
ofile
is the real output file you want to use
The key in this processing is how the missing values are filled. in this example the fillmiss
operator is used, but there are other options, have a look onto slide 14 of https://code.mpimet.mpg.de/attachments/download/13557/CDO_Seminar_20161206.pdf. setmisstonn
is the most general solution, but fillmiss
and fillmiss2
might also work because you use more less regular grids.
This workflow is designed for have many files to be interpolated. That's why the weights are create first. Applying them can be parallelized over the input files. Since you might have only a single file, you might drop the weights creation and do the remapping in a single step like (for bilinear interpolation)
cdo -P 4 remapbil ${targetGrid} -fillmiss -ifnotthen ${lsmFile} ${inputFile} ${outputFile}Again: please choose the correct operator for filling up missing values according to your needs.
hth
ralf
RE: how to create mask with cdo - Added by pooran khedri over 6 years ago
Dear,
I would really appreciate all your help and your time, I am trying to do these steps.
Kind regards,
Pooran