--- trunk/libf/dyn3d/tourpot.f 2010/03/25 14:29:07 27 +++ trunk/dyn3d/tourpot.f 2014/09/04 10:05:52 104 @@ -1,83 +1,48 @@ -! -! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/tourpot.F,v 1.1.1.1 2004/05/19 12:53:06 lmdzadmin Exp $ -! - SUBROUTINE tourpot ( vcov, ucov, massebxy, vorpot ) +module tourpot_m -c======================================================================= -c -c Auteur: P. Le Van -c ------- -c -c Objet: -c ------ -c -c ******************************************************************* -c ......... calcul du tourbillon potentiel ......... -c ******************************************************************* -c -c vcov,ucov,fext et pbarxyfl sont des argum. d'entree pour le s-pg . -c vorpot est un argum.de sortie pour le s-pg . -c -c======================================================================= + IMPLICIT NONE - use dimens_m - use paramet_m - use logic - use comgeom - use filtreg_m, only: filtreg +contains - IMPLICIT NONE + SUBROUTINE tourpot(vcov, ucov, massebxy, vorpot) - REAL rot( ip1jm,llm ) - REAL, intent(in):: vcov( ip1jm,llm ),ucov( ip1jmp1,llm ) - REAL massebxy( ip1jm,llm ),vorpot( ip1jm,llm ) + ! From LMDZ4/libf/dyn3d/tourpot.F, version 1.1.1.1 2004/05/19 12:53:06 - INTEGER l, ij + ! Author: P. Le Van + ! Objet : calcul du tourbillon potentiel + USE comgeom, ONLY: fext_2d + USE dimens_m, ONLY: iim, jjm, llm + use filtreg_m, only: filtreg + REAL, intent(in):: vcov(:, :, :) ! (iim + 1, jjm, llm) + REAL, intent(in):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm) + REAL, intent(in):: massebxy(:, :, :) ! (iim + 1, jjm, llm) mass of grid cell + real, intent(out):: vorpot(:, :, :) ! (iim + 1, jjm, llm) + ! = (Filtre(d(vcov)/dx - d(ucov)/dy) + fext) / massebxy -c ... vorpot = ( Filtre( d(vcov)/dx - d(ucov)/dy ) + fext ) /psbarxy .. + ! Local: + REAL rot(iim + 1, jjm, llm) + ! relative vorticity multiplied by cell area, in m2 s-1 + INTEGER l, i, j -c ........ Calcul du rotationnel du vent V puis filtrage ........ + !--------------------------------------------------------------- - DO 5 l = 1,llm + ! Calcul du rotationnel du vent puis filtrage - DO 2 ij = 1, ip1jm - 1 - rot( ij,l ) = vcov(ij+1,l)-vcov(ij,l)+ucov(ij+iip1,l)-ucov(ij,l) - 2 CONTINUE + forall (i = 1: iim, j = 1: jjm) rot(i, j, :) & + = vcov(i + 1, j, :) - vcov(i, j, :) + ucov(i, j + 1, :) - ucov(i, j, :) + rot(iim + 1, :, :) = rot(1, :, :) -c .... correction pour rot( iip1,j,l ) ..... -c .... rot(iip1,j,l) = rot(1,j,l) ..... + CALL filtreg(rot, jjm, llm, 2, 1, .FALSE.) -CDIR$ IVDEP + forall (l = 1: llm) vorpot(:iim, :, l) & + = (rot(:iim, :, l) + fext_2d(:iim, :)) / massebxy(:iim, :, l) + vorpot(iim + 1, :, :)= vorpot(1, :, :) - DO 3 ij = iip1, ip1jm, iip1 - rot( ij,l ) = rot( ij -iim, l ) - 3 CONTINUE + END SUBROUTINE tourpot - 5 CONTINUE - - - CALL filtreg( rot, jjm, llm, 2, 1, .FALSE., 1 ) - - - DO 10 l = 1, llm - - DO 6 ij = 1, ip1jm - 1 - vorpot( ij,l ) = ( rot(ij,l) + fext(ij) ) / massebxy(ij,l) - 6 CONTINUE - -c ..... correction pour vorpot( iip1,j,l) ..... -c .... vorpot(iip1,j,l)= vorpot(1,j,l) .... -CDIR$ IVDEP - DO 8 ij = iip1, ip1jm, iip1 - vorpot( ij,l ) = vorpot( ij -iim,l ) - 8 CONTINUE - - 10 CONTINUE - - RETURN - END +end module tourpot_m