source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/config/ppsrc/phys/cpdet.f @ 224

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 4.9 KB
Line 
1! ADAPTATION GCM POUR CP(T)
2c======================================================================
3c S. Lebonnois, 10/2007:
4c
5c VENUS: Cp(T) = cpp*(T/T0)^nu 
6c avec T0=460. et nu=0.35
7c cpp=RCPD=cp0 = 1000.
8c R/RCPD = RKAPPA
9c
10c La fonction d'Exner reste pk = RCPD*(play/pref)**RKAPPA
11c
12c T et teta (temperature potentielle) sont liees par:
13c
14c   integrale[teta a T](cp/T dT) = integrale[pref a p](R/p dp)
15c
16c Dans le cas de l'expression pour Venus, ca donne:
17c
18c   teta**nu = T**nu - nu * T0**nu * ln[ (p/pref)**RKAPPA ]
19c ou
20c   teta**nu = T**nu - nu * T0**nu * ln[pk/RCPD]
21c
22c On passe de T a teta par t2tpot(t,teta,pk)
23c On passe de teta a T par tpot2t(teta,t,pk)
24c
25c Pour DT <-> Dteta, on utilise: dteta = dT *(T/teta)**(nu-1)
26c -> routine dt2dtpot(dt,dteta,t,teta) 
27c (utilisee seulement pour le contregradient)
28c
29c======================================================================
30
31      FUNCTION cpdet(t)
32      IMPLICIT none
33!-----------------------------------------------------------------------
34! INCLUDE cpdet.h
35
36      real cp0,t0,nu
37!      parameter (cp0 = 1000.) !doit etre egal a cpp (dyn) et RCPD (phy)
38      parameter (cp0 = 800.) !doit etre egal a cpp (dyn) et RCPD (phy)
39!      parameter (t0  = 460.)
40      parameter (t0  = 480.)
41!      parameter (t0  = 300.)
42      parameter (nu  = 0.35)
43!      parameter (nu  = 1.0)
44!-----------------------------------------------------------------------
45
46      real cpdet,t
47
48      cpdet = cp0*(t/t0)**nu
49
50      return
51      end
52     
53c======================================================================
54c======================================================================
55
56      SUBROUTINE t2tpot(npoints,yt, yteta, ypk)
57      IMPLICIT none
58c======================================================================
59c Arguments:
60c
61c yt   --------input-R- Temperature
62c yteta-------output-R- Temperature potentielle
63c ypk  --------input-R- Fonction d'Exner: RCPD*(pplay/pref)**RKAPPA
64c
65c======================================================================
66!-----------------------------------------------------------------------
67! INCLUDE cpdet.h
68
69      real cp0,t0,nu
70!      parameter (cp0 = 1000.) !doit etre egal a cpp (dyn) et RCPD (phy)
71      parameter (cp0 = 800.) !doit etre egal a cpp (dyn) et RCPD (phy)
72!      parameter (t0  = 460.)
73      parameter (t0  = 480.)
74!      parameter (t0  = 300.)
75      parameter (nu  = 0.35)
76!      parameter (nu  = 1.0)
77!-----------------------------------------------------------------------
78
79      integer npoints
80      REAL    yt(npoints), yteta(npoints), ypk(npoints)
81     
82      yteta = yt**nu - nu * t0**nu * log(ypk/cp0)
83      yteta = yteta**(1./nu)
84       
85
86      !yteta = yt/ypk
87
88
89      return
90      end
91
92c======================================================================
93c======================================================================
94
95      SUBROUTINE tpot2t(npoints,yteta, yt, ypk)
96      IMPLICIT none
97c======================================================================
98c Arguments:
99c
100c yteta--------input-R- Temperature potentielle
101c yt   -------output-R- Temperature
102c ypk  --------input-R- Fonction d'Exner: RCPD*(pplay/pref)**RKAPPA
103c
104c======================================================================
105!-----------------------------------------------------------------------
106! INCLUDE cpdet.h
107
108      real cp0,t0,nu
109!      parameter (cp0 = 1000.) !doit etre egal a cpp (dyn) et RCPD (phy)
110      parameter (cp0 = 800.) !doit etre egal a cpp (dyn) et RCPD (phy)
111!      parameter (t0  = 460.)
112      parameter (t0  = 480.)
113!      parameter (t0  = 300.)
114      parameter (nu  = 0.35)
115!      parameter (nu  = 1.0)
116!-----------------------------------------------------------------------
117
118      integer npoints
119      REAL yt(npoints), yteta(npoints), ypk(npoints)
120
121      yt = yteta**nu + nu * t0**nu * log(ypk/cp0)
122      yt = yt**(1./nu)
123
124      !yt = yteta*ypk
125
126      return
127      end
128
129c$$$c======================================================================
130c$$$c======================================================================
131c$$$
132c$$$      SUBROUTINE dt2dtpot(npoints,ydt, ydteta, yt, yteta, ypk, ydpk)
133c$$$      IMPLICIT none
134c$$$c======================================================================
135c$$$c Arguments:
136c$$$c
137c$$$c ydt  --------input-R- D Temperature
138c$$$c ydteta------output-R- D Temperature potentielle
139c$$$c yt   --------input-R- Temperature
140c$$$c yteta--------input-R- Temperature potentielle
141c$$$c ypk  --------input-R- Fonction d'Exner: RCPD*(pplay/pref)**RKAPPA
142c$$$c ydpk  -------input-R- D Fonction d'Exner
143c$$$c
144c$$$c======================================================================
145c$$$#include "cpdet.h"
146c$$$
147c$$$      integer npoints
148c$$$      REAL    ydt(npoints), ydteta(npoints), ydpk(npoints)
149c$$$      REAL    yt(npoints), yteta(npoints), ypk(npoints)
150c$$$     
151c$$$      ydteta =  yteta**(1.-nu)* (ydt * yt**(nu-1.) 
152c$$$     .                           - t0**nu * ydpk / ypk)
153c$$$       
154c$$$      return
155c$$$      end
156
Note: See TracBrowser for help on using the repository browser.