updated top-level README and version_decl for V4.5 (#1847)
[WRF.git] / wrftladj / jcdfi.F
blob438bd6631ecb2fc8a330689c3f86ecbc62437482
1  SUBROUTINE jcdfi_init_coef 
2  
3     USE module_domain, ONLY : domain, head_grid
4     USE module_utility
6     IMPLICIT NONE
8     INTEGER :: nstep2, rundfi, rc, i
9     TYPE(WRFU_TimeInterval) :: run_interval
10     REAL :: timestep
12     INTERFACE
13        SUBROUTINE optfil_driver(grid)
14           USE module_domain, ONLY : domain
15           TYPE (domain), POINTER :: grid
16        END SUBROUTINE optfil_driver
17     END INTERFACE
19     head_grid%itimestep=0
21     CALL optfil_driver(head_grid)
23     timestep=abs(head_grid%dt)
24     run_interval = head_grid%stop_subtime - head_grid%start_subtime
26     CALL WRFU_TimeIntervalGet( run_interval, S=rundfi, rc=rc )
27     rundfi = abs(rundfi)
29     nstep2= ceiling((1.0 + real(rundfi)/timestep) / 2.0)
31     IF ( MOD(int(1.0 + real(rundfi)/timestep),2) /= 0 ) THEN
32        DO i=1,2*nstep2-1
33           head_grid%hcoeff(i) = -1.0 * head_grid%hcoeff(i)
34        END DO
35     ELSE
36        DO i=1,2*nstep2
37           head_grid%hcoeff(i) = -1.0 * head_grid%hcoeff(i)
38        END DO
39     END IF
41     head_grid%hcoeff(nstep2) = 1.0 + head_grid%hcoeff(nstep2) 
43  END SUBROUTINE jcdfi_init_coef
45  SUBROUTINE jcdfi_zero_forcing ( grid )
47     USE module_domain, ONLY : domain
49     IMPLICIT NONE
51     !  Input data.
53     TYPE(domain) , INTENT(INOUT) :: grid
55     grid%itimestep = 0
57     grid%jcdfi_u  = 0.0
58     grid%jcdfi_v  = 0.0
59     grid%jcdfi_t  = 0.0
60     grid%jcdfi_p  = 0.0
62  END SUBROUTINE jcdfi_zero_forcing
64  SUBROUTINE jcdfi_tl (grid)
66     USE module_domain, ONLY : domain
68     IMPLICIT NONE
70     !  Input data.
72     TYPE(domain) , INTENT(INOUT) :: grid
74     REAL :: hn
76     hn = grid%hcoeff(grid%itimestep+1)
78     grid%jcdfi_u  = grid%jcdfi_u  + hn * grid%g_u_2
79     grid%jcdfi_v  = grid%jcdfi_v  + hn * grid%g_v_2
80     grid%jcdfi_t  = grid%jcdfi_t  + hn * grid%g_t_2
81     grid%jcdfi_p  = grid%jcdfi_p  + hn * grid%g_p
83  END SUBROUTINE jcdfi_tl
85  SUBROUTINE jcdfi_add_forcing ( grid )
87     USE module_domain, ONLY : domain
89     IMPLICIT NONE
91     TYPE ( domain ) , INTENT(INOUT) :: grid
93     REAL :: hn
95     hn = grid%hcoeff(grid%itimestep+1)
97     grid%a_u_2  = grid%a_u_2  + hn * grid%jcdfi_u 
98     grid%a_v_2  = grid%a_v_2  + hn * grid%jcdfi_v
99     grid%a_t_2  = grid%a_t_2  + hn * grid%jcdfi_t 
100     grid%a_p    = grid%a_p    + hn * grid%jcdfi_p
101  END SUBROUTINE jcdfi_add_forcing