Ignore:
Timestamp:
Feb 22, 2021, 12:44:07 PM (3 years ago)
Author:
dcugnet
Message:

Update the branch to the current trunk.

Location:
LMDZ6/branches/LMDZ-tracers
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ-tracers

  • LMDZ6/branches/LMDZ-tracers/libf/dyn3dmem/conf_gcm.F90

    r3579 r3851  
    345345  ngroup=3
    346346  CALL getin('ngroup',ngroup)
     347  if (mod(iim, 2**ngroup) /= 0) &
     348       call abort_gcm("conf_gcm", 'iim must be multiple of 2**ngroup', 1)
     349  if (2**ngroup > jjm + 1) &
     350       call abort_gcm("conf_gcm", '2**ngroup must be <= jjm + 1', 1)
    347351
    348352  ! mode_top_bound : fields towards which sponge relaxation will be done:
  • LMDZ6/branches/LMDZ-tracers/libf/dyn3dmem/dynredem_loc.F90

    r2622 r3851  
    1111  USE infotrac
    1212  USE netcdf, ONLY: NF90_CREATE, NF90_DEF_DIM, NF90_INQ_VARID, NF90_GLOBAL,    &
    13                     NF90_CLOSE,  NF90_PUT_ATT, NF90_UNLIMITED, NF90_CLOBBER
     13                    NF90_CLOSE,  NF90_PUT_ATT, NF90_UNLIMITED, NF90_CLOBBER,   &
     14                    NF90_64BIT_OFFSET
    1415  USE dynredem_mod, ONLY: cre_var, put_var, err, modname, fil
    1516  USE comvert_mod, ONLY: ap,bp,aps,bps,presnivs,pseudoalt,pa,preff, &
     
    110111
    111112!--- File creation
    112   CALL err(NF90_CREATE(fichnom,NF90_CLOBBER,nid))
     113  CALL err(NF90_CREATE(fichnom,IOR(NF90_CLOBBER,NF90_64BIT_OFFSET),nid))
    113114
    114115!--- Some global attributes
  • LMDZ6/branches/LMDZ-tracers/libf/dyn3dmem/groupe_loc.F

    r2600 r3851  
    4040c$OMP THREADPRIVATE(firstcall)
    4141
    42       data firstcall/.true./
    4342      integer ijb,ije,jjb,jje
    4443     
    45       if (firstcall) then
    46          if(mod(iim,2**ngroup).ne.0) stop'probleme du nombre ede point'
    47          firstcall=.false.
    48       endif
    49 
    5044c   Champs 1D
    5145
  • LMDZ6/branches/LMDZ-tracers/libf/dyn3dmem/guide_loc_mod.F90

    r3547 r3851  
    2727  LOGICAL, PRIVATE, SAVE  :: invert_p,invert_y,ini_anal
    2828  LOGICAL, PRIVATE, SAVE  :: guide_2D,guide_sav,guide_modele
     29!FC
     30  LOGICAL, PRIVATE, SAVE  :: convert_Pa
    2931 
    3032  REAL, PRIVATE, SAVE     :: tau_min_u,tau_max_u
     
    152154        guide_plevs=1
    153155    ENDIF
     156!FC
     157    CALL getpar('convert_Pa',.true.,convert_Pa,'Convert Pressure levels in Pa')
    154158    ! Fin raccord
    155159    CALL getpar('ini_anal',.false.,ini_anal,'Etat initial = analyse')
     
    16951699             status=NF_GET_VARA_REAL(ncidpl,varidpl,1,nlevnc,apnc)
    16961700#endif
    1697              apnc=apnc*100.! conversion en Pascals
     1701!FC Pour les corrections la pression est deja en Pascals on commente la ligne ci-dessous
     1702             IF(convert_Pa) apnc=apnc*100.! conversion en Pascals
    16981703             bpnc(:)=0.
    16991704         ENDIF
     
    21932198! ----------------------------------------------
    21942199! Ouverture du fichier
    2195         ierr=NF_CREATE("guide_ins.nc",NF_CLOBBER,nid)
     2200        ierr=NF_CREATE("guide_ins.nc",IOR(NF_CLOBBER,NF_64BIT_OFFSET),nid)
    21962201! Definition des dimensions
    21972202        ierr=NF_DEF_DIM(nid,"LONU",iip1,id_lonu)
  • LMDZ6/branches/LMDZ-tracers/libf/dyn3dmem/qminimum_loc.F

    • Property svn:keywords set to Id
    r2600 r3851  
     1!
     2!     $Id$
     3!
    14      SUBROUTINE qminimum_loc( q,nqtot,deltap )
    25      USE parallel_lmdz
    3       USE infotrac, ONLY: ok_isotopes,ntraciso,iqiso,ok_iso_verif
     6      USE infotrac, ONLY: ok_isotopes,ntraciso,iqiso,ok_iso_verif,             &
     7     &   ratiomin,qperemin ! CRisi 23nov2020
    48      IMPLICIT none
    59c
     
    913      include "dimensions.h"
    1014      include "paramet.h"
     15      include "iniprint.h"
    1116c
    1217      INTEGER nqtot ! CRisi: on remplace nq par nqtot
     
    4954c
    5055
    51         !write(*,*) 'qminimum 52: entree'
     56        !write(lunout,*) 'qminimum 52: entree'
    5257        if (ok_iso_verif) then
    5358           call check_isotopes(q,ij_begin,ij_end,'qminimum 52')   
     
    6065      q_follow(ijb:ije,:,1:2)=q(ijb:ije,:,1:2) 
    6166
    62       !write(*,*) 'qminimum 57'
     67      !write(lunout,*) 'qminimum 57'
    6368c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
    6469      DO 1000 k = 1, llm
     
    8590c le defaut en prennant de l'eau vapeur de la couche au-dessous.
    8691c
    87       !write(*,*) 'qminimum 81'
     92      !write(lunout,*) 'qminimum 81'
    8893      iq = iq_vap
    8994c
     
    113118c doit imprimer un message d'avertissement (saturation possible).
    114119c
    115       !write(*,*) 'qminimum 106'
     120      !write(lunout,*) 'qminimum 106'
    116121      nb_pump=0
    117122c$OMP DO SCHEDULE(STATIC)
     
    135140      ENDIF
    136141
    137       !write(*,*) 'qminimum 128'
     142      !write(lunout,*) 'qminimum 128'
    138143      if (ok_isotopes) then
     144              !write(lunout,*) 'qminimum 140'
    139145      ! CRisi: traiter de même les traceurs d'eau
    140146      ! Mais il faut les prendre à l'envers pour essayer de conserver la
     
    144150      ! rien ici et on croise les doigts pour que ça ne soit pas trop
    145151      ! génant
     152      ! en fait, si, c'est genant quand les isotopes doivent eux même transporter des
     153      ! traceurs -> apporter aussi un peu d'isotopes... Combien?
     154      ! Essayer tnat/2 = -500 permil? C'est déjà mieux que -1000
     155      ! permil...
     156      ! pb: que faire pour les traceurs?
     157c$OMP DO SCHEDULE(STATIC)     
    146158      DO i = ijb, ije
    147159        if (zx_pump(i).gt.0.0) then
     
    149161        endif !if (zx_pump(i).gt.0.0) then
    150162      enddo !DO i = ijb, ije 
     163c$OMP END DO
    151164
    152165      ! 2) transfert de vap vers les couches plus hautes
    153       !write(*,*) 'qminimum 139'
     166      !write(lunout,*) 'qminimum 158'
    154167      do k=2,llm
     168c$OMP DO SCHEDULE(STATIC)     
    155169        DO i = ijb, ije
    156170          if (zx_defau_diag(i,k,iq_vap).gt.0.0) then             
    157               ! on ajoute la vapeur en k             
    158               do ixt=1,ntraciso
     171              ! on ajoute la vapeur en k     
     172!              write(lunout,*) 'i,k,q_follow(i,k-1,iq_vap)=',
     173!     :                 i,k,q_follow(i,k-1,iq_vap)         
     174              if (q_follow(i,k-1,iq_vap).lt.qperemin) then
     175                write(lunout,*) 'tmp qmin: on stoppe'
     176                write(lunout,*) 'zx_pump(i)=',zx_pump(i)
     177                write(lunout,*) 'q_follow(i,:,iq_vap)=',
     178     :                   q_follow(i,:,iq_vap)
     179                write(lunout,*) 'k=',k
     180                call abort_gcm("qminimum","not enough vapor",1)
     181              endif 
     182            do ixt=1,ntraciso
     183!                write(lunout,*) 'qmin 168: ixt=',ixt
     184!                write(lunout,*) 'q(i,k,iqiso(ixt,iq_vap)=',
     185!     :             q(i,k,iqiso(ixt,iq_vap))
     186!                write(lunout,*) 'zx_defau_diag(i,k,iq_vap)=',
     187!     :                  zx_defau_diag(i,k,iq_vap)
     188!                write(lunout,*) 'q(i,k-1,iqiso(ixt,iq_vap)=',
     189!     :                   q(i,k-1,iqiso(ixt,iq_vap))     
     190
    159191               q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
    160192     :              +zx_defau_diag(i,k,iq_vap)
     
    207239          endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then
    208240        enddo !DO i = 1, ip1jmp1       
    209        enddo !do k=2,llm
     241c$OMP END DO
     242        enddo !do k=2,llm
    210243
    211244        if (ok_iso_verif) then
     
    217250        !write(*,*) 'qminimum 164'
    218251        do k=1,llm
     252c$OMP DO SCHEDULE(STATIC)
    219253        DO i = ijb, ije
    220254          if (zx_defau_diag(i,k,iq_liq).gt.0.0) then
     
    235269     :               -zx_defau_diag(i,k,iq_liq)
    236270          endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then
    237         enddo !DO i = 1, ip1jmp1
     271        enddo !DO i = ijb, ije
     272c$OMP END DO       
    238273       enddo !do k=2,llm 
    239274
  • LMDZ6/branches/LMDZ-tracers/libf/dyn3dmem/vlsplt_loc.F

    • Property svn:keywords set to Id
    r3435 r3851  
    1414c   --------------------------------------------------------------------
    1515      USE parallel_lmdz
    16       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
     16      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     17     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
    1718      IMPLICIT NONE
    1819c
     
    329330! Il faut faire ça avant d'avoir mis à jour q et masse
    330331
    331       !write(*,*) 'vlsplt 326: iq,ijb_x,nqfils(iq)=',iq,ijb_x,nqfils(iq)
    332 
    333       if (nqfils(iq).gt.0) then 
     332       if (nqfils(iq).gt.0) then
    334333       do ifils=1,nqdesc(iq)
     334       !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
     335        ! attention: comme Ratio est utilisé comme q dans l'appel
     336        ! recursif, il doit contenir à lui seul tous les indices de tous
     337        ! les descendants!
    335338         iq2=iqfils(ifils,iq)
    336339c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     
    339342           ! On a besoin de q et masse seulement entre ijb et ije. On ne
    340343           ! les calcule donc que de ijb à ije
    341            masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    342            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     344           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     345           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     346           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
     347             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     348           else
     349             Ratio(ij,l,iq2)=ratiomin
     350           endif
    343351          enddo   
    344352         enddo
     
    352360! end CRisi
    353361
    354       !write(*,*) 'vlsplt 360: iq,ijb_x=',iq,ijb_x
    355362
    356363c   calcul des tENDances
     
    358365      DO l=1,llm
    359366         DO ij=ijb+1,ije
    360             new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l)
     367            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     368            new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),masseqmin)
    361369            q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+
    362370     &        u_mq(ij-1,l)-u_mq(ij,l))
     
    371379      ENDDO
    372380c$OMP END DO NOWAIT
    373       !write(*,*) 'vlsplt 380: iq,ijb_x=',iq,ijb_x
    374381
    375382! retablir les fils en rapport de melange par rapport a l'air:
     
    378385      if (nqfils(iq).gt.0) then 
    379386       do ifils=1,nqdesc(iq)
     387       !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
    380388         iq2=iqfils(ifils,iq) 
    381389c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
     
    414422c   --------------------------------------------------------------------
    415423      USE parallel_lmdz
    416       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
     424      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     425     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi   
    417426      USE comconst_mod, ONLY: pi
    418427      IMPLICIT NONE
     
    468477      DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
    469478      INTEGER ijb,ije
     479      INTEGER ijbm,ijem
    470480
    471481      ijb=ij_begin-2*iip1
     
    726736      ijb=ij_begin-2*iip1
    727737      ije=ij_end+2*iip1
     738      ijbm=ij_begin-iip1
     739      ijem=ij_end+iip1
    728740      if (pole_nord) ijb=ij_begin
    729       if (pole_sud)  ije=ij_end
    730    
     741      if (pole_sud)  ije=ij_end 
     742      if (pole_nord) ijbm=ij_begin
     743      if (pole_sud)  ijem=ij_end
     744
    731745      if (nqfils(iq).gt.0) then 
    732746       do ifils=1,nqdesc(iq)
     747       !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
    733748         iq2=iqfils(ifils,iq)
    734749c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    735750         DO l=1,llm
     751          ! modif des bornes: CRisi 16 nov 2020
     752          ! d'abord masse avec bornes corrigées
     753          DO ij=ijbm,ijem
     754           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     755           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     756          enddo !DO ij=ijbm,ijem
     757
     758          ! ensuite Ratio avec anciennes bornes
    736759         DO ij=ijb,ije
    737            masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    738            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
    739           enddo   
    740          enddo
     760           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     761           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
     762             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     763           else
     764             Ratio(ij,l,iq2)=ratiomin 
     765           endif     
     766          enddo !DO ij=ijbm,ijem 
     767         enddo !DO l=1,llm
    741768c$OMP END DO NOWAIT
    742769        enddo !do ifils=1,nqdesc(iq)
     
    868895      USE parallel_lmdz
    869896      USE vlz_mod
    870       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 
     897      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     898     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
     899     
    871900      IMPLICIT NONE
    872901c
     
    10841113                lorig(ij,l)=lorig(ij,l)-1
    10851114             ENDIF
     1115             ! CRisi 24nov2020: ajout d'un message d'erreur clair au lieu d'un plantage
     1116             ! pour seg fault
     1117             if (lorig(ij,l).eq.0) then
     1118                call abort_gcm("vlz in vlsplt_loc",
     1119     :           "unfixable violation of CFL",1)
     1120             endif
    10861121             morig(ij,l)=masse(ij,lorig(ij,l),iq)
    10871122             qorig(ij,l)=q(ij,lorig(ij,l),iq)
     
    11271162      if (nqfils(iq).gt.0) then 
    11281163       do ifils=1,nqdesc(iq)
     1164       !do ifils=1,nqfils(iq) ! modif C Risi 22 nov 2020
    11291165         iq2=iqfils(ifils,iq)
    11301166c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    11311167         DO l=1,llm
    11321168          DO ij=ijb,ije
    1133            masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    1134            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     1169           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     1170           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     1171           if (q(ij,l,iq).gt.qperemin) then
     1172             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     1173           else
     1174             Ratio(ij,l,iq2)=ratiomin
     1175           endif
    11351176           !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015
    11361177           w(ij,l,iq2)=wq(ij,l,iq)
  • LMDZ6/branches/LMDZ-tracers/libf/dyn3dmem/vlspltqs_loc.F

    • Property svn:keywords set to Id
    r2603 r3851  
     1!
     2!     $Id$
     3!
    14      SUBROUTINE vlxqs_loc(q,pente_max,masse,u_m,qsat,ijb_x,ije_x,iq)
    25c
     
    912c   --------------------------------------------------------------------
    1013      USE parallel_lmdz
    11       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 
     14      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     15     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
    1216      IMPLICIT NONE
    1317c
     
    342346         DO l=1,llm
    343347          DO ij=ijb,ije
    344            masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    345            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
     348           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     349           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     350           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
     351             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     352           else
     353             Ratio(ij,l,iq2)=ratiomin
     354           endif
    346355          enddo   
    347356         enddo
     
    362371      DO l=1,llm
    363372         DO ij=ijb+1,ije
    364             new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l)
     373            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     374            new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),masseqmin)
    365375            q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+
    366376     &      u_mq(ij-1,l)-u_mq(ij,l))
     
    416426c   --------------------------------------------------------------------
    417427      USE parallel_lmdz
    418       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 
     428      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     429     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
    419430      USE comconst_mod, ONLY: pi
    420431      IMPLICIT NONE
     
    423434      include "paramet.h"
    424435      include "comgeom.h"
     436      include "iniprint.h" 
    425437c
    426438c
     
    464476      DATA first/.true./
    465477      INTEGER ijb,ije
     478      INTEGER ijbm,ijem
    466479
    467480      ijb=ij_begin-2*iip1
     
    724737      ijb=ij_begin-2*iip1
    725738      ije=ij_end+2*iip1
     739      ijbm=ij_begin-iip1
     740      ijem=ij_end+iip1
    726741      if (pole_nord) ijb=ij_begin
    727742      if (pole_sud)  ije=ij_end 
    728 
     743      if (pole_nord) ijbm=ij_begin
     744      if (pole_sud)  ijem=ij_end
     745
     746      !write(lunout,*) 'vlspltqs 737: iq,ijb,ije=',iq,ijb,ije
     747      !write(lunout,*) 'ij_begin,ij_end=',ij_begin,ij_end
     748      !write(lunout,*) 'pole_nord,pole_sud=',pole_nord,pole_sud
    729749      if (nqfils(iq).gt.0) then 
    730750       do ifils=1,nqdesc(iq)
     
    732752c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
    733753         DO l=1,llm
     754          ! modif des bornes: CRisi 16 nov 2020
     755          ! d'abord masse avec bornes corrigées
     756          DO ij=ijbm,ijem
     757           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     758           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     759          enddo !DO ij=ijbm,ijem
     760
     761          ! ensuite Ratio avec anciennes bornes
    734762          DO ij=ijb,ije
    735            masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    736            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)   
    737           enddo   
    738          enddo
     763           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     764           !write(lunout,*) 'ij,l,q(ij,l,iq)=',ij,l,q(ij,l,iq)
     765           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
     766             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     767           else
     768             Ratio(ij,l,iq2)=ratiomin   
     769           endif
     770          enddo !DO ij=ijbm,ijem
     771         enddo !DO l=1,llm
    739772c$OMP END DO NOWAIT
    740773        enddo !do ifils=1,nqdesc(iq)
    741774        do ifils=1,nqfils(iq)
    742775         iq2=iqfils(ifils,iq)
     776         !write(lunout,*) 'vly: appel recursiv vly iq2=',iq2
    743777         call vly_loc(Ratio,pente_max,masse,qbyv,iq2)
    744778        enddo !do ifils=1,nqfils(iq)
Note: See TracChangeset for help on using the changeset viewer.