1 |
Open Boundaries Implementation in MITgcmUV |
2 |
|
3 |
These are some quick explanatory notes regards implementation of open |
4 |
boundaries (OB) and the example configuration found in |
5 |
.../verification/exp4/ |
6 |
|
7 |
|
8 |
Input and control of OBs |
9 |
|
10 |
* The open boundaries code is used only if the LOGICAL parameter |
11 |
openBondaries is .TRUE. |
12 |
* Four 1-dimensional INTEGER arrays indicate the position of an OB: |
13 |
OB_Jnorth, OB_Jsouth, OB_Ieast and OB_Iwest. |
14 |
|
15 |
The values of OB_* indicate the absolute computational coordinate of an open |
16 |
boundary. eg. OB_Jsouth(3)=4 |
17 |
means that in the column I=3 there is a "southern" OB at tracer point J=4. |
18 |
Similarly OB_Iwest(2)=1 means that |
19 |
the tracer point (2,1) is an OB point. This structure for specifying OBs |
20 |
assumes that there will be only one northern and southern OB per column and |
21 |
similar in the other direction. An entry of 0 (zero) means there is now OB |
22 |
in that column/row. |
23 |
|
24 |
The reference to "tracer points" above introduces an important distinction |
25 |
between particular boundaries due to the C-grid staggering of variables. At |
26 |
a northern OB tracer point (i,j) the OB v-velocity point is at (i,j) while |
27 |
at a southern OB tracer point (i,j) the OB v-velocity point is at (i,j+1). |
28 |
This is all taken care of in the code but when specifying OB values it is |
29 |
important to remember the physical coordinates of T,S,U and V are not the |
30 |
same for a given computational index. |
31 |
|
32 |
|
33 |
Changing the type of open boundary |
34 |
|
35 |
The supplied code simply specifies model variables at the appropriate |
36 |
points. The value to be specified can (and should) be determine using a |
37 |
radiative condition. A skeleton code is supplied set_obcs.F to illustrate |
38 |
how |
39 |
this might be done. This is the only routine that needs to be edited. Edit |
40 |
others at your own peril! |
41 |
|
42 |
|
43 |
The examples |
44 |
|
45 |
There are three examples in .../verification/exp4/ |
46 |
|
47 |
1. A zonal channel (solid side walls) with open boundaries at either end: |
48 |
data.channel |
49 |
2. A zonal channel with a Gaussian bump and open boundaries at either end: |
50 |
data.bumpchannel |
51 |
3. An open domain (OBs on four sides) with a Gaussian bump: data.bump |
52 |
|
53 |
Each data file has a corresponding topog.* file which is specified through |
54 |
the variable bathyFile in data.* |
55 |
The physical problem has a flow of U=25 cm/s specified at all open |
56 |
boundaries. The details of the experiment can be found in Adcroft's thesis |
57 |
(Imperial College) and in Adcroft, Hill and Marshall, MWR 1997. |
58 |
|
59 |
The differences between the supplied data.* files also show how to turn |
60 |
particular OBs on and off. |
61 |
|
62 |
Compiling and running the examples |
63 |
|
64 |
The examples supplied are the barotropic zonal flow over a Gaussian bump in |
65 |
a channel. |
66 |
|
67 |
* Header files: Copy or link SIZE.h, CPP_OPTIONS.h and CP_EEOPTIONS.h |
68 |
from .../verification/exp4/code/ to .../model/inc/, .../model/inc/ and |
69 |
.../eesupp.inc/ respectively |
70 |
* Modified source: Copy set_obcs.F to .../model/src/ |
71 |
|
72 |
Now compile the code as usual: |
73 |
|
74 |
* cd bin |
75 |
* ../tools/genmake -makefile |
76 |
* make depend |
77 |
* make |
78 |
|
79 |
To run the code you must first choose a data file to use: |
80 |
|
81 |
* cd ../verification/exp4/input |
82 |
* cp data.bump data |
83 |
* ../../exe/mitgcmuv |
84 |
|
85 |
Happy Open Boundarying! |