LMDZ
dynredem.F90
Go to the documentation of this file.
1 SUBROUTINE dynredem0(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 infotrac
10  USE netcdf, ONLY: nf90_create, nf90_def_dim, nf90_inq_varid, nf90_global, &
11  nf90_close, nf90_put_att, nf90_unlimited, nf90_clobber
13  IMPLICIT NONE
14  include "dimensions.h"
15  include "paramet.h"
16  include "comconst.h"
17  include "comvert.h"
18  include "comgeom2.h"
19  include "temps.h"
20  include "ener.h"
21  include "logic.h"
22  include "description.h"
23  include "serre.h"
24  include "iniprint.h"
25 !===============================================================================
26 ! Arguments:
27  CHARACTER(LEN=*), INTENT(IN) :: fichnom !--- FILE NAME
28  INTEGER, INTENT(IN) :: iday_end !---
29  REAL, INTENT(IN) :: phis(iip1, jjp1) !--- GROUND GEOPOTENTIAL
30 !===============================================================================
31 ! Local variables:
32  INTEGER :: iq, l
33  INTEGER, PARAMETER :: length=100
34  REAL :: tab_cntrl(length) !--- RUN PARAMETERS TABLE
35 ! For NetCDF:
36  CHARACTER(LEN=30) :: unites
37  INTEGER :: indexID
38  INTEGER :: rlonuID, rlonvID, rlatuID, rlatvID
39  INTEGER :: sID, sigID, nID, vID, timID
40  INTEGER :: yyears0, jjour0, mmois0
41  REAL :: zan0, zjulian, hours
42 !===============================================================================
43  modname='dynredem0'; fil=fichnom
44 #ifdef CPP_IOIPSL
45  CALL ymds2ju(annee_ref, 1, iday_end, 0.0, zjulian)
46  CALL ju2ymds(zjulian, yyears0, mmois0, jjour0, hours)
47 #else
48 ! set yyears0, mmois0, jjour0 to 0,1,1 (hours is not used)
49  yyears0=0
50  mmois0=1
51  jjour0=1
52 #endif
53 
54  tab_cntrl(:) = 0.
55  tab_cntrl(1) = REAL(iim)
56  tab_cntrl(2) = REAL(jjm)
57  tab_cntrl(3) = REAL(llm)
58  tab_cntrl(4) = REAL(day_ref)
59  tab_cntrl(5) = REAL(annee_ref)
60  tab_cntrl(6) = rad
61  tab_cntrl(7) = omeg
62  tab_cntrl(8) = g
63  tab_cntrl(9) = cpp
64  tab_cntrl(10) = kappa
65  tab_cntrl(11) = daysec
66  tab_cntrl(12) = dtvr
67  tab_cntrl(13) = etot0
68  tab_cntrl(14) = ptot0
69  tab_cntrl(15) = ztot0
70  tab_cntrl(16) = stot0
71  tab_cntrl(17) = ang0
72  tab_cntrl(18) = pa
73  tab_cntrl(19) = preff
74 
75 ! ..... parameters for zoom ......
76  tab_cntrl(20) = clon
77  tab_cntrl(21) = clat
78  tab_cntrl(22) = grossismx
79  tab_cntrl(23) = grossismy
80 !
81  IF ( fxyhypb ) THEN
82  tab_cntrl(24) = 1.
83  tab_cntrl(25) = dzoomx
84  tab_cntrl(26) = dzoomy
85  tab_cntrl(27) = 0.
86  tab_cntrl(28) = taux
87  tab_cntrl(29) = tauy
88  ELSE
89  tab_cntrl(24) = 0.
90  tab_cntrl(25) = dzoomx
91  tab_cntrl(26) = dzoomy
92  tab_cntrl(27) = 0.
93  tab_cntrl(28) = 0.
94  tab_cntrl(29) = 0.
95  IF( ysinus ) tab_cntrl(27) = 1.
96  END IF
97  tab_cntrl(30) = REAL(iday_end)
98  tab_cntrl(31) = REAL(itau_dyn + itaufin)
99 ! start_time: start_time of simulation (not necessarily 0.)
100  tab_cntrl(32) = start_time
101 
102 !--- File creation
103  CALL err(nf90_create(fichnom,nf90_clobber,nid))
104 
105 !--- Some global attributes
106  CALL err(nf90_put_att(nid,nf90_global,"title","Fichier demarrage dynamique"))
107 
108 !--- Dimensions
109  CALL err(nf90_def_dim(nid,"index", length, indexid))
110  CALL err(nf90_def_dim(nid,"rlonu", iip1, rlonuid))
111  CALL err(nf90_def_dim(nid,"rlatu", jjp1, rlatuid))
112  CALL err(nf90_def_dim(nid,"rlonv", iip1, rlonvid))
113  CALL err(nf90_def_dim(nid,"rlatv", jjm, rlatvid))
114  CALL err(nf90_def_dim(nid,"sigs", llm, sid))
115  CALL err(nf90_def_dim(nid,"sig", llmp1, sigid))
116  CALL err(nf90_def_dim(nid,"temps", nf90_unlimited, timid))
117 
118 !--- Define and save invariant fields
119  CALL put_var1(nid,"controle","Parametres de controle" ,[indexid],tab_cntrl)
120  CALL put_var1(nid,"rlonu" ,"Longitudes des points U",[rlonuid],rlonu)
121  CALL put_var1(nid,"rlatu" ,"Latitudes des points U" ,[rlatuid],rlatu)
122  CALL put_var1(nid,"rlonv" ,"Longitudes des points V",[rlonvid],rlonv)
123  CALL put_var1(nid,"rlatv" ,"Latitudes des points V" ,[rlatvid],rlatv)
124  CALL put_var1(nid,"nivsigs" ,"Numero naturel des couches s" ,[sid] ,nivsigs)
125  CALL put_var1(nid,"nivsig" ,"Numero naturel des couches sigma",[sigid],nivsig)
126  CALL put_var1(nid,"ap" ,"Coefficient A pour hybride" ,[sigid],ap)
127  CALL put_var1(nid,"bp" ,"Coefficient B pour hybride" ,[sigid],bp)
128  CALL put_var1(nid,"presnivs","" ,[sid] ,presnivs)
129 ! covariant <-> contravariant <-> natural conversion coefficients
130  CALL put_var2(nid,"cu","Coefficient de passage pour U",[rlonuid,rlatuid],cu)
131  CALL put_var2(nid,"cv","Coefficient de passage pour V",[rlonvid,rlatvid],cv)
132  CALL put_var2(nid,"aire","Aires de chaque maille" ,[rlonvid,rlatuid],aire)
133  CALL put_var2(nid,"phisinit","Geopotentiel au sol" ,[rlonvid,rlatuid],phis)
134 
135 !--- Define fields saved later
136  WRITE(unites,"('days since ',i4,'-',i2.2,'-',i2.2,' 00:00:00')"),&
137  yyears0,mmois0,jjour0
138  CALL cre_var(nid,"temps","Temps de simulation",[timid],unites)
139  CALL cre_var(nid,"ucov" ,"Vitesse U" ,[rlonuid,rlatuid,sid,timid])
140  CALL cre_var(nid,"vcov" ,"Vitesse V" ,[rlonvid,rlatvid,sid,timid])
141  CALL cre_var(nid,"teta" ,"Temperature",[rlonvid,rlatuid,sid,timid])
142  DO iq=1,nqtot
143  CALL cre_var(nid,tname(iq),ttext(iq),[rlonvid,rlatuid,sid,timid])
144  END DO
145  CALL cre_var(nid,"masse","Masse d air" ,[rlonvid,rlatuid,sid,timid])
146  CALL cre_var(nid,"ps" ,"Pression au sol",[rlonvid,rlatuid ,timid])
147  CALL err(nf90_close(nid))
148 
149  WRITE(lunout,*)trim(modname)//': iim,jjm,llm,iday_end',iim,jjm,llm,iday_end
150  WRITE(lunout,*)trim(modname)//': rad,omeg,g,cpp,kappa',rad,omeg,g,cpp,kappa
151 
152 END SUBROUTINE dynredem0
153 !
154 !-------------------------------------------------------------------------------
155 
156 
157 !-------------------------------------------------------------------------------
158 !
159 SUBROUTINE dynredem1(fichnom,time,vcov,ucov,teta,q,masse,ps)
160 !
161 !-------------------------------------------------------------------------------
162 ! Purpose: Write the NetCDF restart file (append).
163 !-------------------------------------------------------------------------------
164  USE infotrac
165  USE control_mod
166  USE netcdf, ONLY: nf90_open, nf90_nowrite, nf90_get_var, nf90_inq_varid, &
167  nf90_close, nf90_write, nf90_put_var, nf90_noerr
169  err, modname, fil, msg
170  IMPLICIT NONE
171  include "dimensions.h"
172  include "paramet.h"
173  include "description.h"
174  include "comvert.h"
175  include "comgeom.h"
176  include "temps.h"
177  include "iniprint.h"
178 !===============================================================================
179 ! Arguments:
180  CHARACTER(LEN=*), INTENT(IN) :: fichnom !-- FILE NAME
181  REAL, INTENT(IN) :: time !-- TIME
182  REAL, INTENT(IN) :: vcov(iip1,jjm, llm) !-- V COVARIANT WIND
183  REAL, INTENT(IN) :: ucov(iip1,jjp1,llm) !-- U COVARIANT WIND
184  REAL, INTENT(IN) :: teta(iip1,jjp1,llm) !-- POTENTIAL TEMPERATURE
185  REAL, INTENT(INOUT) :: q(iip1,jjp1,llm,nqtot) !-- TRACERS
186  REAL, INTENT(IN) :: masse(iip1,jjp1,llm) !-- MASS PER CELL
187  REAL, INTENT(IN) :: ps(iip1,jjp1) !-- GROUND PRESSURE
188 !===============================================================================
189 ! Local variables:
190  INTEGER :: l, iq, nid, vID, ierr, nid_trac, vID_trac
191  INTEGER, SAVE :: nb=0
192  INTEGER, PARAMETER :: length=100
193  REAL :: tab_cntrl(length) ! tableau des parametres du run
194  CHARACTER(LEN=256) :: var, dum
195  LOGICAL :: lread_inca
196 !===============================================================================
197 
198  modname='dynredem1'; fil=fichnom
199  CALL err(nf90_open(fil,nf90_write,nid),"open",fil)
200 
201 !--- Write/extend time coordinate
202  nb = nb + 1
203  var="temps"
204  CALL err(nf90_inq_varid(nid,var,vid),"inq",var)
205  CALL err(nf90_put_var(nid,vid,[time]),"put",var)
206  WRITE(lunout,*)trim(modname)//": Saving for ", nb, time
207 
208 !--- Rewrite control table (itaufin undefined in dynredem0)
209  var="controle"
210  CALL err(nf90_inq_varid(nid,var,vid),"inq",var)
211  CALL err(nf90_get_var(nid,vid,tab_cntrl),"get",var)
212  tab_cntrl(31)=dble(itau_dyn + itaufin)
213  CALL err(nf90_inq_varid(nid,var,vid),"inq",var)
214  CALL err(nf90_put_var(nid,vid,tab_cntrl),"put",var)
215 
216 !--- Save fields
217  CALL dynredem_write_u(nid,"ucov" ,ucov ,llm)
218  CALL dynredem_write_v(nid,"vcov" ,vcov ,llm)
219  CALL dynredem_write_u(nid,"teta" ,teta ,llm)
220  CALL dynredem_write_u(nid,"masse",masse,llm)
221  CALL dynredem_write_u(nid,"ps" ,ps ,1)
222 
223 !--- Tracers in file "start_trac.nc" (added by Anne)
224  lread_inca=.false.; fil="start_trac.nc"
225  IF(type_trac=='inca') INQUIRE(file=fil,exist=lread_inca)
226  IF(lread_inca) CALL err(nf90_open(fil,nf90_nowrite,nid_trac),"open")
227 
228 !--- Save tracers
229  DO iq=1,nqtot; var=tname(iq); ierr=-1
230  IF(lread_inca) THEN !--- Possibly read from "start_trac.nc"
231  fil="start_trac.nc"
232  ierr=nf90_inq_varid(nid_trac,var,vid_trac)
233  dum='inq'; IF(ierr==nf90_noerr) dum='fnd'
234  WRITE(lunout,*)msg(dum,var)
235 
236 
237  IF(ierr==nf90_noerr) CALL dynredem_read_u(nid_trac,var,q(:,:,:,iq),llm)
238  END IF
239  fil=fichnom
240  CALL dynredem_write_u(nid,var,q(:,:,:,iq),llm)
241  END DO
242  CALL err(nf90_close(nid),"close")
243  fil="start_trac.nc"
244  IF(lread_inca) CALL err(nf90_close(nid_trac),"close")
245 
246 END SUBROUTINE dynredem1
247 
!$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
subroutine, public put_var2(ncid, var, title, did, v, units)
!$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)
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
subroutine dynredem0(fichnom, iday_end, phis)
Definition: dynredem.F90:2
!$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
subroutine dynredem1(fichnom, time, vcov, ucov, teta, q, masse, ps)
Definition: dynredem.F90:160
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
!$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)
!$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
!$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
subroutine, public put_var1(ncid, var, title, did, v, units)
!$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
!$Header!CDK comgeom COMMON comgeom cv
Definition: comgeom.h:25
!$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
!$Header!CDK comgeom COMMON comgeom rlonv
Definition: comgeom.h:25