source: LMDZ5/trunk/libf/phydev/physiq.F90 @ 1672

Last change on this file since 1672 was 1671, checked in by Ehouarn Millour, 12 years ago
  • fixed "aquaplanet case" so that initializations (creation of files startphy.nc and limit.nc) now also works in parallel (mpi,omp,mixed).
  • call to "iniaqua" is now done from within "iniphysiq" ; also added some tests to check consistency between essential variables shared by dynamics and physics (planetary radius, gravity, Cp, ...)
  • simillarily adapted "phydev" routines, and added necessary routines to also be able to generate startphy.nc/restartphy.nc files there. Also removed common file "comcstphy.h" and replaced it with a module "comcstphy.F90"

EM

File size: 4.2 KB
RevLine 
[1615]1! $Id: physiq.F 1565 2011-08-31 12:53:29Z jghattas $
2!#define IO_DEBUG
3
4      SUBROUTINE physiq (nlon,nlev, &
5     &            debut,lafin,jD_cur, jH_cur,pdtphys, &
6     &            paprs,pplay,pphi,pphis,presnivs,clesphy0, &
7     &            u,v,t,qx, &
8     &            flxmass_w, &
9     &            d_u, d_v, d_t, d_qx, d_ps &
10     &            , dudyn &
11     &            , PVteta)
12
[1671]13      USE dimphy, only : klon,klev
14      USE infotrac, only : nqtot
15      USE comgeomphy, only : rlatd
16      USE comcstphy, only : rg
[1615]17
18      IMPLICIT none
19!======================================================================
20! Objet: Moniteur general de la physique du modele
21!======================================================================
22!
23!  Arguments:
24!
25! nlon----input-I-nombre de points horizontaux
26! nlev----input-I-nombre de couches verticales, doit etre egale a klev
27! debut---input-L-variable logique indiquant le premier passage
28! lafin---input-L-variable logique indiquant le dernier passage
29! jD_cur       -R-jour courant a l'appel de la physique (jour julien)
30! jH_cur       -R-heure courante a l'appel de la physique (jour julien)
31! pdtphys-input-R-pas d'integration pour la physique (seconde)
32! paprs---input-R-pression pour chaque inter-couche (en Pa)
33! pplay---input-R-pression pour le mileu de chaque couche (en Pa)
34! pphi----input-R-geopotentiel de chaque couche (g z) (reference sol)
35! pphis---input-R-geopotentiel du sol
36! presnivs-input_R_pressions approximat. des milieux couches ( en PA)
37! u-------input-R-vitesse dans la direction X (de O a E) en m/s
38! v-------input-R-vitesse Y (de S a N) en m/s
39! t-------input-R-temperature (K)
40! qx------input-R-humidite specifique (kg/kg) et d'autres traceurs
41! d_t_dyn-input-R-tendance dynamique pour "t" (K/s)
42! d_q_dyn-input-R-tendance dynamique pour "q" (kg/kg/s)
43! flxmass_w -input-R- flux de masse verticale
44! d_u-----output-R-tendance physique de "u" (m/s/s)
45! d_v-----output-R-tendance physique de "v" (m/s/s)
46! d_t-----output-R-tendance physique de "t" (K/s)
47! d_qx----output-R-tendance physique de "qx" (kg/kg/s)
48! d_ps----output-R-tendance physique de la pression au sol
49!IM
50! PVteta--output-R-vorticite potentielle a des thetas constantes
51!======================================================================
52#include "dimensions.h"
[1671]53!#include "comcstphy.h"
[1615]54
55      integer jjmp1
56      parameter (jjmp1=jjm+1-1/jjm)
57      integer iip1
58      parameter (iip1=iim+1)
59
60      INTEGER ivap          ! indice de traceurs pour vapeur d'eau
61      PARAMETER (ivap=1)
62      INTEGER iliq          ! indice de traceurs pour eau liquide
63      PARAMETER (iliq=2)
64
65!
66!
67! Variables argument:
68!
69      INTEGER nlon
70      INTEGER nlev
71      REAL, intent(in):: jD_cur, jH_cur
72
73      REAL pdtphys
74      LOGICAL debut, lafin
75      REAL paprs(klon,klev+1)
76      REAL pplay(klon,klev)
77      REAL pphi(klon,klev)
78      REAL pphis(klon)
79      REAL presnivs(klev)
80      REAL znivsig(klev)
81      real pir
82
83      REAL u(klon,klev)
84      REAL v(klon,klev)
85      REAL t(klon,klev),theta(klon,klev)
86      REAL qx(klon,klev,nqtot)
87      REAL flxmass_w(klon,klev)
88      REAL omega(klon,klev) ! vitesse verticale en Pa/s
89      REAL d_u(klon,klev)
90      REAL d_v(klon,klev)
91      REAL d_t(klon,klev)
92      REAL d_qx(klon,klev,nqtot)
93      REAL d_ps(klon)
94      real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
95!IM definition dynamique o_trac dans phys_output_open
96!      type(ctrl_out) :: o_trac(nqtot)
97!FH! REAL PVteta(klon,nbteta)
98      REAL PVteta(klon,1)
99      REAL dudyn(iim+1,jjmp1,klev)
100
101    INTEGER        longcles
102    PARAMETER    ( longcles = 20 )
103
[1671]104real :: temp_newton(klon,klev)
[1615]105integer k
106logical, save :: first=.true.
[1671]107!$OMP THREADPRIVATE(first)
[1615]108
109      REAL clesphy0( longcles      )
110
[1671]111! initializations
112if (first) then
113! ...
[1615]114
[1671]115  first=.false.
116endif
[1615]117
[1671]118! set all tendencies to zero
119d_u(:,:)=0.
120d_v(:,:)=0.
121d_t(:,:)=0.
122d_qx(:,:,:)=0.
123d_ps(:)=0.
[1615]124
[1671]125! compute tendencies to return to the dynamics:
126! "friction" on the first layer
127d_u(:,1)=-u(:,1)/86400.
128! newtonian rlaxation towards temp_newton()
129do k=1,klev
130  temp_newton(:,k)=280.+cos(rlatd(:))*40.-pphi(:,k)/rg*6.e-3
131  d_t(:,k)=(temp_newton(:,k)-t(:,k))/1.e5
132enddo
133
134
135print*,'COUCOU PHYDEV'
136
137! if lastcall, then it is time to write "restartphy.nc" file
138if (lafin) then
139  call phyredem("restartphy.nc")
140endif
141
142end
Note: See TracBrowser for help on using the repository browser.