Changeset 1190 for LMDZ4/branches/LMDZ4-dev/libf/dyn3d
- Timestamp:
- Jun 23, 2009, 11:35:20 PM (15 years ago)
- Location:
- LMDZ4/branches/LMDZ4-dev/libf/dyn3d
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/comconst.h
r1176 r1190 8 8 & dtvr,daysec, & 9 9 & pi,dtphys,dtdiss,rad,r,cpp,kappa,cotot,unsim,g,omeg & 10 & ,dissip_factz,dissip_deltaz,dissip_zref 10 & ,dissip_factz,dissip_deltaz,dissip_zref & 11 & ,iflag_top_bound,tau_top_bound 11 12 12 13 … … 16 17 REAL cotot,unsim,g,omeg 17 18 REAL dissip_factz,dissip_deltaz,dissip_zref 19 INTEGER iflag_top_bound 20 REAL tau_top_bound 21 18 22 19 23 !----------------------------------------------------------------------- -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/conf_gcm.F
r1176 r1190 280 280 CALL getin('dissip_deltaz',dissip_deltaz ) 281 281 CALL getin('dissip_zref',dissip_zref ) 282 283 iflag_top_bound=1 284 tau_top_bound=1.e-5 285 CALL getin('iflag_top_bound',iflag_top_bound) 286 CALL getin('tau_top_bound',tau_top_bound) 282 287 283 288 !Config Key = coefdis -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/leapfrog.F
r1170 r1190 386 386 387 387 IF (ok_strato) THEN 388 CALL top_bound( vcov,ucov,teta, 388 CALL top_bound( vcov,ucov,teta,masse,dufi,dvfi,dtetafi) 389 389 ENDIF 390 390 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/top_bound.F
r999 r1190 1 SUBROUTINE top_bound( vcov,ucov,teta, du,dv,dh )1 SUBROUTINE top_bound( vcov,ucov,teta,masse, du,dv,dh ) 2 2 IMPLICIT NONE 3 3 c … … 5 5 #include "paramet.h" 6 6 #include "comconst.h" 7 CC#include "comgeom2.h" 7 #include "comvert.h" 8 #include "comgeom2.h" 8 9 9 10 … … 27 28 c ------------- 28 29 29 #include "comgeom.h"30 ! #include "comgeom.h" 30 31 #include "comdissipn.h" 31 32 … … 34 35 35 36 REAL ucov(iip1,jjp1,llm),vcov(iip1,jjm,llm),teta(iip1,jjp1,llm) 37 REAL masse(iip1,jjp1,llm) 36 38 REAL dv(iip1,jjm,llm),du(iip1,jjp1,llm),dh(iip1,jjp1,llm) 37 39 … … 39 41 c ------ 40 42 43 REAL massebx(iip1,jjp1,llm),masseby(iip1,jjm,llm),zm 41 44 REAL uzon(jjp1,llm),vzon(jjm,llm),tzon(jjp1,llm) 42 45 43 46 INTEGER NDAMP 44 47 PARAMETER (NDAMP=4) 45 integer i 46 REAL :: rdamp(llm) = 47 & (/(0., i =1,llm-NDAMP),0.125E-5,.25E-5,.5E-5,1.E-5/) 48 integer i 49 REAL,SAVE :: rdamp(llm) 50 ! & (/(0., i =1,llm-NDAMP),0.125E-5,.25E-5,.5E-5,1.E-5/) 51 52 LOGICAL,SAVE :: first=.true. 48 53 49 54 INTEGER j,l … … 52 57 C CALCUL DES CHAMPS EN MOYENNE ZONALE: 53 58 59 if (iflag_top_bound.eq.0) return 60 61 if (first) then 62 if (iflag_top_bound.eq.1) then 63 ! couche eponge dans les 4 dernieres couches du modele 64 rdamp(:)=0. 65 rdamp(llm)=tau_top_bound 66 rdamp(llm-1)=tau_top_bound/2. 67 rdamp(llm-2)=tau_top_bound/4. 68 rdamp(llm-3)=tau_top_bound/8. 69 else if (iflag_top_bound.eq.2) then 70 ! couce eponge dans toutes les couches de pression plus faible que 71 ! 100 fois la pression de la derniere couche 72 rdamp(:)=tau_top_bound 73 s *max(presnivs(llm)/presnivs(:)-0.01,0.) 74 endif 75 first=.false. 76 print*,'TOP_BOUND rdamp=',rdamp 77 endif 78 79 CALL massbar(masse,massebx,masseby) 80 54 81 do l=1,llm 55 82 do j=1,jjm 56 83 vzon(j,l)=0. 84 zm=0. 57 85 do i=1,iim 58 vzon(j,l)=vzon(j,l)+vcov(i,j,l)/float(iim) 86 ! Rm: on peut travailler directement avec la moyenne zonale de vcov 87 ! plutot qu'avec celle de v car le coefficient cv qui relie les deux 88 ! ne varie qu'en latitude 89 vzon(j,l)=vzon(j,l)+vcov(i,j,l)*masseby(i,j,l) 90 zm=zm+masseby(i,j,l) 59 91 enddo 92 vzon(j,l)=vzon(j,l)/zm 60 93 enddo 61 94 enddo … … 72 105 do j=2,jjm 73 106 uzon(j,l)=0. 107 zm=0. 108 do i=1,iim 109 uzon(j,l)=uzon(j,l)+massebx(i,j,l)*ucov(i,j,l)/cu(i,j) 110 zm=zm+massebx(i,j,l) 111 enddo 112 uzon(j,l)=uzon(j,l)/zm 113 enddo 114 enddo 115 116 do l=1,llm 117 do j=2,jjm 118 zm=0. 74 119 tzon(j,l)=0. 75 120 do i=1,iim 76 uzon(j,l)=uzon(j,l)+ucov(i,j,l)/float(iim)77 tzon(j,l)=tzon(j,l)+teta(i,j,l)/float(iim)121 tzon(j,l)=tzon(j,l)+teta(i,j,l)*masse(i,j,l) 122 zm=zm+masse(i,j,l) 78 123 enddo 124 tzon(j,l)=tzon(j,l)/zm 79 125 enddo 80 126 enddo … … 85 131 do i=1,iip1 86 132 do j=2,jjm 87 du(i,j,l)=du(i,j,l)-rdamp(l)*(ucov(i,j,l)-uzon(j,l)) 133 du(i,j,l)=du(i,j,l) 134 s -rdamp(l)*(ucov(i,j,l)-cu(i,j)*uzon(j,l)) 88 135 dh(i,j,l)=dh(i,j,l)-rdamp(l)*(teta(i,j,l)-tzon(j,l)) 89 136 enddo
Note: See TracChangeset
for help on using the changeset viewer.