Changeset 5246 for LMDZ6/trunk/libf/dyn3d/tetaleveli1j1.F90
- Timestamp:
- Oct 21, 2024, 2:58:45 PM (23 hours ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/dyn3d/tetaleveli1j1.F90
r5245 r5246 1 c================================================================2 c================================================================3 4 c================================================================5 c================================================================1 !================================================================ 2 !================================================================ 3 SUBROUTINE tetaleveli1j1(ilon,ilev,lnew,pgcm,pres,Qgcm,Qpres) 4 !================================================================ 5 !================================================================ 6 6 7 ! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique8 !USE dimphy9 7 ! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique 8 ! USE dimphy 9 IMPLICIT none 10 10 11 11 #include "dimensions.h" 12 cccc#include "dimphy.h"12 !ccc#include "dimphy.h" 13 13 14 c================================================================15 c 16 cInterpoler des champs 3-D u, v et g du modele a un niveau de17 cpression donnee (pres)18 c 19 cINPUT: ilon ----- nombre de points20 cilev ----- nombre de couches21 clnew ----- true si on doit reinitialiser les poids22 cpgcm ----- pressions modeles23 cpres ----- pression vers laquelle on interpolle24 cQgcm ----- champ GCM25 cQpres ---- champ interpolle au niveau pres26 c 27 c================================================================28 c 29 carguments :30 c-----------14 !================================================================ 15 ! 16 ! Interpoler des champs 3-D u, v et g du modele a un niveau de 17 ! pression donnee (pres) 18 ! 19 ! INPUT: ilon ----- nombre de points 20 ! ilev ----- nombre de couches 21 ! lnew ----- true si on doit reinitialiser les poids 22 ! pgcm ----- pressions modeles 23 ! pres ----- pression vers laquelle on interpolle 24 ! Qgcm ----- champ GCM 25 ! Qpres ---- champ interpolle au niveau pres 26 ! 27 !================================================================ 28 ! 29 ! arguments : 30 ! ----------- 31 31 32 INTEGERilon, ilev33 logicallnew32 INTEGER :: ilon, ilev 33 logical :: lnew 34 34 35 REALpgcm(ilon,ilev)36 REALQgcm(ilon,ilev)37 realpres38 REALQpres(ilon)35 REAL :: pgcm(ilon,ilev) 36 REAL :: Qgcm(ilon,ilev) 37 real :: pres 38 REAL :: Qpres(ilon) 39 39 40 clocal :41 c-------40 ! local : 41 ! ------- 42 42 43 cIM 21100444 cINTEGER lt(klon), lb(klon)45 cREAL ptop, pbot, aist(klon), aisb(klon)46 c 43 !IM 211004 44 ! INTEGER lt(klon), lb(klon) 45 ! REAL ptop, pbot, aist(klon), aisb(klon) 46 ! 47 47 #include "paramet.h" 48 c 49 INTEGERlt(ip1jmp1), lb(ip1jmp1)50 REALptop, pbot, aist(ip1jmp1), aisb(ip1jmp1)51 cMI 21100452 48 ! 49 INTEGER :: lt(ip1jmp1), lb(ip1jmp1) 50 REAL :: ptop, pbot, aist(ip1jmp1), aisb(ip1jmp1) 51 !MI 211004 52 save lt,lb,ptop,pbot,aist,aisb 53 53 54 INTEGERi, k55 c 56 cPRINT*,'tetalevel pres=',pres57 c=====================================================================58 59 con réinitialise les réindicages et les poids60 c=====================================================================54 INTEGER :: i, k 55 ! 56 ! PRINT*,'tetalevel pres=',pres 57 !===================================================================== 58 if (lnew) then 59 ! on réinitialise les réindicages et les poids 60 !===================================================================== 61 61 62 62 63 cChercher les 2 couches les plus proches du niveau a obtenir64 c 65 cEventuellement, faire l'extrapolation a partir des deux couches66 cles plus basses ou les deux couches les plus hautes:67 DO 130i = 1, ilon68 cIM IF ( ABS(pres-pgcm(i,ilev) ) .LT.69 IF ( ABS(pres-pgcm(i,ilev) ) .GT.70 .ABS(pres-pgcm(i,1)) ) THEN71 72 73 74 75 76 77 cIM PRINT*,'i, ABS(pres-pgcm),ABS(pres-pgcm)',78 cIM .i, ABS(pres-pgcm(i,ilev)),ABS(pres-pgcm(i,1))79 130 CONTINUE80 DO 150k = 1, ilev-181 DO 140i = 1, ilon82 83 84 cIM IF (ptop.LE.pres .AND. pbot.GE.pres) THEN85 86 87 88 89 140 CONTINUE90 150 CONTINUE91 c 92 cInterpolation lineaire:93 c 94 95 cinterpolation en logarithme de pression:96 c 97 c... Modif . P. Le Van ( 20/01/98) ....98 cModif Frédéric Hourdin (3/01/02)63 ! Chercher les 2 couches les plus proches du niveau a obtenir 64 ! 65 ! Eventuellement, faire l'extrapolation a partir des deux couches 66 ! les plus basses ou les deux couches les plus hautes: 67 DO i = 1, ilon 68 !IM IF ( ABS(pres-pgcm(i,ilev) ) .LT. 69 IF ( ABS(pres-pgcm(i,ilev) ) .GT. & 70 ABS(pres-pgcm(i,1)) ) THEN 71 lt(i) = ilev ! 2 72 lb(i) = ilev-1 ! 1 73 ELSE 74 lt(i) = 2 75 lb(i) = 1 76 ENDIF 77 !IM PRINT*,'i, ABS(pres-pgcm),ABS(pres-pgcm)', 78 !IM .i, ABS(pres-pgcm(i,ilev)),ABS(pres-pgcm(i,1)) 79 END DO 80 DO k = 1, ilev-1 81 DO i = 1, ilon 82 pbot = pgcm(i,k) 83 ptop = pgcm(i,k+1) 84 !IM IF (ptop.LE.pres .AND. pbot.GE.pres) THEN 85 IF (ptop.GE.pres .AND. pbot.LE.pres) THEN 86 lt(i) = k+1 87 lb(i) = k 88 ENDIF 89 END DO 90 END DO 91 ! 92 ! Interpolation lineaire: 93 ! 94 DO i = 1, ilon 95 ! interpolation en logarithme de pression: 96 ! 97 ! ... Modif . P. Le Van ( 20/01/98) .... 98 ! Modif Frédéric Hourdin (3/01/02) 99 99 100 IF(pgcm(i,lb(i)).EQ.0.OR.101 $pgcm(i,lt(i)).EQ.0.) THEN102 c 103 PRINT*,'i,lb,lt,2pgcm,pres',i,lb(i),104 .lt(i),pgcm(i,lb(i)),pgcm(i,lt(i)),pres105 c 106 ENDIF107 c 108 aist(i) = LOG( pgcm(i,lb(i))/ pres )109 ./ LOG( pgcm(i,lb(i))/ pgcm(i,lt(i)) )110 aisb(i) = LOG( pres / pgcm(i,lt(i)) )111 ./ LOG( pgcm(i,lb(i))/ pgcm(i,lt(i)))112 100 IF(pgcm(i,lb(i)).EQ.0.OR. & 101 pgcm(i,lt(i)).EQ.0.) THEN 102 ! 103 PRINT*,'i,lb,lt,2pgcm,pres',i,lb(i), & 104 lt(i),pgcm(i,lb(i)),pgcm(i,lt(i)),pres 105 ! 106 ENDIF 107 ! 108 aist(i) = LOG( pgcm(i,lb(i))/ pres ) & 109 / LOG( pgcm(i,lb(i))/ pgcm(i,lt(i)) ) 110 aisb(i) = LOG( pres / pgcm(i,lt(i)) ) & 111 / LOG( pgcm(i,lb(i))/ pgcm(i,lt(i))) 112 enddo 113 113 114 114 115 115 endif ! lnew 116 116 117 c======================================================================118 cinteprollation119 c======================================================================117 !====================================================================== 118 ! inteprollation 119 !====================================================================== 120 120 121 122 123 cIM PRINT*,'i,Qgcm,Qpres',i,Qgcm(i,lb(i)),aisb(i),124 cIM $ Qgcm(i,lt(i)),aist(i),Qpres(i)125 126 c 127 cJe mets les vents a zero quand je rencontre une montagne128 129 cIM if (pgcm(i,1).LT.pres) THEN130 131 cQpres(i)=1e33132 133 cIM PRINT*,'i,pgcm(i,1),pres =',i,pgcm(i,1),pres134 135 121 do i=1,ilon 122 Qpres(i)= Qgcm(i,lb(i))*aisb(i)+Qgcm(i,lt(i))*aist(i) 123 !IM PRINT*,'i,Qgcm,Qpres',i,Qgcm(i,lb(i)),aisb(i), 124 !IM $ Qgcm(i,lt(i)),aist(i),Qpres(i) 125 enddo 126 ! 127 ! Je mets les vents a zero quand je rencontre une montagne 128 do i = 1, ilon 129 !IM if (pgcm(i,1).LT.pres) THEN 130 if (pgcm(i,1).GT.pres) THEN 131 ! Qpres(i)=1e33 132 Qpres(i)=1e+20 133 !IM PRINT*,'i,pgcm(i,1),pres =',i,pgcm(i,1),pres 134 endif 135 enddo 136 136 137 c 138 139 END 137 ! 138 RETURN 139 END SUBROUTINE tetaleveli1j1
Note: See TracChangeset
for help on using the changeset viewer.