20 |
use ajsec_m, only: ajsec |
use ajsec_m, only: ajsec |
21 |
use calltherm_m, only: calltherm |
use calltherm_m, only: calltherm |
22 |
USE clesphys, ONLY: cdhmax, cdmmax, ecrit_hf, ecrit_ins, ecrit_mth, & |
USE clesphys, ONLY: cdhmax, cdmmax, ecrit_hf, ecrit_ins, ecrit_mth, & |
23 |
ecrit_reg, ecrit_tra, ksta, ksta_ter, ok_kzmin |
ecrit_reg, ecrit_tra, ksta, ksta_ter, ok_kzmin, ok_instan |
24 |
USE clesphys2, ONLY: cycle_diurne, conv_emanuel, nbapp_rad, new_oliq, & |
USE clesphys2, ONLY: cycle_diurne, conv_emanuel, nbapp_rad, new_oliq, & |
25 |
ok_orodr, ok_orolf |
ok_orodr, ok_orolf |
26 |
USE clmain_m, ONLY: clmain |
USE clmain_m, ONLY: clmain |
28 |
use comconst, only: dtphys |
use comconst, only: dtphys |
29 |
USE comgeomphy, ONLY: airephy |
USE comgeomphy, ONLY: airephy |
30 |
USE concvl_m, ONLY: concvl |
USE concvl_m, ONLY: concvl |
31 |
USE conf_gcm_m, ONLY: offline, raz_date, day_step, iphysiq |
USE conf_gcm_m, ONLY: offline, day_step, iphysiq |
32 |
USE conf_phys_m, ONLY: conf_phys |
USE conf_phys_m, ONLY: conf_phys |
33 |
use conflx_m, only: conflx |
use conflx_m, only: conflx |
34 |
USE ctherm, ONLY: iflag_thermals, nsplit_thermals |
USE ctherm, ONLY: iflag_thermals, nsplit_thermals |
43 |
USE fcttre, ONLY: foeew, qsatl, qsats, thermcep |
USE fcttre, ONLY: foeew, qsatl, qsats, thermcep |
44 |
use fisrtilp_m, only: fisrtilp |
use fisrtilp_m, only: fisrtilp |
45 |
USE hgardfou_m, ONLY: hgardfou |
USE hgardfou_m, ONLY: hgardfou |
46 |
|
USE histsync_m, ONLY: histsync |
47 |
|
USE histwrite_phy_m, ONLY: histwrite_phy |
48 |
USE indicesol, ONLY: clnsurf, epsfra, is_lic, is_oce, is_sic, is_ter, & |
USE indicesol, ONLY: clnsurf, epsfra, is_lic, is_oce, is_sic, is_ter, & |
49 |
nbsrf |
nbsrf |
50 |
USE ini_histins_m, ONLY: ini_histins |
USE ini_histins_m, ONLY: ini_histins, nid_ins |
51 |
use netcdf95, only: NF95_CLOSE |
use netcdf95, only: NF95_CLOSE |
52 |
use newmicro_m, only: newmicro |
use newmicro_m, only: newmicro |
53 |
|
use nr_util, only: assert |
54 |
use nuage_m, only: nuage |
use nuage_m, only: nuage |
55 |
USE orbite_m, ONLY: orbite |
USE orbite_m, ONLY: orbite |
56 |
USE ozonecm_m, ONLY: ozonecm |
USE ozonecm_m, ONLY: ozonecm |
65 |
use readsulfate_preind_m, only: readsulfate_preind |
use readsulfate_preind_m, only: readsulfate_preind |
66 |
use yoegwd, only: sugwd |
use yoegwd, only: sugwd |
67 |
USE suphec_m, ONLY: rcpd, retv, rg, rlvtt, romega, rsigma, rtt |
USE suphec_m, ONLY: rcpd, retv, rg, rlvtt, romega, rsigma, rtt |
68 |
|
use time_phylmdz, only: itap, increment_itap |
69 |
use transp_m, only: transp |
use transp_m, only: transp |
70 |
use transp_lay_m, only: transp_lay |
use transp_lay_m, only: transp_lay |
71 |
use unit_nml_m, only: unit_nml |
use unit_nml_m, only: unit_nml |
118 |
LOGICAL, PARAMETER:: ok_stratus = .FALSE. |
LOGICAL, PARAMETER:: ok_stratus = .FALSE. |
119 |
! Ajouter artificiellement les stratus |
! Ajouter artificiellement les stratus |
120 |
|
|
|
logical:: ok_journe = .false., ok_mensuel = .true., ok_instan = .false. |
|
|
! sorties journalieres, mensuelles et instantanees dans les |
|
|
! fichiers histday, histmth et histins |
|
|
|
|
|
LOGICAL ok_region ! sortir le fichier regional |
|
|
PARAMETER (ok_region = .FALSE.) |
|
|
|
|
121 |
! pour phsystoke avec thermiques |
! pour phsystoke avec thermiques |
122 |
REAL fm_therm(klon, llm + 1) |
REAL fm_therm(klon, llm + 1) |
123 |
REAL entr_therm(klon, llm) |
REAL entr_therm(klon, llm) |
159 |
REAL radsol(klon) |
REAL radsol(klon) |
160 |
SAVE radsol ! bilan radiatif au sol calcule par code radiatif |
SAVE radsol ! bilan radiatif au sol calcule par code radiatif |
161 |
|
|
|
INTEGER:: itap = 0 ! number of calls to "physiq" |
|
|
|
|
162 |
REAL, save:: ftsol(klon, nbsrf) ! skin temperature of surface fraction |
REAL, save:: ftsol(klon, nbsrf) ! skin temperature of surface fraction |
163 |
|
|
164 |
REAL, save:: ftsoil(klon, nsoilmx, nbsrf) |
REAL, save:: ftsoil(klon, nsoilmx, nbsrf) |
205 |
REAL ycoefh(klon, llm) ! coef d'echange pour phytrac |
REAL ycoefh(klon, llm) ! coef d'echange pour phytrac |
206 |
REAL yu1(klon) ! vents dans la premiere couche U |
REAL yu1(klon) ! vents dans la premiere couche U |
207 |
REAL yv1(klon) ! vents dans la premiere couche V |
REAL yv1(klon) ! vents dans la premiere couche V |
208 |
REAL ffonte(klon, nbsrf) !Flux thermique utilise pour fondre la neige |
REAL ffonte(klon, nbsrf) ! flux thermique utilise pour fondre la neige |
209 |
REAL fqcalving(klon, nbsrf) !Flux d'eau "perdue" par la surface |
|
210 |
! !et necessaire pour limiter la |
REAL fqcalving(klon, nbsrf) |
211 |
! !hauteur de neige, en kg/m2/s |
! flux d'eau "perdue" par la surface et necessaire pour limiter la |
212 |
|
! hauteur de neige, en kg/m2/s |
213 |
|
|
214 |
REAL zxffonte(klon), zxfqcalving(klon) |
REAL zxffonte(klon), zxfqcalving(klon) |
215 |
|
|
216 |
REAL pfrac_impa(klon, llm)! Produits des coefs lessivage impaction |
REAL pfrac_impa(klon, llm)! Produits des coefs lessivage impaction |
285 |
real, save:: sollwdown(klon) ! downward LW flux at surface |
real, save:: sollwdown(klon) ! downward LW flux at surface |
286 |
REAL, save:: topsw0(klon), toplw0(klon), solsw0(klon), sollw0(klon) |
REAL, save:: topsw0(klon), toplw0(klon), solsw0(klon), sollw0(klon) |
287 |
REAL, save:: albpla(klon) |
REAL, save:: albpla(klon) |
288 |
REAL fsollw(klon, nbsrf) ! bilan flux IR pour chaque sous surface |
REAL fsollw(klon, nbsrf) ! bilan flux IR pour chaque sous-surface |
289 |
REAL fsolsw(klon, nbsrf) ! flux solaire absorb. pour chaque sous surface |
REAL fsolsw(klon, nbsrf) ! flux solaire absorb\'e pour chaque sous-surface |
290 |
|
|
291 |
REAL conv_q(klon, llm) ! convergence de l'humidite (kg/kg/s) |
REAL conv_q(klon, llm) ! convergence de l'humidite (kg/kg/s) |
292 |
REAL conv_t(klon, llm) ! convergence of temperature (K/s) |
REAL conv_t(klon, llm) ! convergence of temperature (K/s) |
293 |
|
|
294 |
REAL cldl(klon), cldm(klon), cldh(klon) !nuages bas, moyen et haut |
REAL cldl(klon), cldm(klon), cldh(klon) ! nuages bas, moyen et haut |
295 |
REAL cldt(klon), cldq(klon) !nuage total, eau liquide integree |
REAL cldt(klon), cldq(klon) ! nuage total, eau liquide integree |
296 |
|
|
297 |
REAL zxtsol(klon), zxqsurf(klon), zxsnow(klon), zxfluxlat(klon) |
REAL zxtsol(klon), zxqsurf(klon), zxsnow(klon), zxfluxlat(klon) |
298 |
|
|
398 |
REAL zustrph(klon), zvstrph(klon) |
REAL zustrph(klon), zvstrph(klon) |
399 |
REAL aam, torsfc |
REAL aam, torsfc |
400 |
|
|
|
INTEGER, SAVE:: nid_ins |
|
|
|
|
401 |
REAL ve_lay(klon, llm) ! transport meri. de l'energie a chaque niveau vert. |
REAL ve_lay(klon, llm) ! transport meri. de l'energie a chaque niveau vert. |
402 |
REAL vq_lay(klon, llm) ! transport meri. de l'eau a chaque niveau vert. |
REAL vq_lay(klon, llm) ! transport meri. de l'eau a chaque niveau vert. |
403 |
REAL ue_lay(klon, llm) ! transport zonal de l'energie a chaque niveau vert. |
REAL ue_lay(klon, llm) ! transport zonal de l'energie a chaque niveau vert. |
430 |
! SO4 aerosol concentration, in \mu g/m3, pre-industrial value |
! SO4 aerosol concentration, in \mu g/m3, pre-industrial value |
431 |
|
|
432 |
REAL cldtaupi(klon, llm) |
REAL cldtaupi(klon, llm) |
433 |
! cloud optical thickness for pre-industrial (pi) aerosols |
! cloud optical thickness for pre-industrial aerosols |
434 |
|
|
435 |
REAL re(klon, llm) ! Cloud droplet effective radius |
REAL re(klon, llm) ! Cloud droplet effective radius |
436 |
REAL fl(klon, llm) ! denominator of re |
REAL fl(klon, llm) ! denominator of re |
469 |
real zmasse(klon, llm) |
real zmasse(klon, llm) |
470 |
! (column-density of mass of air in a cell, in kg m-2) |
! (column-density of mass of air in a cell, in kg m-2) |
471 |
|
|
472 |
integer, save:: ncid_startphy, itau_phy |
integer, save:: ncid_startphy |
473 |
|
|
474 |
namelist /physiq_nml/ ok_journe, ok_mensuel, ok_instan, fact_cldcon, & |
namelist /physiq_nml/ fact_cldcon, facttemps, ok_newmicro, & |
475 |
facttemps, ok_newmicro, iflag_cldcon, ratqsbas, ratqshaut, if_ebil, & |
iflag_cldcon, ratqsbas, ratqshaut, if_ebil, ok_ade, ok_aie, bl95_b0, & |
476 |
ok_ade, ok_aie, bl95_b0, bl95_b1, iflag_thermals, nsplit_thermals |
bl95_b1, iflag_thermals, nsplit_thermals |
477 |
|
|
478 |
!---------------------------------------------------------------- |
!---------------------------------------------------------------- |
479 |
|
|
530 |
! Initialiser les compteurs: |
! Initialiser les compteurs: |
531 |
|
|
532 |
frugs = 0. |
frugs = 0. |
533 |
CALL phyetat0(pctsrf, ftsol, ftsoil, fqsurf, qsol, & |
CALL phyetat0(pctsrf, ftsol, ftsoil, fqsurf, qsol, fsnow, falbe, & |
534 |
fsnow, falbe, fevap, rain_fall, snow_fall, solsw, sollw, dlw, & |
fevap, rain_fall, snow_fall, solsw, sollw, dlw, radsol, frugs, & |
535 |
radsol, frugs, agesno, zmea, zstd, zsig, zgam, zthe, zpic, zval, & |
agesno, zmea, zstd, zsig, zgam, zthe, zpic, zval, t_ancien, & |
536 |
t_ancien, q_ancien, ancien_ok, rnebcon, ratqs, clwcon, & |
q_ancien, ancien_ok, rnebcon, ratqs, clwcon, run_off_lic_0, sig1, & |
537 |
run_off_lic_0, sig1, w01, ncid_startphy, itau_phy) |
w01, ncid_startphy) |
538 |
|
|
539 |
! ATTENTION : il faudra a terme relire q2 dans l'etat initial |
! ATTENTION : il faudra a terme relire q2 dans l'etat initial |
540 |
q2 = 1e-8 |
q2 = 1e-8 |
543 |
print *, 'Number of time steps of "physics" per day: ', lmt_pas |
print *, 'Number of time steps of "physics" per day: ', lmt_pas |
544 |
|
|
545 |
radpas = lmt_pas / nbapp_rad |
radpas = lmt_pas / nbapp_rad |
546 |
|
print *, "radpas = ", radpas |
|
! On remet le calendrier a zero |
|
|
IF (raz_date) itau_phy = 0 |
|
|
|
|
|
CALL printflag(radpas, ok_journe, ok_instan, ok_region) |
|
547 |
|
|
548 |
! Initialisation pour le sch\'ema de convection d'Emanuel : |
! Initialisation pour le sch\'ema de convection d'Emanuel : |
549 |
IF (conv_emanuel) THEN |
IF (conv_emanuel) THEN |
566 |
|
|
567 |
! Initialisation des sorties |
! Initialisation des sorties |
568 |
|
|
569 |
call ini_histins(dtphys, ok_instan, nid_ins, itau_phy) |
call ini_histins(dtphys) |
570 |
CALL ymds2ju(annee_ref, 1, day_ref, 0., date0) |
CALL ymds2ju(annee_ref, 1, day_ref, 0., date0) |
571 |
! Positionner date0 pour initialisation de ORCHIDEE |
! Positionner date0 pour initialisation de ORCHIDEE |
572 |
print *, 'physiq date0: ', date0 |
print *, 'physiq date0: ', date0 |
573 |
CALL phyredem0(lmt_pas, itau_phy) |
CALL phyredem0(lmt_pas) |
574 |
ENDIF test_firstcal |
ENDIF test_firstcal |
575 |
|
|
576 |
! We will modify variables *_seri and we will not touch variables |
! We will modify variables *_seri and we will not touch variables |
626 |
! Check temperatures: |
! Check temperatures: |
627 |
CALL hgardfou(t_seri, ftsol) |
CALL hgardfou(t_seri, ftsol) |
628 |
|
|
629 |
! Incrémenter le compteur de la physique |
call increment_itap |
|
itap = itap + 1 |
|
630 |
julien = MOD(dayvrai, 360) |
julien = MOD(dayvrai, 360) |
631 |
if (julien == 0) julien = 360 |
if (julien == 0) julien = 360 |
632 |
|
|
657 |
frugs = MAX(frugs, 0.000015) |
frugs = MAX(frugs, 0.000015) |
658 |
zxrugs = sum(frugs * pctsrf, dim = 2) |
zxrugs = sum(frugs * pctsrf, dim = 2) |
659 |
|
|
660 |
! Calculs nécessaires au calcul de l'albedo dans l'interface avec |
! Calculs n\'ecessaires au calcul de l'albedo dans l'interface avec |
661 |
! la surface. |
! la surface. |
662 |
|
|
663 |
CALL orbite(REAL(julien), longi, dist) |
CALL orbite(REAL(julien), longi, dist) |
683 |
|
|
684 |
! Couche limite: |
! Couche limite: |
685 |
|
|
686 |
CALL clmain(dtphys, itap, pctsrf, pctsrf_new, t_seri, q_seri, u_seri, & |
CALL clmain(dtphys, pctsrf, pctsrf_new, t_seri, q_seri, u_seri, v_seri, & |
687 |
v_seri, julien, mu0, ftsol, cdmmax, cdhmax, ksta, ksta_ter, & |
julien, mu0, ftsol, cdmmax, cdhmax, ksta, ksta_ter, ok_kzmin, & |
688 |
ok_kzmin, ftsoil, qsol, paprs, play, fsnow, fqsurf, fevap, falbe, & |
ftsoil, qsol, paprs, play, fsnow, fqsurf, fevap, falbe, fluxlat, & |
689 |
fluxlat, rain_fall, snow_fall, fsolsw, fsollw, fder, rlat, frugs, & |
rain_fall, snow_fall, fsolsw, fsollw, fder, rlat, frugs, firstcal, & |
690 |
firstcal, agesno, rugoro, d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_ts, & |
agesno, rugoro, d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_ts, fluxt, & |
691 |
fluxt, fluxq, fluxu, fluxv, cdragh, cdragm, q2, dsens, devap, & |
fluxq, fluxu, fluxv, cdragh, cdragm, q2, dsens, devap, ycoefh, yu1, & |
692 |
ycoefh, yu1, yv1, t2m, q2m, u10m, v10m, pblh, capCL, oliqCL, cteiCL, & |
yv1, t2m, q2m, u10m, v10m, pblh, capCL, oliqCL, cteiCL, pblT, therm, & |
693 |
pblT, therm, trmb1, trmb2, trmb3, plcl, fqcalving, ffonte, & |
trmb1, trmb2, trmb3, plcl, fqcalving, ffonte, run_off_lic_0) |
|
run_off_lic_0) |
|
694 |
|
|
695 |
! Incr\'ementation des flux |
! Incr\'ementation des flux |
696 |
|
|
754 |
s_trmb1(i) = 0. |
s_trmb1(i) = 0. |
755 |
s_trmb2(i) = 0. |
s_trmb2(i) = 0. |
756 |
s_trmb3(i) = 0. |
s_trmb3(i) = 0. |
|
|
|
|
IF (abs(pctsrf(i, is_ter) + pctsrf(i, is_lic) + pctsrf(i, is_oce) & |
|
|
+ pctsrf(i, is_sic) - 1.) > EPSFRA) print *, & |
|
|
'physiq : probl\`eme sous surface au point ', i, & |
|
|
pctsrf(i, 1 : nbsrf) |
|
757 |
ENDDO |
ENDDO |
758 |
|
|
759 |
|
call assert(abs(sum(pctsrf, dim = 2) - 1.) <= EPSFRA, 'physiq: pctsrf') |
760 |
|
|
761 |
DO nsrf = 1, nbsrf |
DO nsrf = 1, nbsrf |
762 |
DO i = 1, klon |
DO i = 1, klon |
763 |
ftsol(i, nsrf) = ftsol(i, nsrf) + d_ts(i, nsrf) |
ftsol(i, nsrf) = ftsol(i, nsrf) + d_ts(i, nsrf) |
1256 |
d_qt, d_ec) |
d_qt, d_ec) |
1257 |
|
|
1258 |
! Calcul des tendances traceurs |
! Calcul des tendances traceurs |
1259 |
call phytrac(itap, lmt_pas, julien, time, firstcal, lafin, dtphys, t, & |
call phytrac(lmt_pas, julien, time, firstcal, lafin, dtphys, t, paprs, & |
1260 |
paprs, play, mfu, mfd, pde_u, pen_d, ycoefh, fm_therm, entr_therm, & |
play, mfu, mfd, pde_u, pen_d, ycoefh, fm_therm, entr_therm, yu1, & |
1261 |
yu1, yv1, ftsol, pctsrf, frac_impa, frac_nucl, da, phi, mp, upwd, & |
yv1, ftsol, pctsrf, frac_impa, frac_nucl, da, phi, mp, upwd, dnwd, & |
1262 |
dnwd, tr_seri, zmasse, ncid_startphy, nid_ins, itau_phy) |
tr_seri, zmasse, ncid_startphy) |
1263 |
|
|
1264 |
IF (offline) call phystokenc(dtphys, t, mfu, mfd, pen_u, pde_u, pen_d, & |
IF (offline) call phystokenc(dtphys, t, mfu, mfd, pen_u, pde_u, pen_d, & |
1265 |
pde_d, fm_therm, entr_therm, ycoefh, yu1, yv1, ftsol, pctsrf, & |
pde_d, fm_therm, entr_therm, ycoefh, yu1, yv1, ftsol, pctsrf, & |
1266 |
frac_impa, frac_nucl, pphis, airephy, dtphys, itap) |
frac_impa, frac_nucl, pphis, airephy, dtphys) |
1267 |
|
|
1268 |
! Calculer le transport de l'eau et de l'energie (diagnostique) |
! Calculer le transport de l'eau et de l'energie (diagnostique) |
1269 |
CALL transp(paprs, t_seri, q_seri, u_seri, v_seri, zphi, ve, vq, ue, uq) |
CALL transp(paprs, t_seri, q_seri, u_seri, v_seri, zphi, ve, vq, ue, uq) |
1337 |
ENDDO |
ENDDO |
1338 |
ENDDO |
ENDDO |
1339 |
|
|
1340 |
call write_histins |
CALL histwrite_phy("phis", pphis) |
1341 |
|
CALL histwrite_phy("aire", airephy) |
1342 |
|
CALL histwrite_phy("psol", paprs(:, 1)) |
1343 |
|
CALL histwrite_phy("precip", rain_fall + snow_fall) |
1344 |
|
CALL histwrite_phy("plul", rain_lsc + snow_lsc) |
1345 |
|
CALL histwrite_phy("pluc", rain_con + snow_con) |
1346 |
|
CALL histwrite_phy("tsol", zxtsol) |
1347 |
|
CALL histwrite_phy("t2m", zt2m) |
1348 |
|
CALL histwrite_phy("q2m", zq2m) |
1349 |
|
CALL histwrite_phy("u10m", zu10m) |
1350 |
|
CALL histwrite_phy("v10m", zv10m) |
1351 |
|
CALL histwrite_phy("snow", snow_fall) |
1352 |
|
CALL histwrite_phy("cdrm", cdragm) |
1353 |
|
CALL histwrite_phy("cdrh", cdragh) |
1354 |
|
CALL histwrite_phy("topl", toplw) |
1355 |
|
CALL histwrite_phy("evap", evap) |
1356 |
|
CALL histwrite_phy("sols", solsw) |
1357 |
|
CALL histwrite_phy("soll", sollw) |
1358 |
|
CALL histwrite_phy("solldown", sollwdown) |
1359 |
|
CALL histwrite_phy("bils", bils) |
1360 |
|
CALL histwrite_phy("sens", - sens) |
1361 |
|
CALL histwrite_phy("fder", fder) |
1362 |
|
CALL histwrite_phy("dtsvdfo", d_ts(:, is_oce)) |
1363 |
|
CALL histwrite_phy("dtsvdft", d_ts(:, is_ter)) |
1364 |
|
CALL histwrite_phy("dtsvdfg", d_ts(:, is_lic)) |
1365 |
|
CALL histwrite_phy("dtsvdfi", d_ts(:, is_sic)) |
1366 |
|
|
1367 |
|
DO nsrf = 1, nbsrf |
1368 |
|
CALL histwrite_phy("pourc_"//clnsurf(nsrf), pctsrf(:, nsrf)*100.) |
1369 |
|
CALL histwrite_phy("fract_"//clnsurf(nsrf), pctsrf(:, nsrf)) |
1370 |
|
CALL histwrite_phy("sens_"//clnsurf(nsrf), fluxt(:, 1, nsrf)) |
1371 |
|
CALL histwrite_phy("lat_"//clnsurf(nsrf), fluxlat(:, nsrf)) |
1372 |
|
CALL histwrite_phy("tsol_"//clnsurf(nsrf), ftsol(:, nsrf)) |
1373 |
|
CALL histwrite_phy("taux_"//clnsurf(nsrf), fluxu(:, 1, nsrf)) |
1374 |
|
CALL histwrite_phy("tauy_"//clnsurf(nsrf), fluxv(:, 1, nsrf)) |
1375 |
|
CALL histwrite_phy("rugs_"//clnsurf(nsrf), frugs(:, nsrf)) |
1376 |
|
CALL histwrite_phy("albe_"//clnsurf(nsrf), falbe(:, nsrf)) |
1377 |
|
END DO |
1378 |
|
|
1379 |
|
CALL histwrite_phy("albs", albsol) |
1380 |
|
CALL histwrite_phy("rugs", zxrugs) |
1381 |
|
CALL histwrite_phy("s_pblh", s_pblh) |
1382 |
|
CALL histwrite_phy("s_pblt", s_pblt) |
1383 |
|
CALL histwrite_phy("s_lcl", s_lcl) |
1384 |
|
CALL histwrite_phy("s_capCL", s_capCL) |
1385 |
|
CALL histwrite_phy("s_oliqCL", s_oliqCL) |
1386 |
|
CALL histwrite_phy("s_cteiCL", s_cteiCL) |
1387 |
|
CALL histwrite_phy("s_therm", s_therm) |
1388 |
|
CALL histwrite_phy("s_trmb1", s_trmb1) |
1389 |
|
CALL histwrite_phy("s_trmb2", s_trmb2) |
1390 |
|
CALL histwrite_phy("s_trmb3", s_trmb3) |
1391 |
|
if (conv_emanuel) CALL histwrite_phy("ptop", ema_pct) |
1392 |
|
CALL histwrite_phy("temp", t_seri) |
1393 |
|
CALL histwrite_phy("vitu", u_seri) |
1394 |
|
CALL histwrite_phy("vitv", v_seri) |
1395 |
|
CALL histwrite_phy("geop", zphi) |
1396 |
|
CALL histwrite_phy("pres", play) |
1397 |
|
CALL histwrite_phy("dtvdf", d_t_vdf) |
1398 |
|
CALL histwrite_phy("dqvdf", d_q_vdf) |
1399 |
|
CALL histwrite_phy("rhum", zx_rh) |
1400 |
|
|
1401 |
|
if (ok_instan) call histsync(nid_ins) |
1402 |
|
|
1403 |
IF (lafin) then |
IF (lafin) then |
1404 |
call NF95_CLOSE(ncid_startphy) |
call NF95_CLOSE(ncid_startphy) |
1411 |
|
|
1412 |
firstcal = .FALSE. |
firstcal = .FALSE. |
1413 |
|
|
|
contains |
|
|
|
|
|
subroutine write_histins |
|
|
|
|
|
! From phylmd/write_histins.h, version 1.2 2005/05/25 13:10:09 |
|
|
|
|
|
! Ecriture des sorties |
|
|
|
|
|
use gr_phy_write_m, only: gr_phy_write |
|
|
USE histsync_m, ONLY: histsync |
|
|
USE histwrite_m, ONLY: histwrite |
|
|
|
|
|
integer itau_w ! pas de temps d'\'ecriture |
|
|
|
|
|
!-------------------------------------------------- |
|
|
|
|
|
IF (ok_instan) THEN |
|
|
itau_w = itau_phy + itap |
|
|
CALL histwrite(nid_ins, "phis", itau_w, gr_phy_write(pphis)) |
|
|
CALL histwrite(nid_ins, "aire", itau_w, gr_phy_write(airephy)) |
|
|
CALL histwrite(nid_ins, "psol", itau_w, gr_phy_write(paprs(:, 1))) |
|
|
CALL histwrite(nid_ins, "precip", itau_w, & |
|
|
gr_phy_write(rain_fall + snow_fall)) |
|
|
CALL histwrite(nid_ins, "plul", itau_w, & |
|
|
gr_phy_write(rain_lsc + snow_lsc)) |
|
|
CALL histwrite(nid_ins, "pluc", itau_w, & |
|
|
gr_phy_write(rain_con + snow_con)) |
|
|
CALL histwrite(nid_ins, "tsol", itau_w, gr_phy_write(zxtsol)) |
|
|
CALL histwrite(nid_ins, "t2m", itau_w, gr_phy_write(zt2m)) |
|
|
CALL histwrite(nid_ins, "q2m", itau_w, gr_phy_write(zq2m)) |
|
|
CALL histwrite(nid_ins, "u10m", itau_w, gr_phy_write(zu10m)) |
|
|
CALL histwrite(nid_ins, "v10m", itau_w, gr_phy_write(zv10m)) |
|
|
CALL histwrite(nid_ins, "snow", itau_w, gr_phy_write(snow_fall)) |
|
|
CALL histwrite(nid_ins, "cdrm", itau_w, gr_phy_write(cdragm)) |
|
|
CALL histwrite(nid_ins, "cdrh", itau_w, gr_phy_write(cdragh)) |
|
|
CALL histwrite(nid_ins, "topl", itau_w, gr_phy_write(toplw)) |
|
|
CALL histwrite(nid_ins, "evap", itau_w, gr_phy_write(evap)) |
|
|
CALL histwrite(nid_ins, "sols", itau_w, gr_phy_write(solsw)) |
|
|
CALL histwrite(nid_ins, "soll", itau_w, gr_phy_write(sollw)) |
|
|
CALL histwrite(nid_ins, "solldown", itau_w, gr_phy_write(sollwdown)) |
|
|
CALL histwrite(nid_ins, "bils", itau_w, gr_phy_write(bils)) |
|
|
CALL histwrite(nid_ins, "sens", itau_w, gr_phy_write(- sens)) |
|
|
CALL histwrite(nid_ins, "fder", itau_w, gr_phy_write(fder)) |
|
|
CALL histwrite(nid_ins, "dtsvdfo", itau_w, & |
|
|
gr_phy_write(d_ts(:, is_oce))) |
|
|
CALL histwrite(nid_ins, "dtsvdft", itau_w, & |
|
|
gr_phy_write(d_ts(:, is_ter))) |
|
|
CALL histwrite(nid_ins, "dtsvdfg", itau_w, & |
|
|
gr_phy_write(d_ts(:, is_lic))) |
|
|
CALL histwrite(nid_ins, "dtsvdfi", itau_w, & |
|
|
gr_phy_write(d_ts(:, is_sic))) |
|
|
|
|
|
DO nsrf = 1, nbsrf |
|
|
CALL histwrite(nid_ins, "pourc_"//clnsurf(nsrf), itau_w, & |
|
|
gr_phy_write(pctsrf(:, nsrf)*100.)) |
|
|
CALL histwrite(nid_ins, "fract_"//clnsurf(nsrf), itau_w, & |
|
|
gr_phy_write(pctsrf(:, nsrf))) |
|
|
CALL histwrite(nid_ins, "sens_"//clnsurf(nsrf), itau_w, & |
|
|
gr_phy_write(fluxt(:, 1, nsrf))) |
|
|
CALL histwrite(nid_ins, "lat_"//clnsurf(nsrf), itau_w, & |
|
|
gr_phy_write(fluxlat(:, nsrf))) |
|
|
CALL histwrite(nid_ins, "tsol_"//clnsurf(nsrf), itau_w, & |
|
|
gr_phy_write(ftsol(:, nsrf))) |
|
|
CALL histwrite(nid_ins, "taux_"//clnsurf(nsrf), itau_w, & |
|
|
gr_phy_write(fluxu(:, 1, nsrf))) |
|
|
CALL histwrite(nid_ins, "tauy_"//clnsurf(nsrf), itau_w, & |
|
|
gr_phy_write(fluxv(:, 1, nsrf))) |
|
|
CALL histwrite(nid_ins, "rugs_"//clnsurf(nsrf), itau_w, & |
|
|
gr_phy_write(frugs(:, nsrf))) |
|
|
CALL histwrite(nid_ins, "albe_"//clnsurf(nsrf), itau_w, & |
|
|
gr_phy_write(falbe(:, nsrf))) |
|
|
END DO |
|
|
|
|
|
CALL histwrite(nid_ins, "albs", itau_w, gr_phy_write(albsol)) |
|
|
CALL histwrite(nid_ins, "rugs", itau_w, gr_phy_write(zxrugs)) |
|
|
CALL histwrite(nid_ins, "s_pblh", itau_w, gr_phy_write(s_pblh)) |
|
|
CALL histwrite(nid_ins, "s_pblt", itau_w, gr_phy_write(s_pblt)) |
|
|
CALL histwrite(nid_ins, "s_lcl", itau_w, gr_phy_write(s_lcl)) |
|
|
CALL histwrite(nid_ins, "s_capCL", itau_w, gr_phy_write(s_capCL)) |
|
|
CALL histwrite(nid_ins, "s_oliqCL", itau_w, gr_phy_write(s_oliqCL)) |
|
|
CALL histwrite(nid_ins, "s_cteiCL", itau_w, gr_phy_write(s_cteiCL)) |
|
|
CALL histwrite(nid_ins, "s_therm", itau_w, gr_phy_write(s_therm)) |
|
|
CALL histwrite(nid_ins, "s_trmb1", itau_w, gr_phy_write(s_trmb1)) |
|
|
CALL histwrite(nid_ins, "s_trmb2", itau_w, gr_phy_write(s_trmb2)) |
|
|
CALL histwrite(nid_ins, "s_trmb3", itau_w, gr_phy_write(s_trmb3)) |
|
|
if (conv_emanuel) CALL histwrite(nid_ins, "ptop", itau_w, & |
|
|
gr_phy_write(ema_pct)) |
|
|
CALL histwrite(nid_ins, "temp", itau_w, gr_phy_write(t_seri)) |
|
|
CALL histwrite(nid_ins, "vitu", itau_w, gr_phy_write(u_seri)) |
|
|
CALL histwrite(nid_ins, "vitv", itau_w, gr_phy_write(v_seri)) |
|
|
CALL histwrite(nid_ins, "geop", itau_w, gr_phy_write(zphi)) |
|
|
CALL histwrite(nid_ins, "pres", itau_w, gr_phy_write(play)) |
|
|
CALL histwrite(nid_ins, "dtvdf", itau_w, gr_phy_write(d_t_vdf)) |
|
|
CALL histwrite(nid_ins, "dqvdf", itau_w, gr_phy_write(d_q_vdf)) |
|
|
CALL histwrite(nid_ins, "rhum", itau_w, gr_phy_write(zx_rh)) |
|
|
call histsync(nid_ins) |
|
|
ENDIF |
|
|
|
|
|
end subroutine write_histins |
|
|
|
|
1414 |
END SUBROUTINE physiq |
END SUBROUTINE physiq |
1415 |
|
|
1416 |
end module physiq_m |
end module physiq_m |