13   use netcdf
, only: nf90_nowrite, nf90_open, nf90_inq_varid, nf90_close
 
   47   REAL, 
ALLOCATABLE, 
DIMENSION(:,:,:), 
PRIVATE, 
SAVE   :: 
unat1,
unat2 
   48   REAL, 
ALLOCATABLE, 
DIMENSION(:,:,:), 
PRIVATE, 
SAVE   :: 
vnat1,
vnat2 
   49   REAL, 
ALLOCATABLE, 
DIMENSION(:,:,:), 
PRIVATE, 
SAVE   :: 
tnat1,
tnat2 
   50   REAL, 
ALLOCATABLE, 
DIMENSION(:,:,:), 
PRIVATE, 
SAVE   :: 
qnat1,
qnat2 
   52   REAL, 
ALLOCATABLE, 
DIMENSION(:),     
PRIVATE, 
SAVE   :: 
apnc,
bpnc 
   54   REAL, 
ALLOCATABLE, 
DIMENSION(:,:),   
PRIVATE, 
SAVE   :: 
ugui1,
ugui2 
   55   REAL, 
ALLOCATABLE, 
DIMENSION(:,:),   
PRIVATE, 
SAVE   :: 
vgui1,
vgui2 
   56   REAL, 
ALLOCATABLE, 
DIMENSION(:,:),   
PRIVATE, 
SAVE   :: 
tgui1,
tgui2 
   57   REAL, 
ALLOCATABLE, 
DIMENSION(:,:),   
PRIVATE, 
SAVE   :: 
qgui1,
qgui2 
   69     include 
"dimensions.h" 
   76     INTEGER                :: error,ncidpl,rid,rcod
 
   77     CHARACTER (len = 80)   :: abort_message
 
   78     CHARACTER (len = 20)   :: modname = 
'guide_init' 
   97          "zonal nudging requires grid regular in longitude", 1)
 
  131     CALL getpar(
'tau_lat', 5.,
tau_lat,
'raideur lat guide regional ')
 
  132     CALL getpar(
'tau_lon', 5.,
tau_lon,
'raideur lon guide regional ')
 
  158        if (ncidpl.eq.-99) 
then 
  159           rcod=nf90_open(
'apbp.nc',nf90_nowrite, ncidpl)
 
  160           if (rcod.NE.nf_noerr) 
THEN 
  162                   'Guide: probleme -> pas de fichier apbp.nc',1)
 
  167            if (ncidpl.eq.-99) 
then 
  168                rcod=nf90_open(
'u.nc',nf90_nowrite,ncidpl)
 
  169                if (rcod.NE.nf_noerr) 
THEN 
  171                        'Guide: probleme -> pas de fichier u.nc',1)
 
  175            if (ncidpl.eq.-99) 
then 
  176                rcod=nf90_open(
'v.nc',nf90_nowrite,ncidpl)
 
  177                if (rcod.NE.nf_noerr) 
THEN 
  179                        'Guide: probleme -> pas de fichier v.nc',1)
 
  183            if (ncidpl.eq.-99) 
then 
  184                rcod=nf90_open(
'T.nc',nf90_nowrite,ncidpl)
 
  185                if (rcod.NE.nf_noerr) 
THEN 
  187                        'Guide: probleme -> pas de fichier T.nc',1)
 
  191            if (ncidpl.eq.-99) 
then 
  192                rcod=nf90_open(
'hur.nc',nf90_nowrite, ncidpl)
 
  193                if (rcod.NE.nf_noerr) 
THEN 
  195                        'Guide: probleme -> pas de fichier hur.nc',1)
 
  200     error=nf_inq_dimid(ncidpl,
'LEVEL',rid)
 
  201     IF (error.NE.nf_noerr) error=nf_inq_dimid(ncidpl,
'PRESSURE',rid)
 
  202     IF (error.NE.nf_noerr) 
THEN 
  203         CALL abort_gcm(modname,
'Guide: probleme lecture niveaux pression',1)
 
  205     error=nf_inq_dimlen(ncidpl,rid,
nlevnc)
 
  206     print *,
'Guide: nombre niveaux vert. nlevnc', 
nlevnc  
  207     rcod = nf90_close(ncidpl)
 
  212     abort_message=
'pb in allocation guide' 
  215     IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  217     IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  221     IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  223     IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  225     IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  227     IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  229     IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  231     IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  236         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  238         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  240         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  242         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  248         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  250         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  252         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  254         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  260         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  262         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  264         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  266         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  272         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  274         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  276         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  278         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  284         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  286         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  291         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  293         IF (error /= 0) 
CALL abort_gcm(modname,abort_message,1)
 
  314   SUBROUTINE guide_main(itau,ucov,vcov,teta,q,masse,ps)
 
  320     include 
"dimensions.h" 
  326     INTEGER,                       
INTENT(IN)    :: itau 
 
  327     REAL, 
DIMENSION (ip1jmp1,llm), 
INTENT(INOUT) :: ucov,teta,q,masse
 
  328     REAL, 
DIMENSION (ip1jm,llm),   
INTENT(INOUT) :: vcov
 
  329     REAL, 
DIMENSION (ip1jmp1),     
INTENT(INOUT) :: ps
 
  332     LOGICAL, 
SAVE :: first=.
true.
 
  334     REAL, 
DIMENSION (ip1jmp1,llm) :: f_add 
 
  335     REAL, 
DIMENSION (ip1jmp1,llm) :: p 
 
  337     INTEGER, 
SAVE :: step_rea,count_no_rea,itau_test 
 
  338     REAL          :: ditau, dday_step
 
  406       IF (reste.EQ.0.) 
THEN 
  407           IF (itau_test.EQ.itau) 
THEN 
  408               write(*,*)
'deuxieme passage de advreel a itau=',itau
 
  418               print*,
'Lecture fichiers guidage, pas ',step_rea, &
 
  419                     'apres ',count_no_rea,
' non lectures' 
  428         count_no_rea=count_no_rea+1
 
  516         vcov=vcov+f_add(1:
ip1jm,:)
 
  527     INTEGER,                      
INTENT(IN)    :: hsize
 
  528     INTEGER,                      
INTENT(IN)    :: vsize
 
  529     REAL, 
DIMENSION(hsize),       
INTENT(IN)    :: alpha 
 
  530     REAL, 
DIMENSION(hsize,vsize), 
INTENT(INOUT) :: field
 
  546     include 
"dimensions.h" 
  552     INTEGER,                           
INTENT(IN)    :: typ
 
  553     INTEGER,                           
INTENT(IN)    :: vsize
 
  554     INTEGER,                           
INTENT(IN)    :: hsize
 
  555     REAL, 
DIMENSION(hsize*iip1,vsize), 
INTENT(INOUT) :: field
 
  558     LOGICAL, 
SAVE                :: first=.
true.
 
  559     INTEGER, 
DIMENSION (2), 
SAVE :: imin, imax 
 
  561     REAL, 
DIMENSION (iip1)       :: lond       
 
  562     REAL, 
DIMENSION (hsize,vsize):: fieldm     
 
  568         imin(1)=1;imax(1)=iip1;
 
  569         imin(2)=1;imax(2)=iip1;
 
  587             DO i=imin(typ),imax(typ)
 
  589                 fieldm(j,l)=fieldm(j,l)+field(ij,l)
 
  592         fieldm(:,l)=fieldm(:,l)/
REAL(imax(typ)-imin(typ)+1)
 
  597                 field(ij,l)=fieldm(j,l)
 
  611   include 
"dimensions.h" 
  617   REAL, 
DIMENSION (iip1,jjp1),     
INTENT(IN) :: psi 
 
  618   REAL, 
DIMENSION (iip1,jjp1,llm), 
INTENT(IN) :: teta 
 
  620   LOGICAL, 
SAVE                      :: first=.
true.
 
  622   REAL, 
DIMENSION (iip1,jjp1,nlevnc) :: plnc1,plnc2 
 
  623   REAL, 
DIMENSION (iip1,jjp1,llm)    :: plunc,plsnc 
 
  624   REAL, 
DIMENSION (iip1,jjm,llm)     :: plvnc       
 
  625   REAL, 
DIMENSION (iip1,jjp1,llmp1)  :: p           
 
  626   REAL, 
DIMENSION (iip1,jjp1,llm)    :: pls, pext   
 
  627   REAL, 
DIMENSION (iip1,jjp1,llm)    :: pbarx 
 
  628   REAL, 
DIMENSION (iip1,jjm,llm)     :: pbary 
 
  630   REAL, 
DIMENSION (iip1,jjp1,llm)    :: pk
 
  631   REAL, 
DIMENSION (iip1,jjp1)        :: pks    
 
  632   REAL                               :: prefkap,unskap
 
  634   REAL, 
DIMENSION (ip1jmp1,llm)      :: qsat
 
  636   REAL, 
DIMENSION (iip1,jjp1,llm)    :: zu1,zu2 
 
  637   REAL, 
DIMENSION (iip1,jjm,llm)     :: zv1,zv2
 
  641     print *,
'Guide: conversion variables guidage' 
  667         print*,
'Guide: verification ordre niveaux verticaux' 
  670             print*,
'PL(',l,
')=',(ap(l)+ap(l+1))/2. &
 
  673         print*,
'Fichiers guidage' 
  675              print*,
'PL(',l,
')=',plnc2(1,1,l)
 
  677         print *,
'inversion de l''ordre: invert_p=',
invert_p 
  680                 print*,
'U(',l,
')=',
unat2(1,1,l)
 
  685                 print*,
'T(',l,
')=',
tnat2(1,1,l)
 
  694     if (pressure_exner) 
then 
  705                 pls(i,j,l) = 
preff * ( pk(i,j,l)/
cpp) ** unskap
 
  714                 pext(i,j,l)=pls(i,j,l)*
aire(i,j)
 
  718     call massbar(pext, pbarx, pbary )
 
  722                 plunc(i,j,l)=pbarx(i,j,l)/
aireu(i,j)
 
  723                 plsnc(i,j,l)=pls(i,j,l)
 
  730                 plvnc(i,j,l)=pbary(i,j,l)/
airev(i,j)
 
  781                                                 tgui1(ij,l)=zu1(i,j,l)
 
  782                                                 tgui2(ij,l)=zu2(i,j,l)
 
  787                                                 tgui1(ij,l)=zu1(i,j,l)*
cpp/pk(i,j,l)
 
  788                                                 tgui2(ij,l)=zu2(i,j,l)*
cpp/pk(i,j,l)
 
  805         CALL pres2lev(
vnat1,zv1,
nlevnc,
llm,plnc1(:,:jjm,:),plvnc,iip1,jjm,
invert_p)
 
  806         CALL pres2lev(
vnat2,zv2,
nlevnc,
llm,plnc2(:,:jjm,:),plvnc,iip1,jjm,
invert_p)
 
  830                     qgui1(ij,l)=zu1(i,j,l)
 
  831                     qgui2(ij,l)=zu2(i,j,l)
 
  853   SUBROUTINE tau2alpha(typ,pim,pjm,factt,taumin,taumax,alpha)
 
  859     include 
"dimensions.h" 
  866     INTEGER, 
INTENT(IN) :: typ    
 
  867     INTEGER, 
INTENT(IN) :: pim,pjm 
 
  868     REAL, 
INTENT(IN)    :: factt   
 
  869     REAL, 
INTENT(IN)    :: taumin,taumax
 
  871     REAL, 
DIMENSION(pim,pjm), 
INTENT(OUT) :: alpha 
 
  874     LOGICAL, 
SAVE               :: first=.
true.
 
  875     REAL, 
SAVE                  :: gamma,dxdy_min,dxdy_max
 
  876     REAL, 
DIMENSION (iip1,jjp1) :: zdx,zdy
 
  877     REAL, 
DIMENSION (iip1,jjp1) :: dxdys,dxdyu
 
  878     REAL, 
DIMENSION (iip1,jjm)  :: dxdyv
 
  881     real alphamin,alphamax,xi
 
  882     integer i,j,ilon,ilat
 
  885     alphamin=factt/taumax
 
  886     alphamax=factt/taumin
 
  898                     elseif (typ.eq.1) 
then 
  901                     elseif (typ.eq.3) 
then 
  905                     alpha(i,j)=alphamax/16.* &
 
  920                zdx(i,j)=0.5*(
cu(i-1,j)+
cu(i,j))/cos(
rlatu(j))
 
  926                zdy(i,j)=0.5*(
cv(i,j-1)+
cv(i,j))
 
  931             zdx(i,
jjp1)=zdx(i,jjm)
 
  933             zdy(i,
jjp1)=zdy(i,jjm)
 
  937                dxdys(i,j)=sqrt(zdx(i,j)*zdx(i,j)+zdy(i,j)*zdy(i,j))
 
  943                    dxdyu(i,j)=0.5*(dxdys(i,j)+dxdys(i+1,j))
 
  945                 dxdyu(iip1,j)=dxdyu(1,j)
 
  951                    dxdyv(i,j)=0.5*(dxdys(i,j)+dxdys(i,j+1))
 
  961             dxdy_min=dxdys(ilon,ilat)
 
  966                      dxdy_max=max(dxdy_max,dxdys(i,j))
 
  971                  print*,
'ATTENTION modele peu zoome' 
  972                  print*,
'ATTENTION on prend une constante de guidage cste' 
  975                 gamma=(dxdy_max-2.*dxdy_min)/(dxdy_max-dxdy_min)
 
  976                 print*,
'gamma=',gamma
 
  977                 if (gamma.lt.1.e-5) 
then 
  978                   print*,
'gamma =',gamma,
'<1e-5' 
  981                 gamma=log(0.5)/log(gamma)
 
  985                 print*,
'gamma=',gamma
 
  994                 elseif (typ.eq.2) 
then 
  997                 elseif (typ.eq.3) 
then 
 1005                     xi=((dxdy_max-dxdy_)/(dxdy_max-dxdy_min))**gamma
 
 1008                         alpha(i,j)=xi*alphamin+(1.-xi)*alphamax
 
 1017     if (.not. 
guide_add) alpha = 1. - exp(- alpha)
 
 1026 #include "netcdf.inc" 
 1027 #include "dimensions.h" 
 1028 #include "paramet.h" 
 1030     INTEGER, 
INTENT(IN)   :: timestep
 
 1032     LOGICAL, 
SAVE         :: first=.
true.
 
 1034     INTEGER, 
SAVE         :: ncidu,varidu,ncidv,varidv,ncidQ
 
 1035     INTEGER, 
SAVE         :: varidQ,ncidt,varidt,ncidps,varidps
 
 1036     INTEGER               :: ncidpl,varidpl,varidap,varidbp
 
 1038     INTEGER, 
DIMENSION(4) :: start,count
 
 1039     INTEGER               :: status,rcode
 
 1041     CHARACTER (len = 80)   :: abort_message
 
 1042     CHARACTER (len = 20)   :: modname = 
'guide_read' 
 1048          print*,
'Guide: ouverture des fichiers guidage ' 
 1051              print *,
'Lecture du guidage sur niveaux modele' 
 1052              rcode = nf90_open(
'apbp.nc', nf90_nowrite, ncidpl)
 
 1053              IF (rcode.NE.nf_noerr) 
THEN 
 1054               print *,
'Guide: probleme -> pas de fichier apbp.nc' 
 1057              rcode = nf90_inq_varid(ncidpl, 
'AP', varidap)
 
 1058              IF (rcode.NE.nf_noerr) 
THEN 
 1059               print *,
'Guide: probleme -> pas de variable AP, fichier apbp.nc' 
 1062              rcode = nf90_inq_varid(ncidpl, 
'BP', varidbp)
 
 1063              IF (rcode.NE.nf_noerr) 
THEN 
 1064               print *,
'Guide: probleme -> pas de variable BP, fichier apbp.nc' 
 1067              print*,
'ncidpl,varidap',ncidpl,varidap
 
 1071              rcode = nf90_open(
'u.nc', nf90_nowrite, ncidu)
 
 1072              IF (rcode.NE.nf_noerr) 
THEN 
 1073               print *,
'Guide: probleme -> pas de fichier u.nc' 
 1076              rcode = nf90_inq_varid(ncidu, 
'UWND', varidu)
 
 1077              IF (rcode.NE.nf_noerr) 
THEN 
 1078               print *,
'Guide: probleme -> pas de variable UWND, fichier u.nc' 
 1081              print*,
'ncidu,varidu',ncidu,varidu
 
 1082              if (ncidpl.eq.-99) ncidpl=ncidu
 
 1086              rcode = nf90_open(
'v.nc', nf90_nowrite, ncidv)
 
 1087              IF (rcode.NE.nf_noerr) 
THEN 
 1088               print *,
'Guide: probleme -> pas de fichier v.nc' 
 1091              rcode = nf90_inq_varid(ncidv, 
'VWND', varidv)
 
 1092              IF (rcode.NE.nf_noerr) 
THEN 
 1093               print *,
'Guide: probleme -> pas de variable VWND, fichier v.nc' 
 1096              print*,
'ncidv,varidv',ncidv,varidv
 
 1097              if (ncidpl.eq.-99) ncidpl=ncidv
 
 1101              rcode = nf90_open(
'T.nc', nf90_nowrite, ncidt)
 
 1102              IF (rcode.NE.nf_noerr) 
THEN 
 1103               print *,
'Guide: probleme -> pas de fichier T.nc' 
 1106              rcode = nf90_inq_varid(ncidt, 
'AIR', varidt)
 
 1107              IF (rcode.NE.nf_noerr) 
THEN 
 1108               print *,
'Guide: probleme -> pas de variable AIR, fichier T.nc' 
 1111              print*,
'ncidT,varidT',ncidt,varidt
 
 1112              if (ncidpl.eq.-99) ncidpl=ncidt
 
 1116              rcode = nf90_open(
'hur.nc', nf90_nowrite, ncidq)
 
 1117              IF (rcode.NE.nf_noerr) 
THEN 
 1118               print *,
'Guide: probleme -> pas de fichier hur.nc' 
 1121              rcode = nf90_inq_varid(ncidq, 
'RH', varidq)
 
 1122              IF (rcode.NE.nf_noerr) 
THEN 
 1123               print *,
'Guide: probleme -> pas de variable RH, fichier hur.nc' 
 1126              print*,
'ncidQ,varidQ',ncidq,varidq
 
 1127              if (ncidpl.eq.-99) ncidpl=ncidq
 
 1131              rcode = nf90_open(
'ps.nc', nf90_nowrite, ncidps)
 
 1132              IF (rcode.NE.nf_noerr) 
THEN 
 1133               print *,
'Guide: probleme -> pas de fichier ps.nc' 
 1136              rcode = nf90_inq_varid(ncidps, 
'SP', varidps)
 
 1137              IF (rcode.NE.nf_noerr) 
THEN 
 1138               print *,
'Guide: probleme -> pas de variable SP, fichier ps.nc' 
 1141              print*,
'ncidps,varidps',ncidps,varidps
 
 1145               rcode = nf90_inq_varid(ncidpl, 
'LEVEL', varidpl)
 
 1146               IF (rcode.NE.0) rcode = nf90_inq_varid(ncidpl, 
'PRESSURE', varidpl)
 
 1147               print*,
'ncidpl,varidpl',ncidpl,varidpl
 
 1152              status=nf_get_vara_double(ncidpl,varidap,1,
nlevnc,
apnc)
 
 1153              status=nf_get_vara_double(ncidpl,varidbp,1,
nlevnc,
bpnc)
 
 1155              status=nf_get_vara_real(ncidpl,varidap,1,
nlevnc,
apnc)
 
 1156              status=nf_get_vara_real(ncidpl,varidbp,1,
nlevnc,
bpnc)
 
 1160              status=nf_get_vara_double(ncidpl,varidpl,1,
nlevnc,
apnc)
 
 1162              status=nf_get_vara_real(ncidpl,varidpl,1,
nlevnc,
apnc)
 
 1188          status=nf_get_vara_double(ncidu,varidu,start,count,
unat2)
 
 1190          status=nf_get_vara_real(ncidu,varidu,start,count,
unat2)
 
 1200          status=nf_get_vara_double(ncidt,varidt,start,count,
tnat2)
 
 1202          status=nf_get_vara_real(ncidt,varidt,start,count,
tnat2)
 
 1212          status=nf_get_vara_double(ncidq,varidq,start,count,
qnat2)
 
 1214          status=nf_get_vara_real(ncidq,varidq,start,count,
qnat2)
 
 1226          status=nf_get_vara_double(ncidv,varidv,start,count,
vnat2)
 
 1228          status=nf_get_vara_real(ncidv,varidv,start,count,
vnat2)
 
 1243          status=nf_get_vara_double(ncidps,varidps,start,count,
psnat2)
 
 1245          status=nf_get_vara_real(ncidps,varidps,start,count,
psnat2)
 
 1259 #include "netcdf.inc" 
 1260 #include "dimensions.h" 
 1261 #include "paramet.h" 
 1263     INTEGER, 
INTENT(IN)   :: timestep
 
 1265     LOGICAL, 
SAVE         :: first=.
true.
 
 1267     INTEGER, 
SAVE         :: ncidu,varidu,ncidv,varidv,ncidQ
 
 1268     INTEGER, 
SAVE         :: varidQ,ncidt,varidt,ncidps,varidps
 
 1269     INTEGER               :: ncidpl,varidpl,varidap,varidbp
 
 1271     INTEGER, 
DIMENSION(4) :: start,count
 
 1272     INTEGER               :: status,rcode
 
 1274     REAL, 
DIMENSION (jjp1,llm) :: zu
 
 1275     REAL, 
DIMENSION (jjm,llm)  :: zv
 
 1278     CHARACTER (len = 80)   :: abort_message
 
 1279     CHARACTER (len = 20)   :: modname = 
'guide_read2D' 
 1285          print*,
'Guide: ouverture des fichiers guidage ' 
 1288              print *,
'Lecture du guidage sur niveaux modele' 
 1289              rcode = nf90_open(
'apbp.nc', nf90_nowrite, ncidpl)
 
 1290              IF (rcode.NE.nf_noerr) 
THEN 
 1291               print *,
'Guide: probleme -> pas de fichier apbp.nc' 
 1294              rcode = nf90_inq_varid(ncidpl, 
'AP', varidap)
 
 1295              IF (rcode.NE.nf_noerr) 
THEN 
 1296               print *,
'Guide: probleme -> pas de variable AP, fichier apbp.nc' 
 1299              rcode = nf90_inq_varid(ncidpl, 
'BP', varidbp)
 
 1300              IF (rcode.NE.nf_noerr) 
THEN 
 1301               print *,
'Guide: probleme -> pas de variable BP, fichier apbp.nc' 
 1304              print*,
'ncidpl,varidap',ncidpl,varidap
 
 1308              rcode = nf90_open(
'u.nc', nf90_nowrite, ncidu)
 
 1309              IF (rcode.NE.nf_noerr) 
THEN 
 1310               print *,
'Guide: probleme -> pas de fichier u.nc' 
 1313              rcode = nf90_inq_varid(ncidu, 
'UWND', varidu)
 
 1314              IF (rcode.NE.nf_noerr) 
THEN 
 1315               print *,
'Guide: probleme -> pas de variable UWND, fichier u.nc' 
 1318              print*,
'ncidu,varidu',ncidu,varidu
 
 1319              if (ncidpl.eq.-99) ncidpl=ncidu
 
 1323              rcode = nf90_open(
'v.nc', nf90_nowrite, ncidv)
 
 1324              IF (rcode.NE.nf_noerr) 
THEN 
 1325               print *,
'Guide: probleme -> pas de fichier v.nc' 
 1328              rcode = nf90_inq_varid(ncidv, 
'VWND', varidv)
 
 1329              IF (rcode.NE.nf_noerr) 
THEN 
 1330               print *,
'Guide: probleme -> pas de variable VWND, fichier v.nc' 
 1333              print*,
'ncidv,varidv',ncidv,varidv
 
 1334              if (ncidpl.eq.-99) ncidpl=ncidv
 
 1338              rcode = nf90_open(
'T.nc', nf90_nowrite, ncidt)
 
 1339              IF (rcode.NE.nf_noerr) 
THEN 
 1340               print *,
'Guide: probleme -> pas de fichier T.nc' 
 1343              rcode = nf90_inq_varid(ncidt, 
'AIR', varidt)
 
 1344              IF (rcode.NE.nf_noerr) 
THEN 
 1345               print *,
'Guide: probleme -> pas de variable AIR, fichier T.nc' 
 1348              print*,
'ncidT,varidT',ncidt,varidt
 
 1349              if (ncidpl.eq.-99) ncidpl=ncidt
 
 1353              rcode = nf90_open(
'hur.nc', nf90_nowrite, ncidq)
 
 1354              IF (rcode.NE.nf_noerr) 
THEN 
 1355               print *,
'Guide: probleme -> pas de fichier hur.nc' 
 1358              rcode = nf90_inq_varid(ncidq, 
'RH', varidq)
 
 1359              IF (rcode.NE.nf_noerr) 
THEN 
 1360               print *,
'Guide: probleme -> pas de variable RH, fichier hur.nc' 
 1363              print*,
'ncidQ,varidQ',ncidq,varidq
 
 1364              if (ncidpl.eq.-99) ncidpl=ncidq
 
 1368              rcode = nf90_open(
'ps.nc', nf90_nowrite, ncidps)
 
 1369              IF (rcode.NE.nf_noerr) 
THEN 
 1370               print *,
'Guide: probleme -> pas de fichier ps.nc' 
 1373              rcode = nf90_inq_varid(ncidps, 
'SP', varidps)
 
 1374              IF (rcode.NE.nf_noerr) 
THEN 
 1375               print *,
'Guide: probleme -> pas de variable SP, fichier ps.nc' 
 1378              print*,
'ncidps,varidps',ncidps,varidps
 
 1382               rcode = nf90_inq_varid(ncidpl, 
'LEVEL', varidpl)
 
 1383               IF (rcode.NE.0) rcode = nf90_inq_varid(ncidpl, 
'PRESSURE', varidpl)
 
 1384               print*,
'ncidpl,varidpl',ncidpl,varidpl
 
 1389              status=nf_get_vara_double(ncidpl,varidap,1,
nlevnc,
apnc)
 
 1390              status=nf_get_vara_double(ncidpl,varidbp,1,
nlevnc,
bpnc)
 
 1392              status=nf_get_vara_real(ncidpl,varidap,1,
nlevnc,
apnc)
 
 1393              status=nf_get_vara_real(ncidpl,varidbp,1,
nlevnc,
bpnc)
 
 1397              status=nf_get_vara_double(ncidpl,varidpl,1,
nlevnc,
apnc)
 
 1399              status=nf_get_vara_real(ncidpl,varidpl,1,
nlevnc,
apnc)
 
 1425          status=nf_get_vara_double(ncidu,varidu,start,count,zu)
 
 1427          status=nf_get_vara_real(ncidu,varidu,start,count,zu)
 
 1430              unat2(i,:,:)=zu(:,:)
 
 1442          status=nf_get_vara_double(ncidt,varidt,start,count,zu)
 
 1444          status=nf_get_vara_real(ncidt,varidt,start,count,zu)
 
 1447              tnat2(i,:,:)=zu(:,:)
 
 1459          status=nf_get_vara_double(ncidq,varidq,start,count,zu)
 
 1461          status=nf_get_vara_real(ncidq,varidq,start,count,zu)
 
 1464              qnat2(i,:,:)=zu(:,:)
 
 1477          status=nf_get_vara_double(ncidv,varidv,start,count,zv)
 
 1479          status=nf_get_vara_real(ncidv,varidv,start,count,zv)
 
 1482              vnat2(i,:,:)=zv(:,:)
 
 1499          status=nf_get_vara_double(ncidps,varidps,start,count,zu(:,1))
 
 1501          status=nf_get_vara_real(ncidps,varidps,start,count,zu(:,1))
 
 1516   SUBROUTINE guide_out(varname,hsize,vsize,field)
 
 1520     include 
"dimensions.h" 
 1522     include 
"netcdf.inc" 
 1523     include 
"comgeom2.h" 
 1524     include 
"comconst.h" 
 1528     CHARACTER*(*), 
INTENT(IN)                          :: varname
 
 1529     INTEGER,   
INTENT (IN)                         :: hsize,vsize
 
 1530     REAL, 
DIMENSION (iip1,hsize,vsize), 
INTENT(IN) :: field
 
 1533     INTEGER, 
SAVE :: timestep=0
 
 1535     INTEGER       :: nid, id_lonu, id_lonv, id_latu, id_latv, id_tim, id_lev
 
 1536     INTEGER       :: vid_lonu,vid_lonv,vid_latu,vid_latv,vid_cu,vid_cv,vid_lev
 
 1537     INTEGER       :: vid_au,vid_av
 
 1538     INTEGER, 
DIMENSION (3) :: dim3
 
 1539     INTEGER, 
DIMENSION (4) :: dim4,count,start
 
 1540     INTEGER                :: ierr, varid,l
 
 1541     REAL, 
DIMENSION (iip1,hsize,vsize) :: field2
 
 1543     print *,
'Guide: output timestep',timestep,
'var ',varname
 
 1544     IF (timestep.EQ.0) 
THEN  
 1549         ierr=nf_create(
"guide_ins.nc",nf_clobber,nid)
 
 1551         ierr=nf_def_dim(nid,
"LONU",iip1,id_lonu) 
 
 1552         ierr=nf_def_dim(nid,
"LONV",iip1,id_lonv) 
 
 1553         ierr=nf_def_dim(nid,
"LATU",
jjp1,id_latu) 
 
 1554         ierr=nf_def_dim(nid,
"LATV",jjm,id_latv) 
 
 1555         ierr=nf_def_dim(nid,
"LEVEL",
llm,id_lev)
 
 1556         ierr=nf_def_dim(nid,
"TIME",nf_unlimited,id_tim)
 
 1559         ierr=nf_def_var(nid,
"LONU",nf_float,1,id_lonu,vid_lonu)
 
 1560         ierr=nf_def_var(nid,
"LONV",nf_float,1,id_lonv,vid_lonv)
 
 1561         ierr=nf_def_var(nid,
"LATU",nf_float,1,id_latu,vid_latu)
 
 1562         ierr=nf_def_var(nid,
"LATV",nf_float,1,id_latv,vid_latv)
 
 1563         ierr=nf_def_var(nid,
"LEVEL",nf_float,1,id_lev,vid_lev)
 
 1564         ierr=nf_def_var(nid,
"cu",nf_float,2,(/id_lonu,id_latu/),vid_cu)
 
 1565         ierr=nf_def_var(nid,
"au",nf_float,2,(/id_lonu,id_latu/),vid_au)
 
 1566         ierr=nf_def_var(nid,
"cv",nf_float,2,(/id_lonv,id_latv/),vid_cv)
 
 1567         ierr=nf_def_var(nid,
"av",nf_float,2,(/id_lonv,id_latv/),vid_av)
 
 1573         ierr = nf_put_var_double(nid,vid_lonu,
rlonu*180./
pi)
 
 1574         ierr = nf_put_var_double(nid,vid_lonv,
rlonv*180./
pi)
 
 1575         ierr = nf_put_var_double(nid,vid_latu,
rlatu*180./
pi)
 
 1576         ierr = nf_put_var_double(nid,vid_latv,
rlatv*180./
pi)
 
 1577         ierr = nf_put_var_double(nid,vid_lev,
presnivs)
 
 1578         ierr = nf_put_var_double(nid,vid_cu,
cu)
 
 1579         ierr = nf_put_var_double(nid,vid_cv,
cv)
 
 1580         ierr = nf_put_var_double(nid,vid_au,
alpha_u)
 
 1581         ierr = nf_put_var_double(nid,vid_av,
alpha_v)
 
 1583         ierr = nf_put_var_real(nid,vid_lonu,
rlonu*180./
pi)
 
 1584         ierr = nf_put_var_real(nid,vid_lonv,
rlonv*180./
pi)
 
 1585         ierr = nf_put_var_real(nid,vid_latu,
rlatu*180./
pi)
 
 1586         ierr = nf_put_var_real(nid,vid_latv,
rlatv*180./
pi)
 
 1587         ierr = nf_put_var_real(nid,vid_lev,
presnivs)
 
 1588         ierr = nf_put_var_real(nid,vid_cu,
cu)
 
 1589         ierr = nf_put_var_real(nid,vid_cv,
cv)
 
 1590         ierr = nf_put_var_real(nid,vid_au,
alpha_u)
 
 1591         ierr = nf_put_var_real(nid,vid_av,
alpha_v)
 
 1596         ierr = nf_redef(nid)
 
 1598         dim3=(/id_lonv,id_latu,id_tim/)
 
 1599         ierr = nf_def_var(nid,
"SP",nf_float,3,dim3,varid)
 
 1602             dim3=(/id_lonv,id_latu,id_tim/)
 
 1603             ierr = nf_def_var(nid,
"ps",nf_float,3,dim3,varid)
 
 1607             dim4=(/id_lonu,id_latu,id_lev,id_tim/)
 
 1608             ierr = nf_def_var(nid,
"u",nf_float,4,dim4,varid)
 
 1609             ierr = nf_def_var(nid,
"ua",nf_float,4,dim4,varid)
 
 1610             ierr = nf_def_var(nid,
"ucov",nf_float,4,dim4,varid)
 
 1614             dim4=(/id_lonv,id_latv,id_lev,id_tim/)
 
 1615             ierr = nf_def_var(nid,
"v",nf_float,4,dim4,varid)
 
 1616             ierr = nf_def_var(nid,
"va",nf_float,4,dim4,varid)
 
 1617             ierr = nf_def_var(nid,
"vcov",nf_float,4,dim4,varid)
 
 1621             dim4=(/id_lonv,id_latu,id_lev,id_tim/)
 
 1622             ierr = nf_def_var(nid,
"teta",nf_float,4,dim4,varid)
 
 1626             dim4=(/id_lonv,id_latu,id_lev,id_tim/)
 
 1627             ierr = nf_def_var(nid,
"q",nf_float,4,dim4,varid)
 
 1630         ierr = nf_enddef(nid)
 
 1631         ierr = nf_close(nid)
 
 1637     ierr=nf_open(
"guide_ins.nc",nf_write,nid)
 
 1639     IF (varname==
"SP") timestep=timestep+1
 
 1641     ierr = nf_inq_varid(nid,varname,varid)
 
 1642     SELECT CASE (varname)
 
 1644         start=(/1,1,timestep,0/)
 
 1645         count=(/iip1,
jjp1,1,0/)
 
 1646     CASE (
"v",
"va",
"vcov")
 
 1647         start=(/1,1,1,timestep/)
 
 1648         count=(/iip1,jjm,
llm,1/)
 
 1650         start=(/1,1,1,timestep/)
 
 1654     SELECT CASE (varname)
 
 1656         DO l=1,
llm ; field2(:,2:jjm,l)=field(:,2:jjm,l)/
cu(:,2:jjm) ;
 ENDDO 
 1657         field2(:,1,:)=0. ; field2(:,
jjp1,:)=0.
 
 1659         DO l=1,
llm ; field2(:,:,l)=field(:,:,l)/
cv(:,:) ;
 ENDDO 
 1666     ierr = nf_put_vara_double(nid,varid,start,count,field2)
 
 1668     ierr = nf_put_vara_real(nid,varid,start,count,field2)
 
 1671     ierr = nf_close(nid)
 
 1685             if(abs(x(i,l)).gt.1.e10) 
then 
 1686                zz=0.5*(x(i-1,l)+x(i+1,l))
 
 1687               print*,
'correction ',i,l,x(i,l),zz
 
real, dimension(:,:,:), allocatable, save, private unat2
 
!$Header llmm1 INTEGER ip1jmp1
 
real, dimension(:,:,:), allocatable, save, private unat1
 
real, save, private lat_max_g
 
!$Header!c!c!c include serre h!c REAL && grossismx
 
subroutine guide_addfield(hsize, vsize, field, alpha)
 
real, dimension(:,:), allocatable, save, private tgui2
 
real, dimension(:,:,:), allocatable, save, private vnat2
 
subroutine pres2lev(varo, varn, lmo, lmn, po, pn, ni, nj, ok_invertp)
 
subroutine guide_main(itau, ucov, vcov, teta, q, masse, ps)
 
real, save, private lat_min_g
 
!$Id mode_top_bound COMMON comconstr kappa
 
real, dimension(:,:), allocatable, save, private ugui1
 
real, dimension(:,:), allocatable, save, private tgui1
 
subroutine exner_hyb(ngrid, ps, p, pks, pk, pkf)
 
real, save, private tau_lat
 
logical, save, private ini_anal
 
!$Header!c!c!c include serre h!c REAL clon
 
subroutine invert_lat(xsize, ysize, vsize, field)
 
real, dimension(:,:,:), allocatable, save, private tnat1
 
subroutine exner_milieu(ngrid, ps, p, pks, pk, pkf)
 
subroutine abort_gcm(modname, message, ierr)
 
!$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
 
real, save, private tau_min_v
 
logical, save, private invert_p
 
!$Id mode_top_bound COMMON comconstr && pi
 
!$Header!CDK comgeom COMMON comgeom aire
 
subroutine ini_getparam(fichier)
 
!$Header!CDK comgeom COMMON comgeom rlatu
 
logical, save, private invert_y
 
logical, save, private guide_hr
 
real, save, private tau_lon
 
real, save, private lon_max_g
 
real, dimension(:), allocatable, save, private alpha_q
 
real, save, private tau_max_t
 
subroutine tau2alpha(typ, pim, pjm, factt, taumin, taumax, alpha)
 
subroutine guide_read2d(timestep)
 
!$Header llmm1 INTEGER ip1jm
 
subroutine pression(ngrid, ap, bp, ps, p)
 
subroutine massbar(masse, massebx, masseby)
 
!$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
 
real, save, private tau_max_p
 
real, dimension(:), allocatable, save, private alpha_v
 
subroutine q_sat(np, temp, pres, qsat)
 
real, dimension(:), allocatable, save, private alpha_pcor
 
real, save, private tau_max_v
 
!$Header!CDK comgeom COMMON comgeom aireu
 
logical, save, private guide_sav
 
logical, save, private guide_u
 
logical, save, private guide_bl
 
real, dimension(:), allocatable, save, private bpnc
 
!$Id mode_top_bound COMMON comconstr cpp
 
real, dimension(:,:), allocatable, save, private psnat2
 
integer, save, private iguide_read
 
logical, save, private gamma4
 
real, save, private tau_min_p
 
real, dimension(:), allocatable, save, private alpha_p
 
subroutine guide_read(timestep)
 
logical, save, private guide_2d
 
!$Id mode_top_bound COMMON comconstr daysec
 
real, dimension(:), allocatable, save, private psgui2
 
!$Header!CDK comgeom COMMON comgeom rlonu
 
!$Header!CDK comgeom COMMON comgeom rlatv
 
real, dimension(:), allocatable, save, private alpha_u
 
real, save, private tau_min_q
 
real, dimension(:,:), allocatable, save, private ugui2
 
logical, save, private guide_v
 
!$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 ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
 
real, dimension(:,:,:), allocatable, save, private tnat2
 
!$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
 
subroutine coordij(lon, lat, ilon, jlat)
 
real, save, private tau_min_t
 
logical, save, private guide_zon
 
logical, save, private guide_add
 
!$Header!c!c!c include serre h!c REAL grossismy
 
subroutine guide_interp(psi, teta)
 
real, dimension(:,:), allocatable, save, private vgui1
 
real, save, private tau_max_u
 
logical, save, private guide_t
 
!$Id mode_top_bound COMMON comconstr dtvr
 
real, dimension(:), allocatable, save, private alpha_t
 
real, dimension(:,:,:), allocatable, save, private vnat1
 
real, dimension(:,:,:), allocatable, save, private qnat2
 
real, dimension(:,:), allocatable, save, private vgui2
 
c c zjulian c cym CALL iim cym klev iim
 
real, save, private tau_min_u
 
logical, save, private guide_q
 
real, save, private lon_min_g
 
!$Header!c!c!c include serre h!c REAL clat
 
real, dimension(:,:,:), allocatable, save, private qnat1
 
real, dimension(:), allocatable, save, private apnc
 
real, dimension(:,:), allocatable, save, private psnat1
 
subroutine massdair(p, masse)
 
real, dimension(:), allocatable, save, private psgui1
 
!$Header!CDK comgeom COMMON comgeom cv
 
logical, save, private guide_teta
 
subroutine guide_out(varname, hsize, vsize, field)
 
logical, save, private guide_modele
 
real, dimension(:,:), allocatable, save, private qgui1
 
real, save, private tau_max_q
 
logical, save, private guide_reg
 
integer, save, private iguide_int
 
subroutine guide_zonave(typ, hsize, vsize, field)
 
integer, save, private nlevnc
 
logical, save, private guide_p
 
real, dimension(:,:), allocatable, save, private qgui2
 
subroutine correctbid(iim, nl, x)
 
integer, save, private iguide_sav
 
!$Header!CDK comgeom COMMON comgeom airev
 
!$Header!CDK comgeom COMMON comgeom rlonv