Ignore:
Timestamp:
Jun 23, 2009, 11:35:20 PM (15 years ago)
Author:
yann meurdesoif
Message:

Correction de FH sur la sponge layer de top_bound + parallelisation des corrections.

YM

Location:
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/comconst.h

    r1176 r1190  
    88     & dtvr,daysec,                                                     &
    99     & 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
    1112
    1213
     
    1617      REAL cotot,unsim,g,omeg
    1718      REAL dissip_factz,dissip_deltaz,dissip_zref
     19      INTEGER iflag_top_bound
     20      REAL tau_top_bound
     21
    1822
    1923!-----------------------------------------------------------------------
  • LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/conf_gcm.F

    r1176 r1190  
    291291       CALL getin('dissip_zref',dissip_zref )
    292292
     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!
    293299!Config  Key  = coefdis
    294300!Config  Desc = coefficient pour gamdissip
  • LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/leapfrog_p.F

    r1172 r1190  
    722722     *                               jj_Nb_physic,2,2,Request_physic)
    723723       
     724        call Register_SwapFieldHallo(masse,masse,ip1jmp1,llm,
     725     *                               jj_Nb_physic,1,2,Request_physic)
     726
    724727        call Register_SwapFieldHallo(p,p,ip1jmp1,llmp1,
    725728     *                               jj_Nb_physic,2,2,Request_physic)
     
    863866c      ------------------------------
    864867         IF (ok_strato) THEN
    865            CALL top_bound_p( vcov,ucov,teta, dufi,dvfi,dtetafi)
     868           CALL top_bound_p( vcov,ucov,teta,masse,dufi,dvfi,dtetafi)
    866869         ENDIF
    867870       
     
    887890     *                               jj_Nb_caldyn,Request_physic)
    888891       
     892        call Register_SwapField(masse,masse,ip1jmp1,llm,
     893     *                               jj_Nb_caldyn,Request_physic)
     894
    889895        call Register_SwapField(p,p,ip1jmp1,llmp1,
    890896     *                               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 )
    22      USE parallel
    33      IMPLICIT NONE
     
    66#include "paramet.h"
    77#include "comconst.h"
    8 CC#include "comgeom2.h"
     8#include "comvert.h"
     9#include "comgeom2.h"
    910
    1011
     
    2829c   -------------
    2930
    30 #include "comgeom.h"
    3131#include "comdissipn.h"
    3232
     
    3535
    3636      REAL ucov(iip1,jjp1,llm),vcov(iip1,jjm,llm),teta(iip1,jjp1,llm)
     37      REAL masse(iip1,jjp1,llm)
    3738      REAL dv(iip1,jjm,llm),du(iip1,jjp1,llm),dh(iip1,jjp1,llm)
    3839
    3940c   Local:
    4041c   ------
    41 
     42      REAL massebx(iip1,jjp1,llm),masseby(iip1,jjm,llm),zm
    4243      REAL uzon(jjp1,llm),vzon(jjm,llm),tzon(jjp1,llm)
    4344     
     
    4546      PARAMETER (NDAMP=4)
    4647      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.
    5051      INTEGER j,l,jjb,jje
    5152
    5253
     54      if (iflag_top_bound == 0) return
     55      if (first) then
     56c$OMP BARRIER
     57c$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
     73c$OMP END MASTER
     74c$OMP BARRIER
     75      endif
     76
     77
     78      CALL massbar_p(masse,massebx,masseby)
    5379C  CALCUL DES CHAMPS EN MOYENNE ZONALE:
    5480
     
    6086      do l=1,llm
    6187        do j=jjb,jje
    62           vzon(j,l)=0.
     88          zm=0.
     89          vzon(j,l)=0
    6390          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)
    6596          enddo
     97          vzon(j,l)=vzon(j,l)/zm
    6698        enddo
    6799      enddo
     
    87119        do j=jjb,jje
    88120          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
     129c$OMP END DO NOWAIT
     130
     131c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
     132      do l=1,llm
     133        do j=jjb,jje
     134          zm=0.
    89135          tzon(j,l)=0.
    90136          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)
    93139          enddo
     140          tzon(j,l)=tzon(j,l)/zm
    94141        enddo
    95142      enddo
     
    102149        do j=jjb,jje
    103150          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))
    105153            dh(i,j,l)=dh(i,j,l)-rdamp(l)*(teta(i,j,l)-tzon(j,l))
    106154          enddo
Note: See TracChangeset for help on using the changeset viewer.