| 235 | |
| 236 | == Boundary geometry and initialisation == |
| 237 | The internal code of the new module will use 1D unstructured arrays to specify the boundary as is currently done in BDY. For the T-points along the boundary these are '''nbit''', '''nbjt''' and '''nbrt''', which specify the (i,j) coordinates of each point and the discrete distance from the boundary. Each boundary set can be initialised using straight-line segments in '''obc_par.F90''' (ln_read=.false.) or read in from a '''coordinates_bdy.nc''' file (ln_read=.true.). If the boundary coordinates are read in from '''obc_par.F90''' then the '''nbi''', '''nbj''', '''nbr''' arrays will be generated internally (and if necessary a '''coordinates_bdy.nc''' file could be written out). |
| 238 | |
| 239 | The '''obc_par.F90''' file will be the easiest way to define rectangular boundaries. More than one segment can be specified for each of the north, east, south and west boundaries as follows. Where there are more than one boundary set, the '''jpieob'''-type arrays are specified as 1D arrays and the '''nobcsege'''-type arrays are used to split the numbers between the different boundary sets. |
| 240 | {{{ |
| 241 | MODULE obc_par |
| 242 | |
| 243 | INTEGER, PARAMETER :: & !: ! Number of open boundary segments |
| 244 | nobcsege = 2, 0 |
| 245 | INTEGER, PARAMETER, DIMENSION(nobcsege) :: & !: |
| 246 | ! First column: Med Sea; Second: Baltic |
| 247 | jpieob = (/ 1037 , jpiglo-2 /), & !: i-localization of the East open boundary |
| 248 | jpjedt = (/ 473 , 1476 /), & !: j-starting indice of the East open boundary |
| 249 | jpjeft = (/ 855 , 1548 /) !: j-ending indice of the East open boundary |
| 250 | !! * WEST open boundary |
| 251 | INTEGER, PARAMETER :: & !: ! Number of open boundary segments |
| 252 | nobcsegw = 1, 0 |
| 253 | INTEGER, PARAMETER, DIMENSION(nobcsegw) :: & |
| 254 | jpiwob = (/ 2 /), & !: i-localization of the West open boundary |
| 255 | jpjwdt = (/ 2 /), & !: j-starting indice of the West open boundary |
| 256 | jpjwft = (/1875/) !: j-ending indice of the West open boundary |
| 257 | ... |
| 258 | }}} |
| 259 | For unstructured boundaries, the easiest method will be to generate them offline and read in the boundary definition from the coordinates_bdy.nc file, which looks like this: |
| 260 | {{{ |
| 261 | netcdf coordinates_bdy { |
| 262 | dimensions: |
| 263 | xbT = 8485 ; |
| 264 | xbU = 8436 ; |
| 265 | xbV = 8455 ; |
| 266 | xbF = 8062 ; |
| 267 | yb = 1 ; |
| 268 | variables: |
| 269 | int nbit(yb, xbT) ; |
| 270 | int nbiu(yb, xbU) ; |
| 271 | int nbiv(yb, xbV) ; |
| 272 | int nbif(yb, xbF) ; |
| 273 | int nbjt(yb, xbT) ; |
| 274 | int nbju(yb, xbU) ; |
| 275 | int nbjv(yb, xbV) ; |
| 276 | int nbjf(yb, xbF) ; |
| 277 | int nbrt(yb, xbT) ; |
| 278 | int nbru(yb, xbU) ; |
| 279 | int nbrv(yb, xbV) ; |
| 280 | int nbrf(yb, xbF) ; |
| 281 | float glamt(yb, xbT) ; |
| 282 | glamt:units = "degrees_east" ; |
| 283 | float glamu(yb, xbU) ; |
| 284 | glamu:units = "degrees_east" ; |
| 285 | float glamv(yb, xbV) ; |
| 286 | glamv:units = "degrees_east" ; |
| 287 | float glamf(yb, xbF) ; |
| 288 | glamf:units = "degrees_east" ; |
| 289 | }}} |
| 290 | |
| 291 | |
| 292 | |