SUBROUTINE asselin_filter !-------------------------------------------------------------------------------! ! Actual revisions: ! ----------------- ! ! ! Former revisions: ! --------------------- ! $Log: asselin_filter.f90,v $ ! Revision 1.8 2004/01/30 10:14:02 raasch ! Scalar lower k index nzb replaced by 2d-array nzb_2d ! ! Revision 1.7 2003/03/16 09:26:58 raasch ! Two underscores (_) are placed in front of all define-strings ! ! Revision 1.6 2003/03/14 13:37:38 raasch ! Do loop constructs only for IBM, otherwise array notation re-introduced ! ! Revision 1.5 2002/12/19 13:45:57 raasch ! Array notation changed to do-loop constructs due to better performance, ! OpenMP directives added ! ! Revision 1.4 2002/05/15 10:00:18 raasch ! Nothing changed ! ! Revision 1.3 2002/05/02 19:39:07 19:39:07 raasch (Siegfried Raasch) ! Use of module interfaces included ! ! Revision 1.2 2002/05/02 14:06:02 raasch ! *** empty log message *** ! ! 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 ( ( moisture .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 ( ( moisture .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