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

Last change on this file since 5274 was 5274, checked in by abarral, 9 hours ago

Replace yomcst.h by existing module

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