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 | |
---|
13 | USE dimphy, only : klon,klev |
---|
14 | USE infotrac, only : nqtot |
---|
15 | USE comgeomphy, only : rlatd |
---|
16 | USE comcstphy, only : rg |
---|
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" |
---|
53 | !#include "comcstphy.h" |
---|
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 | |
---|
104 | real :: temp_newton(klon,klev) |
---|
105 | integer k |
---|
106 | logical, save :: first=.true. |
---|
107 | !$OMP THREADPRIVATE(first) |
---|
108 | |
---|
109 | REAL clesphy0( longcles ) |
---|
110 | |
---|
111 | ! initializations |
---|
112 | if (first) then |
---|
113 | ! ... |
---|
114 | |
---|
115 | first=.false. |
---|
116 | endif |
---|
117 | |
---|
118 | ! set all tendencies to zero |
---|
119 | d_u(:,:)=0. |
---|
120 | d_v(:,:)=0. |
---|
121 | d_t(:,:)=0. |
---|
122 | d_qx(:,:,:)=0. |
---|
123 | d_ps(:)=0. |
---|
124 | |
---|
125 | ! compute tendencies to return to the dynamics: |
---|
126 | ! "friction" on the first layer |
---|
127 | d_u(:,1)=-u(:,1)/86400. |
---|
128 | ! newtonian rlaxation towards temp_newton() |
---|
129 | do 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 |
---|
132 | enddo |
---|
133 | |
---|
134 | |
---|
135 | print*,'COUCOU PHYDEV' |
---|
136 | |
---|
137 | ! if lastcall, then it is time to write "restartphy.nc" file |
---|
138 | if (lafin) then |
---|
139 | call phyredem("restartphy.nc") |
---|
140 | endif |
---|
141 | |
---|
142 | end |
---|