5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE physiq(lafin, rdayvrai, time, dtphys, paprs, play, pphi, pphis, & |
SUBROUTINE physiq(lafin, rdayvrai, time, dtphys, paprs, play, pphi, pphis, & |
8 |
u, v, t, qx, omega, d_u, d_v, d_t, d_qx, d_ps) |
u, v, t, qx, omega, d_u, d_v, d_t, d_qx) |
9 |
|
|
10 |
! From phylmd/physiq.F, version 1.22 2006/02/20 09:38:28 |
! From phylmd/physiq.F, version 1.22 2006/02/20 09:38:28 |
11 |
! (subversion revision 678) |
! (subversion revision 678) |
62 |
use unit_nml_m, only: unit_nml |
use unit_nml_m, only: unit_nml |
63 |
USE yoethf_m, ONLY: r2es, rvtmp2 |
USE yoethf_m, ONLY: r2es, rvtmp2 |
64 |
|
|
65 |
! Arguments: |
logical, intent(in):: lafin ! dernier passage |
66 |
|
|
67 |
REAL, intent(in):: rdayvrai |
REAL, intent(in):: rdayvrai |
68 |
! (elapsed time since January 1st 0h of the starting year, in days) |
! (elapsed time since January 1st 0h of the starting year, in days) |
69 |
|
|
70 |
REAL, intent(in):: time ! heure de la journ\'ee en fraction de jour |
REAL, intent(in):: time ! heure de la journ\'ee en fraction de jour |
71 |
REAL, intent(in):: dtphys ! pas d'integration pour la physique (seconde) |
REAL, intent(in):: dtphys ! pas d'integration pour la physique (seconde) |
|
logical, intent(in):: lafin ! dernier passage |
|
72 |
|
|
73 |
REAL, intent(in):: paprs(klon, llm + 1) |
REAL, intent(in):: paprs(klon, llm + 1) |
74 |
! (pression pour chaque inter-couche, en Pa) |
! (pression pour chaque inter-couche, en Pa) |
90 |
REAL, intent(in):: qx(klon, llm, nqmx) |
REAL, intent(in):: qx(klon, llm, nqmx) |
91 |
! (humidit\'e sp\'ecifique et fractions massiques des autres traceurs) |
! (humidit\'e sp\'ecifique et fractions massiques des autres traceurs) |
92 |
|
|
93 |
REAL omega(klon, llm) ! input vitesse verticale en Pa/s |
REAL, intent(in):: omega(klon, llm) ! vitesse verticale en Pa/s |
94 |
REAL, intent(out):: d_u(klon, llm) ! tendance physique de "u" (m/s/s) |
REAL, intent(out):: d_u(klon, llm) ! tendance physique de "u" (m s-2) |
95 |
REAL, intent(out):: d_v(klon, llm) ! tendance physique de "v" (m/s/s) |
REAL, intent(out):: d_v(klon, llm) ! tendance physique de "v" (m s-2) |
96 |
REAL, intent(out):: d_t(klon, llm) ! tendance physique de "t" (K/s) |
REAL, intent(out):: d_t(klon, llm) ! tendance physique de "t" (K/s) |
97 |
REAL d_qx(klon, llm, nqmx) ! output tendance physique de "qx" (kg/kg/s) |
REAL, intent(out):: d_qx(klon, llm, nqmx) ! tendance physique de "qx" (s-1) |
98 |
REAL d_ps(klon) ! output tendance physique de la pression au sol |
|
99 |
|
! Local: |
100 |
|
|
101 |
LOGICAL:: firstcal = .true. |
LOGICAL:: firstcal = .true. |
102 |
|
|
118 |
parameter(rnpb = .true.) |
parameter(rnpb = .true.) |
119 |
|
|
120 |
character(len = 6):: ocean = 'force ' |
character(len = 6):: ocean = 'force ' |
121 |
! (type de mod\`ele oc\'ean \`a utiliser: "force" ou "slab" mais pas "couple") |
! (type de mod\`ele oc\'ean \`a utiliser: "force" ou "slab" mais |
122 |
|
! pas "couple") |
123 |
|
|
124 |
! "slab" ocean |
! "slab" ocean |
125 |
REAL, save:: tslab(klon) ! temperature of ocean slab |
REAL, save:: tslab(klon) ! temperature of ocean slab |
155 |
|
|
156 |
real da(klon, llm), phi(klon, llm, llm), mp(klon, llm) |
real da(klon, llm), phi(klon, llm, llm), mp(klon, llm) |
157 |
|
|
158 |
!IM Amip2 PV a theta constante |
! Amip2 PV a theta constante |
159 |
|
|
160 |
CHARACTER(LEN = 3) ctetaSTD(nbteta) |
CHARACTER(LEN = 3) ctetaSTD(nbteta) |
161 |
DATA ctetaSTD/'350', '380', '405'/ |
DATA ctetaSTD/'350', '380', '405'/ |
162 |
REAL rtetaSTD(nbteta) |
REAL rtetaSTD(nbteta) |
163 |
DATA rtetaSTD/350., 380., 405./ |
DATA rtetaSTD/350., 380., 405./ |
164 |
|
|
165 |
!MI Amip2 PV a theta constante |
! Amip2 PV a theta constante |
166 |
|
|
167 |
REAL swdn0(klon, llm + 1), swdn(klon, llm + 1) |
REAL swdn0(klon, llm + 1), swdn(klon, llm + 1) |
168 |
REAL swup0(klon, llm + 1), swup(klon, llm + 1) |
REAL swup0(klon, llm + 1), swup(klon, llm + 1) |
172 |
REAL lwup0(klon, llm + 1), lwup(klon, llm + 1) |
REAL lwup0(klon, llm + 1), lwup(klon, llm + 1) |
173 |
SAVE lwdn0, lwdn, lwup0, lwup |
SAVE lwdn0, lwdn, lwup0, lwup |
174 |
|
|
175 |
!IM Amip2 |
! Amip2 |
176 |
! variables a une pression donnee |
! variables a une pression donnee |
177 |
|
|
178 |
integer nlevSTD |
integer nlevSTD |
241 |
'pc= 440-560hPa, tau> 60.', 'pc= 560-680hPa, tau> 60.', & |
'pc= 440-560hPa, tau> 60.', 'pc= 560-680hPa, tau> 60.', & |
242 |
'pc= 680-800hPa, tau> 60.'/ |
'pc= 680-800hPa, tau> 60.'/ |
243 |
|
|
244 |
!IM ISCCP simulator v3.4 |
! ISCCP simulator v3.4 |
245 |
|
|
246 |
integer nid_hf, nid_hf3d |
integer nid_hf, nid_hf3d |
247 |
save nid_hf, nid_hf3d |
save nid_hf, nid_hf3d |
443 |
REAL, PARAMETER:: t_coup = 234. |
REAL, PARAMETER:: t_coup = 234. |
444 |
REAL zphi(klon, llm) |
REAL zphi(klon, llm) |
445 |
|
|
446 |
!IM cf. AM Variables locales pour la CLA (hbtm2) |
! cf. AM Variables locales pour la CLA (hbtm2) |
447 |
|
|
448 |
REAL, SAVE:: pblh(klon, nbsrf) ! Hauteur de couche limite |
REAL, SAVE:: pblh(klon, nbsrf) ! Hauteur de couche limite |
449 |
REAL, SAVE:: plcl(klon, nbsrf) ! Niveau de condensation de la CLA |
REAL, SAVE:: plcl(klon, nbsrf) ! Niveau de condensation de la CLA |
554 |
REAL uq_lay(klon, llm) ! transport zonal de l'eau a chaque niveau vert. |
REAL uq_lay(klon, llm) ! transport zonal de l'eau a chaque niveau vert. |
555 |
|
|
556 |
REAL zsto |
REAL zsto |
|
|
|
|
logical ok_sync |
|
557 |
real date0 |
real date0 |
558 |
|
|
559 |
! Variables li\'ees au bilan d'\'energie et d'enthalpie : |
! Variables li\'ees au bilan d'\'energie et d'enthalpie : |
632 |
!---------------------------------------------------------------- |
!---------------------------------------------------------------- |
633 |
|
|
634 |
IF (if_ebil >= 1) zero_v = 0. |
IF (if_ebil >= 1) zero_v = 0. |
|
ok_sync = .TRUE. |
|
635 |
IF (nqmx < 2) CALL abort_gcm('physiq', & |
IF (nqmx < 2) CALL abort_gcm('physiq', & |
636 |
'eaux vapeur et liquide sont indispensables', 1) |
'eaux vapeur et liquide sont indispensables', 1) |
637 |
|
|
746 |
ENDIF test_firstcal |
ENDIF test_firstcal |
747 |
|
|
748 |
! Mettre a zero des variables de sortie (pour securite) |
! Mettre a zero des variables de sortie (pour securite) |
|
|
|
|
DO i = 1, klon |
|
|
d_ps(i) = 0. |
|
|
ENDDO |
|
|
DO iq = 1, nqmx |
|
|
DO k = 1, llm |
|
|
DO i = 1, klon |
|
|
d_qx(i, k, iq) = 0. |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
749 |
da = 0. |
da = 0. |
750 |
mp = 0. |
mp = 0. |
751 |
phi = 0. |
phi = 0. |
752 |
|
|
753 |
! Ne pas affecter les valeurs entr\'ees de u, v, h, et q : |
! We will modify variables *_seri and we will not touch variables |
754 |
|
! u, v, h, q: |
755 |
DO k = 1, llm |
DO k = 1, llm |
756 |
DO i = 1, klon |
DO i = 1, klon |
757 |
t_seri(i, k) = t(i, k) |
t_seri(i, k) = t(i, k) |
1862 |
CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, d_q_vdf, zx_tmp_3d) |
CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, d_q_vdf, zx_tmp_3d) |
1863 |
CALL histwrite(nid_ins, "dqvdf", itau_w, zx_tmp_3d) |
CALL histwrite(nid_ins, "dqvdf", itau_w, zx_tmp_3d) |
1864 |
|
|
1865 |
if (ok_sync) then |
call histsync(nid_ins) |
|
call histsync(nid_ins) |
|
|
endif |
|
1866 |
ENDIF |
ENDIF |
1867 |
|
|
1868 |
end subroutine write_histins |
end subroutine write_histins |