subroutine da_solve_init(grid & 3,12
#include "dummy_new_args.inc"
)
!-----------------------------------------------------------------------
! Purpose: TBD
!-----------------------------------------------------------------------
implicit none
type(domain), intent(inout) :: grid
#include "dummy_new_decl.inc"
#ifdef DM_PARALLEL
integer :: ii
#endif
integer :: sm31,sm32,sm33,sm31x,sm32x,sm33x,sm31y,sm32y,sm33y
integer :: em31,em32,em33,ep_dim
ep_dim=1
if ( use_4denvar ) ep_dim=num_fgat_time ! 4D-En-Var
! if (dwordsize != rwordsize)
#define true_MSG_XPOSE add_msg_xpose_real
! else
! define true_MSG_XPOSE add_msg_xpose_doubleprecision
! end if
if (trace_use) call da_trace_entry
("da_solve_init")
! De-reference dimension information stored in the grid data structure.
call da_copy_dims
(grid)
! Compute these starting and stopping locations for each tile and number
! of tiles.
call set_tiles
(grid , ids , ide , jds , jde , ips , ipe , jps , jpe)
call da_copy_tile_dims
(grid)
sm31 = grid%sm31
sm32 = grid%sm32
sm33 = grid%sm33
sm31x = grid%sm31x
sm32x = grid%sm32x
sm33x = grid%sm33x
sm31y = grid%sm31y
sm32y = grid%sm32y
sm33y = grid%sm33y
em31 = grid%em31
em32 = grid%em32
em33 = grid%em33
#ifdef DM_PARALLEL
#define REGISTER_I1
#include "data_calls.inc"
if (trace_use) call da_trace
("da_solve_init", &
Message="Setup halo region communication")
! Define halo region communication.
!-----------------------------------------------------------------------
! Stencils for patch communications
! * * * * *
! * * * * * * * * *
! * + * * + * * * + * *
! * * * * * * * * *
! * * * * *
!ij vp%v1 x
!ij xb%cori x
!ij xb%rho x
!ij xa%u x
!ij xa%v x
!--------------------------------------------------------------
#include "HALO_INIT.inc"
#include "HALO_PSICHI_UV.inc"
#include "HALO_BAL_EQN_ADJ.inc"
#include "HALO_PSICHI_UV_ADJ.inc"
#include "HALO_XA.inc"
#include "HALO_SFC_XA.inc"
#include "HALO_SSMI_XA.inc"
#include "HALO_2D_WORK.inc"
#include "HALO_RADAR_XA_W.inc"
#if (WRF_CHEM == 1)
#include "HALO_CHEM_INIT.inc"
#include "HALO_CHEM_XA.inc"
#endif
if (trace_use) call da_trace
("da_solve_init", &
Message="Copy domain and transpose descriptors")
! Copy domain and transpose descriptors.
grid%xp%domdesc = grid%domdesc
do ii = 1, max_comms
grid%xp%comms(ii) = grid%comms(ii)
end do
#endif
! Fill background scalars:
grid%xb%ids = grid%xp%ids
grid%xb%ide = grid%xp%ide
grid%xb%jds = grid%xp%jds
grid%xb%jde = grid%xp%jde
grid%xb%kds = grid%xp%kds
grid%xb%kde = grid%xp%kde
grid%xb%ims = grid%xp%ims
grid%xb%ime = grid%xp%ime
grid%xb%jms = grid%xp%jms
grid%xb%jme = grid%xp%jme
grid%xb%kms = grid%xp%kms
grid%xb%kme = grid%xp%kme
grid%xb%its = grid%xp%its
grid%xb%ite = grid%xp%ite
grid%xb%jts = grid%xp%jts
grid%xb%jte = grid%xp%jte
grid%xb%kts = grid%xp%kts
grid%xb%kte = grid%xp%kte
! if anal_type_hybrid_dual_res,
! grid%ep is already allocated in the call to reallocate_analysis_grid
if ( .not. anal_type_hybrid_dual_res ) then
!
! allocate grid%ep%v1
!
ALLOCATE(grid%ep%v1(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
print *,' Failed to allocate grid%ep%v1(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha). '
endif
grid%ep%v1=0.
!
! allocate grid%ep%v2
!
ALLOCATE(grid%ep%v2(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
print *,' Failed to allocate grid%ep%v2(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha). '
endif
grid%ep%v2=0.
!
! allocate grid%ep%v3
!
ALLOCATE(grid%ep%v3(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
print *,' Failed to allocate grid%ep%v3(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha). '
endif
grid%ep%v3=0.
!
! allocate grid%ep%v4
!
ALLOCATE(grid%ep%v4(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
print *,' Failed to allocate grid%ep%v4(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha). '
endif
grid%ep%v4=0.
!
! allocate grid%ep%v5
!
ALLOCATE(grid%ep%v5(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
print *,' Failed to allocate grid%ep%v5(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha). '
endif
grid%ep%v5=0.
if ( alpha_hydrometeors ) then
!
! allocate grid%ep%cw
!
ALLOCATE(grid%ep%cw(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
write(unit=message(1),fmt='(a)') 'Failed to allocate grid%ep%cw(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha) '
call da_error
(__FILE__,__LINE__,message(1:1))
endif
grid%ep%cw=0.
!
! allocate grid%ep%rn
!
ALLOCATE(grid%ep%rn(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
write(unit=message(1),fmt='(a)') 'Failed to allocate grid%ep%rn(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha) '
call da_error
(__FILE__,__LINE__,message(1:1))
endif
grid%ep%rn=0.
!
! allocate grid%ep%ci
!
ALLOCATE(grid%ep%ci(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
write(unit=message(1),fmt='(a)') 'Failed to allocate grid%ep%ci(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha) '
call da_error
(__FILE__,__LINE__,message(1:1))
endif
grid%ep%ci=0.
!
! allocate grid%ep%sn
!
ALLOCATE(grid%ep%sn(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
write(unit=message(1),fmt='(a)') 'Failed to allocate grid%ep%sn(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha) '
call da_error
(__FILE__,__LINE__,message(1:1))
endif
grid%ep%sn=0.
!
! allocate grid%ep%gr
!
ALLOCATE(grid%ep%gr(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha*ep_dim),STAT=ierr)
if (ierr.ne.0) then
write(unit=message(1),fmt='(a)') 'Failed to allocate grid%ep%gr(sm31:em31,sm32:em32,sm33:em33,1:config_flags%ensdim_alpha) '
call da_error
(__FILE__,__LINE__,message(1:1))
endif
grid%ep%gr=0.
end if ! alpha_hydrometeors
end if !not anal_type_hybrid_dual_res
if (trace_use) call da_trace_exit
("da_solve_init")
end subroutine da_solve_init