source: trunk/libf/dyn3d/cpdet.F @ 16

Last change on this file since 16 was 5, checked in by slebonnois, 14 years ago
  • Ajout des fichiers .def Venus et Titan (tels qu'ils sont utilisés

actuellement) dans les deftanks.

  • Ajout d'une doc sur Cp(T).
  • Modifications dans dyn3d concernant Cp(T), cf le log (v5) dans chantiers
  • Premières modifs de l'appel à la physique dans dyn3d/calfis, cf log (v5)
  • Elimination des cpdet.* dans phytitan et phyvenus (remplacés par cpdet.F

dans dyn3d).

File size: 3.8 KB
RevLine 
[5]1! ADAPTATION GCM POUR CP(T)
2c======================================================================
3c S. Lebonnois, 10/2010
4c
5c Cp doit être calculé par cpdet(t) pour être valable partout
6c
7c La fonction d'Exner reste pk = RCPD*(play/pref)**RKAPPA
8c (RCPD=cpp, RKAPPA=kappa)
9c
10c On passe de T a teta (temperature potentielle) par t2tpot(t,teta,pk)
11c On passe de teta a T par tpot2t(teta,t,pk)
12c
13c======================================================================
14
15      SUBROUTINE ini_cpdet
16      IMPLICIT none
17c======================================================================
18c Initialisation de nu_venus et t0_venus
19c======================================================================
20
21! for planet_type:
22      USE control_mod
23
24! for cpp, nu_venus and t0_venus:
25#include "comconst.h"
26
27      if (planet_type.eq."venus") then
28          nu_venus=0.35
29          t0_venus=460.
30      else
31          nu_venus=0.
32          t0_venus=0.
33      endif
34
35      return
36      end
37
38c======================================================================
39c======================================================================
40
41      FUNCTION cpdet(t)
42      IMPLICIT none
43
44! for planet_type:
45      USE control_mod
46
47! for cpp, nu_venus and t0_venus:
48#include "comconst.h"
49
50      real cpdet,t
51
52      if (planet_type.eq."venus") then
53          cpdet = cpp*(t/t0_venus)**nu_venus
54      else
55          cpdet = cpp
56      endif
57
58      return
59      end
60     
61c======================================================================
62c======================================================================
63
64      SUBROUTINE t2tpot(npoints, yt, yteta, ypk)
65      IMPLICIT none
66c======================================================================
67c Arguments:
68c
69c yt   --------input-R- Temperature
70c yteta-------output-R- Temperature potentielle
71c ypk  --------input-R- Fonction d'Exner: RCPD*(pplay/pref)**RKAPPA
72c
73c======================================================================
74
75! for planet_type:
76      USE control_mod
77
78! for cpp, nu_venus and t0_venus:
79#include "comconst.h"
80
81      integer npoints
82      REAL    yt(npoints), yteta(npoints), ypk(npoints)
83     
84      if (planet_type.eq."venus") then
85          yteta = yt**nu_venus                                          &
86     &            - nu_venus * t0_venus**nu_venus * log(ypk/cpp)
87          yteta = yteta**(1./nu_venus)
88      else
89          yteta = yt * cpp/ypk
90      endif
91
92      return
93      end
94
95c======================================================================
96c======================================================================
97
98      SUBROUTINE tpot2t(npoints,yteta, yt, ypk)
99      IMPLICIT none
100c======================================================================
101c Arguments:
102c
103c yteta--------input-R- Temperature potentielle
104c yt   -------output-R- Temperature
105c ypk  --------input-R- Fonction d'Exner: RCPD*(pplay/pref)**RKAPPA
106c
107c======================================================================
108
109! for planet_type:
110      USE control_mod
111
112! for cpp, nu_venus and t0_venus:
113#include "comconst.h"
114
115      integer npoints
116      REAL    yt(npoints), yteta(npoints), ypk(npoints)
117     
118      if (planet_type.eq."venus") then
119         yt = yteta**nu_venus                                           &
120     &       + nu_venus * t0_venus**nu_venus * log(ypk/cpp)
121         yt = yt**(1./nu_venus)
122      else
123          yt = yteta * ypk/cpp
124      endif
125 
126      return
127      end
128
129c======================================================================
130c======================================================================
131c
132c ATTENTION
133c
134c Si un jour on a besoin, il faudra coder les routines
135c    dt2dtpot / dtpto2dt
136c
137c======================================================================
138c======================================================================
Note: See TracBrowser for help on using the repository browser.