Changeset 1190
- Timestamp:
- Jun 23, 2009, 11:35:20 PM (16 years ago)
- Location:
- LMDZ4/branches/LMDZ4-dev/libf
- Files:
-
- 8 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 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/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/dyn3dpar/conf_gcm.F
r1176 r1190 291 291 CALL getin('dissip_zref',dissip_zref ) 292 292 293 iflag_top_bound=1 294 tau_top_bound=1.e-5 295 CALL getin('iflag_top_bound',iflag_top_bound) 296 CALL getin('tau_top_bound',tau_top_bound) 297 298 ! 293 299 !Config Key = coefdis 294 300 !Config Desc = coefficient pour gamdissip -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/leapfrog_p.F
r1172 r1190 722 722 * jj_Nb_physic,2,2,Request_physic) 723 723 724 call Register_SwapFieldHallo(masse,masse,ip1jmp1,llm, 725 * jj_Nb_physic,1,2,Request_physic) 726 724 727 call Register_SwapFieldHallo(p,p,ip1jmp1,llmp1, 725 728 * jj_Nb_physic,2,2,Request_physic) … … 863 866 c ------------------------------ 864 867 IF (ok_strato) THEN 865 CALL top_bound_p( vcov,ucov,teta, 868 CALL top_bound_p( vcov,ucov,teta,masse,dufi,dvfi,dtetafi) 866 869 ENDIF 867 870 … … 887 890 * jj_Nb_caldyn,Request_physic) 888 891 892 call Register_SwapField(masse,masse,ip1jmp1,llm, 893 * jj_Nb_caldyn,Request_physic) 894 889 895 call Register_SwapField(p,p,ip1jmp1,llmp1, 890 896 * jj_Nb_caldyn,Request_physic) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/top_bound_p.F
r1000 r1190 1 SUBROUTINE top_bound_p( vcov,ucov,teta, du,dv,dh )1 SUBROUTINE top_bound_p( vcov,ucov,teta,masse, du,dv,dh ) 2 2 USE parallel 3 3 IMPLICIT NONE … … 6 6 #include "paramet.h" 7 7 #include "comconst.h" 8 CC#include "comgeom2.h" 8 #include "comvert.h" 9 #include "comgeom2.h" 9 10 10 11 … … 28 29 c ------------- 29 30 30 #include "comgeom.h"31 31 #include "comdissipn.h" 32 32 … … 35 35 36 36 REAL ucov(iip1,jjp1,llm),vcov(iip1,jjm,llm),teta(iip1,jjp1,llm) 37 REAL masse(iip1,jjp1,llm) 37 38 REAL dv(iip1,jjm,llm),du(iip1,jjp1,llm),dh(iip1,jjp1,llm) 38 39 39 40 c Local: 40 41 c ------ 41 42 REAL massebx(iip1,jjp1,llm),masseby(iip1,jjm,llm),zm 42 43 REAL uzon(jjp1,llm),vzon(jjm,llm),tzon(jjp1,llm) 43 44 … … 45 46 PARAMETER (NDAMP=4) 46 47 integer i 47 REAL :: rdamp(llm) =48 & (/(0., i =1,llm-NDAMP),0.125E-5,.25E-5,.5E-5,1.E-5/)49 48 REAL,SAVE :: rdamp(llm) 49 ! & (/(0., i =1,llm-NDAMP),0.125E-5,.25E-5,.5E-5,1.E-5/) 50 LOGICAL,SAVE :: first=.true. 50 51 INTEGER j,l,jjb,jje 51 52 52 53 54 if (iflag_top_bound == 0) return 55 if (first) then 56 c$OMP BARRIER 57 c$OMP MASTER 58 if (iflag_top_bound == 1) then 59 ! couche eponge dans les 4 dernieres couches du modele 60 rdamp(:)=0. 61 rdamp(llm)=tau_top_bound 62 rdamp(llm-1)=tau_top_bound/2. 63 rdamp(llm-2)=tau_top_bound/4. 64 rdamp(llm-3)=tau_top_bound/8. 65 else if (iflag_top_bound == 2) then 66 ! couce eponge dans toutes les couches de pression plus faible que 67 ! 100 fois la pression de la derniere couche 68 rdamp(:)=tau_top_bound 69 s *max(presnivs(llm)/presnivs(:)-0.01,0.) 70 endif 71 first=.false. 72 print*,'TOP_BOUND rdamp=',rdamp 73 c$OMP END MASTER 74 c$OMP BARRIER 75 endif 76 77 78 CALL massbar_p(masse,massebx,masseby) 53 79 C CALCUL DES CHAMPS EN MOYENNE ZONALE: 54 80 … … 60 86 do l=1,llm 61 87 do j=jjb,jje 62 vzon(j,l)=0. 88 zm=0. 89 vzon(j,l)=0 63 90 do i=1,iim 64 vzon(j,l)=vzon(j,l)+vcov(i,j,l)/float(iim) 91 ! Rm: on peut travailler directement avec la moyenne zonale de vcov 92 ! plutot qu'avec celle de v car le coefficient cv qui relie les deux 93 ! ne varie qu'en latitude 94 vzon(j,l)=vzon(j,l)+vcov(i,j,l)*masseby(i,j,l) 95 zm=zm+masseby(i,j,l) 65 96 enddo 97 vzon(j,l)=vzon(j,l)/zm 66 98 enddo 67 99 enddo … … 87 119 do j=jjb,jje 88 120 uzon(j,l)=0. 121 zm=0. 122 do i=1,iim 123 uzon(j,l)=uzon(j,l)+massebx(i,j,l)*ucov(i,j,l)/cu(i,j) 124 zm=zm+massebx(i,j,l) 125 enddo 126 uzon(j,l)=uzon(j,l)/zm 127 enddo 128 enddo 129 c$OMP END DO NOWAIT 130 131 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 132 do l=1,llm 133 do j=jjb,jje 134 zm=0. 89 135 tzon(j,l)=0. 90 136 do i=1,iim 91 uzon(j,l)=uzon(j,l)+ucov(i,j,l)/float(iim)92 tzon(j,l)=tzon(j,l)+teta(i,j,l)/float(iim)137 tzon(j,l)=tzon(j,l)+teta(i,j,l)*masse(i,j,l) 138 zm=zm+masse(i,j,l) 93 139 enddo 140 tzon(j,l)=tzon(j,l)/zm 94 141 enddo 95 142 enddo … … 102 149 do j=jjb,jje 103 150 do i=1,iip1 104 du(i,j,l)=du(i,j,l)-rdamp(l)*(ucov(i,j,l)-uzon(j,l)) 151 du(i,j,l)=du(i,j,l) 152 s -rdamp(l)*(ucov(i,j,l)-cu(i,j)*uzon(j,l)) 105 153 dh(i,j,l)=dh(i,j,l)-rdamp(l)*(teta(i,j,l)-tzon(j,l)) 106 154 enddo
Note: See TracChangeset
for help on using the changeset viewer.