Changeset 5246 for LMDZ6/trunk/libf/dyn3d_common/limz.f90
- Timestamp:
- Oct 21, 2024, 2:58:45 PM (23 hours ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/dyn3d_common/limz.f90
r5245 r5246 2 2 ! $Header$ 3 3 ! 4 5 c 6 c Auteurs: P.Le Van, F.Hourdin, F.Forget 7 c 8 c********************************************************************9 cShema d'advection " pseudo amont " .10 c********************************************************************11 cnq,iq,q,pbaru,pbarv,w sont des arguments d'entree pour le s-pg ....12 c 13 c 14 c--------------------------------------------------------------------15 16 c 17 18 19 20 c 21 c 22 cArguments:23 c----------24 realpente_max25 REALs0(ip1jmp1,llm),sm(ip1jmp1,llm)26 realsz(ip1jmp1,llm)27 c 28 c Local 29 c---------30 c 31 INTEGERij,l,j,i,iju,ijq,indu(ip1jmp1),niju32 integern0,iadvplus(ip1jmp1,llm),nl(llm)33 c 34 REALq(ip1jmp1,llm)35 realdzq(ip1jmp1,llm)4 SUBROUTINE limz(s0,sz,sm,pente_max) 5 ! 6 ! Auteurs: P.Le Van, F.Hourdin, F.Forget 7 ! 8 ! ******************************************************************** 9 ! Shema d'advection " pseudo amont " . 10 ! ******************************************************************** 11 ! nq,iq,q,pbaru,pbarv,w sont des arguments d'entree pour le s-pg .... 12 ! 13 ! 14 ! -------------------------------------------------------------------- 15 IMPLICIT NONE 16 ! 17 include "dimensions.h" 18 include "paramet.h" 19 include "comgeom.h" 20 ! 21 ! 22 ! Arguments: 23 ! ---------- 24 real :: pente_max 25 REAL :: s0(ip1jmp1,llm),sm(ip1jmp1,llm) 26 real :: sz(ip1jmp1,llm) 27 ! 28 ! Local 29 ! --------- 30 ! 31 INTEGER :: ij,l,j,i,iju,ijq,indu(ip1jmp1),niju 32 integer :: n0,iadvplus(ip1jmp1,llm),nl(llm) 33 ! 34 REAL :: q(ip1jmp1,llm) 35 real :: dzq(ip1jmp1,llm) 36 36 37 37 38 REALnew_m,zm39 realdzqw(ip1jmp1)40 realadzqw(ip1jmp1),dzqmax(ip1jmp1)38 REAL :: new_m,zm 39 real :: dzqw(ip1jmp1) 40 real :: adzqw(ip1jmp1),dzqmax(ip1jmp1) 41 41 42 Logicalextremum,first43 42 Logical :: extremum,first 43 save first 44 44 45 REALSSUM,CVMGP,CVMGT46 integerismax,ismin47 45 REAL :: SSUM,CVMGP,CVMGT 46 integer :: ismax,ismin 47 EXTERNAL SSUM, ismin,ismax 48 48 49 49 data first/.true./ 50 50 51 51 52 53 54 55 56 57 52 DO l = 1,llm 53 DO ij=1,ip1jmp1 54 q(ij,l) = s0(ij,l) / sm ( ij,l ) 55 dzq(ij,l) = sz(ij,l) /sm(ij,l) 56 ENDDO 57 ENDDO 58 58 59 ccalcul de la pente en haut et en bas de la maille60 61 62 63 64 59 ! calcul de la pente en haut et en bas de la maille 60 do ij=1,ip1jmp1 61 do l = 1, llm-1 62 dzqw(l)=q(ij,l+1)-q(ij,l) 63 enddo 64 dzqw(llm)=0. 65 65 66 67 68 66 do l=1,llm 67 adzqw(l)=abs(dzqw(l)) 68 enddo 69 69 70 ccalcul de la pente maximum dans la maille en valeur absolue70 ! calcul de la pente maximum dans la maille en valeur absolue 71 71 72 73 74 72 do l=2,llm-1 73 dzqmax(l)=pente_max*min(adzqw(l-1),adzqw(l)) 74 enddo 75 75 76 ccalcul de la pente avec limitation76 ! calcul de la pente avec limitation 77 77 78 79 if( dzqw(l-1)*dzqw(l).gt.0.80 &.and. dzq(ij,l)*dzqw(l).gt.0.) then81 dzq(ij,l)=82 &sign(min(abs(dzq(ij,l)),dzqmax(l)),dzq(ij,l))83 84 cextremum local85 86 87 78 do l=2,llm-1 79 if( dzqw(l-1)*dzqw(l).gt.0. & 80 .and. dzq(ij,l)*dzqw(l).gt.0.) then 81 dzq(ij,l)= & 82 sign(min(abs(dzq(ij,l)),dzqmax(l)),dzq(ij,l)) 83 else 84 ! extremum local 85 dzq(ij,l)=0. 86 endif 87 enddo 88 88 89 90 91 89 DO l=1,llm 90 sz(ij,l) = dzq(ij,l)*sm(ij,l) 91 ENDDO 92 92 93 93 ENDDO 94 94 95 96 END 95 RETURN 96 END SUBROUTINE limz
Note: See TracChangeset
for help on using the changeset viewer.