14 | | == High-level control and coding structure == |
| 14 | == Summary of main features == |
| 15 | |
| 16 | * The following algorithms will be included in the first implementation: |
| 17 | * Clamped and Flow Relaxation Scheme. (Clamped is FRS with rimwidth=1). |
| 18 | * Flather radiation condition on barotropic solution. |
| 19 | * NPO version of Orlanski radiation condition as currently included in OBC. |
| 20 | Plan to code ''implicit'' time-stepping for greater stability and to avoid |
| 21 | OBC restarts. May also code normal, and fully 2D Orlanski condition. |
| 22 | * "Mercator-style" barotropic boundary conditions. |
| 23 | * Tidal harmonic forcing (included in Flather boundary condition). |
| 24 | |
| 25 | * There will be two ways of specifying the boundary geometry: |
| 26 | a. Using obc_par.h90 to define straight-line segments. One will be able to |
| 27 | define more than one segment for each of east, west, south, north |
| 28 | boundaries. |
| 29 | b. Reading in the list of points from the data file as is now done in BDY. |
| 30 | |
| 31 | * The low-level code will use the BDY-style specification of the boundary |
| 32 | geometry (an unstructured list of gridpoints). If obc_par.h90 is used then |
| 33 | this will be converted to BDY-style arrays in the initialisation. |
| 34 | |
| 35 | * The read of external boundary data will be handled by fldread.F90 as is done |
| 36 | for the SBC fields. This is clean and flexible. In the future this will |
| 37 | permit online interpolation of boundary data. |
| 38 | |
| 39 | * It will be possible to define more than one open boundary set. This will |
| 40 | allow different boundary conditions to be applied on different boundaries. |
| 41 | |
| 42 | |
| 43 | == Control and coding structure == |
19 | | &namobc ! unstructured open boundaries ("key_obc") |
20 | | !----------------------------------------------------------------------- |
21 | | cn_mask = '' ! name of mask file (ln_mask=T) |
22 | | cn_dta = 'obcdata1', 'obcdta2' ! root name of data file |
23 | | nn_freq = 6 , -1 ! frequency of data in file (hours) |
24 | | ! negative value => months |
25 | | cn_type = 'daily' , 'yearly' ! 'yearly','monthly','daily' files |
26 | | ln_clim = .false. , .true. ! climatological data or not |
27 | | ln_tint = .true. , .true. ! time interpolation of boundary |
28 | | ! data or not |
29 | | |
30 | | nn_dyn = 0, 1, ! Choice of schemes for velocities |
31 | | nn_tra = 0, 1, ! Choice of schemes for T and S |
| 48 | &namobc ! one-way open boundaries ("key_obc") |
| 49 | !----------------------------------------------------------------------- |
| 50 | nb_obc = 2 ! Number of open boundary sets |
| 51 | cn_mask = '' ! name of mask file (ln_mask=T) |
| 52 | nn_dyn = 1, 0, ! Choice of schemes for velocities |
| 53 | nn_tra = 1, 1, ! Choice of schemes for T and S |
| 65 | !----------------------------------------------------------------------- |
| 66 | &namobc_dta ! one-way open boundaries ("key_obc") |
| 67 | !----------------------------------------------------------------------- |
| 68 | ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'daily'/ ! weights ! rotation ! |
| 69 | ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! |
| 70 | bn_tem = 'obcdta_grid_T' , 24 , 'votemper', .true. , .false., 'daily' , '' , '' |
| 71 | bn_sal = 'obcdta_grid_T' , 24 , 'vosaline', .true. , .false., 'daily' , '' , '' |
| 72 | bn_uvel = 'obcdta_grid_U' , 24 , 'vozocrtx', .true. , .false., 'daily' , '' , '' |
| 73 | bn_vvel = 'obcdta_grid_V' , 24 , 'vomecrty', .true. , .false., 'daily' , '' , '' |
| 74 | bn_ssh = 'obcdta_bt_grid_T' , 6 , 'sossheig', .true. , .false., 'daily' , '' , '' |
| 75 | bn_ubar = 'obcdta_bt_grid_U' , 6 , 'vozocrtx', .true. , .false., 'daily' , '' , '' |
| 76 | bn_vbar = 'obcdta_bt_grid_V' , 6 , 'vomecrty', .true. , .false., 'daily' , '' , '' |
| 77 | |
| 78 | cn_dir = './obcdta' ! root directory for the location of the boundary data files |
| 79 | / |
| 80 | !----------------------------------------------------------------------- |
| 81 | &namobc_dta ! one-way open boundaries ("key_obc") |
| 82 | !----------------------------------------------------------------------- |
| 83 | ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'daily'/ ! weights ! rotation ! |
| 84 | ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! |
| 85 | bn_tem = 'obcdta_clim_grid_T' , -1 , 'votemper', .true. , .true., 'yearly' , '' , '' |
| 86 | bn_sal = 'obcdta_clim_grid_T' , -1 , 'vosaline', .true. , .true., 'yearly' , '' , '' |
| 87 | |
| 88 | cn_dir = './obcdta' ! root directory for the location of the boundary data files |
| 89 | / |
45 | | You can define several boundary streams. The example here has two streams |
46 | | defined. The number of streams is defined by the '''cn_dta''' parameter which is |
47 | | the filename root. For '''cn_dta'''=''bdydta1'', it will look for files called |
48 | | ''bdydta1_grid_T.nc'', ''bdydta1_grid_U.nc'' etc. For each stream you select |
49 | | which boundary conditions you want to apply to which fields using '''nn_dyn''', |
50 | | '''nn_tra''', '''nn_barotropic''' etc. Zero means do not apply open boundary |
51 | | conditions. The other numbers refer to different schemes. For example, |
52 | | '''nn_tra'''=0 means don't apply open boundary conditions to T and S, |
53 | | '''nn_tra'''=1 might mean apply FRS conditions, '''nn_tra'''=2 might mean apply |
54 | | radiation conditions etc. |
| 92 | It is possible to define more than one open boundary set in case you want to use |
| 93 | different boundary conditions for different boundaries. For instance one might |
| 94 | want to apply different algorithms on the east and west boundaries of a domain, |
| 95 | or one might want to apply boundary conditions from an external model over part |
| 96 | of the open boundary but climatological boundary conditions over another part of |
| 97 | the open boundary (as in the example above). |
| 98 | |
| 99 | For each open boundary set you define which conditions to apply to each set of |
| 100 | variables using '''nn_dyn''', '''nn_tra''' etc. For example: |
| 101 | |
| 102 | '''nn_tra''' = 0 : Apply no boundary condition (land |
| 103 | boundary) |
| 104 | '''nn_tra''' = 1 : Clamped/relaxation boundary condition |
| 105 | '''nn_tra''' = 2 : Normal radiation condition |
| 106 | '''nn_tra''' = 3 : NPO radiation condition |
| 107 | etc. |
| 108 | |
| 109 | There is a separate '''&namobc_dta''' namelist for each boundary set, which |
| 110 | defines the input data files using the '''FLD''' structure from fldread.F90. |
| 111 | (This will allow for online interpolation of boundary conditions in the future). |