123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- !#################################################################
- !
- ! Grids.
- !
- !### macro's #####################################################
- !
- #define TRACEBACK write (gol,'("in ",a," (",a,", line",i5,")")') rname, __FILE__, __LINE__; call goErr
- #define IF_NOTOK_RETURN(action) if (status/=0) then; TRACEBACK; action; return; end if
- #define IF_ERROR_RETURN(action) if (status> 0) then; TRACEBACK; action; return; end if
- !
- #include "tm5.inc"
- !
- !#################################################################
- module dims_grid
- use GO, only : gol, goPr, goErr
-
- implicit none
-
- ! --- in/out ------------------------------
-
- public
-
-
- ! --- const -------------------------------
-
-
- ! Basic model definition: resolution etc. including some routines
- ! to fill the data structure.
- ! basic (coarsest) resolution in degrees for x and y (dz default 1.0)
- real, parameter :: dx = 6.0
- real, parameter :: dy = 4.0
- real, parameter :: dz = 1.0
- ! Maximum number of zoom regions,
- ! including the basic (coarsest grid) region;
- ! arrays are allocated for each of these regions:
- integer, parameter :: nregions_max = 3
-
- ! extra grid:
- integer, parameter :: nregions_all = nregions_max + 1
- integer, parameter :: iglbsfc = nregions_max + 1
- ! Actual number of zoom regions,
- ! during testing this could be set to 1 to quickly run the model.
- ! The include file should contains the following line:
- !
- ! integer, parameter :: nregions=3
- !
- ! The include file 'dims_grid.h_template' is only a template;
- ! the actual file is written by the 'configure' script.
- include "dims_grid.h"
- ! region_name is used to recognise the METEO files
- ! region_name is also used in the HDF output file name
- ! region 1 should always be the global domain
- character(len=10), parameter :: region_name(0:nregions_all) = &
- (/ 'globe ','glb600x400','eur300x200','eur100x100','glb100x100'/)
- ! coordinates (in degrees) for each region:
- ! xcyc = 1 if the region has cyclic x-boundary conditions
- ! touch_np = 1 if region touches the north pole
- ! touch_sp = 1 if region touches the south pole
- ! xbeg : the westmost border of the region
- ! xend : the eastmost border of the region
- ! ybeg : the southmost border of the region
- ! yend : the northmost border of the region
- ! zbeg : should be 0 (zooming in the vertical not implemented)
- ! zend : should be lm (zooming the the vertical not implemented)
- ! NOTE : zbeg and zend should be the same for all regions
- ! dimensions are NOT calculated automatically
- ! (several compilers complain about these obscure lines ...)
- !
- !integer,dimension(nregions),parameter :: &
- ! im = (xend(1:nregions)-xbeg(1:nregions))/(dx/xref(1:nregions)) + .5
- !integer,dimension(nregions),parameter :: &
- ! jm = (yend(1:nregions)-ybeg(1:nregions))/(dy/yref(1:nregions)) + .5
- integer, dimension(0:nregions_all), parameter :: &
- xcyc = (/ 1, 1, 0, 0, 1 /), &
- touch_np = (/ 1, 1, 0, 0, 1 /), &
- touch_sp = (/ 1, 1, 0, 0, 1 /), &
- xbeg = (/ -180, -180, -36, -21, -180 /), &
- xend = (/ 180, 180, 54, 39, 180 /), &
- ybeg = (/ -90, -90, 2, 12, -90 /), &
- yend = (/ 90, 90, 74, 66, 90 /), &
- im = (/ 1, 60, 30, 60, 360 /), &
- jm = (/ 1, 45, 36, 54, 180 /)
- ! maximum refinement factor (can be arbitrary in principle):
- integer, parameter :: maxref = 10
- ! refinement factors for each region (<= maxref)
- ! tref may differ from xref/yref. In the current
- ! implementation it should be 1,2,4,6,...
- integer, dimension(0:nregions_max), parameter :: &
- xref = (/ 1, 1, 2, 6 /), &
- yref = (/ 1, 1, 2, 4 /), &
- zref = (/ 1, 1, 1, 1 /), &
- tref = (/ 1, 1, 2, 4 /)
- ! Define the parent of each region.
- ! Global region 1 should have parent 0.
- integer, parameter :: parent(nregions_max) = (/ 0, 1, 2 /)
- ! NB: number of region should not be smaller than number of its parent:
- ! region > parent(region)
- end module dims_grid
|