SUBROUTINE asselin_filter !------------------------------------------------------------------------------! ! Current revisions: ! ----------------- ! ! ! Former revisions: ! --------------------- ! $Id: asselin_filter.f90 484 2010-02-05 07:36:54Z maronga $ ! ! 75 2007-03-22 09:54:05Z raasch ! moisture renamed humidity ! ! RCS Log replace by Id keyword, revision history cleaned up ! ! Revision 1.8 2004/01/30 10:14:02 raasch ! Scalar lower k index nzb replaced by 2d-array nzb_2d ! ! Revision 1.1 2002/05/02 13:43:53 13:43:53 raasch (Siegfried Raasch) ! Initial revision ! ! ! Description: ! ------------- ! Time filter needed for the leap-frog method !------------------------------------------------------------------------------! USE arrays_3d USE control_parameters USE cpulog USE indices USE interfaces IMPLICIT NONE INTEGER :: i, j, k CALL cpu_log( log_point(9), 'timefilter', 'start' ) ! !-- Return to the calling routine, if time filter is not to be applied IF ( asselin_filter_factor == 0.0 ) RETURN ! !-- Apply the time filter #if defined( __ibm ) !$OMP PARALLEL PRIVATE (i,j,k) !$OMP DO DO i = nxl-1, nxr+1 DO j = nys-1, nyn+1 DO k = nzb_2d(j,i), nzt+1 u(k,j,i) = u(k,j,i) + asselin_filter_factor * & ( u_p(k,j,i) - 2.0 * u(k,j,i) + u_m(k,j,i) ) v(k,j,i) = v(k,j,i) + asselin_filter_factor * & ( v_p(k,j,i) - 2.0 * v(k,j,i) + v_m(k,j,i) ) w(k,j,i) = w(k,j,i) + asselin_filter_factor * & ( w_p(k,j,i) - 2.0 * w(k,j,i) + w_m(k,j,i) ) ENDDO IF ( scalar_advec /= 'bc-scheme' ) THEN DO k = nzb_2d(j,i), nzt+1 pt(k,j,i) = pt(k,j,i) + asselin_filter_factor * & ( pt_p(k,j,i) - 2.0 * pt(k,j,i) + pt_m(k,j,i) ) ENDDO ENDIF IF ( .NOT. constant_diffusion .AND. scalar_advec /= 'bc-scheme' ) & THEN DO k = nzb_2d(j,i), nzt+1 e(k,j,i) = e(k,j,i) + asselin_filter_factor * & ( e_p(k,j,i) - 2.0 * e(k,j,i) + e_m(k,j,i) ) ENDDO ENDIF IF ( ( humidity .OR. passive_scalar ) .AND. & scalar_advec /= 'bc-scheme' ) THEN DO k = nzb_2d(j,i), nzt+1 q(k,j,i) = q(k,j,i) + asselin_filter_factor * & ( q_p(k,j,i) - 2.0 * q(k,j,i) + q_m(k,j,i) ) ENDDO ENDIF ENDDO ENDDO !$OMP END PARALLEL #else u = u + asselin_filter_factor * ( u_p - 2.0 * u + u_m ) v = v + asselin_filter_factor * ( v_p - 2.0 * v + v_m ) w = w + asselin_filter_factor * ( w_p - 2.0 * w + w_m ) IF ( scalar_advec /= 'bc-scheme' ) THEN pt = pt + asselin_filter_factor * ( pt_p - 2.0 * pt + pt_m ) ENDIF IF ( .NOT. constant_diffusion .AND. scalar_advec /= 'bc-scheme' ) THEN e = e + asselin_filter_factor * ( e_p - 2.0 * e + e_m ) ENDIF IF ( ( humidity .OR. passive_scalar ) .AND. & scalar_advec /= 'bc-scheme' ) THEN q = q + asselin_filter_factor * ( q_p - 2.0 * q + q_m ) ENDIF #endif CALL cpu_log( log_point(9), 'timefilter', 'stop' ) END SUBROUTINE asselin_filter