/[lmdze]/trunk/Sources/dyn3d/iniadvtrac.f
ViewVC logotype

Diff of /trunk/Sources/dyn3d/iniadvtrac.f

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

trunk/dyn3d/iniadvtrac.f90 revision 76 by guez, Fri Nov 15 18:45:49 2013 UTC trunk/dyn3d/iniadvtrac.f revision 131 by guez, Fri Feb 27 16:44:07 2015 UTC
# Line 4  module iniadvtrac_m Line 4  module iniadvtrac_m
4    
5    ! iq = 1 pour l'eau vapeur    ! iq = 1 pour l'eau vapeur
6    ! iq = 2 pour l'eau liquide    ! iq = 2 pour l'eau liquide
7    ! Et éventuellement iq = 3, nqmx pour les autres traceurs    ! et éventuellement iq = 3, ..., nqmx pour les autres traceurs
8    
9    use dimens_m, only: nqmx    use dimens_m, only: nqmx
10    
# Line 12  module iniadvtrac_m Line 12  module iniadvtrac_m
12    
13    private nqmx    private nqmx
14    
15    INTEGER iadv(nqmx) ! indice schéma d'advection pour l'eau et les traceurs    INTEGER iadv(nqmx) ! indice du schéma d'advection pour l'eau et les traceurs
16    ! 11 means schema Van-Leer pour hadv et version PPM (Monotone) pour vadv    ! 11 means Van-Leer scheme for hadv et monotonous PPM for vadv
17    
18    integer, parameter:: allowed_adv(10) = (/0, 1, 2, 10, 12, 13, 14, 16, 17, 18/)    integer, parameter:: allowed_adv(10) = (/0, 1, 2, 10, 12, 13, 14, 16, 17, 18/)
19    ! Allowed values for hadv and vadv:    ! Allowed values for hadv and vadv:
# Line 30  module iniadvtrac_m Line 30  module iniadvtrac_m
30    
31    INTEGER hadv(nqmx) ! indice schéma transport horizontal    INTEGER hadv(nqmx) ! indice schéma transport horizontal
32    INTEGER vadv(nqmx) ! indice schéma transport vertical    INTEGER vadv(nqmx) ! indice schéma transport vertical
33    INTEGER niadv(nqmx) ! équivalent dynamique / physique  
34    character(len=8) tnom(nqmx) ! nom court du traceur    character(len=10) tname(nqmx)
35    character(len=10) tname(nqmx) ! nom du traceur pour restart    ! nom du traceur pour fichiers restart et historiques
36    
37    character(len=13) ttext(nqmx) ! nom long du traceur pour sorties    character(len=13) ttext(nqmx) ! nom long du traceur pour sorties
38    
39  contains  contains
# Line 41  contains Line 42  contains
42    
43      ! From dyn3d/iniadvtrac.F, version 1.3 2005/04/13 08:58:34      ! From dyn3d/iniadvtrac.F, version 1.3 2005/04/13 08:58:34
44    
45      ! Authors : P. Le Van, L. Fairhead, F. Hourdin, F. Codron,      ! Authors: P. Le Van, L. Fairhead, F. Hourdin, F. Codron,
46      ! F. Forget, M.-A. Filiberti      ! F. Forget, M.-A. Filiberti
47    
48        ! Initialisation des traceurs
49        ! Choix du schéma pour l'advection dans le fichier "traceur.def"
50    
51      use nr_util, only: assert      use nr_util, only: assert
52      use jumble, only: new_unit      use jumble, only: new_unit
53    
54      ! Variables local to the procedure:      ! Variables local to the procedure:
55    
56      character(len=3) descrq(18)      character(len=3) descrq(18)
   
57      integer iq, iostat, nq_local, unit      integer iq, iostat, nq_local, unit
58    
59      !-----------------------------------------------------------------------      !-----------------------------------------------------------------------
# Line 78  contains Line 81  contains
81         call assert(nq_local == nqmx, "iniadvtrac nq_local")         call assert(nq_local == nqmx, "iniadvtrac nq_local")
82    
83         do iq=1, nqmx         do iq=1, nqmx
84            read(unit, fmt=*) hadv(iq), vadv(iq), tnom(iq)            read(unit, fmt=*) hadv(iq), vadv(iq), tname(iq)
85            if (.not. any(hadv(iq) == allowed_adv) &            if (.not. any(hadv(iq) == allowed_adv) &
86                 .or. .not. any(vadv(iq) == allowed_adv)) then                 .or. .not. any(vadv(iq) == allowed_adv)) then
87               print *, "bad number for advection scheme"               print *, "bad number for advection scheme"
# Line 90  contains Line 93  contains
93         print *, 'Problème à l''ouverture de "traceur.def"'         print *, 'Problème à l''ouverture de "traceur.def"'
94         print *, 'Attention : on prend des valeurs par défaut.'         print *, 'Attention : on prend des valeurs par défaut.'
95         call assert(nqmx == 4, "iniadvtrac nqmx")         call assert(nqmx == 4, "iniadvtrac nqmx")
96         hadv(1) = 14         hadv(:4) = (/14, 10, 10, 10/)
97         vadv(1) = 14         vadv(:4) = hadv(:4)
98         tnom(1) = 'H2Ov'         tname(1) = 'H2Ov'
99         hadv(2) = 10         tname(2) = 'H2Ol'
100         vadv(2) = 10         tname(3) = 'RN'
101         tnom(2) = 'H2Ol'         tname(4) = 'PB'
        hadv(3) = 10  
        vadv(3) = 10  
        tnom(3) = 'RN'  
        hadv(4) = 10  
        vadv(4) = 10  
        tnom(4) = 'PB'  
102         do iq = 1, nqmx         do iq = 1, nqmx
103            print *, hadv(iq), vadv(iq), tnom(iq)            print *, hadv(iq), vadv(iq), tname(iq)
104         end do         end do
105      ENDIF      ENDIF
106    
     tname = tnom  
   
107      ! À partir du nom court du traceur et du schéma d'advection, on      ! À partir du nom court du traceur et du schéma d'advection, on
108      ! détermine le nom long :      ! détermine le nom long :
109      do iq=1, nqmx      do iq = 1, nqmx
110         if (hadv(iq) /= vadv(iq)) then         if (hadv(iq) /= vadv(iq)) then
111            if (hadv(iq) == 10 .and. vadv(iq) == 16) then            if (hadv(iq) == 10 .and. vadv(iq) == 16) then
112               iadv(iq)=11               iadv(iq) = 11
113            else            else
114               print *, "Bad combination for hozizontal and vertical schemes."               print *, "Bad combination for hozizontal and vertical schemes."
115               stop 1               stop 1
116            endif            endif
117         else         else
118            iadv(iq)=hadv(iq)            iadv(iq) = hadv(iq)
119         endif         endif
120    
121         IF (iadv(iq) == 0) THEN         IF (iadv(iq) == 0) THEN
122            ttext(iq) = tnom(iq)            ttext(iq) = tname(iq)
123         ELSE         ELSE
124            ttext(iq)=trim(tnom(iq)) // descrq(iadv(iq))            ttext(iq)=trim(tname(iq)) // descrq(iadv(iq))
125         endif         endif
126      end do      end do
127    
     forall (iq = 1: nqmx) niadv(iq)=iq  
   
128    END subroutine iniadvtrac    END subroutine iniadvtrac
129    
130  end module iniadvtrac_m  end module iniadvtrac_m

Legend:
Removed from v.76  
changed lines
  Added in v.131

  ViewVC Help
Powered by ViewVC 1.1.21