source: LMDZ6/trunk/libf/phylmd/paramlmdz_phy_mod.F90 @ 6048

Last change on this file since 6048 was 6048, checked in by fhourdin, 3 weeks ago

Renommage des nom de fichiers incluant des modules

File size: 7.5 KB
Line 
1MODULE paramlmdz_phy_mod
2
3! Olivier 13/07/2016
4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5
6CONTAINS
7
8  SUBROUTINE ini_paramLMDZ_phy(dtime,nid_ctesGCM)
9
10    USE clesphys_mod_h
11    USE iophy
12    USE dimphy
13    USE ioipsl, only: histbeg, histvert, histdef, histend, ymds2ju
14    USE mod_phys_lmdz_mpi_data, ONLY: is_mpi_root
15    USE geometry_mod, ONLY: longitude_deg, latitude_deg
16    USE mod_grid_phy_lmdz, only: nbp_lon, nbp_lat, klon_glo
17    USE time_phylmdz_mod, ONLY: annee_ref, day_ref, itau_phy, pdtphys
18    USE mod_phys_lmdz_transfert_para, ONLY: gather, bcast
19
20    USE yomcst_mod_h
21IMPLICIT NONE
22
23
24
25    REAL, INTENT(OUT)    :: dtime
26    INTEGER, INTENT(OUT) :: nid_ctesGCM
27
28    REAL,DIMENSION(klon_glo)        :: rlat_glo
29    REAL,DIMENSION(klon_glo)        :: rlon_glo
30    INTEGER i, idayref, ISW, itau_w
31    REAL zstophy, zout
32    REAL zx_lon(nbp_lon,nbp_lat)
33    REAL zx_lat(nbp_lon,nbp_lat)
34
35    CHARACTER*1 ch1
36    INTEGER nhori
37    INTEGER, PARAMETER :: np=1
38
39    REAL zjulian
40    SAVE zjulian
41!$OMP THREADPRIVATE(zjulian)
42
43!IM    Implemente en modes sequentiel et parallele
44
45       CALL gather(latitude_deg,rlat_glo)
46       CALL bcast(rlat_glo)
47       CALL gather(longitude_deg,rlon_glo)
48       CALL bcast(rlon_glo)
49
50!$OMP MASTER
51      IF (is_mpi_root) THEN
52!
53!       zstophy = pdtphys
54!       zout = -1
55!--OB modified for daily output
56       zstophy = 86400.
57       zout = 86400.
58!
59       idayref = day_ref
60       CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)
61!
62       CALL gr_fi_ecrit(1,klon,nbp_lon,nbp_lat,rlon_glo,zx_lon)
63       IF (nbp_lon.GT.1) THEN
64       DO i = 1, nbp_lon
65         zx_lon(i,1) = rlon_glo(i+1)
66         zx_lon(i,nbp_lat) = rlon_glo(i+1)
67       ENDDO
68       ENDIF
69!
70       CALL gr_fi_ecrit(1,klon,nbp_lon,nbp_lat,rlat_glo,zx_lat)
71!
72
73!--PC Provide the record time step to IOIPSL (silences INTENT(OUT) warning)
74!       dtime = zstophy
75       CALL histbeg("paramLMDZ_phy.nc",  &
76                       np,zx_lon(np:np,1), np,zx_lat(1,np:np), &
77                       1,1,1,1, &
78                       itau_phy, zjulian, dtime, &
79                       nhori, nid_ctesGCM)
80!
81       CALL histdef(nid_ctesGCM, "R_ecc",  &
82                      "Excentricite","-", &
83                      1,1,nhori, 1,1,1, -99, 32, &
84                      "ave(X)", zstophy,zout)
85!
86       CALL histdef(nid_ctesGCM, "R_peri",  &
87                      "Equinoxe","-", &
88                      1,1,nhori, 1,1,1, -99, 32, &
89                      "ave(X)", zstophy,zout)
90!
91       CALL histdef(nid_ctesGCM, "R_incl",  &
92                      "Inclinaison","deg", &
93                      1,1,nhori, 1,1,1, -99, 32, &
94                      "ave(X)", zstophy,zout)
95!
96       CALL histdef(nid_ctesGCM, "solaire",  &
97                      "Constante solaire","W/m2", &
98                      1,1,nhori, 1,1,1, -99, 32, &
99                      "ave(X)", zstophy,zout)
100!
101#ifdef CPP_RRTM
102       IF (iflag_rrtm.EQ.1) THEN
103         DO ISW=1, NSW
104           WRITE(ch1,'(i1)') ISW
105           CALL histdef(nid_ctesGCM, "rsun"//ch1,  &
106                      "Fraction constante solaire bande "//ch1,"W/m2", &
107                      1,1,nhori, 1,1,1, -99, 32, &
108                      "ave(X)", zstophy,zout)
109         ENDDO
110       ENDIF
111#endif
112!
113       CALL histdef(nid_ctesGCM, "co2_ppm",  &
114                      "Concentration du CO2", "ppm", &
115                      1,1,nhori, 1,1,1, -99, 32,  &
116                      "ave(X)", zstophy,zout)
117!
118       CALL histdef(nid_ctesGCM, "CH4_ppb",  &
119                      "Concentration du CH4", "ppb", &
120                      1,1,nhori, 1,1,1, -99, 32,  &
121                      "ave(X)", zstophy,zout)
122!
123       CALL histdef(nid_ctesGCM, "N2O_ppb", &
124                      "Concentration du N2O", "ppb", &
125                      1,1,nhori, 1,1,1, -99, 32, &
126                      "ave(X)", zstophy,zout)
127!
128       CALL histdef(nid_ctesGCM, "CH4_eff_ppb",  &
129               "Concentration effective du CH4", "ppb", &
130               1,1,nhori, 1,1,1, -99, 32,  &
131               "ave(X)", zstophy, zout)
132!
133       CALL histdef(nid_ctesGCM, "N2O_eff_ppb",  &
134               "Concentration effective du N2O", "ppb", &
135               1,1,nhori, 1,1,1, -99, 32,  &
136               "ave(X)", zstophy, zout)
137!
138       CALL histdef(nid_ctesGCM, "CFC11_ppt", &
139                      "Concentration du CFC11", "ppt", &
140                      1,1,nhori, 1,1,1, -99, 32, &
141                      "ave(X)", zstophy,zout)
142!
143       CALL histdef(nid_ctesGCM, "CFC12_ppt", &
144                      "Concentration du CFC12", "ppt", &
145                      1,1,nhori, 1,1,1, -99, 32, &
146                      "ave(X)", zstophy,zout)
147!
148       CALL histend(nid_ctesGCM)
149       
150       ENDIF !(is_mpi_root)
151!$OMP END MASTER
152
153  END SUBROUTINE ini_paramLMDZ_phy
154
155!=================================================================
156
157  SUBROUTINE write_paramLMDZ_phy(itap,nid_ctesGCM,ok_sync)
158
159    USE mod_phys_lmdz_mpi_data, ONLY: is_mpi_root
160    USE time_phylmdz_mod, ONLY: day_step_phy, annee_ref, itau_phy, start_time
161    USE ch4n2o_correction_mod, ONLY: ok_CH4_eff_ppb, ok_N2O_eff_ppb
162    USE mod_grid_phy_lmdz, only: nbp_lon, nbp_lat, klon_glo
163
164    USE iophy
165    USE ioipsl, ONLY: histwrite, histsync
166
167#ifdef CPP_RRTM
168    USE YOESW, ONLY : RSUN
169#endif
170
171    USE clesphys_mod_h
172    USE yomcst_mod_h
173IMPLICIT NONE
174
175
176
177    INTEGER, INTENT(IN) :: itap, nid_ctesGCM
178    LOGICAL, INTENT(IN) :: ok_sync
179
180    INTEGER itau_w, ISW
181    INTEGER ndex2d(nbp_lon*nbp_lat)
182    REAL :: zx_tmp_0d(1,1)
183    INTEGER, PARAMETER :: np=1
184
185    CHARACTER*1 ch1
186
187!$OMP MASTER
188      IF (is_mpi_root) THEN     
189!
190      ndex2d = 0
191      itau_w = itau_phy + itap + int(start_time * day_step_phy)
192!
193! Variables globales
194!
195      zx_tmp_0d=R_ecc
196      CALL histwrite(nid_ctesGCM,"R_ecc",itau_w, &
197                     zx_tmp_0d,np,ndex2d)
198!
199      zx_tmp_0d=R_peri
200      CALL histwrite(nid_ctesGCM,"R_peri",itau_w, &
201                     zx_tmp_0d,np,ndex2d)
202!
203      zx_tmp_0d=R_incl
204      CALL histwrite(nid_ctesGCM,"R_incl",itau_w, &
205                     zx_tmp_0d,np,ndex2d)
206!
207      zx_tmp_0d=solaire
208      CALL histwrite(nid_ctesGCM,"solaire",itau_w, &
209                     zx_tmp_0d,np,ndex2d)
210!
211#ifdef CPP_RRTM
212      IF (iflag_rrtm.EQ.1) THEN
213        DO ISW=1, NSW
214          WRITE(ch1,'(i1)') ISW
215          zx_tmp_0d=RSUN(ISW)
216          CALL histwrite(nid_ctesGCM,"rsun"//ch1,itau_w, &
217                         zx_tmp_0d,np,ndex2d)
218        ENDDO
219      ENDIF
220#endif
221!
222      zx_tmp_0d=co2_ppm
223      CALL histwrite(nid_ctesGCM,"co2_ppm",itau_w, &
224                     zx_tmp_0d,np,ndex2d)
225!
226      zx_tmp_0d=CH4_ppb
227      CALL histwrite(nid_ctesGCM,"CH4_ppb",itau_w, &
228                     zx_tmp_0d,np,ndex2d)
229!
230      zx_tmp_0d=N2O_ppb
231      CALL histwrite(nid_ctesGCM,"N2O_ppb",itau_w, &
232                     zx_tmp_0d,np,ndex2d)
233!
234      IF (ok_CH4_eff_ppb) THEN
235         zx_tmp_0d = CH4_eff_ppb
236         CALL histwrite(nid_ctesGCM,"CH4_eff_ppb",itau_w, zx_tmp_0d, np, ndex2d)
237      END IF
238!
239      IF (ok_N2O_eff_ppb) THEN
240         zx_tmp_0d = N2O_eff_ppb
241         CALL histwrite(nid_ctesGCM,"N2O_eff_ppb",itau_w, zx_tmp_0d, np, ndex2d)
242      END IF
243
244!
245      zx_tmp_0d=CFC11_ppt
246      CALL histwrite(nid_ctesGCM,"CFC11_ppt",itau_w, &
247                     zx_tmp_0d,np,ndex2d)
248!
249      zx_tmp_0d=CFC12_ppt
250      CALL histwrite(nid_ctesGCM,"CFC12_ppt",itau_w, &
251                     zx_tmp_0d,np,ndex2d)
252!
253!=================================================================
254!
255      IF (ok_sync) THEN
256        call histsync(nid_ctesGCM)
257      ENDIF
258
259      ENDIF !(is_mpi_root) then     
260!$OMP END MASTER
261
262  END SUBROUTINE write_paramLMDZ_phy
263
264END MODULE paramlmdz_phy_mod
Note: See TracBrowser for help on using the repository browser.