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

Last change on this file since 37 was 37, checked in by emillour, 14 years ago

Remise en route chantier compilation -- Ehouarn

  • Modifs et corrections pour pouvoir compiler le gcm (en séentiel, avec

makelmdz_fcm pour l'instant):

  • ajout de fichiers 'arch' pour linux-64 (pour Bellonzi, avec ioipsl et en r8)
  • modification de makelmdz_fcm, ajout de la cléPP_PHYS si on compile avec une physique
  • correction de quelques typos/bugs réléàa compilation:
  • infotrac.F90 : supression des appels àlnblnk' (remplacépar len_trim)
  • bilan_dyn.F : déaration des variables znom3,znom3l,zunites3, planet_type
  • cpdet.F : "use control_mod, ONLY: planet_type" mis aux bons endroits

(idem sur cpdet.F dans dyn3dpar)

  • leapfrog.F : declaration de ztetaec(), dtec, cpdet , itau_w, duspg()
  • diagedyn.F : correction typo; attention dans diagedyn.F il y a du

include "../phylmd/YOMCST.h"
Ca va poser problè qd on change de physique....

  • Avec ces modifs, la compilation marche sans physque, avec ou sans ioipsl et avec la physique terrestre phylmd.
File size: 3.8 KB
Line 
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     
17      USE control_mod, ONLY: planet_type
18      IMPLICIT none
19c======================================================================
20c Initialisation de nu_venus et t0_venus
21c======================================================================
22
23! for cpp, nu_venus and t0_venus:
24#include "comconst.h"
25
26      if (planet_type.eq."venus") then
27          nu_venus=0.35
28          t0_venus=460.
29      else
30          nu_venus=0.
31          t0_venus=0.
32      endif
33
34      return
35      end
36
37c======================================================================
38c======================================================================
39
40      FUNCTION cpdet(t)
41
42      USE control_mod, ONLY: planet_type
43      IMPLICIT none
44
45! for cpp, nu_venus and t0_venus:
46#include "comconst.h"
47
48      real cpdet,t
49
50      if (planet_type.eq."venus") then
51          cpdet = cpp*(t/t0_venus)**nu_venus
52      else
53          cpdet = cpp
54      endif
55
56      return
57      end
58     
59c======================================================================
60c======================================================================
61
62      SUBROUTINE t2tpot(npoints, yt, yteta, ypk)
63c======================================================================
64c Arguments:
65c
66c yt   --------input-R- Temperature
67c yteta-------output-R- Temperature potentielle
68c ypk  --------input-R- Fonction d'Exner: RCPD*(pplay/pref)**RKAPPA
69c
70c======================================================================
71
72      USE control_mod, ONLY: planet_type
73      IMPLICIT NONE
74     
75! for cpp, nu_venus and t0_venus:
76#include "comconst.h"
77
78      integer npoints
79      REAL    yt(npoints), yteta(npoints), ypk(npoints)
80     
81      if (planet_type.eq."venus") then
82          yteta = yt**nu_venus                                          &
83     &            - nu_venus * t0_venus**nu_venus * log(ypk/cpp)
84          yteta = yteta**(1./nu_venus)
85      else
86          yteta = yt * cpp/ypk
87      endif
88
89      return
90      end
91
92c======================================================================
93c======================================================================
94
95      SUBROUTINE tpot2t(npoints,yteta, yt, ypk)
96c======================================================================
97c Arguments:
98c
99c yteta--------input-R- Temperature potentielle
100c yt   -------output-R- Temperature
101c ypk  --------input-R- Fonction d'Exner: RCPD*(pplay/pref)**RKAPPA
102c
103c======================================================================
104
105      USE control_mod, ONLY: planet_type
106      IMPLICIT NONE
107
108! for cpp, nu_venus and t0_venus:
109#include "comconst.h"
110
111      integer npoints
112      REAL    yt(npoints), yteta(npoints), ypk(npoints)
113     
114      if (planet_type.eq."venus") then
115         yt = yteta**nu_venus                                           &
116     &       + nu_venus * t0_venus**nu_venus * log(ypk/cpp)
117         yt = yt**(1./nu_venus)
118      else
119          yt = yteta * ypk/cpp
120      endif
121 
122      return
123      end
124
125c======================================================================
126c======================================================================
127c
128c ATTENTION
129c
130c Si un jour on a besoin, il faudra coder les routines
131c    dt2dtpot / dtpto2dt
132c
133c======================================================================
134c======================================================================
Note: See TracBrowser for help on using the repository browser.