53 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone
54 aed_real,
DIMENSION(:,:),
ALLOCATABLE,
TARGET :: zone_cc
55 aed_real,
DIMENSION(:,:),
ALLOCATABLE,
TARGET :: zone_cc_diag
56 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_area
57 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_temp
58 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_salt
59 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_rho
60 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_height
61 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_extc
62 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_tss
63 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_par
64 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_wind
65 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_rain
66 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_i_0
67 aed_real,
DIMENSION(:),
ALLOCATABLE,
TARGET :: zone_taub
70 aed_real,
DIMENSION(:,:),
ALLOCATABLE,
TARGET :: flux_pelz
71 aed_real,
DIMENSION(:,:),
ALLOCATABLE,
TARGET :: flux_benz
82 SUBROUTINE init_zones(nCols, mat_id, n_aed2_vars, n_vars, n_vars_ben)
85 INTEGER,
INTENT(in) :: nCols
86 INTEGER,
DIMENSION(:,:),
INTENT(in) :: mat_id
87 INTEGER,
INTENT(in) :: n_aed2_vars, n_vars, n_vars_ben
90 INTEGER :: cType, nTypes
92 INTEGER,
DIMENSION(:),
ALLOCATABLE :: mat_t
96 ALLOCATE(mat_t(ncols)) ;
ALLOCATE(
zm(ncols))
98 ctype = mat_id(1,1) ; ntypes = 1 ; mat_t(ntypes) = mat_id(1,1)
99 DO col=1, ubound(mat_id,2)
101 IF ( ctype /= mat_id(1,col) )
THEN 103 IF ( mat_t(zon) .eq. mat_id(1,col) )
THEN 104 ctype = mat_id(1,col)
109 IF ( ctype /= mat_id(1,col) )
THEN 111 mat_t(ntypes) = mat_id(1,col)
112 ctype = mat_id(1,col)
117 WRITE(
lu, *)
"Number of mats = ", ntypes,
" = ", mat_t(1:ntypes)
122 ALLOCATE(zone_area(
nzones))
123 ALLOCATE(zone_temp(
nzones))
124 ALLOCATE(zone_salt(
nzones))
125 ALLOCATE(zone_rho(
nzones))
126 ALLOCATE(zone_height(
nzones))
128 ALLOCATE(zone_extc(
nzones))
129 ALLOCATE(zone_tss(
nzones))
130 ALLOCATE(zone_par(
nzones))
131 ALLOCATE(zone_wind(
nzones))
132 ALLOCATE(zone_rain(
nzones))
133 ALLOCATE(zone_i_0(
nzones))
134 ALLOCATE(zone_taub(
nzones))
138 ALLOCATE(zone_cc(n_vars,
nzones))
139 ALLOCATE(zone_cc_diag(n_aed2_vars-n_vars,
nzones))
141 ALLOCATE(flux_pelz(n_vars,
nzones))
142 ALLOCATE(flux_benz(n_vars,
nzones))
151 SUBROUTINE calc_zone_areas(nCols, temp, salt, h, area, wnd, rho, extcoeff, I_0, par, tss, active, rain)
154 INTEGER,
INTENT(in) :: nCols
155 aed_real,
DIMENSION(:),
INTENT(in) :: temp, salt, h, area, wnd, rain
156 aed_real,
DIMENSION(:),
INTENT(in) :: rho, extcoeff, i_0, par, tss
157 LOGICAL,
DIMENSION(:),
INTENT(in) :: active
173 IF (.NOT. active(col)) cycle
176 zone_area(zon) = zone_area(zon) + area(col)
177 zone_temp(zon) = zone_temp(zon) + temp(col)
178 zone_salt(zon) = zone_salt(zon) + salt(col)
179 zone_rho(zon) = zone_rho(zon) + rho(col)
180 zone_height(zon) = zone_height(zon) + h(col)
181 zone_extc(zon) = zone_extc(zon) + extcoeff(col)
182 zone_tss(zon) = zone_tss(zon) + tss(col)
183 zone_par(zon) = zone_par(zon) + par(col)
184 zone_wind(zon) = zone_wind(zon) + wnd(col)
185 zone_rain(zon) = zone_rain(zon) + rain(col)
186 zone_i_0(zon) = zone_i_0(zon) + i_0(col)
212 INTEGER,
INTENT(in) :: nCols
213 aed_real,
INTENT(in) :: cc(:,:)
214 aed_real,
DIMENSION(:),
INTENT(in) :: area
215 LOGICAL,
DIMENSION(:),
INTENT(in) :: active
216 INTEGER,
DIMENSION(:),
INTENT(in) :: benth_map
219 INTEGER :: col, zon, bot
224 IF (.NOT. active(col)) cycle
239 INTEGER,
INTENT(in) :: nCols
240 aed_real,
INTENT(inout) :: cc(:,:)
241 aed_real,
DIMENSION(:),
INTENT(in) :: area
242 LOGICAL,
DIMENSION(:),
INTENT(in) :: active
243 INTEGER,
DIMENSION(:),
INTENT(in) :: benth_map
246 INTEGER :: col, zon, bot
251 IF (.NOT. active(col)) cycle
263 SUBROUTINE stopit(message)
266 CHARACTER(*) :: message
270 END SUBROUTINE stopit
278 type(aed2_column_t),
INTENT(inout) :: column(:)
279 INTEGER,
INTENT(in) :: zon, n_aed2_vars
283 INTEGER :: v, d, sv, sd, ev
284 TYPE(aed2_variable_t),
POINTER :: tvar
288 v = 0 ; d = 0; sv = 0; sd = 0 ; ev = 0
291 IF ( .NOT. aed2_get_var(av, tvar) ) stop
"Error getting variable info" 293 IF ( tvar%extern )
THEN 295 SELECT CASE (tvar%name)
296 CASE (
'temperature' ) ; column(av)%cell => zone_temp
297 CASE (
'salinity' ) ; column(av)%cell => zone_salt
298 CASE (
'density' ) ; column(av)%cell => zone_rho
299 CASE (
'layer_ht' ) ; column(av)%cell => zone_height
300 CASE (
'layer_area' ) ; column(av)%cell_sheet => zone_area(zon)
301 CASE (
'rain' ) ; column(av)%cell_sheet => zone_rain(zon)
303 CASE (
'material' ) ; column(av)%cell_sheet => zone(zon)
305 CASE (
'extc_coef' ) ; column(av)%cell => zone_extc
306 CASE (
'tss' ) ; column(av)%cell => zone_tss
316 CASE (
'sed_zone' ) ; column(av)%cell_sheet => zone(zon)
317 CASE (
'wind_speed' ) ; column(av)%cell_sheet => zone_wind(zon)
318 CASE (
'par_sf' ) ; column(av)%cell_sheet => zone_i_0(zon)
321 CASE DEFAULT ;
CALL stopit(
"ERROR: external variable "//trim(tvar%name)//
" not found.")
323 ELSEIF ( tvar%diag )
THEN 325 IF ( tvar%sheet )
THEN 326 column(av)%cell_sheet => zone_cc_diag(d,zon)
328 column(av)%cell => zone_cc_diag(d,zon:zon)
331 IF ( tvar%sheet )
THEN 334 column(av)%cell_sheet => zone_cc(
nwq_var+sv, zon)
335 ELSEIF ( tvar%top )
THEN 338 column(av)%flux_ben => flux_benz(
nwq_var+sv, zon)
342 column(av)%cell => zone_cc(v, 1:1)
343 column(av)%flux_pel => flux_pelz(v, 1:1)
344 column(av)%flux_ben => flux_benz(v, zon)
357 INTEGER,
INTENT(in) :: n_aed2_vars
358 aed_real,
INTENT(in):: dt
362 type(aed2_column_t) :: column(n_aed2_vars)
369 CALL aed2_calculate_benthic(column, 1)
371 zone_cc(v, 1) = zone_cc(v, 1) + dt*flux_benz(v, zon);
integer, dimension(:), allocatable zm
integer, dimension(:), allocatable zone_count