4 |
|
|
5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE calfis(dayvrai, time, ucov, vcov, teta, q, pk, phis, phi, w, & |
SUBROUTINE calfis(ucov, vcov, teta, q, p3d, pk, phis, phi, w, dufi, dvfi, & |
8 |
dufi, dvfi, dtetafi, dqfi, lafin) |
dtetafi, dqfi, dayvrai, time, lafin) |
9 |
|
|
10 |
! From dyn3d/calfis.F, version 1.3, 2005/05/25 13:10:09 |
! From dyn3d/calfis.F, version 1.3, 2005/05/25 13:10:09 |
11 |
! Authors: P. Le Van, F. Hourdin |
! Authors: P. Le Van, F. Hourdin |
30 |
! rayonnement) et l'aire de la maille (quand on veut int\'egrer une |
! rayonnement) et l'aire de la maille (quand on veut int\'egrer une |
31 |
! grandeur horizontalement). |
! grandeur horizontalement). |
32 |
|
|
33 |
use comconst, only: kappa, cpp, dtphys, g |
use comconst, only: kappa, cpp, g |
34 |
use comgeom, only: apoln, cu_2d, cv_2d, unsaire_2d, apols |
use comgeom, only: apoln, cu_2d, cv_2d, unsaire_2d, apols |
35 |
use dimens_m, only: iim, jjm, llm, nqmx |
use dimens_m, only: iim, jjm, llm, nqmx |
36 |
use dimphy, only: klon |
use dimphy, only: klon |
39 |
use grid_change, only: dyn_phy, gr_fi_dyn |
use grid_change, only: dyn_phy, gr_fi_dyn |
40 |
use nr_util, only: pi |
use nr_util, only: pi |
41 |
use physiq_m, only: physiq |
use physiq_m, only: physiq |
|
use pressure_var, only: p3d, pls |
|
|
|
|
|
integer, intent(in):: dayvrai |
|
|
! current day number, based at value 1 on January 1st of annee_ref |
|
|
|
|
|
REAL, intent(in):: time ! time of day, as a fraction of day length |
|
42 |
|
|
43 |
REAL, intent(in):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm) |
REAL, intent(in):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm) |
44 |
! covariant zonal velocity |
! covariant zonal velocity |
52 |
REAL, intent(in):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx) |
REAL, intent(in):: q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx) |
53 |
! mass fractions of advected fields |
! mass fractions of advected fields |
54 |
|
|
55 |
|
REAL, intent(in):: p3d(:, :, :) ! (iim + 1, jjm + 1, llm + 1) |
56 |
|
! pressure at layer interfaces, in Pa |
57 |
|
! ("p3d(i, j, l)" is at longitude "rlonv(i)", latitude "rlatu(j)", |
58 |
|
! for interface "l") |
59 |
|
|
60 |
REAL, intent(in):: pk(:, :, :) ! (iim + 1, jjm + 1, llm) |
REAL, intent(in):: pk(:, :, :) ! (iim + 1, jjm + 1, llm) |
61 |
! Exner = cp * (p / preff)**kappa |
! Exner = cp * (p / preff)**kappa |
62 |
|
|
74 |
! tendency for the potential temperature |
! tendency for the potential temperature |
75 |
|
|
76 |
REAL, intent(out):: dqfi(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx) |
REAL, intent(out):: dqfi(:, :, :, :) ! (iim + 1, jjm + 1, llm, nqmx) |
77 |
|
|
78 |
|
integer, intent(in):: dayvrai |
79 |
|
! current day number, based at value 1 on January 1st of annee_ref |
80 |
|
|
81 |
|
REAL, intent(in):: time ! time of day, as a fraction of day length |
82 |
LOGICAL, intent(in):: lafin |
LOGICAL, intent(in):: lafin |
83 |
|
|
84 |
! Local: |
! Local: |
108 |
! 43. Température et pression milieu couche |
! 43. Température et pression milieu couche |
109 |
DO l = 1, llm |
DO l = 1, llm |
110 |
pksurcp = pk(:, :, l) / cpp |
pksurcp = pk(:, :, l) / cpp |
111 |
pls(:, :, l) = preff * pksurcp**(1./ kappa) |
play(:, l) = pack(preff * pksurcp**(1./ kappa), dyn_phy) |
|
play(:, l) = pack(pls(:, :, l), dyn_phy) |
|
112 |
t(:, l) = pack(teta(:, :, l) * pksurcp, dyn_phy) |
t(:, l) = pack(teta(:, :, l) * pksurcp, dyn_phy) |
113 |
ENDDO |
ENDDO |
114 |
|
|
181 |
|
|
182 |
forall(l = 1: llm) v(:, l) = pack(zvfi(:, :, l), dyn_phy) |
forall(l = 1: llm) v(:, l) = pack(zvfi(:, :, l), dyn_phy) |
183 |
|
|
184 |
! Appel de la physique : |
CALL physiq(lafin, dayvrai, time, paprs, play, pphi, pphis, u, v, t, qx, & |
185 |
CALL physiq(lafin, dayvrai, time, dtphys, paprs, play, pphi, pphis, u, & |
omega, d_u, d_v, d_t, d_qx) |
|
v, t, qx, omega, d_u, d_v, d_t, d_qx) |
|
186 |
|
|
187 |
! transformation des tendances physiques en tendances dynamiques: |
! transformation des tendances physiques en tendances dynamiques: |
188 |
|
|
218 |
DO j = 2, jjm |
DO j = 2, jjm |
219 |
ig0 = 1 + (j - 2) * iim |
ig0 = 1 + (j - 2) * iim |
220 |
DO i = 1, iim - 1 |
DO i = 1, iim - 1 |
221 |
dufi(i, j, l) = 0.5 * (d_u(ig0 + i, l) + d_u(ig0 + i+1, l)) & |
dufi(i, j, l) = 0.5 * (d_u(ig0 + i, l) + d_u(ig0 + i + 1, l)) & |
222 |
* cu_2d(i, j) |
* cu_2d(i, j) |
223 |
ENDDO |
ENDDO |
224 |
dufi(iim, j, l) = 0.5 * (d_u(ig0 + 1, l) + d_u(ig0 + iim, l)) & |
dufi(iim, j, l) = 0.5 * (d_u(ig0 + 1, l) + d_u(ig0 + iim, l)) & |
233 |
DO j = 2, jjm - 1 |
DO j = 2, jjm - 1 |
234 |
ig0 = 1 + (j - 2) * iim |
ig0 = 1 + (j - 2) * iim |
235 |
DO i = 1, iim |
DO i = 1, iim |
236 |
dvfi(i, j, l) = 0.5 * (d_v(ig0 + i, l) + d_v(ig0 + i+iim, l)) & |
dvfi(i, j, l) = 0.5 * (d_v(ig0 + i, l) + d_v(ig0 + i + iim, l)) & |
237 |
* cv_2d(i, j) |
* cv_2d(i, j) |
238 |
ENDDO |
ENDDO |
239 |
dvfi(iim + 1, j, l) = dvfi(1, j, l) |
dvfi(iim + 1, j, l) = dvfi(1, j, l) |