/[lmdze]/trunk/Sources/phylmd/phystokenc.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/phystokenc.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/libf/phylmd/phystokenc.f revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC trunk/Sources/phylmd/phystokenc.f revision 189 by guez, Tue Mar 29 15:20:23 2016 UTC
# Line 1  Line 1 
1  !  module phystokenc_m
 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/phystokenc.F,v 1.2 2004/06/22 11:45:35 lmdzadmin Exp $  
 !  
 c  
 c  
       SUBROUTINE phystokenc (  
      I                   pdtphys,rlon,rlat,  
      I                   pt,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,  
      I                   pfm_therm,pentr_therm,  
      I                   pcoefh,yu1,yv1,ftsol,pctsrf,  
      I                   frac_impa,frac_nucl,  
      I                   pphis,paire,dtime,itap)  
       USE ioipsl  
       USE histcom  
   
       use dimens_m  
       use indicesol  
       use dimphy  
       use conf_gcm_m  
       use tracstoke  
       IMPLICIT none  
   
 c======================================================================  
 c Auteur(s) FH  
 c Objet: Moniteur general des tendances traceurs  
 c  
   
 c======================================================================  
 c======================================================================  
   
 c Arguments:  
 c  
 c   EN ENTREE:  
 c   ==========  
 c  
 c   divers:  
 c   -------  
 c  
       real pdtphys ! pas d'integration pour la physique (seconde)  
 c  
       integer physid, itap  
       save physid  
       integer ndex2d(iim*(jjm+1)),ndex3d(iim*(jjm+1)*klev)  
   
 c   convection:  
 c   -----------  
 c  
       REAL pmfu(klon,klev)  ! flux de masse dans le panache montant  
       REAL pmfd(klon,klev)  ! flux de masse dans le panache descendant  
       REAL pen_u(klon,klev) ! flux entraine dans le panache montant  
       REAL pde_u(klon,klev) ! flux detraine dans le panache montant  
       REAL pen_d(klon,klev) ! flux entraine dans le panache descendant  
       REAL pde_d(klon,klev) ! flux detraine dans le panache descendant  
         real pt(klon,klev),t(klon,klev)  
 c  
       REAL, intent(in):: rlon(klon), rlat(klon)  
       real dtime  
       REAL zx_tmp_3d(iim,jjm+1,klev),zx_tmp_2d(iim,jjm+1)  
   
 c   Couche limite:  
 c   --------------  
 c  
       REAL pcoefh(klon,klev)    ! coeff melange CL  
       REAL yv1(klon)  
       REAL yu1(klon),pphis(klon),paire(klon)  
   
 c   Les Thermiques : (Abderr 25 11 02)  
 c   ---------------  
       REAL pfm_therm(klon,klev+1)  
         real fm_therm1(klon,klev)  
       REAL pentr_therm(klon,klev)  
       REAL entr_therm(klon,klev)  
       REAL fm_therm(klon,klev)  
 c  
 c   Lessivage:  
 c   ----------  
 c  
       REAL frac_impa(klon,klev)  
       REAL frac_nucl(klon,klev)  
 c  
 c Arguments necessaires pour les sources et puits de traceur  
 C  
       real ftsol(klon,nbsrf)  ! Temperature du sol (surf)(Kelvin)  
       real pctsrf(klon,nbsrf) ! Pourcentage de sol f(nature du sol)  
 c======================================================================  
 c  
       INTEGER i, k  
 c  
       REAL mfu(klon,klev)  ! flux de masse dans le panache montant  
       REAL mfd(klon,klev)  ! flux de masse dans le panache descendant  
       REAL en_u(klon,klev) ! flux entraine dans le panache montant  
       REAL de_u(klon,klev) ! flux detraine dans le panache montant  
       REAL en_d(klon,klev) ! flux entraine dans le panache descendant  
       REAL de_d(klon,klev) ! flux detraine dans le panache descendant  
       REAL coefh(klon,klev) ! flux detraine dans le panache descendant  
   
       REAL pyu1(klon),pyv1(klon)  
       REAL pftsol(klon,nbsrf),ppsrf(klon,nbsrf)  
       real pftsol1(klon),pftsol2(klon),pftsol3(klon),pftsol4(klon)  
       real ppsrf1(klon),ppsrf2(klon),ppsrf3(klon),ppsrf4(klon)  
   
       REAL dtcum  
   
       integer iadvtr,irec  
       real zmin,zmax  
       logical ok_sync  
   
       save t,mfu,mfd,en_u,de_u,en_d,de_d,coefh,dtcum  
         save fm_therm,entr_therm  
       save iadvtr,irec  
       save pyu1,pyv1,pftsol,ppsrf  
   
       data iadvtr,irec/0,1/  
 c  
 c   Couche limite:  
 c======================================================================  
   
       ok_sync = .true.  
         print*,'Dans phystokenc.F'  
       print*,'iadvtr= ',iadvtr  
       print*,'istphy= ',istphy  
       print*,'istdyn= ',istdyn  
   
       IF (iadvtr.eq.0) THEN  
           
         CALL initphysto('phystoke',  
      . rlon,rlat,dtime, dtime*istphy,dtime*istphy,nqmx,physid)  
           
         write(*,*) 'apres initphysto ds phystokenc'  
   
           
       ENDIF  
 c  
       ndex2d = 0  
       ndex3d = 0  
       i=itap  
       CALL gr_fi_ecrit(1,klon,iim,jjm+1,pphis,zx_tmp_2d)  
       CALL histwrite(physid,"phis",i,zx_tmp_2d,iim*(jjm+1),ndex2d)  
 c  
       i=itap  
       CALL gr_fi_ecrit(1,klon,iim,jjm+1,paire,zx_tmp_2d)  
       CALL histwrite(physid,"aire",i,zx_tmp_2d,iim*(jjm+1),ndex2d)  
   
       iadvtr=iadvtr+1  
 c  
       if (mod(iadvtr,istphy).eq.1.or.istphy.eq.1) then  
         print*,'reinitialisation des champs cumules  
      s          a iadvtr=',iadvtr  
          do k=1,klev  
             do i=1,klon  
                mfu(i,k)=0.  
                mfd(i,k)=0.  
                en_u(i,k)=0.  
                de_u(i,k)=0.  
                en_d(i,k)=0.  
                de_d(i,k)=0.  
                coefh(i,k)=0.  
                 t(i,k)=0.  
                 fm_therm(i,k)=0.  
                entr_therm(i,k)=0.  
             enddo  
          enddo  
          do i=1,klon  
             pyv1(i)=0.  
             pyu1(i)=0.  
          end do  
          do k=1,nbsrf  
              do i=1,klon  
                pftsol(i,k)=0.  
                ppsrf(i,k)=0.  
             enddo  
          enddo  
   
          dtcum=0.  
       endif  
   
       do k=1,klev  
          do i=1,klon  
             mfu(i,k)=mfu(i,k)+pmfu(i,k)*pdtphys  
             mfd(i,k)=mfd(i,k)+pmfd(i,k)*pdtphys  
             en_u(i,k)=en_u(i,k)+pen_u(i,k)*pdtphys  
             de_u(i,k)=de_u(i,k)+pde_u(i,k)*pdtphys  
             en_d(i,k)=en_d(i,k)+pen_d(i,k)*pdtphys  
             de_d(i,k)=de_d(i,k)+pde_d(i,k)*pdtphys  
             coefh(i,k)=coefh(i,k)+pcoefh(i,k)*pdtphys  
                 t(i,k)=t(i,k)+pt(i,k)*pdtphys  
        fm_therm(i,k)=fm_therm(i,k)+pfm_therm(i,k)*pdtphys  
        entr_therm(i,k)=entr_therm(i,k)+pentr_therm(i,k)*pdtphys  
          enddo  
       enddo  
          do i=1,klon  
             pyv1(i)=pyv1(i)+yv1(i)*pdtphys  
             pyu1(i)=pyu1(i)+yu1(i)*pdtphys  
          end do  
          do k=1,nbsrf  
              do i=1,klon  
                pftsol(i,k)=pftsol(i,k)+ftsol(i,k)*pdtphys  
                ppsrf(i,k)=ppsrf(i,k)+pctsrf(i,k)*pdtphys  
             enddo  
          enddo  
   
       dtcum=dtcum+pdtphys  
   
       IF(mod(iadvtr,istphy).eq.0) THEN  
 c  
 c   normalisation par le temps cumule  
          do k=1,klev  
             do i=1,klon  
                mfu(i,k)=mfu(i,k)/dtcum  
                mfd(i,k)=mfd(i,k)/dtcum  
                en_u(i,k)=en_u(i,k)/dtcum  
                de_u(i,k)=de_u(i,k)/dtcum  
                en_d(i,k)=en_d(i,k)/dtcum  
                de_d(i,k)=de_d(i,k)/dtcum  
                coefh(i,k)=coefh(i,k)/dtcum  
 c Unitel a enlever  
               t(i,k)=t(i,k)/dtcum        
                fm_therm(i,k)=fm_therm(i,k)/dtcum  
                entr_therm(i,k)=entr_therm(i,k)/dtcum  
             enddo  
          enddo  
          do i=1,klon  
             pyv1(i)=pyv1(i)/dtcum  
             pyu1(i)=pyu1(i)/dtcum  
          end do  
          do k=1,nbsrf  
              do i=1,klon  
                pftsol(i,k)=pftsol(i,k)/dtcum  
                pftsol1(i) = pftsol(i,1)  
                pftsol2(i) = pftsol(i,2)  
                pftsol3(i) = pftsol(i,3)  
                pftsol4(i) = pftsol(i,4)  
   
                ppsrf(i,k)=ppsrf(i,k)/dtcum  
                ppsrf1(i) = ppsrf(i,1)  
                ppsrf2(i) = ppsrf(i,2)  
                ppsrf3(i) = ppsrf(i,3)  
                ppsrf4(i) = ppsrf(i,4)  
   
             enddo  
          enddo  
 c  
 c   ecriture des champs  
 c  
          irec=irec+1  
   
 ccccc  
          CALL gr_fi_ecrit(klev,klon,iim,jjm+1, t, zx_tmp_3d)  
          CALL histwrite(physid,"t",itap,zx_tmp_3d,  
      .                                   iim*(jjm+1)*klev,ndex3d)  
   
          CALL gr_fi_ecrit(klev,klon,iim,jjm+1, mfu, zx_tmp_3d)  
       CALL histwrite(physid,"mfu",itap,zx_tmp_3d,  
      .                                   iim*(jjm+1)*klev,ndex3d)  
         CALL gr_fi_ecrit(klev,klon,iim,jjm+1, mfd, zx_tmp_3d)  
       CALL histwrite(physid,"mfd",itap,zx_tmp_3d,  
      .                                   iim*(jjm+1)*klev,ndex3d)  
         CALL gr_fi_ecrit(klev,klon,iim,jjm+1, en_u, zx_tmp_3d)  
       CALL histwrite(physid,"en_u",itap,zx_tmp_3d,  
      .                                   iim*(jjm+1)*klev,ndex3d)  
         CALL gr_fi_ecrit(klev,klon,iim,jjm+1, de_u, zx_tmp_3d)  
       CALL histwrite(physid,"de_u",itap,zx_tmp_3d,  
      .                                   iim*(jjm+1)*klev,ndex3d)  
         CALL gr_fi_ecrit(klev,klon,iim,jjm+1, en_d, zx_tmp_3d)  
       CALL histwrite(physid,"en_d",itap,zx_tmp_3d,  
      .                                   iim*(jjm+1)*klev,ndex3d)  
         CALL gr_fi_ecrit(klev,klon,iim,jjm+1, de_d, zx_tmp_3d)        
       CALL histwrite(physid,"de_d",itap,zx_tmp_3d,      
      .                                   iim*(jjm+1)*klev,ndex3d)  
         CALL gr_fi_ecrit(klev,klon,iim,jjm+1, coefh, zx_tmp_3d)          
       CALL histwrite(physid,"coefh",itap,zx_tmp_3d,      
      .                                   iim*(jjm+1)*klev,ndex3d)        
   
 c ajou...  
         do k=1,klev  
            do i=1,klon  
          fm_therm1(i,k)=fm_therm(i,k)    
            enddo  
         enddo  
   
       CALL gr_fi_ecrit(klev,klon,iim,jjm+1, fm_therm1, zx_tmp_3d)  
       CALL histwrite(physid,"fm_th",itap,zx_tmp_3d,  
      .                                 iim*(jjm+1)*klev,ndex3d)  
 c  
       CALL gr_fi_ecrit(klev,klon,iim,jjm+1, entr_therm, zx_tmp_3d)  
       CALL histwrite(physid,"en_th",itap,zx_tmp_3d,  
      .                                iim*(jjm+1)*klev,ndex3d)  
 cccc  
        CALL gr_fi_ecrit(klev,klon,iim,jjm+1,frac_impa,zx_tmp_3d)  
         CALL histwrite(physid,"frac_impa",itap,zx_tmp_3d,  
      .  iim*(jjm+1)*klev,ndex3d)  
   
         CALL gr_fi_ecrit(klev,klon,iim,jjm+1,frac_nucl,zx_tmp_3d)  
         CALL histwrite(physid,"frac_nucl",itap,zx_tmp_3d,  
      .  iim*(jjm+1)*klev,ndex3d)  
   
         CALL gr_fi_ecrit(1, klon,iim,jjm+1, pyu1,zx_tmp_2d)  
       CALL histwrite(physid,"pyu1",itap,zx_tmp_2d,iim*(jjm+1),  
      .                                                ndex2d)  
           
         CALL gr_fi_ecrit(1, klon,iim,jjm+1, pyv1,zx_tmp_2d)  
       CALL histwrite(physid,"pyv1",itap,zx_tmp_2d,iim*(jjm+1)  
      .                                                ,ndex2d)  
           
         CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol1, zx_tmp_2d)  
       CALL histwrite(physid,"ftsol1",itap,zx_tmp_2d,  
      .                                   iim*(jjm+1),ndex2d)  
          CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol2, zx_tmp_2d)  
       CALL histwrite(physid,"ftsol2",itap,zx_tmp_2d,  
      .                                   iim*(jjm+1),ndex2d)  
           CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol3, zx_tmp_2d)  
       CALL histwrite(physid,"ftsol3",itap,zx_tmp_2d,  
      .                                   iim*(jjm+1),ndex2d)  
          CALL gr_fi_ecrit(1,klon,iim,jjm+1, pftsol4, zx_tmp_2d)  
       CALL histwrite(physid,"ftsol4",itap,zx_tmp_2d,  
      .                                   iim*(jjm+1),ndex2d)  
   
         CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf1, zx_tmp_2d)  
       CALL histwrite(physid,"psrf1",itap,zx_tmp_2d,    
      .                                   iim*(jjm+1),ndex2d)  
         CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf2, zx_tmp_2d)  
       CALL histwrite(physid,"psrf2",itap,zx_tmp_2d,  
      .                                   iim*(jjm+1),ndex2d)  
         CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf3, zx_tmp_2d)  
       CALL histwrite(physid,"psrf3",itap,zx_tmp_2d,  
      .                                   iim*(jjm+1),ndex2d)  
         CALL gr_fi_ecrit(1,klon,iim,jjm+1, ppsrf4, zx_tmp_2d)  
       CALL histwrite(physid,"psrf4",itap,zx_tmp_2d,  
      .                                   iim*(jjm+1),ndex2d)  
   
       if (ok_sync) call histsync(physid)  
 c     if (ok_sync) call histsync  
           
 c  
 cAA Test sur la valeur des coefficients de lessivage  
 c  
          zmin=1e33  
          zmax=-1e33  
          do k=1,klev  
             do i=1,klon  
                   zmax=max(zmax,frac_nucl(i,k))  
                   zmin=min(zmin,frac_nucl(i,k))  
             enddo  
          enddo  
          Print*,'------ coefs de lessivage (min et max) --------'  
          Print*,'facteur de nucleation ',zmin,zmax  
          zmin=1e33  
          zmax=-1e33  
          do k=1,klev  
             do i=1,klon  
                   zmax=max(zmax,frac_impa(i,k))  
                   zmin=min(zmin,frac_impa(i,k))  
             enddo  
          enddo  
          Print*,'facteur d impaction ',zmin,zmax  
   
       ENDIF  
   
 c   reinitialisation des champs cumules  
         go to 768  
       if (mod(iadvtr,istphy).eq.1) then  
          do k=1,klev  
             do i=1,klon  
                mfu(i,k)=0.  
                mfd(i,k)=0.  
                en_u(i,k)=0.  
                de_u(i,k)=0.  
                en_d(i,k)=0.  
                de_d(i,k)=0.  
                coefh(i,k)=0.  
                t(i,k)=0.  
                fm_therm(i,k)=0.  
                entr_therm(i,k)=0.  
             enddo  
          enddo  
          do i=1,klon  
             pyv1(i)=0.  
             pyu1(i)=0.  
          end do  
          do k=1,nbsrf  
              do i=1,klon  
                pftsol(i,k)=0.  
                ppsrf(i,k)=0.  
             enddo  
          enddo  
   
          dtcum=0.  
       endif  
   
       do k=1,klev  
          do i=1,klon  
             mfu(i,k)=mfu(i,k)+pmfu(i,k)*pdtphys  
             mfd(i,k)=mfd(i,k)+pmfd(i,k)*pdtphys  
             en_u(i,k)=en_u(i,k)+pen_u(i,k)*pdtphys  
             de_u(i,k)=de_u(i,k)+pde_u(i,k)*pdtphys  
             en_d(i,k)=en_d(i,k)+pen_d(i,k)*pdtphys  
             de_d(i,k)=de_d(i,k)+pde_d(i,k)*pdtphys  
             coefh(i,k)=coefh(i,k)+pcoefh(i,k)*pdtphys  
                 t(i,k)=t(i,k)+pt(i,k)*pdtphys  
        fm_therm(i,k)=fm_therm(i,k)+pfm_therm(i,k)*pdtphys  
        entr_therm(i,k)=entr_therm(i,k)+pentr_therm(i,k)*pdtphys  
          enddo  
       enddo  
          do i=1,klon  
             pyv1(i)=pyv1(i)+yv1(i)*pdtphys  
             pyu1(i)=pyu1(i)+yu1(i)*pdtphys  
          end do  
          do k=1,nbsrf  
              do i=1,klon  
                pftsol(i,k)=pftsol(i,k)+ftsol(i,k)*pdtphys  
                ppsrf(i,k)=ppsrf(i,k)+pctsrf(i,k)*pdtphys  
             enddo  
          enddo  
2    
3        dtcum=dtcum+pdtphys    IMPLICIT NONE
 768   continue  
4    
5        RETURN  contains
6        END  
7      SUBROUTINE phystokenc(pdtphys, rlon, rlat, pt, pmfu, pmfd, pen_u, pde_u, &
8           pen_d, pde_d, pfm_therm, pentr_therm, pcoefh, yu1, yv1, ftsol, pctsrf, &
9           frac_impa, frac_nucl, pphis, paire, dtime, itap)
10    
11        ! From phylmd/phystokenc.F, version 1.2 2004/06/22 11:45:35
12        ! Author: Fr\'ed\'eric Hourdin
13        ! Objet : \'ecriture des variables pour transport offline
14    
15        use gr_phy_write_m, only: gr_phy_write
16        USE histwrite_m, ONLY: histwrite
17        USE histsync_m, ONLY: histsync
18        USE dimens_m, ONLY: iim, jjm
19        USE indicesol, ONLY: nbsrf
20        use initphysto_m, only: initphysto
21        USE dimphy, ONLY: klev, klon
22        USE tracstoke, ONLY: istphy
23    
24        REAL, INTENT (IN):: pdtphys ! pas d'integration pour la physique (seconde)
25        REAL, INTENT (IN):: rlon(klon), rlat(klon)
26        REAL, intent(in):: pt(klon, klev)
27    
28        ! convection:
29    
30        REAL, INTENT (IN):: pmfu(klon, klev) ! flux de masse dans le panache montant
31    
32        REAL, intent(in):: pmfd(klon, klev)
33        ! flux de masse dans le panache descendant
34    
35        REAL, intent(in):: pen_u(klon, klev) ! flux entraine dans le panache montant
36        REAL, intent(in):: pde_u(klon, klev) ! flux detraine dans le panache montant
37    
38        REAL, intent(in):: pen_d(klon, klev)
39        ! flux entraine dans le panache descendant
40    
41        REAL, intent(in):: pde_d(klon, klev)
42        ! flux detraine dans le panache descendant
43    
44        ! Les Thermiques
45        REAL pfm_therm(klon, klev+1)
46        REAL pentr_therm(klon, klev)
47    
48        ! Couche limite:
49    
50        REAL pcoefh(klon, klev) ! coeff melange Couche limite
51        REAL yu1(klon)
52        REAL yv1(klon)
53    
54        ! Arguments necessaires pour les sources et puits de traceur
55    
56        REAL ftsol(klon, nbsrf) ! Temperature du sol (surf)(Kelvin)
57        REAL pctsrf(klon, nbsrf) ! Pourcentage de sol f(nature du sol)
58    
59        ! Lessivage:
60    
61        REAL frac_impa(klon, klev)
62        REAL frac_nucl(klon, klev)
63    
64        REAL, INTENT(IN):: pphis(klon)
65        real paire(klon)
66        REAL, INTENT (IN):: dtime
67        INTEGER, INTENT (IN):: itap
68    
69        ! Variables local to the procedure:
70    
71        real t(klon, klev)
72        INTEGER, SAVE:: physid
73        REAL zx_tmp_3d(iim, jjm+1, klev), zx_tmp_2d(iim, jjm+1)
74    
75        ! Les Thermiques
76    
77        REAL fm_therm1(klon, klev)
78        REAL entr_therm(klon, klev)
79        REAL fm_therm(klon, klev)
80    
81        INTEGER i, k
82    
83        REAL, save:: mfu(klon, klev) ! flux de masse dans le panache montant
84        REAL mfd(klon, klev) ! flux de masse dans le panache descendant
85        REAL en_u(klon, klev) ! flux entraine dans le panache montant
86        REAL de_u(klon, klev) ! flux detraine dans le panache montant
87        REAL en_d(klon, klev) ! flux entraine dans le panache descendant
88        REAL de_d(klon, klev) ! flux detraine dans le panache descendant
89        REAL coefh(klon, klev) ! flux detraine dans le panache descendant
90    
91        REAL pyu1(klon), pyv1(klon)
92        REAL pftsol(klon, nbsrf), ppsrf(klon, nbsrf)
93        REAL pftsol1(klon), pftsol2(klon), pftsol3(klon), pftsol4(klon)
94        REAL ppsrf1(klon), ppsrf2(klon), ppsrf3(klon), ppsrf4(klon)
95    
96        REAL dtcum
97    
98        INTEGER:: iadvtr = 0, irec = 1
99        REAL zmin, zmax
100        LOGICAL ok_sync
101    
102        SAVE t, mfd, en_u, de_u, en_d, de_d, coefh, dtcum
103        SAVE fm_therm, entr_therm
104        SAVE pyu1, pyv1, pftsol, ppsrf
105    
106        !------------------------------------------------------
107    
108        ! Couche limite:
109    
110        ok_sync = .TRUE.
111    
112        IF (iadvtr==0) THEN
113           CALL initphysto('phystoke', rlon, rlat, dtime, dtime*istphy, &
114                dtime*istphy, physid)
115        END IF
116    
117        i = itap
118        zx_tmp_2d = gr_phy_write(pphis)
119        CALL histwrite(physid, 'phis', i, zx_tmp_2d)
120    
121        i = itap
122        zx_tmp_2d = gr_phy_write(paire)
123        CALL histwrite(physid, 'aire', i, zx_tmp_2d)
124    
125        iadvtr = iadvtr + 1
126    
127        IF (mod(iadvtr, istphy) == 1 .OR. istphy == 1) THEN
128           PRINT *, 'reinitialisation des champs cumules a iadvtr =', iadvtr
129           DO k = 1, klev
130              DO i = 1, klon
131                 mfu(i, k) = 0.
132                 mfd(i, k) = 0.
133                 en_u(i, k) = 0.
134                 de_u(i, k) = 0.
135                 en_d(i, k) = 0.
136                 de_d(i, k) = 0.
137                 coefh(i, k) = 0.
138                 t(i, k) = 0.
139                 fm_therm(i, k) = 0.
140                 entr_therm(i, k) = 0.
141              END DO
142           END DO
143           DO i = 1, klon
144              pyv1(i) = 0.
145              pyu1(i) = 0.
146           END DO
147           DO k = 1, nbsrf
148              DO i = 1, klon
149                 pftsol(i, k) = 0.
150                 ppsrf(i, k) = 0.
151              END DO
152           END DO
153    
154           dtcum = 0.
155        END IF
156    
157        DO k = 1, klev
158           DO i = 1, klon
159              mfu(i, k) = mfu(i, k) + pmfu(i, k)*pdtphys
160              mfd(i, k) = mfd(i, k) + pmfd(i, k)*pdtphys
161              en_u(i, k) = en_u(i, k) + pen_u(i, k)*pdtphys
162              de_u(i, k) = de_u(i, k) + pde_u(i, k)*pdtphys
163              en_d(i, k) = en_d(i, k) + pen_d(i, k)*pdtphys
164              de_d(i, k) = de_d(i, k) + pde_d(i, k)*pdtphys
165              coefh(i, k) = coefh(i, k) + pcoefh(i, k)*pdtphys
166              t(i, k) = t(i, k) + pt(i, k)*pdtphys
167              fm_therm(i, k) = fm_therm(i, k) + pfm_therm(i, k)*pdtphys
168              entr_therm(i, k) = entr_therm(i, k) + pentr_therm(i, k)*pdtphys
169           END DO
170        END DO
171        DO i = 1, klon
172           pyv1(i) = pyv1(i) + yv1(i)*pdtphys
173           pyu1(i) = pyu1(i) + yu1(i)*pdtphys
174        END DO
175        DO k = 1, nbsrf
176           DO i = 1, klon
177              pftsol(i, k) = pftsol(i, k) + ftsol(i, k)*pdtphys
178              ppsrf(i, k) = ppsrf(i, k) + pctsrf(i, k)*pdtphys
179           END DO
180        END DO
181    
182        dtcum = dtcum + pdtphys
183    
184        IF (mod(iadvtr, istphy) == 0) THEN
185           ! normalisation par le temps cumule
186           DO k = 1, klev
187              DO i = 1, klon
188                 mfu(i, k) = mfu(i, k)/dtcum
189                 mfd(i, k) = mfd(i, k)/dtcum
190                 en_u(i, k) = en_u(i, k)/dtcum
191                 de_u(i, k) = de_u(i, k)/dtcum
192                 en_d(i, k) = en_d(i, k)/dtcum
193                 de_d(i, k) = de_d(i, k)/dtcum
194                 coefh(i, k) = coefh(i, k)/dtcum
195                 ! Unitel a enlever
196                 t(i, k) = t(i, k)/dtcum
197                 fm_therm(i, k) = fm_therm(i, k)/dtcum
198                 entr_therm(i, k) = entr_therm(i, k)/dtcum
199              END DO
200           END DO
201           DO i = 1, klon
202              pyv1(i) = pyv1(i)/dtcum
203              pyu1(i) = pyu1(i)/dtcum
204           END DO
205           DO k = 1, nbsrf
206              DO i = 1, klon
207                 pftsol(i, k) = pftsol(i, k)/dtcum
208                 pftsol1(i) = pftsol(i, 1)
209                 pftsol2(i) = pftsol(i, 2)
210                 pftsol3(i) = pftsol(i, 3)
211                 pftsol4(i) = pftsol(i, 4)
212    
213                 ppsrf(i, k) = ppsrf(i, k)/dtcum
214                 ppsrf1(i) = ppsrf(i, 1)
215                 ppsrf2(i) = ppsrf(i, 2)
216                 ppsrf3(i) = ppsrf(i, 3)
217                 ppsrf4(i) = ppsrf(i, 4)
218              END DO
219           END DO
220    
221           ! ecriture des champs
222    
223           irec = irec + 1
224    
225           zx_tmp_3d = gr_phy_write(t)
226           CALL histwrite(physid, 't', itap, zx_tmp_3d)
227    
228           zx_tmp_3d = gr_phy_write(mfu)
229           CALL histwrite(physid, 'mfu', itap, zx_tmp_3d)
230           zx_tmp_3d = gr_phy_write(mfd)
231           CALL histwrite(physid, 'mfd', itap, zx_tmp_3d)
232           zx_tmp_3d = gr_phy_write(en_u)
233           CALL histwrite(physid, 'en_u', itap, zx_tmp_3d)
234           zx_tmp_3d = gr_phy_write(de_u)
235           CALL histwrite(physid, 'de_u', itap, zx_tmp_3d)
236           zx_tmp_3d = gr_phy_write(en_d)
237           CALL histwrite(physid, 'en_d', itap, zx_tmp_3d)
238           zx_tmp_3d = gr_phy_write(de_d)
239           CALL histwrite(physid, 'de_d', itap, zx_tmp_3d)
240           zx_tmp_3d = gr_phy_write(coefh)
241           CALL histwrite(physid, 'coefh', itap, zx_tmp_3d)
242    
243           DO k = 1, klev
244              DO i = 1, klon
245                 fm_therm1(i, k) = fm_therm(i, k)
246              END DO
247           END DO
248    
249           zx_tmp_3d = gr_phy_write(fm_therm1)
250           CALL histwrite(physid, 'fm_th', itap, zx_tmp_3d)
251    
252           zx_tmp_3d = gr_phy_write(entr_therm)
253           CALL histwrite(physid, 'en_th', itap, zx_tmp_3d)
254           !ccc
255           zx_tmp_3d = gr_phy_write(frac_impa)
256           CALL histwrite(physid, 'frac_impa', itap, zx_tmp_3d)
257    
258           zx_tmp_3d = gr_phy_write(frac_nucl)
259           CALL histwrite(physid, 'frac_nucl', itap, zx_tmp_3d)
260    
261           zx_tmp_2d = gr_phy_write(pyu1)
262           CALL histwrite(physid, 'pyu1', itap, zx_tmp_2d)
263    
264           zx_tmp_2d = gr_phy_write(pyv1)
265           CALL histwrite(physid, 'pyv1', itap, zx_tmp_2d)
266    
267           zx_tmp_2d = gr_phy_write(pftsol1)
268           CALL histwrite(physid, 'ftsol1', itap, zx_tmp_2d)
269           zx_tmp_2d = gr_phy_write(pftsol2)
270           CALL histwrite(physid, 'ftsol2', itap, zx_tmp_2d)
271           zx_tmp_2d = gr_phy_write(pftsol3)
272           CALL histwrite(physid, 'ftsol3', itap, zx_tmp_2d)
273           zx_tmp_2d = gr_phy_write(pftsol4)
274           CALL histwrite(physid, 'ftsol4', itap, zx_tmp_2d)
275    
276           zx_tmp_2d = gr_phy_write(ppsrf1)
277           CALL histwrite(physid, 'psrf1', itap, zx_tmp_2d)
278           zx_tmp_2d = gr_phy_write(ppsrf2)
279           CALL histwrite(physid, 'psrf2', itap, zx_tmp_2d)
280           zx_tmp_2d = gr_phy_write(ppsrf3)
281           CALL histwrite(physid, 'psrf3', itap, zx_tmp_2d)
282           zx_tmp_2d = gr_phy_write(ppsrf4)
283           CALL histwrite(physid, 'psrf4', itap, zx_tmp_2d)
284    
285           IF (ok_sync) CALL histsync(physid)
286    
287           ! Test sur la valeur des coefficients de lessivage
288    
289           zmin = 1E33
290           zmax = -1E33
291           DO k = 1, klev
292              DO i = 1, klon
293                 zmax = max(zmax, frac_nucl(i, k))
294                 zmin = min(zmin, frac_nucl(i, k))
295              END DO
296           END DO
297           PRINT *, 'coefs de lessivage (min et max)'
298           PRINT *, 'facteur de nucleation ', zmin, zmax
299           zmin = 1E33
300           zmax = -1E33
301           DO k = 1, klev
302              DO i = 1, klon
303                 zmax = max(zmax, frac_impa(i, k))
304                 zmin = min(zmin, frac_impa(i, k))
305              END DO
306           END DO
307           PRINT *, 'facteur d impaction ', zmin, zmax
308        END IF
309    
310      END SUBROUTINE phystokenc
311    
312    end module phystokenc_m

Legend:
Removed from v.3  
changed lines
  Added in v.189

  ViewVC Help
Powered by ViewVC 1.1.21