123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- nocsSCRIP v1.1 03/11/2010
- -------------------------
- Author: NOCS NEMO Team
- Contacts: Steven Alderson (sga@noc.soton.ac.uk)
- Andrew Coward (acc@noc.soton.ac.uk)
- Disclaimer
- This directory contains software for generating and manipulating interpolation
- weights for use with the Interpolation On the Fly (IOF) option in NEMO
- v3 onwards. The utilities rely heavily on the Spherical Coordinate Remapping
- and Interpolation Package (SCRIP) which is freely available from Los Alamos
- (see copyright file). We make no claim to authorship of those parts of the
- SCRIP package we have used and included with this distribution.
- Unless otherwise indicated, all other software has been authored by an
- employee or employees of the National Oceanography Centre, Southampton, UK
- (NOCS). NOCS operates as a collaboration between the Natural Environment
- Research Council (NERC) and the University of Southampton. The public may
- copy and use this software without charge, provided that this Notice and any
- statement of authorship are reproduced on all copies. Neither NERC nor the
- University makes any warranty, express or implied, or assumes any liability
- or responsibility for the use of this software.
- Introduction
- The IOF option enables forced ocean runs without the need to provide surface
- boundary data on the nemo grid. Atmospheric data are kept on their original
- grid(s) which typically have a coarser resolution than the ocean grid. IOF
- supports multiple source (atmospheric) grids and two interpolation methods
- (bilinear and bicubic). Different combinations of source grid and method can
- be selected for each variable. IOF is also compatible with AGRIF; allowing
- AGRIF nests to be used without the need to provide separate forcing data
- (only a separate set of weights fields). Operational details are provided
- in the SBC chapter of the NEMO reference manual.
- Please note that the methods described here assume that the forcing datasets
- are unmasked. Where the original sources are masked it is the users'
- responsibility to ensure that an unmasked set is produced on the source
- grid with appropriate oceanic values in previously masked locations. This
- is particularly important for atmospheric variables which experience step
- changes at the land-sea boundary. For these, care must be taken to avoid
- contaminating oceanic values.
- The software is divided into several sub-directories:
- ./
- |
- +-------------+--------------+--------------+
- SCRIP1.4 nocsutil src bin
- SCRIP1.4 contains the unmodified copy (apart from compression of two sample netcdf
- files) of SCRIP version 1.4 from Los Alamos.
- (http://climate.lanl.gov/Software/SCRIP).
- The bin directory contains python script freeform.py.
- This is run to reformat the code for use within the NEMO 3.3 fcm framework.
- It creates and populates a directory called 'src' with copied and modified versions
- of the SCRIP library routines (and derived programs from the nocsutil directory).
- Changes are described in the src/CHANGES file.
- This script has already been run and only needs to be re-executed if SCRIP is updated.
- The src directory also contains the three programs used to generate a weights file.
- The three programs are:
- scripgrid.exe (scripgrid.F90) which creates two grid description files suitable for
- input to the scrip package.
- scrip.exe (scrip.F90) which takes these descriptions and generates the required
- weights in the standard SCRIP format. This program is a version of the SCRIP
- program: scrip.f which has been modified to accept the name of its namelist
- file on the command line.
- scripshape.exe (scripshape.F90) which takes the output from scrip and rearranges
- the fields into a series of 2D fields more suited for input into NEMO using
- the iom_get routine.
- All three FORTRAN90 programs read domain information from their respective
- netCDF input files and dynamically allocate internal storage. They are
- thus independent of the target configuration and have been successfully
- tested with both ORCA2 and ORCA025 grids. Their suitably for use with larger
- grids has not been tested but should only be subject to limitations of
- the operating system and the memory available to the processing element.
- A separate tar file is available containing test data.
- This comprises an ORCA2 coordinates file and sample DFS4.1 input field that
- can be used for testing. Reference weights files generated using the two
- example namelists provided are located in its refout subdirectory.
- Installation is by use of the maketools script.
- E.g. change to the NEMOGCM/TOOLS directory and type:
- ./maketools -help
- and, for example:
- ./maketools -m gfortran_linux -n WEIGHTS
- Example Use
- -----------
- cd data
- ../scripgrid.exe namelist_reshape_bilin (creates remap_data_grid.nc
- and remap_nemo_grid.nc)
- ../scrip.exe namelist_reshape_bilin (creates data_nemo_bilin.nc)
- ../scripshape.exe namelist_reshape_bilin (creates reshape_orca2_bilinear.nc)
-
- [Note that because the gfortran compiler does not understand the iargc function
- and getarg subroutine calls, command line namelist names can only be supplied if
- symbol ARGC is defined during compilation (eg add '#define ARGC' to the top of
- the relevant program). If not, the program asks for the name instead during execution.]
- Only the final output file is required for use with NEMO but the intermediate
- files can be checked against the examples in the test data (available separately).
- For bicubic mapping only scrip and scripshape need to be rerun (because the grid_inputs namelist
- entries are identical in the two namelist files, see Controls section below):
-
- ../scrip.exe namelist_reshape_bicubic (creates data_nemo_bicubic.nc)
- ../scripshape.exe namelist_reshape_bicubic (creates reshape_orca2_bicubic.nc)
- Controls
- --------
- The SCRIP derived utilities use SCRIP-style namelists to control their
- operation. In the example above the same named file is used for both but within that
- file are two separate namelists:
- &grid_inputs
- input_file = './snow_1m_TRP_1958.nc'
- nemo_file = 'coordinates.nc'
- datagrid_file = 'remap_data_grid.nc'
- nemogrid_file = 'remap_nemo_grid.nc'
- method = 'regular'
- input_lon = 'lon'
- input_lat = 'lat'
- nemo_lon = 'glamt'
- nemo_lat = 'gphit'
- nemo_mask = 'none'
- nemo_mask_value = 10
- input_mask = 'none'
- input_mask_value = 10
- /
- which is used by scripgrid, and:
- &remap_inputs
- num_maps = 1
- grid1_file = 'remap_data_grid.nc'
- grid2_file = 'remap_nemo_grid.nc'
- interp_file1 = 'data_nemo_bilin.nc'
- interp_file2 = 'nemo_data_bilin.nc'
- map1_name = 'data to nemo bilin Mapping'
- map2_name = 'nemo to data bilin Mapping'
- map_method = 'bilinear'
- normalize_opt = 'frac'
- output_opt = 'scrip'
- restrict_type = 'latitude'
- num_srch_bins = 90
- luse_grid1_area = .false.
- luse_grid2_area = .false.
- /
- which is used by scrip.
- scripshape also reads information from a namelist:
- &shape_inputs
- interp_file = 'data_nemo_bilin.nc'
- output_file = 'weights_bilin.nc'
- ew_wrap = 0
- /
- scripgrid.exe
- -------------
- scripgrid accesses the named files and coordinate data in order to produce
- the grid centre and corner locations required by scrip. In the example given,
- a file called 'coordinates.nc' must exist in the current directory. This is
- used by scripgrid as a nemo coordinates file and the correct corner
- locations appropriate to the named grid centres are obtained (i.e. since
- glamt is named, glamf and gphif will be used to provide corner coordinates).
- The nemo file need not be called 'coordinates.nc' (e.g. '1_coordinates.nc' instead),
- but must have longitude and latitude variables which start with the four
- characters 'gphi' and 'glam' respectively.
- "input_file" file must contain at least one variable on a grid whose axes are
- described by the netcdf coordinate variables named in input_lon and input_lat.
- The program produces two grid description files, one corresponding to each
- input file, for use by the scrip program to calculate weights required to
- go from one to the other and back again.
- This step is independent of the mapping method (e.g. bilinear or bicubic)
- and so only one set of remap_data_grid.nc and remap_nemo_grid.nc files needs
- to be produced for each pair of source and destination grids.
- scrip.exe
- ---------
- scrip takes the output files from scripgrid and creates a file of weights
- to use to interpolate between the two grids described. The example given
- only requests 1 map (from data to nemo); setting num_maps=2 will provide
- the reverse weights if required.
-
- - num_maps is either 1 or 2 depending on whether the reverse
- transformation is required
- - grid1_file, grid2_file: two remap grid files are required
- as output by scripgrid
- - interp_file1, interp_file2: one or two interp_file names are
- then supplied; these hold the weights to convert one grid to another
- - map1_name, map2_name: the map_name variables are just descriptive
- - map_method: can be 'bilinear' or 'bicubic'
- - normalize_opt: should usually be 'frac' or else the user needs to do
- this scaling manually (this seems to the case for fractional ice cover)
- - output_opt may be supplied and set to either 'scrip' or 'ncar-csm'
- - restrict_type: should be 'latitude' or 'latlon' in which case
- num_srch_bins only are used in one or two directions
- - use_grid_area fields override the scrip calculation of area in
- case the model gets slightly different answers, but the area needs
- to be supplied in the input files
- A conservative mapping scheme exists but is not yet working with NEMO grids.
- See the scrip package documentation for more details of these parameters.
- (http://climate.lanl.gov/Software/SCRIP/SCRIPusers.pdf)
- scripshape.exe
- --------------
- scripshape takes the output from scrip (e.g. data_nemo_bilin.nc ) and
- rearranges the source and destination indices and associated weights into
- sets of 2D fields each spanning the nemo grid. Each set is associated with
- each node involved in the interpolation scheme. Thus for a bilinear mapping
- the weights file required by the IOF option includes the following fields:
- double src01(lat, lon) ; double dst01(lat, lon) ; double wgt01(lat, lon) ;
- double src02(lat, lon) ; double dst02(lat, lon) ; double wgt02(lat, lon) ;
- double src03(lat, lon) ; double dst03(lat, lon) ; double wgt03(lat, lon) ;
- double src04(lat, lon) ; double dst04(lat, lon) ; double wgt04(lat, lon) ;
- For a bicubic mapping the required fields are:
- double src01(lat, lon) ; double dst01(lat, lon) ; double wgt01(lat, lon) ;
- double src02(lat, lon) ; double dst02(lat, lon) ; double wgt02(lat, lon) ;
- double src03(lat, lon) ; double dst03(lat, lon) ; double wgt03(lat, lon) ;
- double src04(lat, lon) ; double dst04(lat, lon) ; double wgt04(lat, lon) ;
- double src05(lat, lon) ; double dst05(lat, lon) ; double wgt05(lat, lon) ;
- double src06(lat, lon) ; double dst06(lat, lon) ; double wgt06(lat, lon) ;
- double src07(lat, lon) ; double dst07(lat, lon) ; double wgt07(lat, lon) ;
- double src08(lat, lon) ; double dst08(lat, lon) ; double wgt08(lat, lon) ;
- double src09(lat, lon) ; double dst09(lat, lon) ; double wgt09(lat, lon) ;
- double src10(lat, lon) ; double dst10(lat, lon) ; double wgt10(lat, lon) ;
- double src11(lat, lon) ; double dst11(lat, lon) ; double wgt11(lat, lon) ;
- double src12(lat, lon) ; double dst12(lat, lon) ; double wgt12(lat, lon) ;
- double src13(lat, lon) ; double dst13(lat, lon) ; double wgt13(lat, lon) ;
- double src14(lat, lon) ; double dst14(lat, lon) ; double wgt14(lat, lon) ;
- double src15(lat, lon) ; double dst15(lat, lon) ; double wgt15(lat, lon) ;
- double src16(lat, lon) ; double dst16(lat, lon) ; double wgt16(lat, lon) ;
- This program also adds an attribute to the weights file for use by the fld_interp
- routine in fldread.F90. This tells the model about the east-west cyclicity of the source grid.
- The value needs to be supplied in the scripshape namelist via the variable ew_wrap.
- It should have one of the values -1, 0, 1 or 2. -1 means that the input grid is not
- cyclic; 0 means that it is cyclic but with no overlapping columns; and a value greater
- than zero represents the number of columns that overlap. In fact it only has an effect
- when using bicubic interpolation in which the model needs to know which additional columns
- have to be read in to correctly calculate gradient values.
- The weights file produced by scripshape is ready for use in NEMO. This file
- needs to by placed in the nemo working directory and needs to be named in the
- appropriate SBC namelist entry (e.g. namsbc_clio, namsbc_flux or namsbc_core).
- scripinterp.exe
- ---------------
- Take data on an input grid and interpolate to the nemo grid using the weights
- calculated by the scrip program.
- Method
- Two namelists are used for configuration, eg
- &interp_inputs
- input_file = "../data/wsx_av.nc"
- interp_file = "data_nemo_bilin.nc"
- input_name = "wsx"
- input_start = 1,1,1,1
- input_stride = 1,1,1,1
- input_stop = 0,0,0,1
- input_vars = 'time'
- /
- &interp_outputs
- output_file = "taux_1m.nc"
- output_mode = "create"
- output_dims = 'x', 'y', 'time_counter'
- output_scaling = "sozotaux|1.0", "time_counter|86400.0"
- output_name = 'sozotaux'
- output_lon = 'x'
- output_lat = 'y'
- output_vars = 'time_counter'
- output_attributes = 'time_counter|units|seconds since 1995-00-00 00:00:00',
- 'time_counter|calendar|noleap',
- 'sozotaux|units|N/m2'
- /
- This program just multiplies by weights and sums over each contributing point,
- and then formats the output correctly for the model.
|