Changeset 3924 for LMDZ6/trunk


Ignore:
Timestamp:
Jun 8, 2021, 6:33:45 PM (3 years ago)
Author:
Laurent Fairhead
Message:

Version modifiee par Camille pour version isotopique

Location:
LMDZ6/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/dyn3d_common/infotrac.F90

    r3923 r3924  
    1717  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: itr_indice
    1818
    19 ! CRisi: nb traceurs p?res= directement advect?s par l'air
     19! CRisi: nb traceurs peres= directement advectes par l'air
    2020  INTEGER, SAVE :: nqperes
    2121
     
    3939! CRisi: tableaux de fils
    4040  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: nqfils
    41   INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: nqdesc ! nombres de fils + nombre de tous les petits fils sur toutes les g?n?rations
     41  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE    :: nqdesc ! nombres de fils + nombre de tous les petits fils sur toutes les generations
    4242  INTEGER, SAVE :: nqdesc_tot
    4343  INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE    :: iqfils
     
    6161  LOGICAL, DIMENSION(niso_possibles),SAVE ::  use_iso
    6262  INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE ::  iqiso ! donne indice iq en fn de (ixt,phase)
    63   INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_num ! donne num?ro iso entre 1 et niso_possibles en fn de nqtot
    64   INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_indnum ! donne num?ro iso entre 1 et niso effectif en fn de nqtot
    65   INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  zone_num ! donne num?ro de la zone de tracage en fn de nqtot
    66   INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  phase_num ! donne num?ro de la zone de tracage en fn de nqtot
    67   INTEGER, DIMENSION(niso_possibles), SAVE :: indnum_fn_num ! donne indice entre entre 1 et niso en fonction du num?ro d isotope entre 1 et niso_possibles
    68   INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE ::  index_trac ! num?ro ixt en fn izone, indnum entre 1 et niso
     63  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_num ! donne numero iso entre 1 et niso_possibles en fn de nqtot
     64  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  iso_indnum ! donne numero iso entre 1 et niso effectif en fn de nqtot
     65  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  zone_num ! donne numero de la zone de tracage en fn de nqtot
     66  INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  phase_num ! donne numero de la zone de tracage en fn de nqtot
     67  INTEGER, DIMENSION(niso_possibles), SAVE :: indnum_fn_num ! donne indice entre entre 1 et niso en fonction du numero d isotope entre 1 et niso_possibles
     68  INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE ::  index_trac ! numero ixt en fn izone, indnum entre 1 et niso
    6969  INTEGER,SAVE :: niso,ntraceurs_zone,ntraciso
    7070
     
    257257          IF (nqo == 4 .AND. type_trac=='inco') THEN ! ThL
    258258             WRITE(lunout,*) trim(modname),': you are coupling with INCA, and also using CO2i.'
    259              nqo = 3    ! A am?liorier... je force 3 traceurs eau...  ThL
     259             nqo = 3    ! A ameliorier... je force 3 traceurs eau...  ThL
    260260             WRITE(lunout,*) trim(modname),': nqo = ',nqo
    261261          ELSE
     
    319319!     iadv = 13   schema  Frederic Hourdin II
    320320!     iadv = 16   schema  PPM Monotone(Collela & Woodward 1984)
    321 !     iadv = 17   schema  PPM Semi Monotone (overshoots autoris?s)
    322 !     iadv = 18   schema  PPM Positif Defini (overshoots undershoots autoris?s)
     321!     iadv = 17   schema  PPM Semi Monotone (overshoots autorises)
     322!     iadv = 18   schema  PPM Positif Defini (overshoots undershoots autorises)
    323323!     iadv = 20   schema  Slopes
    324324!     iadv = 30   schema  Prather
     
    595595
    596596
    597 ! CRisi: quels sont les traceurs fils et les traceurs p?res.
    598 ! initialiser tous les tableaux d'indices li?s aux traceurs familiaux
    599 ! + v?rifier que tous les p?res sont ?crits en premi?res positions
     597! CRisi: quels sont les traceurs fils et les traceurs peres.
     598! initialiser tous les tableaux d'indices lies aux traceurs familiaux
     599! + verifier que tous les peres sont ecrits en premieres positions
    600600    ALLOCATE(nqfils(nqtot),nqdesc(nqtot))   
    601601    ALLOCATE(iqfils(nqtot,nqtot))   
     
    609609    DO iq=1,nqtot
    610610      if (tnom_transp(iq) == 'air') then
    611         ! ceci est un traceur p?re
     611        ! ceci est un traceur pere
    612612        WRITE(lunout,*) 'Le traceur',iq,', appele ',trim(tnom_0(iq)),', est un pere'
    613613        nqperes=nqperes+1
    614614        iqpere(iq)=0
    615615      else !if (tnom_transp(iq) == 'air') then
    616         ! ceci est un fils. Qui est son p?re?
     616        ! ceci est un fils. Qui est son pere?
    617617        WRITE(lunout,*) 'Le traceur',iq,', appele ',trim(tnom_0(iq)),', est un fils'
    618618        continu=.true.
     
    620620        do while (continu)           
    621621          if (tnom_transp(iq) == tnom_0(ipere)) then
    622             ! Son p?re est ipere
     622            ! Son pere est ipere
    623623            WRITE(lunout,*) 'Le traceur',iq,'appele ', &
    624624      &          trim(tnom_0(iq)),' est le fils de ',ipere,'appele ',trim(tnom_0(ipere))
     
    646646    WRITE(lunout,*) 'iqfils=',iqfils
    647647
    648 ! Calculer le nombre de descendants ? partir de iqfils et de nbfils
     648! Calculer le nombre de descendants a partir de iqfils et de nbfils
    649649    DO iq=1,nqtot   
    650650      generation=0
     
    669669    WRITE(lunout,*) 'nqdesc_tot=',nqdesc_tot
    670670
    671 ! Interdire autres sch?mas que 10 pour les traceurs fils, et autres sch?mas
    672 ! que 10 et 14 si des p?res ont des fils
     671! Interdire autres schemas que 10 pour les traceurs fils, et autres schemas
     672! que 10 et 14 si des peres ont des fils
    673673    do iq=1,nqtot
    674674      if (iqpere(iq).gt.0) then
    675         ! ce traceur a un p?re qui n'est pas l'air
    676         ! Seul le sch?ma 10 est autoris?
     675        ! ce traceur a un pere qui n'est pas l'air
     676        ! Seul le schema 10 est autorise
    677677        if (iadv(iq)/=10) then
    678678           WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv(iq),' is not implemented for sons'
    679679          CALL abort_gcm('infotrac_init','Sons should be advected by scheme 10',1)
    680680        endif
    681         ! Le traceur p?re ne peut ?tre advect? que par sch?ma 10 ou 14:
     681        ! Le traceur pere ne peut etre advecte que par schema 10 ou 14:
    682682        IF (iadv(iqpere(iq))/=10 .AND. iadv(iqpere(iq))/=14) THEN
    683683          WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv(iq),' is not implemented for fathers'
     
    693693
    694694!    if (ntraciso.gt.0) then
    695 ! le 18 sep 2020: on enl?ve la condition ntraciso.gt.0 car nqtottr doit ?tre
    696 ! connu m?me si il n'y a pas d'isotopes!
     695! le 18 sep 2020: on enleve la condition ntraciso.gt.0 car nqtottr doit etre
     696! connu meme si il n'y a pas d'isotopes!
    697697        write(lunout,*) 'infotrac 702: nbtr,ntraciso=',nbtr,ntraciso
    698698! retrancher les traceurs isotopiques de la liste des traceurs qui passent dans
     
    703703        nqtottr=nqtot-nqo*(1+ntraciso)
    704704        write(lunout,*) 'infotrac 704: nqtottr,nqtot,nqo=',nqtottr,nqtot,nqo
    705         ! Rq: nqtottr n'est pas forc?ment ?gal ? nbtr dans le cas o? new_iq /= nqtrue
     705        ! Rq: nqtottr n'est pas forcement egal a nbtr dans le cas ou new_iq /= nqtrue
    706706        ALLOCATE (itr_indice(nqtottr)) 
    707707        itr_indice(:)=0 
     
    929929
    930930        if (nb_iso(ixt,1).eq.1) then
    931           ! on v?rifie que toutes les phases ont le m?me nombre de
     931          ! on verifie que toutes les phases ont le meme nombre de
    932932          ! traceurs
    933933          do phase=2,nqo
     
    942942          ntraceurs_zone=nb_traciso(ixt,1)
    943943
    944           ! on v?rifie que toutes les phases ont le m?me nombre de
     944          ! on verifie que toutes les phases ont le meme nombre de
    945945          ! traceurs
    946946          do phase=2,nqo
     
    951951            endif 
    952952          enddo  !do phase=2,nqo
    953           ! on v?rifie que tous les isotopes ont le m?me nombre de
     953          ! on verifie que tous les isotopes ont le meme nombre de
    954954          ! traceurs
    955955          if (ntraceurs_zone_prec.gt.0) then               
  • LMDZ6/trunk/libf/dynphy_lonlat/phylmd/iniphysiq_mod.F90

    r3870 r3924  
    2424                      iso_indnum,zone_num,phase_num,&
    2525                      indnum_fn_num,index_trac,&
    26                       niso,ntraceurs_zone,ntraciso
     26                      niso,ntraceurs_zone,ntraciso,nqtottr,itr_indice
    2727#ifdef CPP_StratAer
    2828  USE infotrac, ONLY: nbtr_bin, nbtr_sulgas, id_OCS_strat, &
     
    146146
    147147  ! Initialize tracer names, numbers, etc. for physics
    148   CALL init_infotrac_phy(nqtot,nqo,nbtr,nqCO2,tname,ttext,type_trac,&
     148  CALL init_infotrac_phy(nqtot,nqo,nbtr,nqtottr,nqCO2,tname,ttext,type_trac,&
    149149                         niadv,conv_flg,pbl_flg,solsym,&
    150150                         nqfils,nqdesc,nqdesc_tot,iqfils,iqpere,&
     
    154154                         iso_indnum,zone_num,phase_num,&
    155155                         indnum_fn_num,index_trac,&
    156                          niso,ntraceurs_zone,ntraciso&
     156                         niso,ntraceurs_zone,ntraciso,itr_indice &
    157157#ifdef CPP_StratAer
    158158                         ,nbtr_bin,nbtr_sulgas&
  • LMDZ6/trunk/libf/phylmd/infotrac_phy.F90

    r3872 r3924  
    2020  INTEGER, SAVE :: nbtr
    2121!$OMP THREADPRIVATE(nbtr)
     22
     23  INTEGER, SAVE :: nqtottr
     24!$OMP THREADPRIVATE(nqtottr)
    2225
    2326! ThL : number of CO2 tracers                   ModThL
     
    97100    INTEGER,SAVE :: niso,ntraceurs_zone,ntraciso
    98101!$OMP THREADPRIVATE(niso,ntraceurs_zone,ntraciso)
     102
     103    INTEGER, ALLOCATABLE, DIMENSION(:), SAVE ::  itr_indice ! numéro iq entre 1 et nqtot qui correspond au traceur itr entre 1 et nqtottr
     104!$OMP THREADPRIVATE(itr_indice)
    99105 
    100106CONTAINS
    101107
    102   SUBROUTINE init_infotrac_phy(nqtot_,nqo_,nbtr_,nqCO2_,tname_,ttext_,type_trac_,&
     108  SUBROUTINE init_infotrac_phy(nqtot_,nqo_,nbtr_,nqtottr_,nqCO2_,tname_,ttext_,type_trac_,&
    103109                               niadv_,conv_flg_,pbl_flg_,solsym_,&
    104110                               nqfils_,nqdesc_,nqdesc_tot_,iqfils_,iqpere_,&
     
    108114                               iso_indnum_,zone_num_,phase_num_,&
    109115                               indnum_fn_num_,index_trac_,&
    110                                niso_,ntraceurs_zone_,ntraciso_&
     116                               niso_,ntraceurs_zone_,ntraciso_,itr_indice_&
    111117#ifdef CPP_StratAer
    112118                               ,nbtr_bin_,nbtr_sulgas_&
     
    122128    INTEGER,INTENT(IN) :: nqo_
    123129    INTEGER,INTENT(IN) :: nbtr_
     130    INTEGER,INTENT(IN) :: nqtottr_
    124131    INTEGER,INTENT(IN) :: nqCO2_
    125132#ifdef CPP_StratAer
     
    162169    INTEGER,INTENT(IN) :: ntraceurs_zone_
    163170    INTEGER,INTENT(IN) :: ntraciso_
     171    INTEGER,INTENT(IN) :: itr_indice_(nqtottr_)
    164172
    165173    CHARACTER(LEN=30) :: modname="init_infotrac_phy"
     
    169177    nbtr=nbtr_
    170178    nqCO2=nqCO2_
     179    nqtottr=nqtottr_
    171180#ifdef CPP_StratAer
    172181    nbtr_bin=nbtr_bin_
     
    242251      ALLOCATE(index_trac(ntraceurs_zone,niso))
    243252      index_trac(:,:)=index_trac_(:,:)
     253
     254      ALLOCATE(itr_indice(nqtottr))
     255      itr_indice(:)=itr_indice_(:)
    244256    ENDIF ! of IF(ok_isotopes)
    245257 
  • LMDZ6/trunk/makelmdz_fcm

    r3911 r3924  
    4040full=''
    4141libphy=false
     42isotopes=false
     43isoverif=false
     44diagiso=false
     45isotrac=false
    4246
    4347arch_defined="FALSE"
     
    104108[-dust true/false]    : compile with/without the dust package by Boucher and co (default: false)
    105109[-strataer true/false]    : compile with/without the strat aer package by Boucher and co (default: false)
     110[-isotopes true/false]    : compile with/without water isotopes in the physics
     111[-isoverif true/false]    : compile with/without verifications for water isotopes in the physics
     112[-diagiso true/false]    : compile with/without special diagnostics for water isotopes in the physics
     113[-isotrac true/false]    : compile with/without tracers of water isotopes in the physics
    106114[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
    107115[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
     
    169177          chimie="$2" ; shift ; shift ;;
    170178
     179      "-isotopes")
     180          isotopes="$2" ; shift ; shift ;;
     181
     182      "-isoverif")
     183          isoverif="$2" ; shift ; shift ;;
     184
     185      "-diagiso")
     186          diagiso="$2" ; shift ; shift ;;
     187
     188      "-isotrac")
     189          isotrac="$2" ; shift ; shift ;;
     190
    171191      "-parallel")
    172192          parallel="$2" ; shift ; shift ;;
     
    341361   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
    342362   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
     363fi
     364
     365if [[ "$isotopes" == "true" ]]
     366then
     367   CPP_KEY="$CPP_KEY ISO"
     368fi
     369
     370if [[ "$isoverif" == "true" ]]
     371then
     372   CPP_KEY="$CPP_KEY ISOVERIF"
     373fi
     374
     375if [[ "$diagiso" == "true" ]]
     376then
     377   CPP_KEY="$CPP_KEY DIAGISO"
     378fi
     379
     380if [[ "$isotrac" == "true" ]]
     381then
     382   CPP_KEY="$CPP_KEY ISOTRAC"
    343383fi
    344384
     
    657697fi
    658698
    659 if [[ $libphy == "true" ]]
     699if [[ "$isotopes" == "true" ]]
     700then
     701  SUFF_NAME=${SUFF_NAME}_iso
     702fi
     703if [[ "$isoverif" == "true" ]]
     704then
     705  SUFF_NAME=${SUFF_NAME}_isoverif
     706fi
     707if [[ "$isotrac" == "true" ]]
     708then
     709  SUFF_NAME=${SUFF_NAME}_isotrac
     710fi
     711if [[ "$diagiso" == "true" ]]
     712then
     713  SUFF_NAME=${SUFF_NAME}_diagiso
     714fi
     715
     716if [[ $libphy == "true" ]]x
    660717then
    661718  # special case where we compile only the physics
Note: See TracChangeset for help on using the changeset viewer.