LMDZ
dynredem_loc.F90
Go to the documentation of this file.
1 SUBROUTINE dynredem0_loc(fichnom,iday_end,phis)
2 !
3 !-------------------------------------------------------------------------------
4 ! Write the NetCDF restart file (initialization).
5 !-------------------------------------------------------------------------------
6 #ifdef CPP_IOIPSL
7  USE ioipsl
8 #endif
9  USE parallel_lmdz
10  USE mod_hallo
11  USE infotrac
12  USE netcdf, ONLY: nf90_create, nf90_def_dim, nf90_inq_varid, nf90_global, &
13  nf90_close, nf90_put_att, nf90_unlimited, nf90_clobber
14  USE dynredem_mod, ONLY: cre_var, put_var, err, modname, fil
15  IMPLICIT NONE
16  include "dimensions.h"
17  include "paramet.h"
18  include "comconst.h"
19  include "comvert.h"
20  include "comgeom.h"
21  include "temps.h"
22  include "ener.h"
23  include "logic.h"
24  include "description.h"
25  include "serre.h"
26  include "iniprint.h"
27 !===============================================================================
28 ! Arguments:
29  CHARACTER(LEN=*), INTENT(IN) :: fichnom !--- FILE NAME
30  INTEGER, INTENT(IN) :: iday_end !---
31  REAL, INTENT(IN) :: phis(ijb_u:ije_u)!--- GROUND GEOPOTENTIAL
32 !===============================================================================
33 ! Local variables:
34  INTEGER :: iq, l
35  INTEGER, PARAMETER :: length=100
36  REAL :: tab_cntrl(length) !--- RUN PARAMETERS TABLE
37  REAL :: phis_glo(ip1jmp1)
38 ! For NetCDF:
39  CHARACTER(LEN=30) :: unites
40  INTEGER :: indexID
41  INTEGER :: rlonuID, rlonvID, rlatuID, rlatvID
42  INTEGER :: sID, sigID, nID, vID, timID
43  INTEGER :: yyears0, jjour0, mmois0
44  REAL :: zan0, zjulian, hours
45 !===============================================================================
46  modname='dynredem0'; fil=fichnom
47  CALL gather_field_u(phis,phis_glo,1)
48  IF(mpi_rank/=0) RETURN
49 
50 #ifdef CPP_IOIPSL
51  CALL ymds2ju(annee_ref, 1, iday_end, 0.0, zjulian)
52  CALL ju2ymds(zjulian, yyears0, mmois0, jjour0, hours)
53 #else
54 ! set yyears0, mmois0, jjour0 to 0,1,1 (hours is not used)
55  yyears0=0
56  mmois0=1
57  jjour0=1
58 #endif
59 
60  tab_cntrl(:) = 0.
61  tab_cntrl(1) = REAL(iim)
62  tab_cntrl(2) = REAL(jjm)
63  tab_cntrl(3) = REAL(llm)
64  tab_cntrl(4) = REAL(day_ref)
65  tab_cntrl(5) = REAL(annee_ref)
66  tab_cntrl(6) = rad
67  tab_cntrl(7) = omeg
68  tab_cntrl(8) = g
69  tab_cntrl(9) = cpp
70  tab_cntrl(10) = kappa
71  tab_cntrl(11) = daysec
72  tab_cntrl(12) = dtvr
73  tab_cntrl(13) = etot0
74  tab_cntrl(14) = ptot0
75  tab_cntrl(15) = ztot0
76  tab_cntrl(16) = stot0
77  tab_cntrl(17) = ang0
78  tab_cntrl(18) = pa
79  tab_cntrl(19) = preff
80 
81 ! ..... parameters for zoom ......
82  tab_cntrl(20) = clon
83  tab_cntrl(21) = clat
84  tab_cntrl(22) = grossismx
85  tab_cntrl(23) = grossismy
86 !
87  IF ( fxyhypb ) THEN
88  tab_cntrl(24) = 1.
89  tab_cntrl(25) = dzoomx
90  tab_cntrl(26) = dzoomy
91  tab_cntrl(27) = 0.
92  tab_cntrl(28) = taux
93  tab_cntrl(29) = tauy
94  ELSE
95  tab_cntrl(24) = 0.
96  tab_cntrl(25) = dzoomx
97  tab_cntrl(26) = dzoomy
98  tab_cntrl(27) = 0.
99  tab_cntrl(28) = 0.
100  tab_cntrl(29) = 0.
101  IF( ysinus ) tab_cntrl(27) = 1.
102  END IF
103  tab_cntrl(30) = REAL(iday_end)
104  tab_cntrl(31) = REAL(itau_dyn + itaufin)
105 ! start_time: start_time of simulation (not necessarily 0.)
106  tab_cntrl(32) = start_time
107 
108 !--- File creation
109  CALL err(nf90_create(fichnom,nf90_clobber,nid))
110 
111 !--- Some global attributes
112  CALL err(nf90_put_att(nid,nf90_global,"title","Fichier demarrage dynamique"))
113 
114 !--- Dimensions
115  CALL err(nf90_def_dim(nid,"index", length, indexid))
116  CALL err(nf90_def_dim(nid,"rlonu", iip1, rlonuid))
117  CALL err(nf90_def_dim(nid,"rlatu", jjp1, rlatuid))
118  CALL err(nf90_def_dim(nid,"rlonv", iip1, rlonvid))
119  CALL err(nf90_def_dim(nid,"rlatv", jjm, rlatvid))
120  CALL err(nf90_def_dim(nid,"sigs", llm, sid))
121  CALL err(nf90_def_dim(nid,"sig", llmp1, sigid))
122  CALL err(nf90_def_dim(nid,"temps", nf90_unlimited, timid))
123 
124 !--- Define and save invariant fields
125  CALL put_var(nid,"controle","Parametres de controle" ,[indexid],tab_cntrl)
126  CALL put_var(nid,"rlonu" ,"Longitudes des points U",[rlonuid],rlonu)
127  CALL put_var(nid,"rlatu" ,"Latitudes des points U" ,[rlatuid],rlatu)
128  CALL put_var(nid,"rlonv" ,"Longitudes des points V",[rlonvid],rlonv)
129  CALL put_var(nid,"rlatv" ,"Latitudes des points V" ,[rlatvid],rlatv)
130  CALL put_var(nid,"nivsigs" ,"Numero naturel des couches s" ,[sid] ,nivsigs)
131  CALL put_var(nid,"nivsig" ,"Numero naturel des couches sigma",[sigid],nivsig)
132  CALL put_var(nid,"ap" ,"Coefficient A pour hybride" ,[sigid],ap)
133  CALL put_var(nid,"bp" ,"Coefficient B pour hybride" ,[sigid],bp)
134  CALL put_var(nid,"presnivs","" ,[sid] ,presnivs)
135 ! covariant <-> contravariant <-> natural conversion coefficients
136  CALL put_var(nid,"cu","Coefficient de passage pour U",[rlonuid,rlatuid],cu)
137  CALL put_var(nid,"cv","Coefficient de passage pour V",[rlonvid,rlatvid],cv)
138  CALL put_var(nid,"aire","Aires de chaque maille" ,[rlonvid,rlatuid],aire)
139  CALL put_var(nid,"phisinit","Geopotentiel au sol" ,[rlonvid,rlatuid],phis_glo)
140 
141 !--- Define fields saved later
142  WRITE(unites,"('days since ',i4,'-',i2.2,'-',i2.2,' 00:00:00')"),&
143  yyears0,mmois0,jjour0
144  CALL cre_var(nid,"temps","Temps de simulation",[timid],unites)
145  CALL cre_var(nid,"ucov" ,"Vitesse U" ,[rlonuid,rlatuid,sid,timid])
146  CALL cre_var(nid,"vcov" ,"Vitesse V" ,[rlonvid,rlatvid,sid,timid])
147  CALL cre_var(nid,"teta" ,"Temperature",[rlonvid,rlatuid,sid,timid])
148  DO iq=1,nqtot
149  CALL cre_var(nid,tname(iq),ttext(iq),[rlonvid,rlatuid,sid,timid])
150  END DO
151  CALL cre_var(nid,"masse","Masse d air" ,[rlonvid,rlatuid,sid,timid])
152  CALL cre_var(nid,"ps" ,"Pression au sol",[rlonvid,rlatuid ,timid])
153  CALL err(nf90_close(nid))
154 
155  WRITE(lunout,*)trim(modname)//': iim,jjm,llm,iday_end',iim,jjm,llm,iday_end
156  WRITE(lunout,*)trim(modname)//': rad,omeg,g,cpp,kappa',rad,omeg,g,cpp,kappa
157 
158 END SUBROUTINE dynredem0_loc
159 !
160 !-------------------------------------------------------------------------------
161 
162 
163 !-------------------------------------------------------------------------------
164 !
165 SUBROUTINE dynredem1_loc(fichnom,time,vcov,ucov,teta,q,masse,ps)
166 !
167 !-------------------------------------------------------------------------------
168 ! Purpose: Write the NetCDF restart file (append).
169 !-------------------------------------------------------------------------------
170  USE parallel_lmdz
171  USE mod_hallo
172  USE infotrac
173  USE control_mod
174  USE netcdf, ONLY: nf90_open, nf90_nowrite, nf90_get_var, nf90_inq_varid, &
175  nf90_close, nf90_write, nf90_put_var, nf90_noerr
177  err, modname, fil, msg
178  IMPLICIT NONE
179  include "dimensions.h"
180  include "paramet.h"
181  include "description.h"
182  include "comvert.h"
183  include "comgeom.h"
184  include "temps.h"
185  include "iniprint.h"
186 !===============================================================================
187 ! Arguments:
188  CHARACTER(LEN=*), INTENT(IN) :: fichnom !-- FILE NAME
189  REAL, INTENT(IN) :: time !-- TIME
190  REAL, INTENT(IN) :: vcov(ijb_v:ije_v,llm) !-- V COVARIANT WIND
191  REAL, INTENT(IN) :: ucov(ijb_u:ije_u,llm) !-- U COVARIANT WIND
192  REAL, INTENT(IN) :: teta(ijb_u:ije_u,llm) !-- POTENTIAL TEMPERATURE
193  REAL, INTENT(INOUT) :: q(ijb_u:ije_u,llm,nqtot) !-- TRACERS
194  REAL, INTENT(IN) :: masse(ijb_u:ije_u,llm) !-- MASS PER CELL
195  REAL, INTENT(IN) :: ps(ijb_u:ije_u) !-- GROUND PRESSURE
196 !===============================================================================
197 ! Local variables:
198  INTEGER :: l, iq, nid, vID, ierr, nid_trac, vID_trac
199  INTEGER, SAVE :: nb=0
200  INTEGER, PARAMETER :: length=100
201  REAL :: tab_cntrl(length) ! tableau des parametres du run
202  CHARACTER(LEN=256) :: var, dum
203  LOGICAL :: lread_inca
204 !===============================================================================
205 
206 !$OMP MASTER
207  IF(mpi_rank==0) THEN !++++++++++++++++++++++++++++++++++++++++++++++++++++++++
208  modname='dynredem1_loc'; fil=fichnom
209  fil=fichnom
210  CALL err(nf90_open(fil,nf90_write,nid),"open",fil)
211 
212 !--- Write/extend time coordinate
213  nb = nb + 1
214  var="temps"
215  CALL err(nf90_inq_varid(nid,var,vid),"inq",var)
216  CALL err(nf90_put_var(nid,vid,[time]),"put",var)
217  WRITE(lunout,*)trim(modname)//": Saving for ", nb, time
218 
219 !--- Rewrite control table (itaufin undefined in dynredem0)
220  var="controle"
221  CALL err(nf90_inq_varid(nid,var,vid),"inq",var)
222  CALL err(nf90_get_var(nid,vid,tab_cntrl),"get",var)
223  tab_cntrl(31)=dble(itau_dyn + itaufin)
224  CALL err(nf90_inq_varid(nid,var,vid),"inq",var)
225  CALL err(nf90_put_var(nid,vid,tab_cntrl),"put",var)
226  END IF !++++++++++++++++++++++++++++++++++++++++++++++++++++++++
227 !$OMP END MASTER
228 
229 !--- Save fields
230  CALL dynredem_write_u(nid,"ucov" ,ucov ,llm)
231  CALL dynredem_write_v(nid,"vcov" ,vcov ,llm)
232  CALL dynredem_write_u(nid,"teta" ,teta ,llm)
233  CALL dynredem_write_u(nid,"masse",masse,llm)
234  CALL dynredem_write_u(nid,"ps" ,ps ,1)
235 
236 !--- Tracers in file "start_trac.nc" (added by Anne)
237 !$OMP MASTER
238  lread_inca=.false.; fil="start_trac.nc"
239  IF(type_trac=='inca') INQUIRE(file=fil,exist=lread_inca)
240  IF(lread_inca) CALL err(nf90_open(fil,nf90_nowrite,nid_trac),"open")
241 !$OMP END MASTER
242 !$OMP BARRIER
243 
244 !--- Save tracers
245  DO iq=1,nqtot; var=tname(iq); ierr=-1
246  IF(lread_inca) THEN !--- Possibly read from "start_trac.nc"
247 !$OMP MASTER
248  fil="start_trac.nc"
249  ierr=nf90_inq_varid(nid_trac,var,vid_trac)
250  dum='inq'; IF(ierr==nf90_noerr) dum='fnd'
251  WRITE(lunout,*)msg(dum,var)
252 !$OMP END MASTER
253 !$OMP BARRIER
254  IF(ierr==nf90_noerr) CALL dynredem_read_u(nid_trac,var,q(:,:,iq),llm)
255  END IF
256  fil=fichnom
257  CALL dynredem_write_u(nid,var,q(:,:,iq),llm)
258  END DO
259 
260 !$OMP MASTER
261  IF(mpi_rank==0) THEN !++++++++++++++++++++++++++++++++++++++++++++++++++++++++
262  CALL err(nf90_close(nid),"close")
263  fil="start_trac.nc"
264  IF(lread_inca) CALL err(nf90_close(nid_trac),"close")
265  END IF !++++++++++++++++++++++++++++++++++++++++++++++++++++++++
266 !$OMP END MASTER
267 
268 END SUBROUTINE dynredem1_loc
269 
!$Header!c!c!c include serre h!c REAL dzoomy
Definition: serre.h:8
!$Id && itau_dyn
Definition: temps.h:15
character(len=23), dimension(:), allocatable, save ttext
Definition: infotrac.F90:19
!$Header llmm1 INTEGER ip1jmp1
Definition: paramet.h:14
!$Header!c!c!c include serre h!c REAL && grossismx
Definition: serre.h:8
!$Id zjulian!correction pour l heure initiale!jyg!jyg CALL ymds2ju(annee_ref, 1, day_ref, hour, zjulian)!jyg CALL histbeg_phy("histrac"
!$Id mode_top_bound COMMON comconstr g
Definition: comconst.h:7
!$Id preff
Definition: comvert.h:8
!$Header llmp1
Definition: paramet.h:14
!$Id bp(llm+1)
!$Id mode_top_bound COMMON comconstr kappa
Definition: comconst.h:7
subroutine, public dynredem_write_u(ncid, id, var, ll)
integer, save mpi_rank
character(len=256), save, public fil
Definition: dynredem_mod.F90:9
!$Header!c!c!c include serre h!c REAL clon
Definition: serre.h:8
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm day day1 day day1 *dt_dice endif!time annee_ref dt_dice swup_dice vg_dice omega_dice tg_prof vg_profd w_profd omega_profd!do llm!print llm l llm
!$Header!CDK comgeom COMMON comgeom aire
Definition: comgeom.h:25
!$Header!CDK comgeom COMMON comgeom rlatu
Definition: comgeom.h:25
!$Id presnivs(llm)
integer, save nqtot
Definition: infotrac.F90:6
integer, save ijb_v
subroutine err(ierr, typ, nam)
Definition: dynetat0.f90:189
!$Id nivsigs(llm)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
Definition: calcul_STDlev.h:26
!$Id etot0
Definition: ener.h:11
!$Id mode_top_bound COMMON comconstr rad
Definition: comconst.h:7
character(len=256), save, public modname
Definition: dynredem_mod.F90:9
!$Id day_ref
Definition: temps.h:15
subroutine dynredem1_loc(fichnom, time, vcov, ucov, teta, q, masse, ps)
!$Id fxyhypb
Definition: logic.h:10
!$Header jjp1
Definition: paramet.h:14
!$Id mode_top_bound COMMON comconstr cpp
Definition: comconst.h:7
character(len=256) function, public msg(typ, nam)
!$Id mode_top_bound COMMON comconstr daysec
Definition: comconst.h:7
!$Header!CDK comgeom COMMON comgeom rlonu
Definition: comgeom.h:25
!$Id ztot0
Definition: ener.h:11
!$Header!CDK comgeom COMMON comgeom rlatv
Definition: comgeom.h:25
character(len=20), dimension(:), allocatable, save tname
Definition: infotrac.F90:18
subroutine, public dynredem_write_v(ncid, id, var, ll)
subroutine gather_field_u(field_loc, field_glo, ll)
Definition: mod_hallo.F90:1505
!$Id && pa
Definition: comvert.h:8
character(len=4), save type_trac
Definition: infotrac.F90:40
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real coeffs real dtmax real cu real betad real damp real delta COMMON cvparam nlm tlcrit sigd coeffs cu
Definition: cvparam.h:12
!$Header!c!c!c include serre h!c REAL dzoomx
Definition: serre.h:8
integer, save ije_v
!$Header!c!c!c include serre h!c REAL grossismy
Definition: serre.h:8
!$Id mode_top_bound COMMON comconstr dtvr
Definition: comconst.h:7
!$Header!c!c!c include serre h!c REAL taux
Definition: serre.h:8
c c zjulian c cym CALL iim cym klev iim
Definition: ini_bilKP_ave.h:24
subroutine, public dynredem_read_u(ncid, id, var, ll)
!$Id stot0
Definition: ener.h:11
!$Header!c!c!c include serre h!c REAL clat
Definition: serre.h:8
!$Id itaufin
Definition: temps.h:15
subroutine, public put_var(ncid, var, title, did, v, units)
!$Header!CDK comgeom COMMON comgeom cv
Definition: comgeom.h:25
integer, save ije_u
subroutine dynredem0_loc(fichnom, iday_end, phis)
Definition: dynredem_loc.F90:2
!$Id start_time
Definition: temps.h:15
!$Id ptot0
Definition: ener.h:11
subroutine, public cre_var(ncid, var, title, did, units)
!$Id nivsig(llm+1)
!$Id annee_ref
Definition: temps.h:15
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout
Definition: iniprint.h:7
integer, save ijb_u
!$Header!CDK comgeom COMMON comgeom rlonv
Definition: comgeom.h:25