Changeset 4007


Ignore:
Timestamp:
Nov 17, 2021, 12:06:46 PM (3 years ago)
Author:
Ehouarn Millour
Message:

Some fixes for phylmdiso:

  • serial advection scheme updated to match the ones in dyn3dmem
  • follow up on the changes in tracer name string length from r4005

EM

Location:
LMDZ6/trunk/libf
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/dyn3d/vlsplt.F

    r2603 r4007  
    139139      END
    140140      RECURSIVE SUBROUTINE vlx(q,pente_max,masse,u_m,iq)
    141       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
     141      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi
     142     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
    142143
    143144c     Auteurs:   P.Le Van, F.Hourdin, F.Forget
     
    456457          DO ij=iip2,ip1jm
    457458           ! On a besoin de q et masse seulement entre iip2 et ip1jm
    458            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    459            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     459           !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
     460           !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     461           !Mvals: veiller a ce qu'on n'ait pas de denominateur nul
     462           masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     463           if (q(ij,l,iq).gt.qperemin) then
     464             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     465           else
     466             Ratio(ij,l,iq2)=ratiomin
     467           endif
    460468          enddo   
    461469         enddo
     
    473481      DO l=1,llm
    474482         DO ij=iip2+1,ip1jm
    475             new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l)
     483            !MVals: veiller a ce qu'on ait pas de denominateur nul
     484            new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),masseqmin)
    476485            q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+
    477486     &      u_mq(ij-1,l)-u_mq(ij,l))
     
    489498      ! On calcule q entre iip2+1,ip1jm -> on fait pareil pour ratio
    490499      ! puis on boucle en longitude
    491       if (nqdesc(iq).gt.0) then 
     500      if (nqfils(iq).gt.0) then 
    492501       do ifils=1,nqdesc(iq)
    493502         iq2=iqfils(ifils,iq) 
     
    510519      END
    511520      RECURSIVE SUBROUTINE vly(q,pente_max,masse,masse_adv_v,iq)
    512       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
     521      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi
     522     &                     qperemin,masseqmin
    513523c
    514524c     Auteurs:   P.Le Van, F.Hourdin, F.Forget
     
    777787           ! attention, chaque fils doit avoir son masseq, sinon, le 1er
    778788           ! fils ecrase le masseq de ses freres.
    779            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    780            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
     789           !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
     790           !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
     791           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     792           masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     793           if (q(ij,l,iq).gt.qperemin) then
     794             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     795           else
     796             Ratio(ij,l,iq2)=ratiomin
     797           endif
    781798          enddo   
    782799         enddo
     
    871888      END
    872889      RECURSIVE SUBROUTINE vlz(q,pente_max,masse,w,iq)
    873       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
     890      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi
     891     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
    874892c
    875893c     Auteurs:   P.Le Van, F.Hourdin, F.Forget
     
    9971015         DO l=1,llm
    9981016          DO ij=1,ip1jmp1
    999            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    1000            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)       
     1017           !masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
     1018           !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)       
     1019           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     1020           masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     1021           if (q(ij,l,iq).gt.qperemin) then
     1022             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     1023           else
     1024             Ratio(ij,l,iq2)=ratiomin
     1025           endif     
    10011026          enddo   
    10021027         enddo
  • LMDZ6/trunk/libf/phylmdiso/infotrac_phy.F90

    r3940 r4007  
    4242
    4343! Name variables
    44   CHARACTER(len=20), ALLOCATABLE, DIMENSION(:), SAVE :: tname ! tracer short name for restart and diagnostics
    45   CHARACTER(len=23), ALLOCATABLE, DIMENSION(:), SAVE :: ttext ! tracer long name for diagnostics
     44  INTEGER,PARAMETER :: tname_lenmax=128
     45  CHARACTER(len=tname_lenmax), ALLOCATABLE, DIMENSION(:), SAVE :: tname ! tracer short name for restart and diagnostics
     46  CHARACTER(len=tname_lenmax+3), ALLOCATABLE, DIMENSION(:), SAVE :: ttext ! tracer long name for diagnostics
    4647!$OMP THREADPRIVATE(tname,ttext)
    4748
     
    138139    INTEGER,INTENT(IN) :: id_BIN01_strat_
    139140#endif
    140     CHARACTER(len=20),INTENT(IN) :: tname_(nqtot_) ! tracer short name for restart and diagnostics
    141     CHARACTER(len=23),INTENT(IN) :: ttext_(nqtot_) ! tracer long name for diagnostics
    142     CHARACTER(len=4),INTENT(IN) :: type_trac_
     141    CHARACTER(len=*),INTENT(IN) :: tname_(nqtot_) ! tracer short name for restart and diagnostics
     142    CHARACTER(len=*),INTENT(IN) :: ttext_(nqtot_) ! tracer long name for diagnostics
     143    CHARACTER(len=*),INTENT(IN) :: type_trac_
    143144    INTEGER,INTENT(IN) :: niadv_ (nqtot_) ! equivalent dyn / physique
    144145    INTEGER,INTENT(IN) :: conv_flg_(nbtr_)
    145146    INTEGER,INTENT(IN) :: pbl_flg_(nbtr_)
    146     CHARACTER(len=8),INTENT(IN) :: solsym_(nbtr_)
     147    CHARACTER(len=*),INTENT(IN) :: solsym_(nbtr_)
    147148    ! Isotopes:
    148149    INTEGER,INTENT(IN) :: nqfils_(nqtot_)
Note: See TracChangeset for help on using the changeset viewer.