da_set_tst_trnsf_fld.inc
References to this file elsewhere.
1 subroutine da_set_tst_trnsf_fld(grid, va, vb, typical_rms)
2
3 !-----------------------------------------------------------------------
4 ! Purpose: TBD
5 !-----------------------------------------------------------------------
6
7 implicit none
8
9 type(domain), intent(in) :: grid ! model state
10 real, intent(out) :: va(ims:ime, jms:jme, kms:kme)
11 real, intent(in) :: vb(ims:ime, jms:jme, kms:kme)
12 real, intent(in) :: typical_rms
13
14 real :: gbuf(ids:ide, jds:jde, kds:kde)
15 integer :: size3d
16 integer :: k ! loop counter.
17 real :: scale ! scale factor.
18 real :: xy_dim_inv ! 1 / real(iy * jx)
19 real :: field_mean ! mean field.
20 real :: field_rms ! rms field.
21
22 if (trace_use) call da_trace_entry("da_set_tst_trnsf_fld")
23
24 size3d = (ide-ids+1)*(jde-jds+1)*(kde-kds+1)
25
26 call da_patch_to_global(grid, vb, gbuf)
27 call wrf_dm_bcast_real(gbuf, size3d)
28
29 xy_dim_inv = 1.0 / real((ide-ids+1)*(jde-jds+1))
30
31 do k = kts,kte
32 field_mean = sum(gbuf(ids:ide, jds:jde, k)) * xy_dim_inv
33
34 gbuf(ids:ide, jds:jde, k) = gbuf(ids:ide, jds:jde, k) - field_mean
35
36 field_rms = sqrt(1.0e-6+sum(gbuf(ids:ide, jds:jde, k)**2) * xy_dim_inv)
37
38 scale = typical_rms / field_rms
39
40 va(its:ite, jts:jte, k) = scale * gbuf(its:ite, jts:jte, k)
41 end do
42
43 if (trace_use) call da_trace_exit("da_set_tst_trnsf_fld")
44
45 end subroutine da_set_tst_trnsf_fld
46
47