1 | ! |
---|
2 | ! $Header$ |
---|
3 | ! |
---|
4 | MODULE phys_output_write_mod |
---|
5 | |
---|
6 | ! Author: Abderrahmane IDELKADI (original include file) |
---|
7 | ! Author: Laurent FAIRHEAD (transformation to module/subroutine) |
---|
8 | ! Author: Ulysse GERARD (effective implementation) |
---|
9 | |
---|
10 | USE phys_output_var_mod |
---|
11 | |
---|
12 | CONTAINS |
---|
13 | |
---|
14 | ! ug Routine pour définir (los du premier passageà) ET sortir les variables |
---|
15 | SUBROUTINE phys_output_write(itap, pdtphys, paprs, pphis, & |
---|
16 | & pplay, lmax_th, aerosol_couple, & |
---|
17 | & ok_ade, ok_aie, ivap, new_aod, ok_sync, & |
---|
18 | & ptconv, read_climoz, clevSTD, ptconvth, & |
---|
19 | & d_t, qx, d_qx, zmasse, flag_aerosol_strat) |
---|
20 | |
---|
21 | ! This subroutine does the actual writing of diagnostics that were |
---|
22 | ! defined and initialised in phys_output_mod.F90 |
---|
23 | |
---|
24 | USE dimphy |
---|
25 | USE control_mod |
---|
26 | USE phys_output_ctrlout_mod |
---|
27 | USE phys_state_var_mod |
---|
28 | USE phys_local_var_mod |
---|
29 | USE indice_sol_mod |
---|
30 | USE infotrac |
---|
31 | USE comgeomphy |
---|
32 | USE surface_data, ONLY : type_ocean, ok_veget |
---|
33 | USE aero_mod |
---|
34 | USE ioipsl |
---|
35 | USE write_field_phy |
---|
36 | USE iophy |
---|
37 | |
---|
38 | IMPLICIT NONE |
---|
39 | |
---|
40 | INCLUDE "temps.h" |
---|
41 | INCLUDE "clesphys.h" |
---|
42 | INCLUDE "thermcell.h" |
---|
43 | INCLUDE "compbl.h" |
---|
44 | INCLUDE "YOMCST.h" |
---|
45 | INCLUDE "dimensions.h" |
---|
46 | |
---|
47 | ! Input |
---|
48 | INTEGER :: itap, ivap, read_climoz |
---|
49 | INTEGER, DIMENSION(klon) :: lmax_th |
---|
50 | LOGICAL :: aerosol_couple, ok_sync |
---|
51 | LOGICAL :: ok_ade, ok_aie, new_aod |
---|
52 | LOGICAL, DIMENSION(klon, klev) :: ptconv, ptconvth |
---|
53 | REAL :: pdtphys |
---|
54 | CHARACTER (LEN=4), DIMENSION(nlevSTD) :: clevSTD |
---|
55 | REAL, DIMENSION(klon) :: pphis |
---|
56 | REAL, DIMENSION(klon, klev) :: pplay, d_t |
---|
57 | REAL, DIMENSION(klon, klev+1) :: paprs |
---|
58 | REAL, DIMENSION(klon,klev,nqtot) :: qx, d_qx |
---|
59 | REAL, DIMENSION(klon, llm) :: zmasse |
---|
60 | LOGICAL :: flag_aerosol_strat |
---|
61 | |
---|
62 | ! Local |
---|
63 | INTEGER, PARAMETER :: jjmp1=jjm+1-1/jjm |
---|
64 | INTEGER :: itau_w |
---|
65 | INTEGER :: i, iff, iq, nsrf, k, ll, naero |
---|
66 | REAL, DIMENSION (klon) :: zx_tmp_fi2d |
---|
67 | REAL, DIMENSION (klon,klev) :: zx_tmp_fi3d, zpt_conv |
---|
68 | REAL, DIMENSION (klon,klev+1) :: zx_tmp_fi3d1 |
---|
69 | CHARACTER (LEN=4) :: bb2 |
---|
70 | INTEGER, DIMENSION(iim*jjmp1) :: ndex2d |
---|
71 | INTEGER, DIMENSION(iim*jjmp1*klev) :: ndex3d |
---|
72 | REAL, PARAMETER :: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 |
---|
73 | |
---|
74 | IF(vars_defined) THEN |
---|
75 | ! On calcul le nouveau tau: |
---|
76 | itau_w = itau_phy + itap + start_time * day_step / iphysiq |
---|
77 | ! On le donne à iophy pour que les histwrite y aient accès: |
---|
78 | CALL set_itau_iophy(itau_w) |
---|
79 | ENDIF |
---|
80 | |
---|
81 | ! On procède à l'écriture ou à la définition des nombreuses variables: |
---|
82 | #include "phys_output_write_F90.h" |
---|
83 | |
---|
84 | IF(vars_defined) THEN |
---|
85 | ! On synchronise les fichiers pour IOIPSL |
---|
86 | DO iff=1,nfiles |
---|
87 | IF (ok_sync .AND. clef_files(iff)) THEN |
---|
88 | !$OMP MASTER |
---|
89 | CALL histsync(nid_files(iff)) |
---|
90 | !$OMP END MASTER |
---|
91 | ENDIF |
---|
92 | END DO |
---|
93 | ENDIF |
---|
94 | |
---|
95 | |
---|
96 | vars_defined = .TRUE. |
---|
97 | |
---|
98 | END SUBROUTINE phys_output_write |
---|
99 | |
---|
100 | |
---|
101 | |
---|
102 | END MODULE phys_output_write_mod |
---|
103 | |
---|