da_set_tst_trnsf_fld.inc

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