203 logical,
intent(in) :: restart
204 type(time_type),
target,
intent(in) :: day
206 type(verticalgrid_type),
intent(in) :: gv
207 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)),
intent(in) :: h
208 type(diag_ctrl),
target,
intent(in) :: diag
209 type(ocean_obc_type),
pointer :: obc
210 type(pseudo_salt_tracer_cs),
pointer :: cs
211 type(sponge_cs),
pointer :: sponge_csp
212 type(diag_to_z_cs),
pointer :: diag_to_z_csp
213 type(thermo_var_ptrs),
intent(in) :: tv
232 character(len=16) :: name
233 character(len=72) :: longname
234 character(len=48) :: units
235 character(len=48) :: flux_units
238 integer :: i, j, k, is, ie, js, je, isd, ied, jsd, jed, nz, m
239 integer :: isdb, iedb, jsdb, jedb
241 if (.not.
associated(cs))
return 242 if (cs%ntr < 1)
return 243 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = gv%ke
244 isd = g%isd ; ied = g%ied ; jsd = g%jsd ; jed = g%jed
245 isdb = g%IsdB ; iedb = g%IedB ; jsdb = g%JsdB ; jedb = g%JedB
252 call query_vardesc(cs%tr_desc(m), name=name, caller=
"initialize_pseudo_salt_tracer")
253 if ((.not.restart) .or. (.not. &
254 query_initialized(cs%tr(:,:,:,m), name, cs%restart_CSp)))
then 255 do k=1,nz ;
do j=jsd,jed ;
do i=isd,ied
256 cs%tr(i,j,k,m) = tv%S(i,j,k)
257 enddo ;
enddo ;
enddo 261 if (
associated(obc))
then 270 if (gv%Boussinesq)
then ; flux_units =
"g salt/(m^2 s)" 271 else ; flux_units =
"g salt/(m^2 s)" ;
endif 275 call query_vardesc(cs%tr_desc(m), name, units=units, longname=longname, &
276 caller=
"initialize_pseudo_salt_tracer")
277 cs%id_tracer(m) = register_diag_field(
"ocean_model", trim(name), cs%diag%axesTL, &
278 day, trim(longname) , trim(units))
279 cs%id_tr_adx(m) = register_diag_field(
"ocean_model", trim(name)//
"_adx", &
280 cs%diag%axesCuL, day, trim(longname)//
" advective zonal flux" , &
282 cs%id_tr_ady(m) = register_diag_field(
"ocean_model", trim(name)//
"_ady", &
283 cs%diag%axesCvL, day, trim(longname)//
" advective meridional flux" , &
285 cs%id_tr_dfx(m) = register_diag_field(
"ocean_model", trim(name)//
"_dfx", &
286 cs%diag%axesCuL, day, trim(longname)//
" diffusive zonal flux" , &
288 cs%id_tr_dfy(m) = register_diag_field(
"ocean_model", trim(name)//
"_dfy", &
289 cs%diag%axesCvL, day, trim(longname)//
" diffusive zonal flux" , &
291 if (cs%id_tr_adx(m) > 0)
call safe_alloc_ptr(cs%tr_adx(m)%p,isdb,iedb,jsd,jed,nz)
292 if (cs%id_tr_ady(m) > 0)
call safe_alloc_ptr(cs%tr_ady(m)%p,isd,ied,jsdb,jedb,nz)
293 if (cs%id_tr_dfx(m) > 0)
call safe_alloc_ptr(cs%tr_dfx(m)%p,isdb,iedb,jsd,jed,nz)
294 if (cs%id_tr_dfy(m) > 0)
call safe_alloc_ptr(cs%tr_dfy(m)%p,isd,ied,jsdb,jedb,nz)
297 if ((cs%id_tr_adx(m) > 0) .or. (cs%id_tr_ady(m) > 0) .or. &
298 (cs%id_tr_dfx(m) > 0) .or. (cs%id_tr_dfy(m) > 0)) &
299 call add_tracer_diagnostics(name, cs%tr_Reg, cs%tr_adx(m)%p, &
300 cs%tr_ady(m)%p,cs%tr_dfx(m)%p,cs%tr_dfy(m)%p)
302 call register_z_tracer(cs%tr(:,:,:,m), trim(name), longname, units, &
303 day, g, diag_to_z_csp)
Ocean grid type. See mom_grid for details.