1 |
MODULE guide_m |
MODULE guide_m |
2 |
|
|
3 |
! From dyn3d/guide.F, version 1.3 2005/05/25 13:10:09 |
! From dyn3d/guide.F, version 1.3, 2005/05/25 13:10:09 |
4 |
! and dyn3d/guide.h, version 1.1.1.1 2004/05/19 12:53:06 |
! and dyn3d/guide.h, version 1.1.1.1, 2004/05/19 12:53:06 |
5 |
|
|
6 |
IMPLICIT NONE |
IMPLICIT NONE |
7 |
|
|
9 |
|
|
10 |
SUBROUTINE guide(itau, ucov, vcov, teta, q, ps) |
SUBROUTINE guide(itau, ucov, vcov, teta, q, ps) |
11 |
|
|
12 |
! Author: F.Hourdin |
! Author: F. Hourdin |
13 |
|
|
14 |
USE comconst, ONLY: cpp, kappa |
USE comconst, ONLY: cpp, kappa |
15 |
USE conf_gcm_m, ONLY: day_step |
USE conf_gcm_m, ONLY: day_step |
16 |
use conf_guide_m, only: guide_u, guide_v, guide_t, guide_q, ncep, & |
use conf_guide_m, only: guide_u, guide_v, guide_t, guide_q, ini_anal, & |
17 |
ini_anal, tau_min_u, tau_max_u, tau_min_v, tau_max_v, tau_min_t, & |
alpha_u, alpha_v, alpha_t, alpha_q |
|
tau_max_t, tau_min_q, tau_max_q, online, factt |
|
18 |
USE dimens_m, ONLY: iim, jjm, llm |
USE dimens_m, ONLY: iim, jjm, llm |
19 |
USE disvert_m, ONLY: ap, bp, preff |
USE disvert_m, ONLY: ap, bp, preff |
|
use dynetat0_m, only: grossismx, grossismy, rlatu, rlatv |
|
20 |
USE exner_hyb_m, ONLY: exner_hyb |
USE exner_hyb_m, ONLY: exner_hyb |
|
use init_tau2alpha_m, only: init_tau2alpha |
|
|
use nr_util, only: pi |
|
|
USE paramet_m, ONLY: iip1, ip1jmp1, jjp1, llmp1 |
|
21 |
USE q_sat_m, ONLY: q_sat |
USE q_sat_m, ONLY: q_sat |
22 |
use read_reanalyse_m, only: read_reanalyse |
use read_reanalyse_m, only: read_reanalyse |
|
use tau2alpha_m, only: tau2alpha |
|
23 |
use writefield_m, only: writefield |
use writefield_m, only: writefield |
24 |
|
|
25 |
INTEGER, INTENT(IN):: itau |
INTEGER, INTENT(IN):: itau |
34 |
|
|
35 |
! Local: |
! Local: |
36 |
|
|
37 |
! variables dynamiques pour les réanalyses |
! Variables dynamiques pour les réanalyses |
38 |
|
|
39 |
REAL, save:: ucovrea1(iim + 1, jjm + 1, llm), vcovrea1(iim + 1, jjm, llm) |
REAL, save:: ucovrea1(iim + 1, jjm + 1, llm), vcovrea1(iim + 1, jjm, llm) |
40 |
! vents covariants reanalyses |
! vents covariants r\'eanalyses |
41 |
|
|
42 |
|
REAL, save:: tetarea1(iim + 1, jjm + 1, llm) |
43 |
|
! potential temperture from reanalysis |
44 |
|
|
45 |
REAL, save:: tetarea1(iim + 1, jjm + 1, llm) ! temp pot reales |
REAL, save:: qrea1(iim + 1, jjm + 1, llm) |
|
REAL, save:: qrea1(iim + 1, jjm + 1, llm) ! temp pot reales |
|
46 |
|
|
47 |
REAL, save:: ucovrea2(iim + 1, jjm + 1, llm), vcovrea2(iim + 1, jjm, llm) |
REAL, save:: ucovrea2(iim + 1, jjm + 1, llm), vcovrea2(iim + 1, jjm, llm) |
48 |
! vents covariants reanalyses |
! vents covariants reanalyses |
49 |
|
|
50 |
REAL, save:: tetarea2(iim + 1, jjm + 1, llm) ! temp pot reales |
REAL, save:: tetarea2(iim + 1, jjm + 1, llm) |
51 |
REAL, save:: qrea2(iim + 1, jjm + 1, llm) ! temp pot reales |
! potential temperture from reanalysis |
52 |
|
|
53 |
! alpha détermine la part des injections de données à chaque étape |
REAL, save:: qrea2(iim + 1, jjm + 1, llm) |
|
! alpha=0 signifie pas d'injection |
|
|
! alpha=1 signifie injection totale |
|
|
REAL, save:: alpha_q(iim + 1, jjm + 1) |
|
|
REAL, save:: alpha_t(iim + 1, jjm + 1) |
|
|
REAL, save:: alpha_u(iim + 1, jjm + 1), alpha_v(iim + 1, jjm) |
|
54 |
|
|
55 |
INTEGER l |
INTEGER l |
56 |
REAL tau |
REAL tau |
57 |
|
|
58 |
! TEST SUR QSAT |
! TEST SUR QSAT |
59 |
REAL p(iim + 1, jjm + 1, llmp1) |
REAL p(iim + 1, jjm + 1, llm + 1) |
60 |
real pk(iim + 1, jjm + 1, llm), pks(iim + 1, jjm + 1) |
real pk(iim + 1, jjm + 1, llm), pks(iim + 1, jjm + 1) |
61 |
REAL qsat(iim + 1, jjm + 1, llm) |
REAL qsat(iim + 1, jjm + 1, llm) |
62 |
|
|
|
REAL dxdys(iip1, jjp1), dxdyu(iip1, jjp1), dxdyv(iip1, jjm) |
|
|
|
|
63 |
!----------------------------------------------------------------------- |
!----------------------------------------------------------------------- |
64 |
|
|
65 |
IF (itau == 0) THEN |
IF (itau == 0) THEN |
|
IF (online) THEN |
|
|
IF (abs(grossismx - 1.) < 0.1 .OR. abs(grossismy - 1.) < 0.1) THEN |
|
|
! grille regulière |
|
|
if (guide_u) alpha_u = factt / tau_max_u |
|
|
if (guide_v) alpha_v = factt / tau_max_v |
|
|
if (guide_t) alpha_t = factt / tau_max_t |
|
|
if (guide_q) alpha_q = factt / tau_max_q |
|
|
else |
|
|
call init_tau2alpha(dxdys, dxdyu, dxdyv) |
|
|
|
|
|
if (guide_u) then |
|
|
CALL tau2alpha(dxdyu, rlatu, tau_min_u, tau_max_u, alpha_u) |
|
|
CALL writefield("alpha_u", alpha_u) |
|
|
end if |
|
|
|
|
|
if (guide_v) then |
|
|
CALL tau2alpha(dxdyv, rlatv, tau_min_v, tau_max_v, alpha_v) |
|
|
CALL writefield("alpha_v", alpha_v) |
|
|
end if |
|
|
|
|
|
if (guide_t) then |
|
|
CALL tau2alpha(dxdys, rlatu, tau_min_t, tau_max_t, alpha_t) |
|
|
CALL writefield("alpha_t", alpha_t) |
|
|
end if |
|
|
|
|
|
if (guide_q) then |
|
|
CALL tau2alpha(dxdys, rlatu, tau_min_q, tau_max_q, alpha_q) |
|
|
CALL writefield("alpha_q", alpha_q) |
|
|
end if |
|
|
end IF |
|
|
ELSE |
|
|
! Cas où on force exactement par les variables analysées |
|
|
if (guide_u) alpha_u = 1. |
|
|
if (guide_v) alpha_v = 1. |
|
|
if (guide_t) alpha_t = 1. |
|
|
if (guide_q) alpha_q = 1. |
|
|
END IF |
|
|
|
|
66 |
! Lecture du premier état des réanalyses : |
! Lecture du premier état des réanalyses : |
67 |
CALL read_reanalyse(ps, ucovrea2, vcovrea2, tetarea2, qrea2) |
CALL read_reanalyse(ps, ucovrea2, vcovrea2, tetarea2, qrea2) |
68 |
qrea2 = max(qrea2, 0.1) |
qrea2 = max(qrea2, 0.1) |