Ignore:
Timestamp:
Jul 24, 2024, 2:54:37 PM (4 months ago)
Author:
abarral
Message:

rename modules properly lmdz_*
move ismin, ismax, minmax into new lmdz_libmath.f90
(lint) uppercase fortran keywords

Location:
LMDZ6/branches/Amaury_dev/libf/dyn3d_common
Files:
40 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/academic.h

    r5099 r5116  
    33
    44      common/academic/tetarappel,knewt_t,kfrict,knewt_g,clat4
    5       real :: tetarappel(ip1jmp1,llm)
    6       real :: knewt_t(llm)
    7       real :: kfrict(llm)
    8       real :: knewt_g
    9       real :: clat4(ip1jmp1)
     5      REAL :: tetarappel(ip1jmp1,llm)
     6      REAL :: knewt_t(llm)
     7      REAL :: kfrict(llm)
     8      REAL :: knewt_g
     9      REAL :: clat4(ip1jmp1)
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/adaptdt.f90

    r5114 r5116  
    4343    dtbon=dtvr/n
    4444
    45    return
    46 end subroutine adaptdt
     45   RETURN
     46END SUBROUTINE adaptdt
    4747
    4848
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/advn.f90

    r5105 r5116  
    2525  !   Arguments:
    2626  !   ----------
    27   integer :: mode
    28   real :: masse(ip1jmp1,llm)
     27  INTEGER :: mode
     28  REAL :: masse(ip1jmp1,llm)
    2929  REAL :: pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm)
    3030  REAL :: q(ip1jmp1,llm)
     
    3535  !
    3636  INTEGER :: i,ij,l,j,ii
    37   integer :: ijlqmin,iqmin,jqmin,lqmin
    38   integer :: ismin
    39   !
    40   real :: zm(ip1jmp1,llm),newmasse
    41   real :: mu(ip1jmp1,llm)
    42   real :: mv(ip1jm,llm)
    43   real :: mw(ip1jmp1,llm+1)
    44   real :: zq(ip1jmp1,llm),zz,qpn,qps
    45   real :: zqg(ip1jmp1,llm),zqd(ip1jmp1,llm)
    46   real :: zqs(ip1jmp1,llm),zqn(ip1jmp1,llm)
    47   real :: zqh(ip1jmp1,llm),zqb(ip1jmp1,llm)
    48   real :: temps0,temps1,temps2,temps3
    49   real :: ztemps1,ztemps2,ssum
     37  INTEGER :: ijlqmin,iqmin,jqmin,lqmin
     38  INTEGER :: ismin
     39  !
     40  REAL :: zm(ip1jmp1,llm),newmasse
     41  REAL :: mu(ip1jmp1,llm)
     42  REAL :: mv(ip1jm,llm)
     43  REAL :: mw(ip1jmp1,llm+1)
     44  REAL :: zq(ip1jmp1,llm),zz,qpn,qps
     45  REAL :: zqg(ip1jmp1,llm),zqd(ip1jmp1,llm)
     46  REAL :: zqs(ip1jmp1,llm),zqn(ip1jmp1,llm)
     47  REAL :: zqh(ip1jmp1,llm),zqb(ip1jmp1,llm)
     48  REAL :: temps0,temps1,temps2,temps3
     49  REAL :: ztemps1,ztemps2,ssum
    5050  save temps1,temps2,temps3
    51   real :: zzpbar,zzw
    52 
    53   real :: qmin,qmax
     51  REAL :: zzpbar,zzw
     52
     53  REAL :: qmin,qmax
    5454  data qmin,qmax/0.,1./
    5555  data temps1,temps2,temps3/0.,0.,0./
     
    139139  !   Arguments:
    140140  !   ----------
    141   real :: q(ip1jmp1,llm),qg(ip1jmp1,llm),qd(ip1jmp1,llm)
     141  REAL :: q(ip1jmp1,llm),qg(ip1jmp1,llm),qd(ip1jmp1,llm)
    142142  !
    143143  !  Local
     
    146146  INTEGER :: ij,l
    147147  !
    148   real :: dxqu(ip1jmp1),zqu(ip1jmp1)
    149   real :: zqmax(ip1jmp1),zqmin(ip1jmp1)
     148  REAL :: dxqu(ip1jmp1),zqu(ip1jmp1)
     149  REAL :: zqmax(ip1jmp1),zqmin(ip1jmp1)
    150150  logical :: extremum(ip1jmp1)
    151151
    152   integer :: mode
     152  INTEGER :: mode
    153153  save mode
    154154  data mode/1/
     
    156156  !   calcul des pentes en u:
    157157  !   -----------------------
    158   if (mode==0) then
     158  if (mode==0) THEN
    159159     do l=1,llm
    160160        do ij=1,ip1jm
     
    206206     enddo
    207207     do ij=iip2+1,ip1jm
    208         if(extremum(ij)) then
     208        IF(extremum(ij)) THEN
    209209           qg(ij,l)=q(ij,l)
    210210           qd(ij,l)=q(ij,l)
     
    222222
    223223     do ij=iip2+1,ip1jm
    224         if(extremum(ij).and..not.extremum(ij-1)) &
     224        IF(extremum(ij).and..not.extremum(ij-1)) &
    225225              qd(ij-1,l)=q(ij,l)
    226226     enddo
     
    256256  !   Arguments:
    257257  !   ----------
    258   real :: q(ip1jmp1,llm),qs(ip1jmp1,llm),qn(ip1jmp1,llm)
     258  REAL :: q(ip1jmp1,llm),qs(ip1jmp1,llm),qn(ip1jmp1,llm)
    259259  !
    260260  !  Local
     
    263263  INTEGER :: ij,l
    264264  !
    265   real :: dyqv(ip1jm),zqv(ip1jm,llm)
    266   real :: zqmax(ip1jm),zqmin(ip1jm)
     265  REAL :: dyqv(ip1jm),zqv(ip1jm,llm)
     266  REAL :: zqmax(ip1jm),zqmin(ip1jm)
    267267  logical :: extremum(ip1jmp1)
    268268
    269   integer :: mode
     269  INTEGER :: mode
    270270  save mode
    271271  data mode/1/
    272272
    273   if (mode==0) then
     273  if (mode==0) THEN
    274274     do l=1,llm
    275275        do ij=1,ip1jmp1
     
    315315
    316316     do ij=iip2,ip1jm
    317         if(extremum(ij)) then
     317        IF(extremum(ij)) THEN
    318318           qs(ij,l)=q(ij,l)
    319319           qn(ij,l)=q(ij,l)
     
    352352  !   Arguments:
    353353  !   ----------
    354   real :: q(ip1jmp1,llm),qh(ip1jmp1,llm),qb(ip1jmp1,llm)
     354  REAL :: q(ip1jmp1,llm),qh(ip1jmp1,llm),qb(ip1jmp1,llm)
    355355  !
    356356  !  Local
     
    359359  INTEGER :: ij,l
    360360  !
    361   real :: dzqw(ip1jmp1,llm+1),zqw(ip1jmp1,llm+1)
    362   real :: zqmax(ip1jmp1,llm),zqmin(ip1jmp1,llm)
     361  REAL :: dzqw(ip1jmp1,llm+1),zqw(ip1jmp1,llm+1)
     362  REAL :: zqmax(ip1jmp1,llm),zqmin(ip1jmp1,llm)
    363363  logical :: extremum(ip1jmp1,llm)
    364364
    365   integer :: mode
     365  INTEGER :: mode
    366366  save mode
    367367
     
    371371  !   -----------------------
    372372
    373   if (mode==0) then
     373  if (mode==0) THEN
    374374     do l=1,llm
    375375        do ij=1,ip1jmp1
     
    424424  do l=2,llm-1
    425425     do ij=1,ip1jmp1
    426         if(extremum(ij,l)) then
     426        IF(extremum(ij,l)) THEN
    427427           qh(ij,l)=q(ij,l)
    428428           qb(ij,l)=q(ij,l)
     
    435435  ! do l=2,llm-1
    436436  !    do ij=1,ip1jmp1
    437   !       if(extremum(ij,l)) then
     437  !       IF(extremum(ij,l)) THEN
    438438  !          if (.not.extremum(ij,l-1)) qh(ij,l-1)=q(ij,l)
    439439  !          if (.not.extremum(ij,l+1)) qb(ij,l+1)=q(ij,l)
     
    474474  !   Arguments:
    475475  !   ----------
    476   integer :: mode
    477   real :: masse(ip1jmp1,llm)
    478   real :: u_m( ip1jmp1,llm )
    479   real :: q(ip1jmp1,llm),qd(ip1jmp1,llm),qg(ip1jmp1,llm)
     476  INTEGER :: mode
     477  REAL :: masse(ip1jmp1,llm)
     478  REAL :: u_m( ip1jmp1,llm )
     479  REAL :: q(ip1jmp1,llm),qd(ip1jmp1,llm),qg(ip1jmp1,llm)
    480480  !
    481481  !  Local
     
    483483  !
    484484  INTEGER :: i,j,ij,l,indu(ip1jmp1),niju,iju,ijq
    485   integer :: n0,nl(llm)
    486   !
    487   real :: new_m,zu_m,zdq,zz
    488   real :: zsigg(ip1jmp1,llm),zsigd(ip1jmp1,llm),zsig
    489   real :: u_mq(ip1jmp1,llm)
    490 
    491   real :: zm,zq,zsigm,zsigp,zqm,zqp,zu
     485  INTEGER :: n0,nl(llm)
     486  !
     487  REAL :: new_m,zu_m,zdq,zz
     488  REAL :: zsigg(ip1jmp1,llm),zsigd(ip1jmp1,llm),zsig
     489  REAL :: u_mq(ip1jmp1,llm)
     490
     491  REAL :: zm,zq,zsigm,zsigp,zqm,zqp,zu
    492492
    493493  logical :: ladvplus(ip1jmp1,llm)
    494494
    495   real :: prec
     495  REAL :: prec
    496496  save prec
    497497
     
    501501        do ij=iip2,ip1jm
    502502           zdq=qd(ij,l)-qg(ij,l)
    503            ! if((qd(ij,l)-q(ij,l))*(q(ij,l)-qg(ij,l)).lt.0.) then
     503           ! if((qd(ij,l)-q(ij,l))*(q(ij,l)-qg(ij,l)).lt.0.) THEN
    504504           !    PRINT*,'probleme au point ij=',ij,'  l=',l
    505505           !    PRINT*,qd(ij,l),q(ij,l),qg(ij,l)
     
    507507           !    qg(ij,l)=q(ij,l)
    508508           ! endif
    509            if(abs(zdq)>prec) then
     509           IF(abs(zdq)>prec) THEN
    510510              zsigd(ij,l)=(q(ij,l)-qg(ij,l))/zdq
    511511              zsigg(ij,l)=1.-zsigd(ij,l)
    512               ! if(.not.(zsigd(ij,l).ge.0..and.zsigd(ij,l).le.1. .and.
    513   !    s               zsigg(ij,l).ge.0..or.zsigg(ij,l).le.1.) ) then
     512              ! IF(.not.(zsigd(ij,l).ge.0..and.zsigd(ij,l).le.1. .and.
     513  !    s               zsigg(ij,l).ge.0..or.zsigg(ij,l).le.1.) ) THEN
    514514              !    PRINT*,'probleme au point ij=',ij,'  l=',l
    515515              !    PRINT*,'sigg=',zsigg(ij,l),'  sigd=',zsigd(ij,l)
     
    530530   do l=1,llm
    531531   do ij=iip2,ip1jm-1
    532       if (u_m(ij,l)>=0.) then
     532      if (u_m(ij,l)>=0.) THEN
    533533         zsigp=zsigd(ij,l)
    534534         zsigm=zsigg(ij,l)
     
    548548      ladvplus(ij,l)=zu>zm
    549549      zsig=zu/zm
    550       if(zsig==0.) zsigp=0.1
    551       if (mode==1) then
    552          if (zsig<=zsigp) then
     550      IF(zsig==0.) zsigp=0.1
     551      if (mode==1) THEN
     552         if (zsig<=zsigp) THEN
    553553             u_mq(ij,l)=u_m(ij,l)*zqp
    554          else if (mode==1) then
     554         else if (mode==1) THEN
    555555             u_mq(ij,l)= &
    556556                   sign(zm,u_m(ij,l))*(zsigp*zqp+(zsig-zsigp)*zqm)
    557557         endif
    558558      else
    559          if (zsig<=zsigp) then
     559         if (zsig<=zsigp) THEN
    560560             u_mq(ij,l)=u_m(ij,l)*(zqp-0.5*zsig/zsigp*(zqp-zq))
    561561         else
     
    565565         endif
    566566      endif
    567       ! if(zsig.lt.0.) then
     567      ! IF(zsig.lt.0.) THEN
    568568      !    PRINT*,'au point ij=',ij,'  l=',l,'  sig=',zsig
    569569      !    stop
     
    587587     nl(l)=0
    588588     do ij=iip2,ip1jm
    589         if(ladvplus(ij,l)) then
     589        IF(ladvplus(ij,l)) THEN
    590590           nl(l)=nl(l)+1
    591591           u_mq(ij,l)=0.
     
    595595  enddo
    596596
    597   if(n0>1) then
     597  IF(n0>1) THEN
    598598  IF (prt_level > 9) WRITE(lunout,*) &
    599599        'Nombre de points pour lesquels on advect plus que le' &
     
    601601
    602602     do l=1,llm
    603         if(nl(l)>0) then
     603        IF(nl(l)>0) THEN
    604604           iju=0
    605605  !   indicage des mailles concernees par le traitement special
    606606           do ij=iip2,ip1jm
    607               if(ladvplus(ij,l).and.mod(ij,iip1)/=0) then
     607              IF(ladvplus(ij,l).and.mod(ij,iip1)/=0) THEN
    608608                 iju=iju+1
    609609                 indu(iju)=ij
     
    619619              zu_m=u_m(ij,l)
    620620              u_mq(ij,l)=0.
    621               if(zu_m>0.) then
     621              IF(zu_m>0.) THEN
    622622                 ijq=ij
    623623                 i=ijq-(j-1)*iip1
     
    632632  !   ajout de la maille non completement advectee
    633633         zsig=zu_m/masse(ijq,l)
    634          if(zsig<=zsigd(ijq,l)) then
     634         IF(zsig<=zsigd(ijq,l)) THEN
    635635            u_mq(ij,l)=u_mq(ij,l)+zu_m*(qd(ijq,l) &
    636636                  -0.5*zsig/zsigd(ijq,l)*(qd(ijq,l)-q(ijq,l)))
     
    639639      ! goto 8888
    640640            zz=0.5*(zsig-zsigd(ijq,l))/zsigg(ijq,l)
    641             if(.not.(zz>0..and.zz<=0.5)) then
     641            IF(.not.(zz>0..and.zz<=0.5)) THEN
    642642                 WRITE(lunout,*)'probleme2 au point ij=',ij, &
    643643                       '  l=',l
     
    662662  ! 2eme MODIF SPECIFIQUE
    663663         zsig=-zu_m/masse(ij+1,l)
    664          if(zsig<=zsigg(ijq,l)) then
     664         IF(zsig<=zsigg(ijq,l)) THEN
    665665            u_mq(ij,l)=u_mq(ij,l)+zu_m*(qg(ijq,l) &
    666666                  -0.5*zsig/zsigg(ijq,l)*(qg(ijq,l)-q(ijq,l)))
     
    669669        ! goto 9999
    670670            zz=0.5*(zsig-zsigg(ijq,l))/zsigd(ijq,l)
    671             if(.not.(zz>0..and.zz<=0.5)) then
     671            IF(.not.(zz>0..and.zz<=0.5)) THEN
    672672                 WRITE(lunout,*)'probleme22 au point ij=',ij &
    673673                       ,'  l=',l
     
    736736  !   Arguments:
    737737  !   ----------
    738   real :: masse(ip1jmp1,llm)
    739   real :: v_m( ip1jm,llm )
    740   real :: q(ip1jmp1,llm),qn(ip1jmp1,llm),qs(ip1jmp1,llm)
     738  REAL :: masse(ip1jmp1,llm)
     739  REAL :: v_m( ip1jm,llm )
     740  REAL :: q(ip1jmp1,llm),qn(ip1jmp1,llm),qs(ip1jmp1,llm)
    741741  !
    742742  !  Local
     
    745745  INTEGER :: ij,l
    746746  !
    747   real :: new_m,zdq,zz
    748   real :: zsigs(ip1jmp1),zsign(ip1jmp1),zsig
    749   real :: v_mq(ip1jm,llm)
    750   real :: convpn,convps,convmpn,convmps,massen,masses
    751   real :: zm,zq,zsigm,zsigp,zqm,zqp
    752   real :: ssum
    753   real :: prec
     747  REAL :: new_m,zdq,zz
     748  REAL :: zsigs(ip1jmp1),zsign(ip1jmp1),zsig
     749  REAL :: v_mq(ip1jm,llm)
     750  REAL :: convpn,convps,convmpn,convmps,massen,masses
     751  REAL :: zm,zq,zsigm,zsigp,zqm,zqp
     752  REAL :: ssum
     753  REAL :: prec
    754754  save prec
    755755
     
    758758        do ij=1,ip1jmp1
    759759           zdq=qn(ij,l)-qs(ij,l)
    760            ! if((qn(ij,l)-q(ij,l))*(q(ij,l)-qs(ij,l)).lt.0.) then
     760           ! if((qn(ij,l)-q(ij,l))*(q(ij,l)-qs(ij,l)).lt.0.) THEN
    761761           !    PRINT*,'probleme au point ij=',ij,'  l=',l,'  advnqx'
    762762           !    PRINT*,qn(ij,l),q(ij,l),qs(ij,l)
     
    764764           !    qs(ij,l)=q(ij,l)
    765765           ! endif
    766            if(abs(zdq)>prec) then
     766           IF(abs(zdq)>prec) THEN
    767767              zsign(ij)=(q(ij,l)-qs(ij,l))/zdq
    768768              zsigs(ij)=1.-zsign(ij)
    769               ! if(.not.(zsign(ij).ge.0..and.zsign(ij).le.1. .and.
    770   !    s               zsigs(ij).ge.0..or.zsigs(ij).le.1.) ) then
     769              ! IF(.not.(zsign(ij).ge.0..and.zsign(ij).le.1. .and.
     770  !    s               zsigs(ij).ge.0..or.zsigs(ij).le.1.) ) THEN
    771771              !    PRINT*,'probleme au point ij=',ij,'  l=',l
    772772              !    PRINT*,'sigs=',zsigs(ij),'  sign=',zsign(ij)
     
    782782
    783783   do ij=1,ip1jm
    784       if (v_m(ij,l)>=0.) then
     784      if (v_m(ij,l)>=0.) THEN
    785785         zsigp=zsign(ij+iip1)
    786786         zsigm=zsigs(ij+iip1)
     
    798798      endif
    799799      zsig=abs(v_m(ij,l))/zm
    800       if(zsig==0.) zsigp=0.1
    801       if (zsig<=zsigp) then
     800      IF(zsig==0.) zsigp=0.1
     801      if (zsig<=zsigp) THEN
    802802          v_mq(ij,l)=v_m(ij,l)*(zqp-0.5*zsig/zsigp*(zqp-zq))
    803803      else
     
    863863  !   Arguments:
    864864  !   ----------
    865   real :: masse(ip1jmp1,llm)
    866   real :: w_m( ip1jmp1,llm+1)
    867   real :: q(ip1jmp1,llm),qb(ip1jmp1,llm),qh(ip1jmp1,llm)
     865  REAL :: masse(ip1jmp1,llm)
     866  REAL :: w_m( ip1jmp1,llm+1)
     867  REAL :: q(ip1jmp1,llm),qb(ip1jmp1,llm),qh(ip1jmp1,llm)
    868868
    869869  !
     
    873873  INTEGER :: ij,l
    874874  !
    875   real :: new_m,zdq,zz
    876   real :: zsigh(ip1jmp1,llm),zsigb(ip1jmp1,llm),zsig
    877   real :: w_mq(ip1jmp1,llm+1)
    878   real :: zm,zq,zsigm,zsigp,zqm,zqp
    879   real :: prec
     875  REAL :: new_m,zdq,zz
     876  REAL :: zsigh(ip1jmp1,llm),zsigb(ip1jmp1,llm),zsig
     877  REAL :: w_mq(ip1jmp1,llm+1)
     878  REAL :: zm,zq,zsigm,zsigp,zqm,zqp
     879  REAL :: prec
    880880  save prec
    881881
     
    885885        do ij=1,ip1jmp1
    886886           zdq=qb(ij,l)-qh(ij,l)
    887            ! if((qh(ij,l)-q(ij,l))*(q(ij,l)-qb(ij,l)).lt.0.) then
     887           ! if((qh(ij,l)-q(ij,l))*(q(ij,l)-qb(ij,l)).lt.0.) THEN
    888888           !    PRINT*,'probleme au point ij=',ij,'  l=',l
    889889           !    PRINT*,qh(ij,l),q(ij,l),qb(ij,l)
     
    892892           ! endif
    893893
    894            if(abs(zdq)>prec) then
     894           IF(abs(zdq)>prec) THEN
    895895              zsigb(ij,l)=(q(ij,l)-qh(ij,l))/zdq
    896896              zsigh(ij,l)=1.-zsigb(ij,l)
     
    907907   do l=2,llm
    908908   do ij=1,ip1jmp1
    909       if (w_m(ij,l)>=0.) then
     909      if (w_m(ij,l)>=0.) THEN
    910910         zsigp=zsigb(ij,l)
    911911         zsigm=zsigh(ij,l)
     
    923923      endif
    924924      zsig=abs(w_m(ij,l))/zm
    925       if(zsig==0.) zsigp=0.1
    926       if (zsig<=zsigp) then
     925      IF(zsig==0.) zsigp=0.1
     926      if (zsig<=zsigp) THEN
    927927          w_mq(ij,l)=w_m(ij,l)*(zqp-0.5*zsig/zsigp*(zqp-zq))
    928928      else
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/advy.f90

    r5105 r5116  
    9191  REAL :: cy1(llm,ntra), cyLAT(llm,ntra)
    9292  REAL :: z1(iim), zcos(iim), zsin(iim)
    93   real :: smpn,smps,s0pn,s0ps
     93  REAL :: smpn,smps,s0pn,s0ps
    9494  REAL :: SSUM
    9595  EXTERNAL SSUM
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/com_io_dyn_mod.F90

    r5113 r5116  
    88! Names of various files for outputs (in the dynamics)
    99  ! to store instantaneous values:
    10   character(len=18),parameter :: dynhist_file="dyn_hist.nc" ! on scalar grid
    11   character(len=18),parameter :: dynhistv_file="dyn_histv.nc" ! on v grid
    12   character(len=18),parameter :: dynhistu_file="dyn_histu.nc" ! on u grid
     10  CHARACTER(LEN=18),parameter :: dynhist_file="dyn_hist.nc" ! on scalar grid
     11  CHARACTER(LEN=18),parameter :: dynhistv_file="dyn_histv.nc" ! on v grid
     12  CHARACTER(LEN=18),parameter :: dynhistu_file="dyn_histu.nc" ! on u grid
    1313
    1414  ! to store averaged values:
    15   character(len=18),parameter :: dynhistave_file="dyn_hist_ave.nc"
    16   character(len=18),parameter :: dynhistvave_file="dyn_histv_ave.nc"
    17   character(len=18),parameter :: dynhistuave_file="dyn_histu_ave.nc"
     15  CHARACTER(LEN=18),parameter :: dynhistave_file="dyn_hist_ave.nc"
     16  CHARACTER(LEN=18),parameter :: dynhistvave_file="dyn_histv_ave.nc"
     17  CHARACTER(LEN=18),parameter :: dynhistuave_file="dyn_histu_ave.nc"
    1818 
    1919! Ids of various files for outputs (in the dynamics)
    2020
    2121  ! instantaneous (these are set by inithist.F)
    22   integer :: histid
    23   integer :: histvid
    24   integer :: histuid
     22  INTEGER :: histid
     23  INTEGER :: histvid
     24  INTEGER :: histuid
    2525 
    2626  ! averages (these are set by initdynav.F)
    27   integer :: histaveid
    28   integer :: histvaveid
    29   integer :: histuaveid
     27  INTEGER :: histaveid
     28  INTEGER :: histvaveid
     29  INTEGER :: histuaveid
    3030 
    3131end module com_io_dyn_mod
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/coordij.f90

    r5105 r5116  
    2222  include "comgeom.h"
    2323
    24   real :: zlon,zlat
     24  REAL :: zlon,zlat
    2525
    2626  zlon=lon*pi/180.
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/diagedyn.f90

    r5105 r5116  
    138138  INTEGER :: ndiag     ! max number of diagnostic in parallel
    139139  PARAMETER (ndiag=10)
    140   integer :: pas(ndiag)
     140  INTEGER :: pas(ndiag)
    141141  save pas
    142142  data pas/ndiag*0/
     
    160160  !
    161161  PRINT*,'MAIS POURQUOI DONC DIAGEDYN NE MARCHE PAS ?'
    162   return
     162  RETURN
    163163  ! On ne garde les donnees que dans les colonnes i=1,iim
    164164  DO jj = 1,jjp1
     
    325325  !
    326326  ELSE
    327     write(lunout,*)'diagedyn: set to function with Earth parameters'
     327    WRITE(lunout,*)'diagedyn: set to function with Earth parameters'
    328328  ENDIF ! of if (planet_type=="earth")
    329329  RETURN
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/disvert.F90

    r5113 r5116  
    33SUBROUTINE disvert()
    44
    5   use ioipsl, only: getin
    6   use new_unit_m, only: new_unit
    7   use lmdz_assert, only: assert
     5  use ioipsl, ONLY: getin
     6  use new_unit_m, ONLY: new_unit
     7  use lmdz_assert, ONLY: assert
    88  USE comvert_mod, ONLY: ap, bp, aps, bps, nivsigs, nivsig, dpres, presnivs, &
    99                         pseudoalt, pa, preff, scaleheight, presinter
     
    4747  REAL alpha, beta, deltaz
    4848  REAL x
    49   character(len=*),parameter :: modname="disvert"
    50 
    51   character(len=24):: vert_sampling
     49  CHARACTER(LEN=*),parameter :: modname="disvert"
     50
     51  CHARACTER(LEN=24):: vert_sampling
    5252  ! (allowed values are "param", "tropo", "strato" and "read")
    5353
     
    6262  CALL getin('vert_sampling', vert_sampling)
    6363  WRITE(lunout,*) TRIM(modname)//' vert_sampling = ' // vert_sampling
    64   if (llm==39 .and. vert_sampling=="strato") then
     64  if (llm==39 .and. vert_sampling=="strato") THEN
    6565     dsigmin=0.3 ! Vieille option par défaut pour CMIP5
    6666  else
     
    8282     CLOSE(99)
    8383     alpha=deltaz/(llm*scaleheight)
    84      write(lunout, *)trim(modname),':scaleheight, alpha, k0, k1, beta', &
     84     WRITE(lunout, *)trim(modname),':scaleheight, alpha, k0, k1, beta', &
    8585                               scaleheight, alpha, k0, k1, beta
    8686
     
    9696        dzk1=alpha*tanh(l/k0)
    9797        dzk2=alpha*tanh((llm-k1)/k0)*beta**(l-(llm-k1))/log(beta)
    98         write(lunout, *)l, sig(l+1), zk, zk-zkm1, dzk1, dzk2
     98        WRITE(lunout, *)l, sig(l+1), zk, zk-zkm1, dzk1, dzk2
    9999        zkm1=zk
    100100     enddo
     
    332332  ENDDO
    333333
    334   write(lunout, *)  trim(modname),': BP '
    335   write(lunout, *) bp
    336   write(lunout, *)  trim(modname),': AP '
    337   write(lunout, *) ap
    338 
    339   write(lunout, *) 'Niveaux de pressions approximatifs aux centres des'
    340   write(lunout, *)'couches calcules pour une pression de surface =', preff
    341   write(lunout, *) 'et altitudes equivalentes pour une hauteur d echelle de '
    342   write(lunout, *) scaleheight,' km'
     334  WRITE(lunout, *)  trim(modname),': BP '
     335  WRITE(lunout, *) bp
     336  WRITE(lunout, *)  trim(modname),': AP '
     337  WRITE(lunout, *) ap
     338
     339  WRITE(lunout, *) 'Niveaux de pressions approximatifs aux centres des'
     340  WRITE(lunout, *)'couches calcules pour une pression de surface =', preff
     341  WRITE(lunout, *) 'et altitudes equivalentes pour une hauteur d echelle de '
     342  WRITE(lunout, *) scaleheight,' km'
    343343  DO l = 1, llm
    344344     dpres(l) = bp(l) - bp(l+1)
     
    347347     presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
    348348     pseudoalt(l) = log(preff/presnivs(l))*scaleheight
    349      write(lunout, *)'PRESNIVS(', l, ')=', presnivs(l), ' Z ~ ', &
     349     WRITE(lunout, *)'PRESNIVS(', l, ')=', presnivs(l), ' Z ~ ', &
    350350          pseudoalt(l) &
    351351          , ' DZ ~ ', scaleheight*log((ap(l)+bp(l)*preff)/ &
     
    354354  DO l=1, llmp1
    355355     presinter(l)= ( ap(l)+bp(l)*preff)
    356      write(lunout, *)'PRESINTER(', l, ')=', presinter(l)
     356     WRITE(lunout, *)'PRESINTER(', l, ')=', presinter(l)
    357357  ENDDO
    358358
    359   write(lunout, *) trim(modname),': PRESNIVS '
    360   write(lunout, *) presnivs
     359  WRITE(lunout, *) trim(modname),': PRESNIVS '
     360  WRITE(lunout, *) presnivs
    361361
    362362CONTAINS
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/disvert_noterre.f90

    r5113 r5116  
    3030  REAL :: snorm
    3131  REAL :: alpha,beta,gama,delta,deltaz
    32   real :: quoi,quand
     32  REAL :: quoi,quand
    3333  REAL :: zsig(llm),sig(llm+1)
    3434  INTEGER :: np,ierr
    35   integer :: ierr1,ierr2,ierr3,ierr4
     35  INTEGER :: ierr1,ierr2,ierr3,ierr4
    3636  REAL :: x
    3737
    3838  REAL :: SSUM
    3939  EXTERNAL SSUM
    40   real :: newsig
     40  REAL :: newsig
    4141  REAL :: dz0,dz1,nhaut,sig1,esig,csig,zz
    42   real :: tt,rr,gg, prevz
    43   real :: s(llm),dsig(llm)
    44 
    45   integer :: iz
    46   real :: z, ps,p
    47   character(len=*),parameter :: modname="disvert_noterre"
     42  REAL :: tt,rr,gg, prevz
     43  REAL :: s(llm),dsig(llm)
     44
     45  INTEGER :: iz
     46  REAL :: z, ps,p
     47  CHARACTER(LEN=*),parameter :: modname="disvert_noterre"
    4848
    4949  !
     
    5555  hybrid=.TRUE. ! default value for hybrid (ie: use hybrid coordinates)
    5656  CALL getin('hybrid',hybrid)
    57   write(lunout,*) trim(modname),': hybrid=',hybrid
     57  WRITE(lunout,*) trim(modname),': hybrid=',hybrid
    5858
    5959  ! Ouverture possible de fichiers typiquement E.T.
     
    6161     open(99,file="esasig.def",status='old',form='formatted', &
    6262           iostat=ierr2)
    63      if(ierr2/=0) then
     63     IF(ierr2/=0) THEN
    6464          close(99)
    6565          open(99,file="z2sig.def",status='old',form='formatted', &
     
    7171  !   ----------------------------------------
    7272
    73   IF(ierr2==0) then
    74 
     73  IF(ierr2==0) THEN
    7574     ! Lecture de esasig.def :
    7675     ! Systeme peu souple, mais qui respecte en theorie
     
    7877     ! <-> energie cinetique, d'apres la note de Frederic Hourdin...
    7978
    80      write(lunout,*)'*****************************'
    81      write(lunout,*)'WARNING reading esasig.def'
    82      write(lunout,*)'*****************************'
     79     WRITE(lunout,*)'*****************************'
     80     WRITE(lunout,*)'WARNING reading esasig.def'
     81     WRITE(lunout,*)'*****************************'
    8382     READ(99,*) scaleheight
    8483     READ(99,*) dz0
     
    126125  !   ----------------------------------------
    127126
    128   ELSE IF(ierr4==0) then
    129      write(lunout,*)'****************************'
    130      write(lunout,*)'Reading z2sig.def'
    131      write(lunout,*)'****************************'
     127  ELSE IF(ierr4==0) THEN
     128     WRITE(lunout,*)'****************************'
     129     WRITE(lunout,*)'Reading z2sig.def'
     130     WRITE(lunout,*)'****************************'
    132131
    133132     READ(99,*) scaleheight
     
    146145  !-----------------------------------------------------------------------
    147146  ELSE
    148      write(lunout,*) 'didn t you forget something ??? '
    149      write(lunout,*) 'We need file  z2sig.def ! (OR esasig.def)'
     147     WRITE(lunout,*) 'didn t you forget something ??? '
     148     WRITE(lunout,*) 'We need file  z2sig.def ! (OR esasig.def)'
    150149     stop
    151150  ENDIF
     
    170169
    171170  if (hybrid) then  ! use hybrid coordinates
    172      write(lunout,*) "*********************************"
    173      write(lunout,*) "Using hybrid vertical coordinates"
    174      write(lunout,*)
     171     WRITE(lunout,*) "*********************************"
     172     WRITE(lunout,*) "Using hybrid vertical coordinates"
     173     WRITE(lunout,*)
    175174     ! Coordonnees hybrides avec mod
    176175     DO l = 1, llm
     
    183182     ap(llmp1) = 0.
    184183  else ! use sigma coordinates
    185      write(lunout,*) "********************************"
    186      write(lunout,*) "Using sigma vertical coordinates"
    187      write(lunout,*)
     184     WRITE(lunout,*) "********************************"
     185     WRITE(lunout,*) "Using sigma vertical coordinates"
     186     WRITE(lunout,*)
    188187     ! Pour ne pas passer en coordonnees hybrides
    189188     DO l = 1, llm
     
    196195  bp(llmp1) =   0.
    197196
    198   write(lunout,*) trim(modname),': BP '
    199   write(lunout,*)  bp
    200   write(lunout,*) trim(modname),': AP '
    201   write(lunout,*)  ap
     197  WRITE(lunout,*) trim(modname),': BP '
     198  WRITE(lunout,*)  bp
     199  WRITE(lunout,*) trim(modname),': AP '
     200  WRITE(lunout,*)  ap
    202201
    203202  ! Calcul au milieu des couches :
     
    214213  ENDDO
    215214
    216   if (hybrid) then
     215  if (hybrid) THEN
    217216     aps(llm) = aps(llm-1)**2 / aps(llm-2)
    218217     bps(llm) = 0.5*(bp(llm) + bp(llm+1))
     
    222221  end if
    223222
    224   write(lunout,*) trim(modname),': BPs '
    225   write(lunout,*)  bps
    226   write(lunout,*) trim(modname),': APs'
    227   write(lunout,*)  aps
     223  WRITE(lunout,*) trim(modname),': BPs '
     224  WRITE(lunout,*)  bps
     225  WRITE(lunout,*) trim(modname),': APs'
     226  WRITE(lunout,*)  aps
    228227
    229228  DO l = 1, llm
     
    232231  ENDDO
    233232
    234   write(lunout,*)trim(modname),' : PRESNIVS'
    235   write(lunout,*)presnivs
    236   write(lunout,*)'Pseudo altitude of Presnivs : (for a scale ', &
     233  WRITE(lunout,*)trim(modname),' : PRESNIVS'
     234  WRITE(lunout,*)presnivs
     235  WRITE(lunout,*)'Pseudo altitude of Presnivs : (for a scale ', &
    237236        'height of ',scaleheight,' km)'
    238   write(lunout,*)pseudoalt
     237  WRITE(lunout,*)pseudoalt
    239238
    240239  ! --------------------------------------------------
     
    252251  !   do l=2,llm
    253252  ! approximation of scale height for Venus
    254   !      if (zsig(l-1).le.55.) then
     253  !      if (zsig(l-1).le.55.) THEN
    255254  !         scaleheight = 15.5 - zsig(l-1)/55.*10.
    256255  !      else
     
    260259  !    .    log((aps(l) + bps(l)*ps)/(aps(l-1) + bps(l-1)*ps))
    261260  !   END DO
    262   !   write(53,'(I3,50F10.5)') iz, zsig
     261  !   WRITE(53,'(I3,50F10.5)') iz, zsig
    263262  !  END DO
    264263  !  close(53)
     
    296295
    297296  IMPLICIT NONE
    298   real :: x1, x2, sig,pa,preff, newsig, F
    299   integer :: j
     297  REAL :: x1, x2, sig,pa,preff, newsig, F
     298  INTEGER :: j
    300299
    301300  newsig = sig
    302301  x1=0
    303302  x2=1
    304   if (sig>=1) then
     303  if (sig>=1) THEN
    305304        newsig= sig
    306   else if (sig*preff/pa>=0.25) then
     305  else if (sig*preff/pa>=0.25) THEN
    307306    DO J=1,9999  ! nombre d''iteration max
    308307      F=((1 -pa/preff)*exp(1-1./newsig**2)+(pa/preff)*newsig)/sig
    309       ! write(0,*) J, ' newsig =', newsig, ' F= ', F
    310       if (F>1) then
     308      ! WRITE(0,*) J, ' newsig =', newsig, ' F= ', F
     309      if (F>1) THEN
    311310          X2 = newsig
    312311          newsig=(X1+newsig)*0.5
     
    319318      IF(abs(10.*log(F))<1.E-5) goto 999
    320319    END DO
    321    else   !    if (sig*preff/pa.le.0.25) then
     320   else   !    if (sig*preff/pa.le.0.25) THEN
    322321         newsig= sig*preff/pa
    323322   end if
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/exner_hyb_m.F90

    r5106 r5116  
    5454
    5555    logical,save :: firstcall=.TRUE.
    56     character(len=*),parameter :: modname="exner_hyb"
     56    CHARACTER(LEN=*),parameter :: modname="exner_hyb"
    5757
    5858    ! Sanity check
    59     if (firstcall) then
     59    if (firstcall) THEN
    6060       ! sanity checks for Shallow Water case (1 vertical layer)
    61        if (llm==1) then
    62           if (kappa/=1) then
     61       if (llm==1) THEN
     62          if (kappa/=1) THEN
    6363             CALL abort_gcm(modname, &
    6464                  "kappa!=1 , but running in Shallow Water mode!!",42)
    6565          endif
    66           if (cpp/=r) then
     66          if (cpp/=r) THEN
    6767             CALL abort_gcm(modname, &
    6868                  "cpp!=r , but running in Shallow Water mode!!",42)
     
    7474
    7575    ! Specific behaviour for Shallow Water (1 vertical layer) case:
    76     if (llm==1) then
    77 
     76    if (llm==1) THEN
    7877       ! Compute pks(:),pk(:),pkf(:)
    7978
     
    8382       ENDDO
    8483
    85        if (present(pkf)) then
     84       if (present(pkf)) THEN
    8685          pkf = pk
    8786          CALL filtreg ( pkf, jmp1, llm, 2, 1, .TRUE., 1 )
     
    8988
    9089       ! our work is done, exit routine
    91        return
     90       RETURN
    9291    endif ! of if (llm.eq.1)
    9392
     
    138137    ENDDO
    139138
    140     if (present(pkf)) then
     139    if (present(pkf)) THEN
    141140       !    calcul de pkf
    142141       pkf = pk
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/exner_milieu_m.F90

    r5106 r5116  
    5151
    5252    logical,save :: firstcall=.TRUE.
    53     character(len=*),parameter :: modname="exner_milieu"
     53    CHARACTER(LEN=*),parameter :: modname="exner_milieu"
    5454
    5555    ! Sanity check
    56     if (firstcall) then
     56    if (firstcall) THEN
    5757       ! sanity checks for Shallow Water case (1 vertical layer)
    58        if (llm==1) then
    59           if (kappa/=1) then
     58       if (llm==1) THEN
     59          if (kappa/=1) THEN
    6060             CALL abort_gcm(modname, &
    6161                  "kappa!=1 , but running in Shallow Water mode!!",42)
    6262          endif
    63           if (cpp/=r) then
     63          if (cpp/=r) THEN
    6464             CALL abort_gcm(modname, &
    6565                  "cpp!=r , but running in Shallow Water mode!!",42)
     
    7171
    7272    ! Specific behaviour for Shallow Water (1 vertical layer) case:
    73     if (llm==1) then
    74 
     73    if (llm==1) THEN
    7574       ! Compute pks(:),pk(:),pkf(:)
    7675
     
    8079       ENDDO
    8180
    82        if (present(pkf)) then
     81       if (present(pkf)) THEN
    8382          pkf = pk
    8483          CALL filtreg ( pkf, jmp1, llm, 2, 1, .TRUE., 1 )
     
    8685
    8786       ! our work is done, exit routine
    88        return
     87       RETURN
    8988    endif ! of if (llm.eq.1)
    9089
     
    117116    ENDDO
    118117
    119     if (present(pkf)) then
     118    if (present(pkf)) THEN
    120119       !    calcul de pkf
    121120       pkf = pk
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/fxhyp_m.F90

    r5113 r5116  
    1818    ! 1., taux=0., clon=0.) est à - 180 degrés.
    1919
    20     use lmdz_arth, only: arth
    21     use invert_zoom_x_m, only: invert_zoom_x, nmax
    22     use nrtype, only: pi, pi_d, twopi, twopi_d, k8
    23     use principal_cshift_m, only: principal_cshift
    24     use serre_mod, only: clon, grossismx, dzoomx, taux
     20    use lmdz_arth, ONLY: arth
     21    use invert_zoom_x_m, ONLY: invert_zoom_x, nmax
     22    use nrtype, ONLY: pi, pi_d, twopi, twopi_d, k8
     23    use principal_cshift_m, ONLY: principal_cshift
     24    use serre_mod, ONLY: clon, grossismx, dzoomx, taux
    2525
    2626    include "dimensions.h"
     
    4545    print *, "Call sequence information: fxhyp"
    4646
    47     test_iim: if (iim==1) then
     47    test_iim: if (iim==1) THEN
    4848       rlonv(1)=0.
    4949       rlonu(1)=pi
     
    5656       xprimp025(:)=1.
    5757    else test_iim
    58        test_grossismx: if (grossismx == 1.) then
     58       test_grossismx: if (grossismx == 1.) THEN
    5959          step = twopi / iim
    6060
     
    193193             END DO
    194194
    195              if (rlonm025(is2) < - pi) then
     195             if (rlonm025(is2) < - pi) THEN
    196196                print *, 'Rlonm025 plus petit que - pi !'
    197197                STOP 1
     
    204204             END DO
    205205
    206              if (rlonm025(is2) > pi) then
     206             if (rlonm025(is2) > pi) THEN
    207207                print *, 'Rlonm025 plus grand que pi !'
    208208                STOP 1
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/fyhyp_m.F90

    r5114 r5116  
    1616    ! Il vaut mieux avoir : grossismy * dzoom < pi / 2
    1717
    18     use lmdz_coefpoly, only: coefpoly
    19     use nrtype, only: k8
    20     use serre_mod, only: clat, grossismy, dzoomy, tauy
     18    use lmdz_coefpoly, ONLY: coefpoly
     19    use nrtype, ONLY: k8
     20    use serre_mod, ONLY: clat, grossismy, dzoomy, tauy
    2121
    2222    include "dimensions.h"
     
    207207             yprimin = a1 + 2.*a2*yi + 3.*a3*yi2
    208208          END DO
    209           if (abs(yi-yo1) > epsilon) then
     209          if (abs(yi-yo1) > epsilon) THEN
    210210             print *, 'Pas de solution.', j, ylon2
    211211             STOP 1
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/gr_int_dyn.f90

    r5113 r5116  
    1212
    1313  INTEGER :: iim
    14   integer :: ip1, jp1
     14  INTEGER :: ip1, jp1
    1515  REAL :: champin(iim, jp1)
    1616  REAL :: champdyn(iim+1, jp1)
    1717
    1818  INTEGER :: i, j
    19   real :: polenord, polesud
     19  REAL :: polenord, polesud
    2020
    2121  !-----------------------------------------------------------------------
     
    3434  do j = 1, jp1
    3535    do i = 1, iim
    36       if (j == 1) then
     36      if (j == 1) THEN
    3737        champdyn(i, j) = polenord
    38       else if (j == jp1) then
     38      else if (j == jp1) THEN
    3939        champdyn(i, j) = polesud
    4040      else
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/grilles_gcm_netcdf_sub.F90

    r5103 r5116  
    226226  ! CLOSE netcdf file
    227227  CALL ncclos(ncid_out,rcode_out)
    228   write(*,*) "END grilles_gcm_netcdf_sub OK"
     228  WRITE(*,*) "END grilles_gcm_netcdf_sub OK"
    229229
    230230END SUBROUTINE grilles_gcm_netcdf_sub
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/iniconst.F90

    r5103 r5116  
    2121  include "iniprint.h"
    2222
    23   character(len=*),parameter :: modname="iniconst"
    24   character(len=80) :: abort_message
     23  CHARACTER(LEN=*),parameter :: modname="iniconst"
     24  CHARACTER(LEN=80) :: abort_message
    2525
    2626
     
    4848  r       = cpp * kappa
    4949
    50   write(lunout,*) trim(modname),': R  CP  Kappa ',r,cpp,kappa
     50  WRITE(lunout,*) trim(modname),': R  CP  Kappa ',r,cpp,kappa
    5151
    5252  !-----------------------------------------------------------------------
    5353
    5454  ! vertical discretization: default behavior depends on planet_type flag
    55   if (planet_type=="earth") then
     55  if (planet_type=="earth") THEN
    5656     disvert_type=1
    5757  else
     
    6060  ! but user can also specify using one or the other in run.def:
    6161  CALL getin('disvert_type',disvert_type)
    62   write(lunout,*) trim(modname),': disvert_type=',disvert_type
     62  WRITE(lunout,*) trim(modname),': disvert_type=',disvert_type
    6363
    6464  pressure_exner = disvert_type == 1 ! default value
    6565  CALL getin('pressure_exner', pressure_exner)
    6666
    67   if (disvert_type==1) then
     67  if (disvert_type==1) THEN
    6868     ! standard case for Earth (automatic generation of levels)
    6969     CALL disvert()
    70   else if (disvert_type==2) then
     70  else if (disvert_type==2) THEN
    7171     ! standard case for planets (levels generated using z2sig.def file)
    7272     CALL disvert_noterre
    7373  else
    74      write(abort_message,*) "Wrong value for disvert_type: ", disvert_type
     74     WRITE(abort_message,*) "Wrong value for disvert_type: ", disvert_type
    7575     CALL abort_gcm(modname,abort_message,0)
    7676  endif
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/inidissip.F90

    r5106 r5116  
    1 
    21! $Id$
    32
    4 SUBROUTINE inidissip( lstardis,nitergdiv,nitergrot,niterh  , &
    5      tetagdiv,tetagrot,tetatemp, vert_prof_dissip)
     3SUBROUTINE inidissip(lstardis, nitergdiv, nitergrot, niterh, &
     4        tetagdiv, tetagrot, tetatemp, vert_prof_dissip)
    65  !=======================================================================
    76  !   initialisation de la dissipation horizontale
     
    1110  !   -------------
    1211
    13   USE control_mod, ONLY: dissip_period,iperiod
     12  USE control_mod, ONLY: dissip_period, iperiod
    1413  USE comconst_mod, ONLY: dissip_deltaz, dissip_factz, dissip_zref, &
    15                           dtdiss, dtvr, rad
     14          dtdiss, dtvr, rad
    1615  USE comvert_mod, ONLY: preff, presnivs
    1716  USE lmdz_filtreg, ONLY: filtreg
     17  USE lmdz_libmath, ONLY: minmax
    1818
    1919  IMPLICIT NONE
     
    2323  include "iniprint.h"
    2424
    25   LOGICAL,INTENT(in) :: lstardis
    26   INTEGER,INTENT(in) :: nitergdiv,nitergrot,niterh
    27   REAL,INTENT(in) :: tetagdiv,tetagrot,tetatemp
    28 
    29   integer, INTENT(in):: vert_prof_dissip
     25  LOGICAL, INTENT(in) :: lstardis
     26  INTEGER, INTENT(in) :: nitergdiv, nitergrot, niterh
     27  REAL, INTENT(in) :: tetagdiv, tetagrot, tetatemp
     28
     29  integer, INTENT(in) :: vert_prof_dissip
    3030  ! Vertical profile of horizontal dissipation
    3131  ! Allowed values:
     
    3333  ! 1: tanh of altitude
    3434
    35 ! Local variables:
    36   REAL fact,zvert(llm),zz
    37   REAL zh(ip1jmp1),zu(ip1jmp1), gx(ip1jmp1), divgra(ip1jmp1)
    38   real zv(ip1jm), gy(ip1jm), deltap(ip1jmp1,llm)
    39   REAL ullm,vllm,umin,vmin,zhmin,zhmax
     35  ! Local variables:
     36  REAL fact, zvert(llm), zz
     37  REAL zh(ip1jmp1), zu(ip1jmp1), gx(ip1jmp1), divgra(ip1jmp1)
     38  real zv(ip1jm), gy(ip1jm), deltap(ip1jmp1, llm)
     39  REAL ullm, vllm, umin, vmin, zhmin, zhmax
    4040  REAL zllm
    4141
    42   INTEGER l,ij,idum,ii
     42  INTEGER l, ij, idum, ii
    4343  REAL tetamin
    4444  REAL pseudoz
    45   character (len=80) :: abort_message
     45  character (len = 80) :: abort_message
    4646
    4747  REAL ran1
     
    5353  !   -----------------------------------------------------------------
    5454
    55   crot     = -1.
    56   cdivu    = -1.
    57   cdivh    = -1.
     55  crot = -1.
     56  cdivu = -1.
     57  cdivh = -1.
    5858
    5959  !   calcul de la valeur propre de divgrad:
     
    6161  idum = 0
    6262  DO l = 1, llm
    63      DO ij = 1, ip1jmp1
    64         deltap(ij,l) = 1.
    65      ENDDO
    66   ENDDO
    67 
    68   idum  = -1
    69   zh(1) = RAN1(idum)-.5
    70   idum  = 0
     63    DO ij = 1, ip1jmp1
     64      deltap(ij, l) = 1.
     65    ENDDO
     66  ENDDO
     67
     68  idum = -1
     69  zh(1) = RAN1(idum) - .5
     70  idum = 0
    7171  DO ij = 2, ip1jmp1
    72      zh(ij) = RAN1(idum) -.5
    73   ENDDO
    74 
    75   CALL filtreg (zh,jjp1,1,2,1,.TRUE.,1)
    76 
    77   CALL minmax(iip1*jjp1,zh,zhmin,zhmax )
    78 
    79   IF ( zhmin >= zhmax  )     THEN
    80      write(lunout,*)'  Inidissip  zh min max  ',zhmin,zhmax
    81      abort_message='probleme generateur alleatoire dans inidissip'
    82      CALL abort_gcm('inidissip',abort_message,1)
     72    zh(ij) = RAN1(idum) - .5
     73  ENDDO
     74
     75  CALL filtreg (zh, jjp1, 1, 2, 1, .TRUE., 1)
     76
     77  CALL minmax(iip1 * jjp1, zh, zhmin, zhmax)
     78
     79  IF (zhmin >= zhmax)     THEN
     80    WRITE(lunout, *)'  Inidissip  zh min max  ', zhmin, zhmax
     81    abort_message = 'probleme generateur alleatoire dans inidissip'
     82    CALL abort_gcm('inidissip', abort_message, 1)
    8383  ENDIF
    8484
    85   zllm = ABS( zhmax )
    86   DO l = 1,50
    87      IF(lstardis) THEN
    88         CALL divgrad2(1,zh,deltap,niterh,divgra)
    89      ELSE
    90         CALL divgrad (1,zh,niterh,divgra)
    91      ENDIF
    92 
    93      zllm = ABS(maxval(divgra))
    94      zh = divgra / zllm
     85  zllm = ABS(zhmax)
     86  DO l = 1, 50
     87    IF(lstardis) THEN
     88      CALL divgrad2(1, zh, deltap, niterh, divgra)
     89    ELSE
     90      CALL divgrad (1, zh, niterh, divgra)
     91    ENDIF
     92
     93    zllm = ABS(maxval(divgra))
     94    zh = divgra / zllm
    9595  ENDDO
    9696
    9797  IF(lstardis) THEN
    98      cdivh = 1./ zllm
     98    cdivh = 1. / zllm
    9999  ELSE
    100      cdivh = zllm ** ( -1./niterh )
     100    cdivh = zllm ** (-1. / niterh)
    101101  ENDIF
    102102
    103103  !   calcul des valeurs propres de gradiv (ii =1) et  nxgrarot(ii=2)
    104104  !   -----------------------------------------------------------------
    105   write(lunout,*)'inidissip: calcul des valeurs propres'
     105  WRITE(lunout, *)'inidissip: calcul des valeurs propres'
    106106
    107107  DO    ii = 1, 2
    108108
    109      DO ij = 1, ip1jmp1
    110         zu(ij)  = RAN1(idum) -.5
    111      ENDDO
    112      CALL filtreg (zu,jjp1,1,2,1,.TRUE.,1)
    113      DO ij = 1, ip1jm
    114         zv(ij) = RAN1(idum) -.5
    115      ENDDO
    116      CALL filtreg (zv,jjm,1,2,1,.FALSE.,1)
    117 
    118      CALL minmax(iip1*jjp1,zu,umin,ullm )
    119      CALL minmax(iip1*jjm, zv,vmin,vllm )
    120 
    121      ullm = ABS ( ullm )
    122      vllm = ABS ( vllm )
    123 
    124      DO    l = 1, 50
    125         IF(ii==1) THEN
    126            !cccc             CALL covcont( 1,zu,zv,zu,zv )
    127            IF(lstardis) THEN
    128               CALL gradiv2( 1,zu,zv,nitergdiv,gx,gy )
    129            ELSE
    130               CALL gradiv ( 1,zu,zv,nitergdiv,gx,gy )
    131            ENDIF
     109    DO ij = 1, ip1jmp1
     110      zu(ij) = RAN1(idum) - .5
     111    ENDDO
     112    CALL filtreg (zu, jjp1, 1, 2, 1, .TRUE., 1)
     113    DO ij = 1, ip1jm
     114      zv(ij) = RAN1(idum) - .5
     115    ENDDO
     116    CALL filtreg (zv, jjm, 1, 2, 1, .FALSE., 1)
     117
     118    CALL minmax(iip1 * jjp1, zu, umin, ullm)
     119    CALL minmax(iip1 * jjm, zv, vmin, vllm)
     120
     121    ullm = ABS (ullm)
     122    vllm = ABS (vllm)
     123
     124    DO    l = 1, 50
     125      IF(ii==1) THEN
     126        !cccc             CALL covcont( 1,zu,zv,zu,zv )
     127        IF(lstardis) THEN
     128          CALL gradiv2(1, zu, zv, nitergdiv, gx, gy)
    132129        ELSE
    133            IF(lstardis) THEN
    134               CALL nxgraro2( 1,zu,zv,nitergrot,gx,gy )
    135            ELSE
    136               CALL nxgrarot( 1,zu,zv,nitergrot,gx,gy )
    137            ENDIF
     130          CALL gradiv (1, zu, zv, nitergdiv, gx, gy)
    138131        ENDIF
    139 
    140         zllm = max(abs(maxval(gx)), abs(maxval(gy)))
    141         zu = gx / zllm
    142         zv = gy / zllm
    143      end DO
    144 
    145      IF ( ii==1 ) THEN
     132      ELSE
    146133        IF(lstardis) THEN
    147            cdivu  = 1./zllm
     134          CALL nxgraro2(1, zu, zv, nitergrot, gx, gy)
    148135        ELSE
    149            cdivu  = zllm **( -1./nitergdiv )
     136          CALL nxgrarot(1, zu, zv, nitergrot, gx, gy)
    150137        ENDIF
    151      ELSE
    152         IF(lstardis) THEN
    153            crot   = 1./ zllm
    154         ELSE
    155            crot   = zllm **( -1./nitergrot )
    156         ENDIF
    157      ENDIF
     138      ENDIF
     139
     140      zllm = max(abs(maxval(gx)), abs(maxval(gy)))
     141      zu = gx / zllm
     142      zv = gy / zllm
     143    end DO
     144
     145    IF (ii==1) THEN
     146      IF(lstardis) THEN
     147        cdivu = 1. / zllm
     148      ELSE
     149        cdivu = zllm **(-1. / nitergdiv)
     150      ENDIF
     151    ELSE
     152      IF(lstardis) THEN
     153        crot = 1. / zllm
     154      ELSE
     155        crot = zllm **(-1. / nitergrot)
     156      ENDIF
     157    ENDIF
    158158
    159159  end DO
     
    163163
    164164  !     IF(.NOT.lstardis) THEN
    165   fact    = rad*24./REAL(jjm)
    166   fact    = fact*fact
    167   write(lunout,*)'inidissip: coef u ', fact/cdivu, 1./cdivu
    168   write(lunout,*)'inidissip: coef r ', fact/crot , 1./crot
    169   write(lunout,*)'inidissip: coef h ', fact/cdivh, 1./cdivh
     165  fact = rad * 24. / REAL(jjm)
     166  fact = fact * fact
     167  WRITE(lunout, *)'inidissip: coef u ', fact / cdivu, 1. / cdivu
     168  WRITE(lunout, *)'inidissip: coef r ', fact / crot, 1. / crot
     169  WRITE(lunout, *)'inidissip: coef h ', fact / cdivh, 1. / cdivh
    170170  !     ENDIF
    171171
     
    174174  !   --------------------------------------------------
    175175
    176   if (vert_prof_dissip == 1) then
    177      do l=1,llm
    178         pseudoz=8.*log(preff/presnivs(l))
    179         zvert(l)=1+ &
    180              (tanh((pseudoz-dissip_zref)/dissip_deltaz)+1.)/2. &
    181              *(dissip_factz-1.)
    182      enddo
     176  if (vert_prof_dissip == 1) THEN
     177    do l = 1, llm
     178      pseudoz = 8. * log(preff / presnivs(l))
     179      zvert(l) = 1 + &
     180              (tanh((pseudoz - dissip_zref) / dissip_deltaz) + 1.) / 2. &
     181                      * (dissip_factz - 1.)
     182    enddo
    183183  else
    184      DO l=1,llm
    185         zvert(l)=1.
    186      ENDDO
    187      fact=2.
    188      DO l = 1, llm
    189         zz      = 1. - preff/presnivs(l)
    190         zvert(l)= fact -( fact-1.)/( 1.+zz*zz )
    191      ENDDO
     184    DO l = 1, llm
     185      zvert(l) = 1.
     186    ENDDO
     187    fact = 2.
     188    DO l = 1, llm
     189      zz = 1. - preff / presnivs(l)
     190      zvert(l) = fact - (fact - 1.) / (1. + zz * zz)
     191    ENDDO
    192192  endif
    193193
    194 
    195   write(lunout,*)'inidissip: Constantes de temps de la diffusion horizontale'
    196 
    197   tetamin =  1.e+6
    198 
    199   DO l=1,llm
    200      tetaudiv(l)   = zvert(l)/tetagdiv
    201      tetaurot(l)   = zvert(l)/tetagrot
    202      tetah(l)      = zvert(l)/tetatemp
    203 
    204      IF( tetamin> (1./tetaudiv(l)) ) tetamin = 1./ tetaudiv(l)
    205      IF( tetamin> (1./tetaurot(l)) ) tetamin = 1./ tetaurot(l)
    206      IF( tetamin> (1./   tetah(l)) ) tetamin = 1./    tetah(l)
     194  WRITE(lunout, *)'inidissip: Constantes de temps de la diffusion horizontale'
     195
     196  tetamin = 1.e+6
     197
     198  DO l = 1, llm
     199    tetaudiv(l) = zvert(l) / tetagdiv
     200    tetaurot(l) = zvert(l) / tetagrot
     201    tetah(l) = zvert(l) / tetatemp
     202
     203    IF(tetamin> (1. / tetaudiv(l))) tetamin = 1. / tetaudiv(l)
     204    IF(tetamin> (1. / tetaurot(l))) tetamin = 1. / tetaurot(l)
     205    IF(tetamin> (1. / tetah(l))) tetamin = 1. / tetah(l)
    207206  ENDDO
    208207
    209208  ! If dissip_period=0 calculate value for dissipation period, else keep value read from gcm.def
    210209  IF (dissip_period == 0) THEN
    211      dissip_period = INT( tetamin/( 2.*dtvr*iperiod) ) * iperiod
    212      write(lunout,*)'inidissip: tetamin dtvr iperiod dissip_period(intermed) ',tetamin,dtvr,iperiod,dissip_period
    213      dissip_period = MAX(iperiod,dissip_period)
     210    dissip_period = INT(tetamin / (2. * dtvr * iperiod)) * iperiod
     211    WRITE(lunout, *)'inidissip: tetamin dtvr iperiod dissip_period(intermed) ', tetamin, dtvr, iperiod, dissip_period
     212    dissip_period = MAX(iperiod, dissip_period)
    214213  END IF
    215214
    216   dtdiss  = dissip_period * dtvr
    217   write(lunout,*)'inidissip: dissip_period=',dissip_period,' dtdiss=',dtdiss,' dtvr=',dtvr
    218 
    219   DO l = 1,llm
    220      write(lunout,*)zvert(l),dtdiss*tetaudiv(l),dtdiss*tetaurot(l), &
    221           dtdiss*tetah(l)
     215  dtdiss = dissip_period * dtvr
     216  WRITE(lunout, *)'inidissip: dissip_period=', dissip_period, ' dtdiss=', dtdiss, ' dtvr=', dtvr
     217
     218  DO l = 1, llm
     219    WRITE(lunout, *)zvert(l), dtdiss * tetaudiv(l), dtdiss * tetaurot(l), &
     220            dtdiss * tetah(l)
    222221  ENDDO
    223222
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/inigeom.f90

    r5105 r5116  
    1616  !
    1717  !
    18   use fxhyp_m, only: fxhyp
    19   use fyhyp_m, only: fyhyp
     18  use fxhyp_m, ONLY: fxhyp
     19  use fyhyp_m, ONLY: fyhyp
    2020  USE comconst_mod, ONLY: pi, g, omeg, rad
    2121  USE logic_mod, ONLY: fxyhypb, ysinus
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/inigrads.f90

    r5113 r5116  
    77  IMPLICIT NONE
    88
    9   integer :: if, im, jm, lm, i, j, l
    10   real :: x(im), y(jm), z(lm), fx, fy, fz, dt
    11   real :: xmin, xmax, ymin, ymax
     9  INTEGER :: if, im, jm, lm, i, j, l
     10  REAL :: x(im), y(jm), z(lm), fx, fy, fz, dt
     11  REAL :: xmin, xmax, ymin, ymax
    1212
    13   character(len = *), intent(in) :: file
    14   character(len = *), intent(in) :: titlel
     13  CHARACTER(LEN = *), intent(in) :: file
     14  CHARACTER(LEN = *), intent(in) :: titlel
    1515
    1616  INCLUDE "gradsdef.h"
    1717
    1818  ! data unit/66,32,34,36,38,40,42,44,46,48/
    19   integer :: nf
     19  INTEGER :: nf
    2020  save nf
    2121  data nf/0/
     
    4949  do i = 1, im
    5050    xd(i, if) = x(i) * fx
    51     if(xd(i, if)<xmin) iid(if) = i + 1
    52     if(xd(i, if)<=xmax) ifd(if) = i
     51    IF(xd(i, if)<xmin) iid(if) = i + 1
     52    IF(xd(i, if)<=xmax) ifd(if) = i
    5353  enddo
    5454  PRINT*, 'On stoke du point ', iid(if), '  a ', ifd(if), ' en x'
     
    5959  do j = 1, jm
    6060    yd(j, if) = y(j) * fy
    61     if(yd(j, if)>ymax) jid(if) = j + 1
    62     if(yd(j, if)>=ymin) jfd(if) = j
     61    IF(yd(j, if)>ymax) jid(if) = j + 1
     62    IF(yd(j, if)>=ymin) jfd(if) = j
    6363  enddo
    6464  PRINT*, 'On stoke du point ', jid(if), '  a ', jfd(if), ' en y'
     
    8989
    9090
    91 end subroutine inigrads
     91END SUBROUTINE inigrads
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/initfluxsto.f90

    r5114 r5116  
    4747  !   Arguments
    4848  !
    49   character(len = *) :: infile
    50   real :: tstep, t_ops, t_wrt
    51   integer :: fileid, filevid, filedid
     49  CHARACTER(LEN = *) :: infile
     50  REAL :: tstep, t_ops, t_wrt
     51  INTEGER :: fileid, filevid, filedid
    5252
    5353  ! This routine needs IOIPSL to work
    5454  !   Variables locales
    5555  !
    56   real :: nivd(1)
    57   integer :: tau0
    58   real :: zjulian
    59   character(len = 3) :: str
    60   character(len = 10) :: ctrac
    61   integer :: iq
    62   real :: rlong(iip1, jjp1), rlat(iip1, jjp1), rl(1, 1)
    63   integer :: uhoriid, vhoriid, thoriid, zvertiid, dhoriid, dvertiid
    64   integer :: ii, jj
    65   integer :: zan, idayref
     56  REAL :: nivd(1)
     57  INTEGER :: tau0
     58  REAL :: zjulian
     59  CHARACTER(LEN = 3) :: str
     60  CHARACTER(LEN = 10) :: ctrac
     61  INTEGER :: iq
     62  REAL :: rlong(iip1, jjp1), rlat(iip1, jjp1), rl(1, 1)
     63  INTEGER :: uhoriid, vhoriid, thoriid, zvertiid, dhoriid, dvertiid
     64  INTEGER :: ii, jj
     65  INTEGER :: zan, idayref
    6666  logical :: ok_sync
    6767  !
     
    211211  CALL histend(filevid)
    212212  CALL histend(filedid)
    213   if (ok_sync) then
     213  if (ok_sync) THEN
    214214    CALL histsync(fileid)
    215215    CALL histsync(filevid)
     
    217217  endif
    218218
    219   return
    220 end subroutine initfluxsto
     219  RETURN
     220END SUBROUTINE initfluxsto
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/inithist.F90

    r5114 r5116  
    4646  !   Arguments
    4747  !
    48   integer :: day0, anne0
    49   real :: tstep, t_ops, t_wrt
     48  INTEGER :: day0, anne0
     49  REAL :: tstep, t_ops, t_wrt
    5050
    5151  ! This routine needs IOIPSL to work
    5252  !   Variables locales
    5353  !
    54   integer :: tau0
    55   real :: zjulian
    56   integer :: iq
    57   real :: rlong(iip1, jjp1), rlat(iip1, jjp1)
    58   integer :: uhoriid, vhoriid, thoriid, zvertiid
    59   integer :: ii, jj
    60   integer :: zan, dayref
     54  INTEGER :: tau0
     55  REAL :: zjulian
     56  INTEGER :: iq
     57  REAL :: rlong(iip1, jjp1), rlat(iip1, jjp1)
     58  INTEGER :: uhoriid, vhoriid, thoriid, zvertiid
     59  INTEGER :: ii, jj
     60  INTEGER :: zan, dayref
    6161  !
    6262  !  Initialisations
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/inter_barxy_m.F90

    r5113 r5116  
    1 
    21! $Id$
    32
     
    1514  SUBROUTINE inter_barxy(dlonid, dlatid, champ, rlonimod, rlatimod, champint)
    1615
    17     use lmdz_assert_eq, only: assert_eq
    18     use lmdz_assert, only: assert
     16    use lmdz_assert_eq, ONLY: assert_eq
     17    use lmdz_assert, ONLY: assert
    1918
    2019    include "dimensions.h"
     
    2726    ! (for "aire", "apoln", "apols")
    2827
    29     REAL, intent(in):: dlonid(:)
     28    REAL, intent(in) :: dlonid(:)
    3029    ! (longitude from input file, in rad, from -pi to pi)
    3130
    32     REAL, intent(in):: dlatid(:), champ(:, :), rlonimod(:)
    33 
    34     REAL, intent(in):: rlatimod(:)
     31    REAL, intent(in) :: dlatid(:), champ(:, :), rlonimod(:)
     32
     33    REAL, intent(in) :: rlatimod(:)
    3534    ! (latitude angle, in degrees or rad, in strictly decreasing order)
    3635
    37     real, intent(out):: champint(:, :)
     36    real, intent(out) :: champint(:, :)
    3837    ! Si taille de la seconde dim = jjm + 1, on veut interpoler sur les
    3938    ! jjm+1 latitudes rlatu du modele (latitudes des scalaires et de U)
     
    5554
    5655    jnterfd = assert_eq(size(champ, 2) - 1, size(dlatid), &
    57          "inter_barxy jnterfd")
     56            "inter_barxy jnterfd")
    5857    jmods = size(champint, 2)
    5958    CALL assert(size(champ, 1) == size(dlonid), "inter_barxy size(champ, 1)")
    6059    CALL assert((/size(rlonimod), size(champint, 1)/) == iim, &
    61          "inter_barxy iim")
     60            "inter_barxy iim")
    6261    CALL assert(any(jmods == (/jjm, jjm + 1/)), 'inter_barxy jmods')
    6362    CALL assert(size(rlatimod) == jjm, "inter_barxy size(rlatimod)")
     
    6564    ! Check decreasing order for "rlatimod":
    6665    DO i = 2, jjm
    67        IF (rlatimod(i) >= rlatimod(i-1)) stop &
    68             '"inter_barxy": "rlatimod" should be strictly decreasing'
     66      IF (rlatimod(i) >= rlatimod(i - 1)) stop &
     67              '"inter_barxy": "rlatimod" should be strictly decreasing'
    6968    ENDDO
    7069
    7170    yjmod(:jjm) = ord_coordm(rlatimod)
    7271    IF (jmods == jjm + 1) THEN
    73        IF (90. - yjmod(jjm) < 0.01) stop &
    74             '"inter_barxy": with jmods = jjm + 1, yjmod(jjm) should be < 90.'
     72      IF (90. - yjmod(jjm) < 0.01) stop &
     73              '"inter_barxy": with jmods = jjm + 1, yjmod(jjm) should be < 90.'
    7574    ELSE
    76        ! jmods = jjm
    77        IF (ABS(yjmod(jjm) - 90.) > 0.01) stop &
    78             '"inter_barxy": with jmods = jjm, yjmod(jjm) should be 90.'
     75      ! jmods = jjm
     76      IF (ABS(yjmod(jjm) - 90.) > 0.01) stop &
     77              '"inter_barxy": with jmods = jjm, yjmod(jjm) should be 90.'
    7978    ENDIF
    8079
     
    8281
    8382    DO j = 1, jnterfd + 1
    84        champy(:, j) = inter_barx(dlonid, champ(:, j), rlonimod)
    85     ENDDO
    86 
    87     CALL ord_coord(dlatid, yjdat, decrois) 
     83      champy(:, j) = inter_barx(dlonid, champ(:, j), rlonimod)
     84    ENDDO
     85
     86    CALL ord_coord(dlatid, yjdat, decrois)
    8887    IF (decrois) champy(:, :) = champy(:, jnterfd + 1:1:-1)
    8988    DO i = 1, iim
    90        champint(i, :) = inter_bary(yjdat, champy(i, :), yjmod)
     89      champint(i, :) = inter_bary(yjdat, champy(i, :), yjmod)
    9190    ENDDO
    9291    champint(:, :) = champint(:, jmods:1:-1)
    9392
    9493    IF (jmods == jjm + 1) THEN
    95        ! Valeurs uniques aux poles
    96        champint(:, 1) = SUM(aire(:iim, 1) * champint(:, 1)) / apoln
    97        champint(:, jjm + 1) = SUM(aire(:iim, jjm + 1) &
    98             * champint(:, jjm + 1)) / apols
     94      ! Valeurs uniques aux poles
     95      champint(:, 1) = SUM(aire(:iim, 1) * champint(:, 1)) / apoln
     96      champint(:, jjm + 1) = SUM(aire(:iim, jjm + 1) &
     97              * champint(:, jjm + 1)) / apols
    9998    ENDIF
    10099
     
    103102  !******************************
    104103
    105   function inter_barx(dlonid, fdat, rlonimod) 
     104  function inter_barx(dlonid, fdat, rlonimod)
    106105
    107106    !        INTERPOLATION BARYCENTRIQUE BASEE SUR LES AIRES
     
    117116    !      ( Les abscisses sont exprimees en degres)
    118117
    119     use lmdz_assert_eq, only: assert_eq
     118    USE lmdz_assert_eq, ONLY: assert_eq
     119    USE lmdz_libmath, ONLY: minmax
    120120
    121121    IMPLICIT NONE
    122122
    123     REAL, intent(in):: dlonid(:)
    124     real, intent(in):: fdat(:)
    125     real, intent(in):: rlonimod(:)
     123    REAL, intent(in) :: dlonid(:)
     124    real, intent(in) :: fdat(:)
     125    real, intent(in) :: rlonimod(:)
    126126
    127127    real inter_barx(size(rlonimod))
     
    130130
    131131    INTEGER idatmax, imodmax
    132     REAL xxid(size(dlonid)+1), xxd(size(dlonid)+1), fdd(size(dlonid)+1)
    133     REAL  fxd(size(dlonid)+1), xchan(size(dlonid)+1), fdchan(size(dlonid)+1)
     132    REAL xxid(size(dlonid) + 1), xxd(size(dlonid) + 1), fdd(size(dlonid) + 1)
     133    REAL  fxd(size(dlonid) + 1), xchan(size(dlonid) + 1), fdchan(size(dlonid) + 1)
    134134    REAL  xxim(size(rlonimod))
    135135
     
    149149    !    A L'INTERFACE OUEST DE LA PREMIERE MAILLE DU MODELE 
    150150    DO imod = 1, imodmax
    151        xxim(imod) = rlonimod(imod)
    152     ENDDO
    153 
    154     CALL minmax( imodmax, xxim, chmin, chmax)
    155     IF( chmax<6.50 )   THEN
    156        DO imod = 1, imodmax
    157           xxim(imod) = xxim(imod) * 180./pi
    158        ENDDO
     151      xxim(imod) = rlonimod(imod)
     152    ENDDO
     153
     154    CALL minmax(imodmax, xxim, chmin, chmax)
     155    IF(chmax<6.50)   THEN
     156      DO imod = 1, imodmax
     157        xxim(imod) = xxim(imod) * 180. / pi
     158      ENDDO
    159159    ENDIF
    160160
     
    162162
    163163    DO imod = 1, imodmax
    164        xxim(imod) = xxim(imod) - xim0
    165     ENDDO
    166 
    167     idatmax1 = idatmax +1
     164      xxim(imod) = xxim(imod) - xim0
     165    ENDDO
     166
     167    idatmax1 = idatmax + 1
    168168
    169169    DO idat = 1, idatmax
    170        xxd(idat) = dlonid(idat)
    171     ENDDO
    172 
    173     CALL minmax( idatmax, xxd, chmin, chmax)
    174     IF( chmax<6.50 )  THEN
    175        DO idat = 1, idatmax
    176           xxd(idat) = xxd(idat) * 180./pi
    177        ENDDO
     170      xxd(idat) = dlonid(idat)
     171    ENDDO
     172
     173    CALL minmax(idatmax, xxd, chmin, chmax)
     174    IF(chmax<6.50)  THEN
     175      DO idat = 1, idatmax
     176        xxd(idat) = xxd(idat) * 180. / pi
     177      ENDDO
    178178    ENDIF
    179179
    180180    DO idat = 1, idatmax
    181        xxd(idat) = MOD( xxd(idat) - xim0, 360. )
    182        fdd(idat) = fdat (idat)
     181      xxd(idat) = MOD(xxd(idat) - xim0, 360.)
     182      fdd(idat) = fdat (idat)
    183183    ENDDO
    184184
    185185    i = 2
    186     DO while (xxd(i) >= xxd(i-1) .and. i < idatmax)
    187        i = i + 1
    188     ENDDO
    189     IF (xxd(i) < xxd(i-1)) THEN
    190        ichang = i
    191        !  ***  reorganisation  des longitudes entre 0. et 360. degres ****
    192        nid = idatmax - ichang +1
    193        DO i = 1, nid
    194           xchan (i) = xxd(i+ichang -1 )
    195           fdchan(i) = fdd(i+ichang -1 )
    196        ENDDO
    197        DO i=1, ichang -1
    198           xchan (i+ nid) = xxd(i)
    199           fdchan(i+nid) = fdd(i)
    200        ENDDO
    201        DO i =1, idatmax
    202           xxd(i) = xchan(i)
    203           fdd(i) = fdchan(i)
    204        ENDDO
     186    DO while (xxd(i) >= xxd(i - 1) .and. i < idatmax)
     187      i = i + 1
     188    ENDDO
     189    IF (xxd(i) < xxd(i - 1)) THEN
     190      ichang = i
     191      !  ***  reorganisation  des longitudes entre 0. et 360. degres ****
     192      nid = idatmax - ichang + 1
     193      DO i = 1, nid
     194        xchan (i) = xxd(i + ichang - 1)
     195        fdchan(i) = fdd(i + ichang - 1)
     196      ENDDO
     197      DO i = 1, ichang - 1
     198        xchan (i + nid) = xxd(i)
     199        fdchan(i + nid) = fdd(i)
     200      ENDDO
     201      DO i = 1, idatmax
     202        xxd(i) = xchan(i)
     203        fdd(i) = fdchan(i)
     204      ENDDO
    205205    end IF
    206206
     
    213213
    214214    DO idat = 1, idatmax
    215        IF ( xxd( idatmax1- idat )<360.) exit
    216        id1 = id1 + 1
     215      IF (xxd(idatmax1 - idat)<360.) exit
     216      id1 = id1 + 1
    217217    ENDDO
    218218
    219219    DO idat = 1, idatmax
    220        IF (xxd(idat)>0.) exit
    221        id0 = id0 + 1
     220      IF (xxd(idat)>0.) exit
     221      id0 = id0 + 1
    222222    END DO
    223223
    224     IF( id1 /= 0 ) then
    225        DO idat = 1, id1
    226           xxid(idat) = xxd(idatmax - id1 + idat) - 360.
    227           fxd (idat) = fdd(idatmax - id1 + idat)     
    228        END DO
    229        DO idat = 1, idatmax - id1
    230           xxid(idat + id1) = xxd(idat)
    231           fxd (idat + id1) = fdd(idat)
    232        END DO
     224    IF(id1 /= 0) THEN
     225      DO idat = 1, id1
     226        xxid(idat) = xxd(idatmax - id1 + idat) - 360.
     227        fxd (idat) = fdd(idatmax - id1 + idat)
     228      END DO
     229      DO idat = 1, idatmax - id1
     230        xxid(idat + id1) = xxd(idat)
     231        fxd (idat + id1) = fdd(idat)
     232      END DO
    233233    end IF
    234234
    235     IF(id0 /= 0) then
    236        DO idat = 1, idatmax - id0
    237           xxid(idat) = xxd(idat + id0)
    238           fxd (idat) = fdd(idat + id0)
    239        END DO
    240 
    241        DO idat = 1, id0
    242           xxid (idatmax - id0 + idat) = xxd(idat) + 360.
    243           fxd  (idatmax - id0 + idat) =  fdd(idat)   
    244        END DO
    245     else 
    246        DO idat = 1, idatmax
    247           xxid(idat) = xxd(idat)
    248           fxd (idat) = fdd(idat)
    249        ENDDO
     235    IF(id0 /= 0) THEN
     236      DO idat = 1, idatmax - id0
     237        xxid(idat) = xxd(idat + id0)
     238        fxd (idat) = fdd(idat + id0)
     239      END DO
     240
     241      DO idat = 1, id0
     242        xxid (idatmax - id0 + idat) = xxd(idat) + 360.
     243        fxd  (idatmax - id0 + idat) = fdd(idat)
     244      END DO
     245    else
     246      DO idat = 1, idatmax
     247        xxid(idat) = xxd(idat)
     248        fxd (idat) = fdd(idat)
     249      ENDDO
    250250    end IF
    251251    xxid(idatmax1) = xxid(1) + 360.
     
    258258    ! iteration
    259259
    260     x0   = xim0
    261     dxm  = 0.
     260    x0 = xim0
     261    dxm = 0.
    262262    imod = 1
    263263    idat = 1
    264264
    265265    do while (imod <= imodmax)
    266        do while (xxim(imod)>xxid(idat))
    267           dx  = xxid(idat) - x0
    268           dxm = dxm + dx
    269           inter_barx(imod) = inter_barx(imod) + dx * fxd(idat)
    270           x0  = xxid(idat)
    271           idat = idat + 1
    272        END DO
    273        IF (xxim(imod)<xxid(idat)) THEN
    274           dx  = xxim(imod) - x0
    275           dxm = dxm + dx
    276           inter_barx(imod) = (inter_barx(imod) + dx * fxd(idat)) / dxm
    277           x0  = xxim(imod)
    278           dxm = 0.
    279           imod = imod + 1
    280        ELSE
    281           dx  = xxim(imod) - x0
    282           dxm = dxm + dx
    283           inter_barx(imod) = (inter_barx(imod) + dx * fxd(idat)) / dxm
    284           x0  = xxim(imod)
    285           dxm = 0.
    286           imod = imod + 1
    287           idat = idat + 1
    288        END IF
     266      do while (xxim(imod)>xxid(idat))
     267        dx = xxid(idat) - x0
     268        dxm = dxm + dx
     269        inter_barx(imod) = inter_barx(imod) + dx * fxd(idat)
     270        x0 = xxid(idat)
     271        idat = idat + 1
     272      END DO
     273      IF (xxim(imod)<xxid(idat)) THEN
     274        dx = xxim(imod) - x0
     275        dxm = dxm + dx
     276        inter_barx(imod) = (inter_barx(imod) + dx * fxd(idat)) / dxm
     277        x0 = xxim(imod)
     278        dxm = 0.
     279        imod = imod + 1
     280      ELSE
     281        dx = xxim(imod) - x0
     282        dxm = dxm + dx
     283        inter_barx(imod) = (inter_barx(imod) + dx * fxd(idat)) / dxm
     284        x0 = xxim(imod)
     285        dxm = 0.
     286        imod = imod + 1
     287        idat = idat + 1
     288      END IF
    289289    END DO
    290290
     
    299299    ! L'indice 1 correspond à l'interface maille 1 -- maille 2.
    300300
    301     use lmdz_assert, only: assert
     301    use lmdz_assert, ONLY: assert
    302302
    303303    IMPLICIT NONE
    304304
    305     REAL, intent(in):: yjdat(:)
     305    REAL, intent(in) :: yjdat(:)
    306306    ! (angles, ordonnées des interfaces des mailles des données, in
    307307    ! degrees, in increasing order)
    308308
    309     REAL, intent(in):: fdat(:) ! champ de données
    310 
    311     REAL, intent(in):: yjmod(:)
     309    REAL, intent(in) :: fdat(:) ! champ de données
     310
     311    REAL, intent(in) :: yjmod(:)
    312312    ! (ordonnées des interfaces des mailles du modèle)
    313313    ! (in degrees, in strictly increasing order)
     
    317317    ! Variables local to the procedure:
    318318
    319     REAL y0, dy, dym 
     319    REAL y0, dy, dym
    320320    INTEGER jdat ! indice du champ de données
    321321    integer jmod ! indice du champ du modèle
     
    327327    ! Initialisation des variables
    328328    inter_bary(:) = 0.
    329     y0    = -90.
    330     dym   = 0.
    331     jmod  = 1
    332     jdat  = 1
     329    y0 = -90.
     330    dym = 0.
     331    jmod = 1
     332    jdat = 1
    333333
    334334    do while (jmod <= size(yjmod))
    335        do while (yjmod(jmod) > yjdat(jdat))
    336           dy        = yjdat(jdat) - y0
    337           dym        = dym + dy
    338           inter_bary(jmod) = inter_bary(jmod) + dy * fdat(jdat)
    339           y0        = yjdat(jdat)
    340           jdat      = jdat + 1
    341        END DO
    342        IF (yjmod(jmod) < yjdat(jdat)) THEN
    343           dy        = yjmod(jmod) - y0
    344           dym        = dym + dy
    345           inter_bary(jmod) = (inter_bary(jmod) + dy * fdat(jdat)) / dym
    346           y0        = yjmod(jmod)
    347           dym        = 0.
    348           jmod      = jmod + 1
    349        ELSE
    350           ! {yjmod(jmod) == yjdat(jdat)}
    351           dy        = yjmod(jmod) - y0
    352           dym        = dym + dy
    353           inter_bary(jmod) = (inter_bary(jmod) + dy * fdat(jdat)) / dym
    354           y0        = yjmod(jmod)
    355           dym        = 0.
    356           jmod      = jmod + 1
    357           jdat      = jdat + 1
    358        END IF
     335      do while (yjmod(jmod) > yjdat(jdat))
     336        dy = yjdat(jdat) - y0
     337        dym = dym + dy
     338        inter_bary(jmod) = inter_bary(jmod) + dy * fdat(jdat)
     339        y0 = yjdat(jdat)
     340        jdat = jdat + 1
     341      END DO
     342      IF (yjmod(jmod) < yjdat(jdat)) THEN
     343        dy = yjmod(jmod) - y0
     344        dym = dym + dy
     345        inter_bary(jmod) = (inter_bary(jmod) + dy * fdat(jdat)) / dym
     346        y0 = yjmod(jmod)
     347        dym = 0.
     348        jmod = jmod + 1
     349      ELSE
     350        ! {yjmod(jmod) == yjdat(jdat)}
     351        dy = yjmod(jmod) - y0
     352        dym = dym + dy
     353        inter_bary(jmod) = (inter_bary(jmod) + dy * fdat(jdat)) / dym
     354        y0 = yjmod(jmod)
     355        dym = 0.
     356        jmod = jmod + 1
     357        jdat = jdat + 1
     358      END IF
    359359    END DO
    360360    ! Le test de fin suppose que l'interface 0 est commune aux deux
     
    373373    ! Finally, the procedure adds 90° as the last value of the array.
    374374
    375     use lmdz_assert_eq, only: assert_eq
    376     use comconst_mod, only: pi
     375    use lmdz_assert_eq, ONLY: assert_eq
     376    use comconst_mod, ONLY: pi
    377377
    378378    IMPLICIT NONE
    379379
    380     REAL, intent(in):: xi(:)
     380    REAL, intent(in) :: xi(:)
    381381    ! (latitude, in degrees or radians, in increasing or decreasing order)
    382382    ! ("xi" should contain latitudes from pole to pole.
     
    385385    ! So the extreme values should not be 90° and -90°.)
    386386
    387     REAL, intent(out):: xo(:) ! angles in degrees
    388     LOGICAL, intent(out):: decrois
     387    REAL, intent(out) :: xo(:) ! angles in degrees
     388    LOGICAL, intent(out) :: decrois
    389389
    390390    ! Variables  local to the procedure:
     
    398398    decrois = xi(2) < xi(1)
    399399    DO i = 3, nmax
    400        IF (decrois .neqv. xi(i) < xi(i-1)) stop &
    401             '"ord_coord":  latitudes are not monotonic'
    402     ENDDO
    403 
    404     IF (abs(xi(1)) < pi) then
    405        ! "xi" contains latitudes in radians
    406        xo(:nmax) = xi(:) * 180. / pi
     400      IF (decrois .neqv. xi(i) < xi(i - 1)) stop &
     401              '"ord_coord":  latitudes are not monotonic'
     402    ENDDO
     403
     404    IF (abs(xi(1)) < pi) THEN
     405      ! "xi" contains latitudes in radians
     406      xo(:nmax) = xi(:) * 180. / pi
    407407    else
    408        ! "xi" contains latitudes in degrees
    409        xo(:nmax) = xi(:)
     408      ! "xi" contains latitudes in degrees
     409      xo(:nmax) = xi(:)
    410410    end IF
    411411
    412412    IF (ABS(abs(xo(1)) - 90) < 0.001 .or. ABS(abs(xo(nmax)) - 90) < 0.001) THEN
    413        print *, "ord_coord"
    414        PRINT *, '"xi" should contain the latitudes of the boundaries of ' &
    415             // 'grid cells, not the centers of grid cells.'
    416        STOP
     413      print *, "ord_coord"
     414      PRINT *, '"xi" should contain the latitudes of the boundaries of ' &
     415              // 'grid cells, not the centers of grid cells.'
     416      STOP
    417417    ENDIF
    418418
     
    429429    ! order.
    430430
    431     use comconst_mod, only: pi
     431    use comconst_mod, ONLY: pi
    432432
    433433    IMPLICIT NONE
    434434
    435     REAL, intent(in):: xi(:) ! angle, in rad or degrees
     435    REAL, intent(in) :: xi(:) ! angle, in rad or degrees
    436436    REAL ord_coordm(size(xi)) ! angle, in degrees
    437437
     
    439439
    440440    IF (xi(1) < 6.5) THEN
    441        ! "xi" is in rad
    442        ord_coordm(:) = xi(size(xi):1:-1) * 180. / pi
     441      ! "xi" is in rad
     442      ord_coordm(:) = xi(size(xi):1:-1) * 180. / pi
    443443    else
    444        ! "xi" is in degrees
    445        ord_coordm(:) = xi(size(xi):1:-1)
     444      ! "xi" is in degrees
     445      ord_coordm(:) = xi(size(xi):1:-1)
    446446    ENDIF
    447447
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/interpost.f90

    r5113 r5116  
    1212
    1313  ! Arguments
    14   real :: q(iip1,jjp1,llm)
    15   real :: qppm(iim,jjp1,llm)
     14  REAL :: q(iip1,jjp1,llm)
     15  REAL :: qppm(iim,jjp1,llm)
    1616  ! Local
    17   integer :: l,i,j
     17  INTEGER :: l,i,j
    1818
    1919  ! RE-INVERSION DES NIVEAUX
     
    4141   return
    4242
    43 end subroutine interpost
     43END SUBROUTINE interpost
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/interpre.f90

    r5114 r5116  
    1818  !---------------------------------------------------
    1919  ! Arguments
    20   real :: apppm(llm + 1), bpppm(llm + 1)
    21   real :: q(iip1, jjp1, llm), qppm(iim, jjp1, llm)
     20  REAL :: apppm(llm + 1), bpppm(llm + 1)
     21  REAL :: q(iip1, jjp1, llm), qppm(iim, jjp1, llm)
    2222  !---------------------------------------------------
    23   real :: masse(iip1, jjp1, llm)
    24   real :: massebx(iip1, jjp1, llm), masseby(iip1, jjm, llm)
    25   real :: w(iip1, jjp1, llm)
    26   real :: fluxwppm(iim, jjp1, llm)
    27   real :: pbaru(iip1, jjp1, llm)
    28   real :: pbarv(iip1, jjm, llm)
    29   real :: unatppm(iim, jjp1, llm)
    30   real :: vnatppm(iim, jjp1, llm)
    31   real :: psppm(iim, jjp1)
     23  REAL :: masse(iip1, jjp1, llm)
     24  REAL :: massebx(iip1, jjp1, llm), masseby(iip1, jjm, llm)
     25  REAL :: w(iip1, jjp1, llm)
     26  REAL :: fluxwppm(iim, jjp1, llm)
     27  REAL :: pbaru(iip1, jjp1, llm)
     28  REAL :: pbarv(iip1, jjm, llm)
     29  REAL :: unatppm(iim, jjp1, llm)
     30  REAL :: vnatppm(iim, jjp1, llm)
     31  REAL :: psppm(iim, jjp1)
    3232  !---------------------------------------------------
    3333  ! Local
    34   real :: vnat(iip1, jjp1, llm)
    35   real :: unat(iip1, jjp1, llm)
    36   real :: fluxw(iip1, jjp1, llm)
    37   real :: smass(iip1, jjp1)
     34  REAL :: vnat(iip1, jjp1, llm)
     35  REAL :: unat(iip1, jjp1, llm)
     36  REAL :: fluxw(iip1, jjp1, llm)
     37  REAL :: smass(iip1, jjp1)
    3838  !----------------------------------------------------
    39   integer :: l, ij, i, j
     39  INTEGER :: l, ij, i, j
    4040
    4141  ! CALCUL DE LA PRESSION DE SURFACE
     
    118118  enddo
    119119
    120   return
    121 end subroutine interpre
     120  RETURN
     121END SUBROUTINE interpre
    122122
    123123
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/invert_zoom_x_m.F90

    r5114 r5116  
    99  SUBROUTINE invert_zoom_x(xf, xtild, Xprimt, xlon, xprimm, xuv)
    1010
    11     use lmdz_coefpoly, only: coefpoly
    12     use nrtype, only: pi, pi_d, twopi_d, k8
    13     use serre_mod, only: clon
     11    use lmdz_coefpoly, ONLY: coefpoly
     12    use nrtype, ONLY: pi, pi_d, twopi_d, k8
     13    use serre_mod, ONLY: clon
    1414
    1515    include "dimensions.h"
     
    6464       end DO
    6565
    66        if (ABS(xvrai(i) - xo1) > my_eps) then
     66       if (ABS(xvrai(i) - xo1) > my_eps) THEN
    6767          ! iter == 300
    6868          print *, 'Pas de solution.'
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/iso_verif_dyn.f90

    r5113 r5116  
    55
    66    ! input:
    7     real :: x
    8     character(len=*) :: err_msg ! message d''erreur à afficher
     7    REAL :: x
     8    CHARACTER(LEN=*) :: err_msg ! message d''erreur à afficher
    99
    1010    ! output
    11     real :: borne
     11    REAL :: borne
    1212    parameter (borne=1e19)
    13     integer :: iso_verif_noNaN_nostop
     13    INTEGER :: iso_verif_noNaN_nostop
    1414
    15     if ((x>-borne).and.(x<borne)) then
     15    if ((x>-borne).and.(x<borne)) THEN
    1616            iso_verif_noNAN_nostop=0
    1717    else
    18         write(*,*) 'erreur detectee par iso_verif_nonNaN:'
    19         write(*,*) err_msg
    20         write(*,*) 'x=',x
     18        WRITE(*,*) 'erreur detectee par iso_verif_nonNaN:'
     19        WRITE(*,*) err_msg
     20        WRITE(*,*) 'x=',x
    2121        iso_verif_noNaN_nostop=1
    2222    endif
    2323
    24     return
    25 end function iso_verif_nonan_nostop
     24    RETURN
     25END FUNCTION iso_verif_nonan_nostop
    2626
    2727  function iso_verif_egalite_nostop &
     
    3333
    3434    ! input:
    35     real :: a, b
    36     character(len=*) :: err_msg ! message d''erreur à afficher
     35    REAL :: a, b
     36    CHARACTER(LEN=*) :: err_msg ! message d''erreur à afficher
    3737
    3838    ! locals
    39     real :: errmax ! erreur maximale en absolu.
    40     real :: errmaxrel ! erreur maximale en relatif autorisée
     39    REAL :: errmax ! erreur maximale en absolu.
     40    REAL :: errmaxrel ! erreur maximale en relatif autorisée
    4141    parameter (errmax=1e-8)
    4242    parameter (errmaxrel=1e-3)
    4343
    4444    ! output
    45     integer :: iso_verif_egalite_nostop
     45    INTEGER :: iso_verif_egalite_nostop
    4646
    4747    iso_verif_egalite_nostop=0
    4848
    49     if (abs(a-b)>errmax) then
     49    if (abs(a-b)>errmax) THEN
    5050      if (abs((a-b)/max(max(abs(b),abs(a)),1e-18)) &
    51             >errmaxrel) then
    52         write(*,*) 'erreur detectee par iso_verif_egalite:'
    53         write(*,*) err_msg
    54         write(*,*) 'a=',a
    55         write(*,*) 'b=',b
     51            >errmaxrel) THEN
     52        WRITE(*,*) 'erreur detectee par iso_verif_egalite:'
     53        WRITE(*,*) err_msg
     54        WRITE(*,*) 'a=',a
     55        WRITE(*,*) 'b=',b
    5656        iso_verif_egalite_nostop=1
    5757      endif
    5858    endif
    5959
    60     return
    61 end function iso_verif_egalite_nostop
     60    RETURN
     61END FUNCTION iso_verif_egalite_nostop
    6262
    6363
     
    6868
    6969    ! input:
    70     real :: x,q
    71     integer :: iso ! 2=HDO, 1=O18
    72     character(len=*) :: err_msg ! message d''erreur à afficher
     70    REAL :: x,q
     71    INTEGER :: iso ! 2=HDO, 1=O18
     72    CHARACTER(LEN=*) :: err_msg ! message d''erreur à afficher
    7373
    7474    ! locals
    75     real :: qmin,deltaD
    76     real :: deltaDmax,deltaDmin,tnat
     75    REAL :: qmin,deltaD
     76    REAL :: deltaDmax,deltaDmin,tnat
    7777    parameter (qmin=1e-11)
    7878    parameter (deltaDmax=200.0,deltaDmin=-999.9)
    7979
    8080    ! output
    81     integer :: iso_verif_aberrant_nostop
     81    INTEGER :: iso_verif_aberrant_nostop
    8282
    8383    iso_verif_aberrant_nostop=0
    8484
    8585    ! verifier que HDO est raisonable
    86      if (q>qmin) then
     86     if (q>qmin) THEN
    8787         IF(getKey('tnat', tnat, isoName(iso))) THEN
    8888              err_msg = 'Missing isotopic parameter "tnat"'
     
    9191         END IF
    9292         deltaD=(x/q/tnat-1)*1000
    93          if ((deltaD>deltaDmax).or.(deltaD<deltaDmin)) then
    94               write(*,*) 'erreur detectee par iso_verif_aberrant:'
    95               write(*,*) err_msg
    96               write(*,*) 'q=',q
    97               write(*,*) 'deltaD=',deltaD
    98               write(*,*) 'iso=',iso
     93         if ((deltaD>deltaDmax).or.(deltaD<deltaDmin)) THEN
     94              WRITE(*,*) 'erreur detectee par iso_verif_aberrant:'
     95              WRITE(*,*) err_msg
     96              WRITE(*,*) 'q=',q
     97              WRITE(*,*) 'deltaD=',deltaD
     98              WRITE(*,*) 'iso=',iso
    9999              iso_verif_aberrant_nostop=1
    100          endif !if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) then
    101       endif !if (q(i,k,iq).gt.qmin) then
     100         endif !if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) THEN
     101      endif !if (q(i,k,iq).gt.qmin) THEN
     102    RETURN
     103END FUNCTION iso_verif_aberrant_nostop
    102104
    103 
    104     return
    105 end function iso_verif_aberrant_nostop
    106 
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/limx.f90

    r5105 r5116  
    2222  !   Arguments:
    2323  !   ----------
    24   real :: pente_max
     24  REAL :: pente_max
    2525  REAL :: s0(ip1jmp1,llm),sm(ip1jmp1,llm)
    26   real :: sx(ip1jmp1,llm)
     26  REAL :: sx(ip1jmp1,llm)
    2727  !
    2828  !  Local
     
    3030  !
    3131  INTEGER :: ij,l,j,i,iju,ijq,indu(ip1jmp1),niju
    32   integer :: n0,iadvplus(ip1jmp1,llm),nl(llm)
     32  INTEGER :: n0,iadvplus(ip1jmp1,llm),nl(llm)
    3333  !
    3434  REAL :: q(ip1jmp1,llm)
    35   real :: dxq(ip1jmp1,llm)
     35  REAL :: dxq(ip1jmp1,llm)
    3636
    3737
    3838  REAL :: new_m,zm
    39   real :: dxqu(ip1jmp1)
    40   real :: adxqu(ip1jmp1),dxqmax(ip1jmp1)
     39  REAL :: dxqu(ip1jmp1)
     40  REAL :: adxqu(ip1jmp1),dxqmax(ip1jmp1)
    4141
    4242  Logical :: extremum,first
     
    4444
    4545  REAL :: SSUM
    46   integer :: ismax,ismin
     46  INTEGER :: ismax,ismin
    4747  EXTERNAL  SSUM, ismin,ismax
    4848
     
    8484
    8585     do ij=iip2+1,ip1jm
    86         if(     dxqu(ij-1)*dxqu(ij)>0. &
    87               .and. dxq(ij,l)*dxqu(ij)>0.) then
     86        IF(     dxqu(ij-1)*dxqu(ij)>0. &
     87              .and. dxq(ij,l)*dxqu(ij)>0.) THEN
    8888          dxq(ij,l)= &
    8989                sign(min(abs(dxq(ij,l)),dxqmax(ij)),dxq(ij,l))
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/limy.f90

    r5105 r5116  
    1515  !   --------------------------------------------------------------------
    1616  USE comconst_mod, ONLY: pi
     17  USE lmdz_libmath, ONLY: ismax, ismin
    1718  IMPLICIT NONE
    1819  !
     
    2425  !   Arguments:
    2526  !   ----------
    26   real :: pente_max
    27   real :: s0(ip1jmp1,llm),sy(ip1jmp1,llm),sm(ip1jmp1,llm)
     27  REAL :: pente_max
     28  REAL :: s0(ip1jmp1,llm),sy(ip1jmp1,llm),sm(ip1jmp1,llm)
    2829  !
    2930  !  Local
     
    3435  REAL :: q(ip1jmp1,llm)
    3536  REAL :: airej2,airejjm,airescb(iim),airesch(iim)
    36   real :: sigv,dyq(ip1jmp1),dyqv(ip1jm)
    37   real :: adyqv(ip1jm),dyqmax(ip1jmp1)
     37  REAL :: sigv,dyq(ip1jmp1),dyqv(ip1jm)
     38  REAL :: adyqv(ip1jm),dyqmax(ip1jmp1)
    3839  REAL :: qbyv(ip1jm,llm)
    3940
     
    4243  save first
    4344
    44   real :: convpn,convps,convmpn,convmps
    45   real :: sinlon(iip1),sinlondlon(iip1)
    46   real :: coslon(iip1),coslondlon(iip1)
     45  REAL :: convpn,convps,convmpn,convmps
     46  REAL :: sinlon(iip1),sinlondlon(iip1)
     47  REAL :: coslon(iip1),coslondlon(iip1)
    4748  save sinlon,coslon,sinlondlon,coslondlon
    4849  !
    4950  !
    5051  REAL :: SSUM
    51   integer :: ismax,ismin
    52   EXTERNAL  SSUM, convflu,ismin,ismax
    53   EXTERNAL filtreg
     52  EXTERNAL  SSUM
    5453
    5554  data first/.TRUE./
    5655
    57   if(first) then
     56  IF(first) THEN
    5857     PRINT*,'SCHEMA AMONT NOUVEAU'
    5958     first=.FALSE.
     
    129128  !   cas ou on a un extremum au pole
    130129
    131   ! if(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1)).le.0.)
     130  ! IF(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1)).le.0.)
    132131  !    &   appn=0.
    133   ! if(dyqv(ismax(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1)*
     132  ! IF(dyqv(ismax(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1)*
    134133  !    &   dyqv(ismin(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1).le.0.)
    135134  !    &   apps=0.
     
    150149  !  enddo
    151150
    152   if(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1))<=0.) &
    153         then
     151  IF(dyqv(ismin(iim,dyqv,1))*dyqv(ismax(iim,dyqv,1))<=0.) &
     152        THEN
    154153     do ij=1,iip1
    155154        dyqmax(ij)=0.
     
    161160  endif
    162161
    163   if(dyqv(ismax(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1)* &
     162  IF(dyqv(ismax(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1)* &
    164163        dyqv(ismin(iim,dyqv(ip1jm-iip1+1),1)+ip1jm-iip1+1)<=0.) &
    165         then
     164        THEN
    166165     do ij=ip1jm+1,ip1jmp1
    167166        dyqmax(ij)=0.
     
    176175
    177176  do ij=1,ip1jmp1 ! cf below: should it be ip1jm instead ?
    178      if(dyqv(ij)*dyqv(ij-iip1)>0.) then  ! /!\ causes Warning: iteration 1056 invokes undefined behavior [-Waggressive-loop-optimizations] in 32x32x39
     177     IF(dyqv(ij)*dyqv(ij-iip1)>0.) then  ! /!\ causes Warning: iteration 1056 invokes undefined behavior [-Waggressive-loop-optimizations] in 32x32x39
    179178        dyq(ij)=sign(min(abs(dyq(ij)),dyqmax(ij)),dyq(ij))
    180179     else
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/limz.f90

    r5105 r5116  
    2222  !   Arguments:
    2323  !   ----------
    24   real :: pente_max
     24  REAL :: pente_max
    2525  REAL :: s0(ip1jmp1,llm),sm(ip1jmp1,llm)
    26   real :: sz(ip1jmp1,llm)
     26  REAL :: sz(ip1jmp1,llm)
    2727  !
    2828  !  Local
     
    3030  !
    3131  INTEGER :: ij,l,j,i,iju,ijq,indu(ip1jmp1),niju
    32   integer :: n0,iadvplus(ip1jmp1,llm),nl(llm)
     32  INTEGER :: n0,iadvplus(ip1jmp1,llm),nl(llm)
    3333  !
    3434  REAL :: q(ip1jmp1,llm)
    35   real :: dzq(ip1jmp1,llm)
     35  REAL :: dzq(ip1jmp1,llm)
    3636
    3737
    3838  REAL :: new_m,zm
    39   real :: dzqw(ip1jmp1)
    40   real :: adzqw(ip1jmp1),dzqmax(ip1jmp1)
     39  REAL :: dzqw(ip1jmp1)
     40  REAL :: adzqw(ip1jmp1),dzqmax(ip1jmp1)
    4141
    4242  Logical :: extremum,first
     
    4444
    4545  REAL :: SSUM
    46   integer :: ismax,ismin
     46  INTEGER :: ismax,ismin
    4747  EXTERNAL  SSUM, ismin,ismax
    4848
     
    7777
    7878     do l=2,llm-1
    79         if(     dzqw(l-1)*dzqw(l)>0. &
    80               .and. dzq(ij,l)*dzqw(l)>0.) then
     79        IF(     dzqw(l-1)*dzqw(l)>0. &
     80              .and. dzq(ij,l)*dzqw(l)>0.) THEN
    8181          dzq(ij,l)= &
    8282                sign(min(abs(dzq(ij,l)),dzqmax(l)),dzq(ij,l))
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/pentes_ini.f90

    r5106 r5116  
    3131  !   Arguments:
    3232  !   ----------
    33   integer :: mode
     33  INTEGER :: mode
    3434  REAL :: pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm )
    3535  REAL :: q( iip1,jjp1,llm,0:3)
     
    4242  REAL :: s0( iip1,jjp1,llm ),  sx( iip1,jjp1,llm )
    4343  REAL :: sy( iip1,jjp1,llm ),  sz( iip1,jjp1,llm )
    44   real :: masn,mass,zz
     44  REAL :: masn,mass,zz
    4545  INTEGER :: i,j,l,iq
    4646
    4747  !  modif Fred 24 03 96
    4848
    49   real :: sinlon(iip1),sinlondlon(iip1)
    50   real :: coslon(iip1),coslondlon(iip1)
     49  REAL :: sinlon(iip1),sinlondlon(iip1)
     50  REAL :: coslon(iip1),coslondlon(iip1)
    5151  save sinlon,coslon,sinlondlon,coslondlon
    52   real :: dyn1,dyn2,dys1,dys2
    53   real :: qpn,qps,dqzpn,dqzps
    54   real :: smn,sms,s0n,s0s,sxn(iip1),sxs(iip1)
    55   real :: qmin,zq,pente_max
     52  REAL :: dyn1,dyn2,dys1,dys2
     53  REAL :: qpn,qps,dqzpn,dqzps
     54  REAL :: smn,sms,s0n,s0s,sxn(iip1),sxs(iip1)
     55  REAL :: qmin,zq,pente_max
    5656  !
    5757  REAL :: SSUM
    58   integer :: ismax,ismin,lati,latf
     58  INTEGER :: ismax,ismin,lati,latf
    5959  EXTERNAL  SSUM, ismin,ismax
    6060  logical :: first
     
    7272  limit = .TRUE.
    7373  pente_max=2
    74   ! if (mode.eq.1.or.mode.eq.3) then
    75   ! if (mode.eq.1) then
    76   if (mode>=1) then
     74  ! if (mode.eq.1.or.mode.eq.3) THEN
     75  ! if (mode.eq.1) THEN
     76  if (mode>=1) THEN
    7777    lati=2
    7878    latf=jjm
     
    8484  qmin=0.4995
    8585  qmin=0.
    86   if(first) then
     86  IF(first) THEN
    8787     PRINT*,'SCHEMA AMONT NOUVEAU'
    8888     first=.FALSE.
     
    181181   !     do i=1,iip1
    182182   !        zq=s0(i,j,l)/sm(i,j,l)
    183    !       if(zq.lt.qmin)
     183   !       IF(zq.lt.qmin)
    184184  !    ,       PRINT*,'avant advx1, s0(',i,',',j,',',l,')=',zq
    185185   !     enddo
     
    187187   ! enddo
    188188  !CC
    189    if(mode==2) then
     189   IF(mode==2) THEN
    190190      do l=1,llm
    191191        s0s=0.
     
    247247  endif
    248248
    249   if (mode==4) then
     249  if (mode==4) THEN
    250250     do l=1,llm
    251251        do i=1,iip1
     
    261261   CALL advx( limit,.5*dtvr,pbaru,sm,s0,sx,sy,sz,lati,latf)
    262262  ! CALL minmaxq(zq,1.e33,-1.e33,'avant advy     ')
    263   if (mode==4) then
     263  if (mode==4) THEN
    264264     do l=1,llm
    265265        do i=1,iip1
     
    282282   CALL limz(s0,sz,sm,pente_max)
    283283   CALL advz( limit,dtvr,w,sm,s0,sx,sy,sz )
    284   if (mode==4) then
     284  if (mode==4) THEN
    285285     do l=1,llm
    286286        do i=1,iip1
     
    306306
    307307  ! CALL minmaxq(zq,1.e33,-1.e33,'avant advx     ')
    308   if (mode==4) then
     308  if (mode==4) THEN
    309309     do l=1,llm
    310310        do i=1,iip1
     
    323323  !      do i=1,iip1
    324324  !         zq=s0(i,j,l)/sm(i,j,l)
    325   !        if(zq.lt.qmin)
     325  !        IF(zq.lt.qmin)
    326326  !    ,       PRINT*,'apres advx2, s0(',i,',',j,',',l,')=',zq
    327327  !      enddo
     
    346346  ! Traitements specifiques au pole
    347347
    348   if(mode>=1) then
     348  IF(mode>=1) THEN
    349349  DO l=1,llm
    350350  !   filtrages aux poles
     
    361361        q( i,jjp1,llm+1-l,0)=qps
    362362     enddo
    363      if(mode==3) then
     363     IF(mode==3) THEN
    364364        dyn1=0.
    365365        dys1=0.
     
    382382        enddo
    383383     endif
    384      if(mode==1) then
     384     IF(mode==1) THEN
    385385  !   on filtre les valeurs au bord de la "grande maille pole"
    386386        dyn1=0.
     
    459459      do j=1,jjp1
    460460       do i=1,iip1
    461          if(q(i,j,l,0)<qmin) &
     461         IF(q(i,j,l,0)<qmin) &
    462462               PRINT*,'apres pentes, s0(',i,',',j,',',l,')=',q(i,j,l,0)
    463463       enddo
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/ppm3d.f90

    r5113 r5116  
    276276  !
    277277
    278   real :: Q(IMR,JNP,NLAY,NC),PS1(IMR,JNP),PS2(IMR,JNP), &
     278  REAL :: Q(IMR,JNP,NLAY,NC),PS1(IMR,JNP),PS2(IMR,JNP), &
    279279        U(IMR,JNP,NLAY),V(IMR,JNP,NLAY),AP(NLAY+1), &
    280280        BP(NLAY+1),W(IMR,JNP,NLAY),NDT,val(NLAY),Umax
    281   integer :: IGD,IORD,JORD,KORD,NC,IMR,JNP,j1,NLAY,AE
    282   integer :: IMRD2
    283   real :: PT
     281  INTEGER :: IGD,IORD,JORD,KORD,NC,IMR,JNP,j1,NLAY,AE
     282  INTEGER :: IMRD2
     283  REAL :: PT
    284284  logical :: cross, fill, dum
    285285  !
    286286  ! Local dynamic arrays
    287287  !
    288   real :: CRX(IMR,JNP),CRY(IMR,JNP),xmass(IMR,JNP),ymass(IMR,JNP), &
     288  REAL :: CRX(IMR,JNP),CRY(IMR,JNP),xmass(IMR,JNP),ymass(IMR,JNP), &
    289289        fx1(IMR+1),DPI(IMR,JNP,NLAY),delp1(IMR,JNP,NLAY), &
    290290        WK1(IMR,JNP,NLAY),PU(IMR,JNP),PV(IMR,JNP),DC2(IMR,JNP), &
     
    294294  ! Local static  arrays
    295295  !
    296   real :: DTDX(Jmax), DTDX5(Jmax), acosp(Jmax), &
     296  REAL :: DTDX(Jmax), DTDX5(Jmax), acosp(Jmax), &
    297297        cosp(Jmax), cose(Jmax), DAP(kmax),DBK(Kmax)
    298298  data NDT0, NSTEP /0, 0/
     
    314314  !
    315315  ! *********** Initialization **********************
    316   if(NSTEP==1) then
    317   !
    318   write(6,*) '------------------------------------ '
    319   write(6,*) 'NASA/GSFC Transport Core Version 4.5'
    320   write(6,*) '------------------------------------ '
     316  IF(NSTEP==1) THEN
     317  !
     318  WRITE(6,*) '------------------------------------ '
     319  WRITE(6,*) 'NASA/GSFC Transport Core Version 4.5'
     320  WRITE(6,*) '------------------------------------ '
    321321  !
    322322  WRITE(6,*) 'IMR=',IMR,' JNP=',JNP,' NLAY=',NLAY,' j1=',j1
     
    324324  !
    325325  ! controles sur les parametres
    326   if(NLAY<6) then
    327     write(6,*) 'NLAY must be >= 6'
     326  IF(NLAY<6) THEN
     327    WRITE(6,*) 'NLAY must be >= 6'
    328328    stop
    329329  endif
    330   if (JNP<NLAY) then
    331      write(6,*) 'JNP must be >= NLAY'
     330  if (JNP<NLAY) THEN
     331     WRITE(6,*) 'JNP must be >= NLAY'
    332332    stop
    333333  endif
    334334  IMRD2=mod(IMR,2)
    335   if (j1==2.and.IMRD2/=0) then
    336      write(6,*) 'if j1=2 IMR must be an even integer'
     335  if (j1==2.and.IMRD2/=0) THEN
     336     WRITE(6,*) 'if j1=2 IMR must be an even integer'
    337337    stop
    338338  endif
    339339
    340340  !
    341   if(Jmax<JNP .or. Kmax<NLAY) then
    342     write(6,*) 'Jmax or Kmax is too small'
     341  IF(Jmax<JNP .or. Kmax<NLAY) THEN
     342    WRITE(6,*) 'Jmax or Kmax is too small'
    343343    stop
    344344  endif
     
    353353  DP =    PI / REAL(JMR)
    354354  !
    355   if(IGD==0) then
     355  IF(IGD==0) THEN
    356356  ! Compute analytic cosine at cell edges
    357357        CALL cosa(cosp,cose,JNP,PI,DP)
     
    372372  endif
    373373  !
    374   if(NDT0 /= NDT) then
     374  IF(NDT0 /= NDT) THEN
    375375  DT   = NDT
    376376  NDT0 = NDT
    377377
    378     if(Umax < 180.) then
    379      write(6,*) 'Umax may be too small!'
     378    IF(Umax < 180.) THEN
     379     WRITE(6,*) 'Umax may be too small!'
    380380    endif
    381381  CR1  = abs(Umax*DT)/(DL*AE)
    382382  MaxDT = DP*AE / abs(Umax) + 0.5
    383   write(6,*)'Largest time step for max(V)=',Umax,' is ',MaxDT
    384   if(MaxDT < abs(NDT)) then
    385         write(6,*) 'Warning!!! NDT maybe too large!'
    386   endif
    387   !
    388   if(CR1>=0.95) then
     383  WRITE(6,*)'Largest time step for max(V)=',Umax,' is ',MaxDT
     384  IF(MaxDT < abs(NDT)) THEN
     385        WRITE(6,*) 'Warning!!! NDT maybe too large!'
     386  endif
     387  !
     388  IF(CR1>=0.95) THEN
    389389  JS0 = 0
    390390  JN0 = 0
     
    413413  DTDY5 = 0.5*DTDY
    414414  !
    415   !  write(6,*) 'J1=',J1,' J2=', J2
     415  !  WRITE(6,*) 'J1=',J1,' J2=', J2
    416416  endif
    417417  !
     
    429429
    430430  !
    431   if(j1/=2) then
     431  IF(j1/=2) THEN
    432432  DO IC=1,NC
    433433  DO L=1,NLAY
     
    453453  do k=1,NLAY
    454454  !
    455   if(IGD==0) then
     455  IF(IGD==0) THEN
    456456  ! Convert winds on A-Grid to Courant # on C-Grid.
    457457  CALL A2C(U(1,1,k),V(1,1,k),IMR,JMR,j1,j2,CRX,CRY,dtdx5,DTDY5)
     
    480480  do j=JS0,j1+1,-1
    481481  do i=1,IMR
    482   if(abs(CRX(i,j))>1.) then
     482  IF(abs(CRX(i,j))>1.) THEN
    483483        JS = j
    484484        go to 2222
     
    490490  do j=JN0,j2-1
    491491  do i=1,IMR
    492   if(abs(CRX(i,j))>1.) then
     492  IF(abs(CRX(i,j))>1.) THEN
    493493        JN = j
    494494        go to 2233
     
    4984982233   continue
    499499  !
    500   if(j1/=2) then           ! Enlarged polar cap.
     500  IF(j1/=2) then           ! Enlarged polar cap.
    501501  do i=1,IMR
    502502  DPI(i,  2,k) = 0.
     
    586586  enddo
    587587  !
    588   if(j1==2) then
     588  IF(j1==2) THEN
    589589    IMH = IMR/2
    590590  do i=1,IMH
     
    608608  ! E-W advective cross term
    609609  do j=J1,J2
    610   if(J>JS  .and. J<JN) GO TO 250
     610  IF(J>JS  .and. J<JN) GO TO 250
    611611  !
    612612  do i=1,IMR
     
    623623  ru = UA(i,j) - iu
    624624  iiu = i-iu
    625   if(UA(i,j)>=0.) then
     625  IF(UA(i,j)>=0.) THEN
    626626  wk1(i,j,1) = qtmp(iiu)+ru*(qtmp(iiu-1)-qtmp(iiu))
    627627  else
     
    633633  END DO
    634634  !
    635   if(JN/=0) then
     635  IF(JN/=0) THEN
    636636  do j=JS+1,JN-1
    637637  !
     
    661661  enddo
    662662  !
    663     if(cross) then
     663    IF(cross) THEN
    664664  ! Add cross terms in the vertical direction.
    665     if(IORD >= 2) then
     665    IF(IORD >= 2) THEN
    666666            iad = 2
    667667    else
     
    669669    endif
    670670  !
    671     if(JORD >= 2) then
     671    IF(JORD >= 2) THEN
    672672            jad = 2
    673673    else
     
    750750  !
    751751
    752   if(fill) CALL qckxyz(DQ(1,1,1,IC),DC2,IMR,JNP,NLAY,j1,j2, &
     752  IF(fill) CALL qckxyz(DQ(1,1,1,IC),DC2,IMR,JNP,NLAY,j1,j2, &
    753753        cosp,acosp,.FALSE.,IC,NSTEP)
    754754  !
     
    765765  enddo
    766766  !
    767   if(j1/=2) then
     767  IF(j1/=2) THEN
    768768  DO k=1,NLAY
    769769  DO I=1,IMR
     
    776776  END DO
    777777  !
    778   if(j1/=2) then
     778  IF(j1/=2) THEN
    779779  DO k=1,NLAY
    780780  DO i=1,IMR
     
    794794  integer,parameter :: kmax = 150
    795795  real,parameter :: R23 = 2./3., R3 = 1./3.
    796   integer :: IMR,JNP,NLAY,J1,KORD
    797   real :: WZ(IMR,JNP,NLAY),P(IMR,JNP,NLAY),DC(IMR,JNP,NLAY), &
     796  INTEGER :: IMR,JNP,NLAY,J1,KORD
     797  REAL :: WZ(IMR,JNP,NLAY),P(IMR,JNP,NLAY),DC(IMR,JNP,NLAY), &
    798798        wk1(IMR,*),delp(IMR,JNP,NLAY),DQ(IMR,JNP,NLAY), &
    799799        DQDT(IMR,JNP,NLAY)
    800800  ! Assuming JNP >= NLAY
    801   real :: AR(IMR,*),AL(IMR,*),A6(IMR,*),flux(IMR,*),wk2(IMR,*), &
     801  REAL :: AR(IMR,*),AL(IMR,*),A6(IMR,*),flux(IMR,*),wk2(IMR,*), &
    802802        wz2(IMR,*)
    803   integer :: JMR,IMJM,NLAYM1,LMT,K,I,J
    804   real :: c0,c1,c2,tmp,qmax,qmin,a,b,fct,a1,a2,cm,cp
     803  INTEGER :: JMR,IMJM,NLAYM1,LMT,K,I,J
     804  REAL :: c0,c1,c2,tmp,qmax,qmin,a,b,fct,a1,a2,cm,cp
    805805  !
    806806  JMR = JNP - 1
     
    871871  !
    872872  ! Check if change sign
    873   if(wk1(i,1)*AL(i,1)<=0.) then
     873  IF(wk1(i,1)*AL(i,1)<=0.) THEN
    874874             AL(i,1) = 0.
    875875         flux(i,1) = 0.
     
    887887  AR(i,NLAY) = wk1(i,NLAY) + fct
    888888  AL(i,NLAY) = wk1(i,NLAY) - (fct+fct)
    889   if(wk1(i,NLAY)*AR(i,NLAY)<=0.) AR(i,NLAY) = 0.
     889  IF(wk1(i,NLAY)*AR(i,NLAY)<=0.) AR(i,NLAY) = 0.
    890890  flux(i,NLAY) = AR(i,NLAY) -  wk1(i,NLAY)
    891891  END DO
     
    926926  !
    927927  ! Interior depending on KORD
    928   if(LMT<=2) &
     928  IF(LMT<=2) &
    929929        CALL lmtppm(flux(1,2),A6(1,2),AR(1,2),AL(1,2),wk1(1,2), &
    930930        IMR*(NLAY-2),LMT)
     
    933933  !
    934934  DO i=1,IMR*NLAYM1
    935   IF(wz2(i,1)>0.) then
     935  IF(wz2(i,1)>0.) THEN
    936936    CM = wz2(i,1) / wk2(i,1)
    937937    flux(i,2) = AR(i,1)+0.5*CM*(AL(i,1)-AR(i,1)+A6(i,1)*(1.-R23*CM))
     
    9619612000   continue
    962962  END DO
    963   return
    964 end subroutine fzppm
     963  RETURN
     964END SUBROUTINE fzppm
    965965!
    966966SUBROUTINE xtp(IMR,JNP,IML,j1,j2,JN,JS,PU,DQ,Q,UC, &
    967967        fx1,xmass,IORD)
    968968  IMPLICIT NONE
    969   integer :: IMR,JNP,IML,j1,j2,JN,JS,IORD
    970   real :: PU,DQ,Q,UC,fx1,xmass
    971   real :: dc,qtmp
    972   integer :: ISAVE(IMR)
     969  INTEGER :: IMR,JNP,IML,j1,j2,JN,JS,IORD
     970  REAL :: PU,DQ,Q,UC,fx1,xmass
     971  REAL :: dc,qtmp
     972  INTEGER :: ISAVE(IMR)
    973973  dimension UC(IMR,*),DC(-IML:IMR+IML+1),xmass(IMR,JNP) &
    974974        ,fx1(IMR+1),DQ(IMR,JNP),qtmp(-IML:IMR+1+IML)
    975975  dimension PU(IMR,JNP),Q(IMR,JNP)
    976   integer :: jvan,j1vl,j2vl,j,i,iu,itmp,ist,imp
    977   real :: rut
     976  INTEGER :: jvan,j1vl,j2vl,j,i,iu,itmp,ist,imp
     977  REAL :: rut
    978978  !
    979979  IMP = IMR + 1
     
    990990  enddo
    991991  !
    992   if(j>=JN .or. j<=JS) goto 2222
     992  IF(j>=JN .or. j<=JS) goto 2222
    993993  ! ************* Eulerian **********
    994994  !
     
    10071007  DC(0) = DC(IMR)
    10081008  !
    1009   if(IORD==2 .or. j<=j1vl .or. j>=j2vl) then
     1009  IF(IORD==2 .or. j<=j1vl .or. j>=j2vl) THEN
    10101010  DO i=1,IMR
    10111011  iu = REAL(i) - uc(i,j)
     
    10581058  !
    10591059  do i=1,IMR
    1060   IF(uc(i,j)>1.) then
     1060  IF(uc(i,j)>1.) THEN
    10611061  !DIR$ NOVECTOR
    10621062    do ist = ISAVE(i),i-1
    10631063    fx1(i) = fx1(i) + qtmp(ist)
    10641064    enddo
    1065   elseIF(uc(i,j)<-1.) then
     1065  elseIF(uc(i,j)<-1.) THEN
    10661066    do ist = i,ISAVE(i)-1
    10671067    fx1(i) = fx1(i) - qtmp(ist)
     
    10841084  !
    10851085  END DO
    1086   return
    1087 end subroutine xtp
     1086  RETURN
     1087END SUBROUTINE xtp
    10881088!
    10891089SUBROUTINE fxppm(IMR,IML,UT,P,DC,flux,IORD)
    10901090  IMPLICIT NONE
    1091   integer :: IMR,IML,IORD
    1092   real :: UT,P,DC,flux
     1091  INTEGER :: IMR,IML,IORD
     1092  REAL :: UT,P,DC,flux
    10931093  real,parameter ::  R3 = 1./3., R23 = 2./3.
    10941094  DIMENSION UT(*),flux(*),P(-IML:IMR+IML+1),DC(-IML:IMR+IML+1)
    10951095  REAL :: AR(0:IMR),AL(0:IMR),A6(0:IMR)
    1096   integer :: LMT,IMP,JLVL,i
     1096  INTEGER :: LMT,IMP,JLVL,i
    10971097   ! logical first
    10981098   ! data first /.TRUE./
    10991099   ! SAVE LMT
    1100    ! if(first) then
     1100   ! IF(first) THEN
    11011101  !
    11021102  ! correction calcul de LMT a chaque passage pour pouvoir choisir
    11031103  ! plusieurs schemas PPM pour differents traceurs
    1104   !  IF (IORD.LE.0) then
    1105   !        if(IMR.GE.144) then
     1104  !  IF (IORD.LE.0) THEN
     1105  !        IF(IMR.GE.144) THEN
    11061106  !              LMT = 0
    1107   !        elseif(IMR.GE.72) then
     1107  !        elseif(IMR.GE.72) THEN
    11081108  !              LMT = 1
    11091109  !        else
     
    11151115  !
    11161116  LMT = IORD - 3
    1117    ! write(6,*) 'PPM option in E-W direction = ', LMT
     1117   ! WRITE(6,*) 'PPM option in E-W direction = ', LMT
    11181118   ! first = .FALSE.
    11191119   ! endif
     
    11321132  END DO
    11331133  !
    1134   if(LMT<=2) CALL lmtppm(DC(1),A6(1),AR(1),AL(1),P(1),IMR,LMT)
     1134  IF(LMT<=2) CALL lmtppm(DC(1),A6(1),AR(1),AL(1),P(1),IMR,LMT)
    11351135  !
    11361136  AL(0) = AL(IMR)
     
    11391139  !
    11401140  DO i=1,IMR
    1141   IF(UT(i)>0.) then
     1141  IF(UT(i)>0.) THEN
    11421142  flux(i) = AR(i-1) + 0.5*UT(i)*(AL(i-1) - AR(i-1) + &
    11431143        A6(i-1)*(1.-R23*UT(i)) )
     
    11471147  endif
    11481148  enddo
    1149   return
    1150 end subroutine fxppm
     1149  RETURN
     1150END SUBROUTINE fxppm
    11511151!
    11521152SUBROUTINE xmist(IMR,IML,P,DC)
    11531153  IMPLICIT NONE
    1154   integer :: IMR,IML
     1154  INTEGER :: IMR,IML
    11551155  real,parameter :: R24 = 1./24.
    1156   real :: P(-IML:IMR+1+IML),DC(-IML:IMR+1+IML)
    1157   integer :: i
    1158   real :: tmp,pmax,pmin
     1156  REAL :: P(-IML:IMR+1+IML),DC(-IML:IMR+1+IML)
     1157  INTEGER :: i
     1158  REAL :: tmp,pmax,pmin
    11591159  !
    11601160  do i=1,IMR
     
    11641164  DC(i) = sign(min(abs(tmp),Pmax,Pmin), tmp)
    11651165  END DO
    1166   return
    1167 end subroutine xmist
     1166  RETURN
     1167END SUBROUTINE xmist
    11681168!
    11691169SUBROUTINE ytp(IMR,JNP,j1,j2,acosp,RCAP,DQ,P,VC,DC2 &
    11701170        ,ymass,fx,A6,AR,AL,JORD)
    11711171  IMPLICIT NONE
    1172   integer :: IMR,JNP,j1,j2,JORD
    1173   real :: acosp,RCAP,DQ,P,VC,DC2,ymass,fx,A6,AR,AL
     1172  INTEGER :: IMR,JNP,j1,j2,JORD
     1173  REAL :: acosp,RCAP,DQ,P,VC,DC2,ymass,fx,A6,AR,AL
    11741174  dimension P(IMR,JNP),VC(IMR,JNP),ymass(IMR,JNP) &
    11751175        ,DC2(IMR,JNP),DQ(IMR,JNP),acosp(JNP)
    11761176  ! Work array
    11771177  DIMENSION fx(IMR,JNP),AR(IMR,JNP),AL(IMR,JNP),A6(IMR,JNP)
    1178   integer :: JMR,len,i,jt,j
    1179   real :: sum1,sum2
     1178  INTEGER :: JMR,len,i,jt,j
     1179  REAL :: sum1,sum2
    11801180  !
    11811181  JMR = JNP - 1
    11821182  len = IMR*(J2-J1+2)
    11831183  !
    1184   if(JORD==1) then
     1184  IF(JORD==1) THEN
    11851185  DO i=1,len
    11861186  JT = REAL(J1) - VC(i,J1)
     
    11911191  CALL ymist(IMR,JNP,j1,P,DC2,4)
    11921192  !
    1193   if(JORD<=0 .or. JORD>=3) then
    1194 
     1193  IF(JORD<=0 .or. JORD>=3) THEN
    11951194  CALL fyppm(VC,P,DC2,fx,IMR,JNP,j1,j2,A6,AR,AL,JORD)
    11961195
     
    12281227  enddo
    12291228  !
    1230   if(j1/=2) then
     1229  IF(j1/=2) THEN
    12311230  do i=1,IMR
    12321231  DQ(i,  2) = sum1
     
    12351234  endif
    12361235  !
    1237   return
    1238 end subroutine ytp
     1236  RETURN
     1237END SUBROUTINE ytp
    12391238!
    12401239subroutine  ymist(IMR,JNP,j1,P,DC,ID)
    12411240  IMPLICIT NONE
    1242   integer :: IMR,JNP,j1,ID
     1241  INTEGER :: IMR,JNP,j1,ID
    12431242  real,parameter :: R24 = 1./24.
    1244   real :: P(IMR,JNP),DC(IMR,JNP)
    1245   integer :: iimh,jmr,ijm3,imh,i
    1246   real :: pmax,pmin,tmp
     1243  REAL :: P(IMR,JNP),DC(IMR,JNP)
     1244  INTEGER :: iimh,jmr,ijm3,imh,i
     1245  REAL :: pmax,pmin,tmp
    12471246  !
    12481247  IMH = IMR / 2
     
    12911290  ENDIF
    12921291  !
    1293   if(j1/=2) then
     1292  IF(j1/=2) THEN
    12941293  do i=1,IMR
    12951294  DC(i,1) = 0.
     
    13171316  END DO
    13181317  endif
    1319   return
    1320 end subroutine ymist
     1318  RETURN
     1319END SUBROUTINE ymist
    13211320!
    13221321SUBROUTINE fyppm(VC,P,DC,flux,IMR,JNP,j1,j2,A6,AR,AL,JORD)
    13231322  IMPLICIT NONE
    1324   integer :: IMR,JNP,j1,j2,JORD
     1323  INTEGER :: IMR,JNP,j1,j2,JORD
    13251324  real,parameter :: R3 = 1./3., R23 = 2./3.
    1326   real :: VC(IMR,*),flux(IMR,*),P(IMR,*),DC(IMR,*)
     1325  REAL :: VC(IMR,*),flux(IMR,*),P(IMR,*),DC(IMR,*)
    13271326  ! Local work arrays.
    1328   real :: AR(IMR,JNP),AL(IMR,JNP),A6(IMR,JNP)
    1329   integer :: LMT,i
    1330   integer :: IMH,JMR,j11,IMJM1,len
     1327  REAL :: AR(IMR,JNP),AL(IMR,JNP),A6(IMR,JNP)
     1328  INTEGER :: LMT,i
     1329  INTEGER :: IMH,JMR,j11,IMJM1,len
    13311330   ! logical first
    13321331   ! data first /.TRUE./
     
    13381337  IMJM1 = IMR*(J2-J1+2)
    13391338  len   = IMR*(J2-J1+3)
    1340    ! if(first) then
    1341    ! IF(JORD.LE.0) then
    1342    !       if(JMR.GE.90) then
     1339   ! IF(first) THEN
     1340   ! IF(JORD.LE.0) THEN
     1341   !       IF(JMR.GE.90) THEN
    13431342   !             LMT = 0
    1344    !       elseif(JMR.GE.45) then
     1343   !       elseif(JMR.GE.45) THEN
    13451344   !             LMT = 1
    13461345   !       else
     
    13841383  END DO
    13851384  !
    1386   if(LMT<=2) CALL lmtppm(DC(1,j11),A6(1,j11),AR(1,j11) &
     1385  IF(LMT<=2) CALL lmtppm(DC(1,j11),A6(1,j11),AR(1,j11) &
    13871386        ,AL(1,j11),P(1,j11),len,LMT)
    13881387  !
    13891388
    13901389  DO i=1,IMJM1
    1391   IF(VC(i,j1)>0.) then
     1390  IF(VC(i,j1)>0.) THEN
    13921391  flux(i,j1) = AR(i,j11) + 0.5*VC(i,j1)*(AL(i,j11) - AR(i,j11) + &
    13931392        A6(i,j11)*(1.-R23*VC(i,j1)) )
     
    13971396  endif
    13981397  END DO
    1399   return
    1400 end subroutine fyppm
     1398  RETURN
     1399END SUBROUTINE fyppm
    14011400!
    14021401  SUBROUTINE yadv(IMR,JNP,j1,j2,p,VA,ady,wk,IAD)
    14031402    IMPLICIT NONE
    1404     integer :: IMR,JNP,j1,j2,IAD
     1403    INTEGER :: IMR,JNP,j1,j2,IAD
    14051404    REAL :: p(IMR,JNP),ady(IMR,JNP),VA(IMR,JNP)
    14061405    REAL :: WK(IMR,-1:JNP+2)
     
    14261425    wk(i+IMH,JNP+2) = p(i,JNP-2)
    14271426    enddo
    1428      ! write(*,*) 'toto 1'
     1427     ! WRITE(*,*) 'toto 1'
    14291428  ! --------------------------------
    1430   IF(IAD==2) then
     1429  IF(IAD==2) THEN
    14311430  do j=j1-1,j2+1
    14321431  do i=1,IMR
    1433    ! write(*,*) 'avt NINT','i=',i,'j=',j
     1432   ! WRITE(*,*) 'avt NINT','i=',i,'j=',j
    14341433  JP = NINT(VA(i,j))
    14351434  rv = JP - VA(i,j)
    1436    ! write(*,*) 'VA=',VA(i,j), 'JP1=',JP,'rv=',rv
     1435   ! WRITE(*,*) 'VA=',VA(i,j), 'JP1=',JP,'rv=',rv
    14371436  JP = j - JP
    1438    ! write(*,*) 'JP2=',JP
     1437   ! WRITE(*,*) 'JP2=',JP
    14391438  a1 = 0.5*(wk(i,jp+1)+wk(i,jp-1)) - wk(i,jp)
    14401439  b1 = 0.5*(wk(i,jp+1)-wk(i,jp-1))
    1441    ! write(*,*) 'a1=',a1,'b1=',b1
     1440   ! WRITE(*,*) 'a1=',a1,'b1=',b1
    14421441  ady(i,j) = wk(i,jp) + rv*(a1*rv + b1) - wk(i,j)
    14431442  enddo
    14441443  enddo
    1445    ! write(*,*) 'toto 2'
    1446   !
    1447   ELSEIF(IAD==1) then
     1444   ! WRITE(*,*) 'toto 2'
     1445  !
     1446  ELSEIF(IAD==1) THEN
    14481447    do j=j1-1,j2+1
    14491448  do i=1,imr
     
    14541453  ENDIF
    14551454  !
    1456     if(j1/=2) then
     1455    IF(j1/=2) THEN
    14571456    sum1 = 0.
    14581457    sum2 = 0.
     
    14871486    endif
    14881487  !
    1489     return
    1490 end subroutine yadv
     1488    RETURN
     1489END SUBROUTINE yadv
    14911490!
    14921491  SUBROUTINE xadv(IMR,JNP,j1,j2,p,UA,JS,JN,IML,adx,IAD)
     
    14991498    JMR = JNP-1
    15001499  do j=j1,j2
    1501   if(J>JS  .and. J<JN) GO TO 1309
     1500  IF(J>JS  .and. J<JN) GO TO 1309
    15021501  !
    15031502  do i=1,IMR
     
    15191518  adx(i,j) = qtmp(ip) + ru*(a1*ru + b1)
    15201519  enddo
    1521   ELSEIF(IAD==1) then
     1520  ELSEIF(IAD==1) THEN
    15221521  DO i=1,IMR
    15231522  iu = UA(i,j)
    15241523  ru = UA(i,j) - iu
    15251524  iiu = i-iu
    1526   if(UA(i,j)>=0.) then
     1525  IF(UA(i,j)>=0.) THEN
    15271526  adx(i,j) = qtmp(iiu)+ru*(qtmp(iiu-1)-qtmp(iiu))
    15281527  else
     
    15601559  adx(i,j) = qtmp(ip)- p(i,j) + ru*(a1*ru + b1)
    15611560  enddo
    1562   ELSEIF(IAD==1) then
     1561  ELSEIF(IAD==1) THEN
    15631562  ! 1st order
    15641563  DO i=1,IMR
     
    15691568  enddo
    15701569  !
    1571     if(j1/=2) then
     1570    IF(j1/=2) THEN
    15721571  do i=1,IMR
    15731572  adx(i,  2) = 0.
     
    15801579  adx(i,JNP) = 0.
    15811580  enddo
    1582     return
    1583 end subroutine xadv
     1581    RETURN
     1582END SUBROUTINE xadv
    15841583!
    15851584SUBROUTINE lmtppm(DC,A6,AR,AL,P,IM,LMT)
     
    16001599  !
    16011600  real,parameter :: R12 = 1./12.
    1602   real :: A6(IM),AR(IM),AL(IM),P(IM),DC(IM)
    1603   integer :: IM,LMT
     1601  REAL :: A6(IM),AR(IM),AL(IM),P(IM),DC(IM)
     1602  INTEGER :: IM,LMT
    16041603  INTEGER :: i
    16051604  REAL :: da1,da2,a6da,fmin
    16061605  !
    1607   if(LMT==0) then
     1606  IF(LMT==0) THEN
    16081607  ! Full constraint
    16091608  do i=1,IM
    1610   if(DC(i)==0.) then
     1609  IF(DC(i)==0.) THEN
    16111610        AR(i) = p(i)
    16121611        AL(i) = p(i)
     
    16161615  da2  = da1**2
    16171616  A6DA = A6(i)*da1
    1618   if(A6DA < -da2) then
     1617  IF(A6DA < -da2) THEN
    16191618        A6(i) = 3.*(AL(i)-p(i))
    16201619        AR(i) = AL(i) - A6(i)
    1621   elseif(A6DA > da2) then
     1620  elseif(A6DA > da2) THEN
    16221621        A6(i) = 3.*(AR(i)-p(i))
    16231622        AL(i) = AR(i) - A6(i)
     
    16251624  endif
    16261625  END DO
    1627   elseif(LMT==1) then
     1626  elseif(LMT==1) THEN
    16281627  ! Semi-monotonic constraint
    16291628  do i=1,IM
    1630   if(abs(AR(i)-AL(i)) >= -A6(i)) go to 150
    1631   if(p(i)<AR(i) .and. p(i)<AL(i)) then
     1629  IF(abs(AR(i)-AL(i)) >= -A6(i)) go to 150
     1630  IF(p(i)<AR(i) .and. p(i)<AL(i)) THEN
    16321631        AR(i) = p(i)
    16331632        AL(i) = p(i)
    16341633        A6(i) = 0.
    1635   elseif(AR(i) > AL(i)) then
     1634  elseif(AR(i) > AL(i)) THEN
    16361635        A6(i) = 3.*(AL(i)-p(i))
    16371636        AR(i) = AL(i) - A6(i)
     
    16421641150   continue
    16431642  END DO
    1644   elseif(LMT==2) then
     1643  elseif(LMT==2) THEN
    16451644  do i=1,IM
    1646   if(abs(AR(i)-AL(i)) >= -A6(i)) go to 250
     1645  IF(abs(AR(i)-AL(i)) >= -A6(i)) go to 250
    16471646  fmin = p(i) + 0.25*(AR(i)-AL(i))**2/A6(i) + A6(i)*R12
    1648   if(fmin>=0.) go to 250
    1649   if(p(i)<AR(i) .and. p(i)<AL(i)) then
     1647  IF(fmin>=0.) go to 250
     1648  IF(p(i)<AR(i) .and. p(i)<AL(i)) THEN
    16501649        AR(i) = p(i)
    16511650        AL(i) = p(i)
    16521651        A6(i) = 0.
    1653   elseif(AR(i) > AL(i)) then
     1652  elseif(AR(i) > AL(i)) THEN
    16541653        A6(i) = 3.*(AL(i)-p(i))
    16551654        AR(i) = AL(i) - A6(i)
     
    16611660  END DO
    16621661  endif
    1663   return
    1664 end subroutine lmtppm
     1662  RETURN
     1663END SUBROUTINE lmtppm
    16651664!
    16661665SUBROUTINE A2C(U,V,IMR,JMR,j1,j2,CRX,CRY,dtdx5,DTDY5)
    16671666  IMPLICIT NONE
    1668   integer :: IMR,JMR,j1,j2
    1669   real :: U(IMR,*),V(IMR,*),CRX(IMR,*),CRY(IMR,*),DTDX5(*),DTDY5
    1670   integer :: i,j
     1667  INTEGER :: IMR,JMR,j1,j2
     1668  REAL :: U(IMR,*),V(IMR,*),CRX(IMR,*),CRY(IMR,*),DTDX5(*),DTDY5
     1669  INTEGER :: i,j
    16711670  !
    16721671  do j=j1,j2
     
    16831682  CRY(i,2) = DTDY5*(V(i,2)+V(i,1))
    16841683  END DO
    1685   return
    1686 end subroutine a2c
     1684  RETURN
     1685END SUBROUTINE a2c
    16871686!
    16881687SUBROUTINE cosa(cosp,cose,JNP,PI,DP)
    16891688  IMPLICIT NONE
    1690   integer :: JNP
    1691   real :: cosp(*),cose(*),PI,DP
    1692   integer :: JMR,j,jeq
    1693   real :: ph5
     1689  INTEGER :: JNP
     1690  REAL :: cosp(*),cose(*),PI,DP
     1691  INTEGER :: JMR,j,jeq
     1692  REAL :: ph5
    16941693  JMR = JNP-1
    16951694  do j=2,JNP
     
    16991698  !
    17001699  JEQ = (JNP+1) / 2
    1701   if(JMR == 2*(JMR/2) ) then
     1700  IF(JMR == 2*(JMR/2) ) THEN
    17021701  do j=JNP, JEQ+1, -1
    17031702   cose(j) =  cose(JNP+2-j)
     
    17161715  cosp(1) = 0.
    17171716  cosp(JNP) = 0.
    1718   return
    1719 end subroutine cosa
     1717  RETURN
     1718END SUBROUTINE cosa
    17201719!
    17211720SUBROUTINE cosc(cosp,cose,JNP,PI,DP)
    17221721  IMPLICIT NONE
    1723   integer :: JNP
    1724   real :: cosp(*),cose(*),PI,DP
    1725   real :: phi
    1726   integer :: j
     1722  INTEGER :: JNP
     1723  REAL :: cosp(*),cose(*),PI,DP
     1724  REAL :: phi
     1725  INTEGER :: j
    17271726  !
    17281727  phi = -0.5*PI
     
    17411740   cosp(j) = 0.5*(cose(j)+cose(j+1))
    17421741  END DO
    1743   return
    1744 end subroutine cosc
     1742  RETURN
     1743END SUBROUTINE cosc
    17451744!
    17461745SUBROUTINE qckxyz(Q,qtmp,IMR,JNP,NLAY,j1,j2,cosp,acosp, &
     
    17521751  logical :: cross
    17531752  INTEGER :: NLAYM1,len,ip,L,icr,ipy,ipx,i
    1754   real :: qup,qly,dup,sum
     1753  REAL :: qup,qly,dup,sum
    17551754  !
    17561755  NLAYM1 = NLAY-1
     
    17621761    icr = 1
    17631762  CALL filns(q(1,1,L),IMR,JNP,j1,j2,cosp,acosp,ipy,tiny)
    1764   if(ipy==0) goto 50
     1763  IF(ipy==0) goto 50
    17651764  CALL filew(q(1,1,L),qtmp,IMR,JNP,j1,j2,ipx,tiny)
    1766   if(ipx==0) goto 50
    1767   !
    1768   if(cross) then
     1765  IF(ipx==0) goto 50
     1766  !
     1767  IF(cross) THEN
    17691768  CALL filcr(q(1,1,L),IMR,JNP,j1,j2,cosp,acosp,icr,tiny)
    17701769  endif
    1771   if(icr==0) goto 50
     1770  IF(icr==0) goto 50
    17721771  !
    17731772  ! Vertical filling...
     
    17851784  !
    17861785  CALL filns(q(1,1,L),IMR,JNP,j1,j2,cosp,acosp,ipy,tiny)
    1787   if(ipy==0) goto 225
     1786  IF(ipy==0) goto 225
    17881787  CALL filew(q(1,1,L),qtmp,IMR,JNP,j1,j2,ipx,tiny)
    1789   if(ipx==0) go to 225
    1790   if(cross) then
     1788  IF(ipx==0) go to 225
     1789  IF(cross) THEN
    17911790  CALL filcr(q(1,1,L),IMR,JNP,j1,j2,cosp,acosp,icr,tiny)
    17921791  endif
    1793   if(icr==0) goto 225
     1792  IF(icr==0) goto 225
    17941793  !
    17951794  do i=1,len
     
    18161815  !
    18171816  CALL filns(q(1,1,L),IMR,JNP,j1,j2,cosp,acosp,ipy,tiny)
    1818   if(ipy==0) goto 911
     1817  IF(ipy==0) goto 911
    18191818  CALL filew(q(1,1,L),qtmp,IMR,JNP,j1,j2,ipx,tiny)
    1820   if(ipx==0) goto 911
     1819  IF(ipx==0) goto 911
    18211820  !
    18221821  CALL filcr(q(1,1,L),IMR,JNP,j1,j2,cosp,acosp,icr,tiny)
    1823   if(icr==0) goto 911
     1822  IF(icr==0) goto 911
    18241823  !
    18251824  DO  I=1,len
     
    18411840911   continue
    18421841  !
    1843   if(ip>IMR) then
    1844   write(6,*) 'IC=',IC,' STEP=',NSTEP, &
     1842  IF(ip>IMR) THEN
     1843  WRITE(6,*) 'IC=',IC,' STEP=',NSTEP, &
    18451844        ' Vertical filling pts=',ip
    18461845  endif
    18471846  !
    1848   if(sum>1.e-25) then
    1849   write(6,*) IC,NSTEP,' Mass source from the ground=',sum
     1847  IF(sum>1.e-25) THEN
     1848  WRITE(6,*) IC,NSTEP,' Mass source from the ground=',sum
    18501849  endif
    18511850  RETURN
     
    18541853SUBROUTINE filcr(q,IMR,JNP,j1,j2,cosp,acosp,icr,tiny)
    18551854  IMPLICIT NONE
    1856   integer :: IMR,JNP,j1,j2,icr
    1857   real :: q(IMR,*),cosp(*),acosp(*),tiny
    1858   integer :: i,j
    1859   real :: dq,dn,d0,d1,ds,d2
     1855  INTEGER :: IMR,JNP,j1,j2,icr
     1856  REAL :: q(IMR,*),cosp(*),acosp(*),tiny
     1857  INTEGER :: i,j
     1858  REAL :: dq,dn,d0,d1,ds,d2
    18601859  icr = 0
    18611860  do j=j1+1,j2-1
     
    18781877  endif
    18791878  END DO
    1880   if(icr==0 .and. q(IMR,j)>=0.) goto 65
     1879  IF(icr==0 .and. q(IMR,j)>=0.) goto 65
    18811880  DO i=2,IMR
    18821881  IF(q(i,j)<0.) THEN
     
    19401939  !
    19411940  do i=1,IMR
    1942   if(q(i,j1)<0. .or. q(i,j2)<0.) then
     1941  IF(q(i,j1)<0. .or. q(i,j2)<0.) THEN
    19431942  icr = 1
    19441943  goto 80
     
    1948194780   continue
    19491948  !
    1950   if(q(1,1)<0. .or. q(1,jnp)<0.) then
     1949  IF(q(1,1)<0. .or. q(1,jnp)<0.) THEN
    19511950  icr = 1
    19521951  endif
    19531952  !
    1954   return
    1955 end subroutine filcr
     1953  RETURN
     1954END SUBROUTINE filcr
    19561955!
    19571956SUBROUTINE filns(q,IMR,JNP,j1,j2,cosp,acosp,ipy,tiny)
    19581957  IMPLICIT NONE
    1959   integer :: IMR,JNP,j1,j2,ipy
    1960   real :: q(IMR,*),cosp(*),acosp(*),tiny
    1961   real :: DP,CAP1,dq,dn,d0,d1,ds,d2
     1958  INTEGER :: IMR,JNP,j1,j2,ipy
     1959  REAL :: q(IMR,*),cosp(*),acosp(*),tiny
     1960  REAL :: DP,CAP1,dq,dn,d0,d1,ds,d2
    19621961  INTEGER :: i,j
    19631962   ! logical first
     
    19651964   ! save cap1
    19661965  !
    1967   !  if(first) then
     1966  !  IF(first) THEN
    19681967  DP = 4.*ATAN(1.)/REAL(JNP-1)
    19691968  CAP1 = IMR*(1.-COS((j1-1.5)*DP))/DP
     
    20212020  !
    20222021  ! Check Poles.
    2023   if(q(1,1)<0.) then
     2022  IF(q(1,1)<0.) THEN
    20242023  dq = q(1,1)*cap1/REAL(IMR)*acosp(j1)
    20252024  do i=1,imr
    20262025  q(i,1) = 0.
    20272026  q(i,j1) = q(i,j1) + dq
    2028   if(q(i,j1)<0.) ipy = 1
    2029   enddo
    2030   endif
    2031   !
    2032   if(q(1,JNP)<0.) then
     2027  IF(q(i,j1)<0.) ipy = 1
     2028  enddo
     2029  endif
     2030  !
     2031  IF(q(1,JNP)<0.) THEN
    20332032  dq = q(1,JNP)*cap1/REAL(IMR)*acosp(j2)
    20342033  do i=1,imr
    20352034  q(i,JNP) = 0.
    20362035  q(i,j2) = q(i,j2) + dq
    2037   if(q(i,j2)<0.) ipy = 1
    2038   enddo
    2039   endif
    2040   !
    2041   return
    2042 end subroutine filns
     2036  IF(q(i,j2)<0.) ipy = 1
     2037  enddo
     2038  endif
     2039  !
     2040  RETURN
     2041END SUBROUTINE filns
    20432042!
    20442043SUBROUTINE filew(q,qtmp,IMR,JNP,j1,j2,ipx,tiny)
    20452044  IMPLICIT NONE
    2046   integer :: IMR,JNP,j1,j2,ipx
    2047   real :: q(IMR,*),qtmp(JNP,IMR),tiny
    2048   integer :: i,j
    2049   real :: d0,d1,d2
     2045  INTEGER :: IMR,JNP,j1,j2,ipx
     2046  REAL :: q(IMR,*),qtmp(JNP,IMR),tiny
     2047  INTEGER :: i,j
     2048  REAL :: d0,d1,d2
    20502049  !
    20512050  ipx = 0
     
    20592058  do i=2,imr-1
    20602059  do j=j1,j2
    2061   if(qtmp(j,i)<0.) then
     2060  IF(qtmp(j,i)<0.) THEN
    20622061  ipx =  1
    20632062  ! west
     
    20772076  i=1
    20782077  do j=j1,j2
    2079   if(qtmp(j,i)<0.) then
     2078  IF(qtmp(j,i)<0.) THEN
    20802079  ipx =  1
    20812080  ! west
     
    20942093  i=IMR
    20952094  do j=j1,j2
    2096   if(qtmp(j,i)<0.) then
     2095  IF(qtmp(j,i)<0.) THEN
    20972096  ipx =  1
    20982097  ! west
     
    21102109  END DO
    21112110  !
    2112   if(ipx/=0) then
     2111  IF(ipx/=0) THEN
    21132112  do j=j1,j2
    21142113  do i=1,imr
     
    21192118  !
    21202119  ! Poles.
    2121   if(q(1,1)<0 .or. q(1,JNP)<0.) ipx = 1
    2122   endif
    2123   return
    2124 end subroutine filew
     2120  IF(q(1,1)<0 .or. q(1,JNP)<0.) ipx = 1
     2121  endif
     2122  RETURN
     2123END SUBROUTINE filew
    21252124!
    21262125SUBROUTINE zflip(q,im,km,nc)
    21272126  IMPLICIT NONE
    21282127  ! This routine flip the array q (in the vertical).
    2129   integer :: im,km,nc
    2130   real :: q(im,km,nc)
     2128  INTEGER :: im,km,nc
     2129  REAL :: q(im,km,nc)
    21312130  ! local dynamic array
    2132   real :: qtmp(im,km)
    2133   integer :: IC,k,i
     2131  REAL :: qtmp(im,km)
     2132  INTEGER :: IC,k,i
    21342133  !
    21352134  do IC = 1, nc
     
    21452144  END DO
    21462145  END DO
    2147   return
    2148 end subroutine zflip
     2146  RETURN
     2147END SUBROUTINE zflip
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/prather.f90

    r5106 r5116  
    3333  REAL :: q( iip1,jjp1,llm,0:9)
    3434  REAL :: w( ip1jmp1,llm )
    35   integer :: ordre,ilim
     35  INTEGER :: ordre,ilim
    3636
    3737  !   Local:
    3838  !   ------
    3939  LOGICAL :: limit
    40   real :: zq(iip1,jjp1,llm)
     40  REAL :: zq(iip1,jjp1,llm)
    4141  REAL :: sm ( iip1,jjp1, llm )
    4242  REAL :: s0( iip1,jjp1,llm ),  sx( iip1,jjp1,llm )
     
    4949  REAL :: szz( iip1,jjp1,llm ),zz
    5050  INTEGER :: i,j,l,indice
    51   real :: sxn(iip1),sxs(iip1)
    52 
    53   real :: sinlon(iip1),sinlondlon(iip1)
    54   real :: coslon(iip1),coslondlon(iip1)
    55   real :: qmin,qmax
     51  REAL :: sxn(iip1),sxs(iip1)
     52
     53  REAL :: sinlon(iip1),sinlondlon(iip1)
     54  REAL :: coslon(iip1),coslondlon(iip1)
     55  REAL :: qmin,qmax
    5656  save qmin,qmax
    5757  save sinlon,coslon,sinlondlon,coslondlon
    58   real :: dyn1,dyn2,dys1,dys2,qpn,qps,dqzpn,dqzps
    59   real :: masn,mass
     58  REAL :: dyn1,dyn2,dys1,dys2,qpn,qps,dqzpn,dqzps
     59  REAL :: masn,mass
    6060  !
    6161  REAL :: SSUM
    62   integer :: ismax,ismin
     62  INTEGER :: ismax,ismin
    6363  EXTERNAL  SSUM, ismin,ismax
    6464  logical :: first
     
    8080  limit = .TRUE.
    8181
    82   if(first) then
     82  IF(first) THEN
    8383     PRINT*,'SCHEMA PRATHER'
    8484     first=.FALSE.
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/principal_cshift_m.F90

    r5113 r5116  
    1111    ! xprimm.
    1212
    13     use nrtype, only: twopi
    14     use serre_mod, only: clon
     13    use nrtype, ONLY: twopi
     14    use serre_mod, ONLY: clon
    1515
    1616    include "dimensions.h"
     
    2222    !-----------------------------------------------------
    2323
    24     if (is2 /= 0) then
     24    if (is2 /= 0) THEN
    2525       IF (clon <= 0.) THEN
    2626          IF (is2 /= 1) THEN
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/sortvarc.f90

    r5113 r5116  
    7070  ! Ehouarn: when no initialization fields from file, resetvarc should be
    7171       ! set to false
    72    if (firstcal) then
    73      if (.not.read_start) then
     72   if (firstcal) THEN
     73     if (.not.read_start) THEN
    7474       resetvarc=.TRUE.
    7575     endif
     
    147147  ang   = SSUM(     llm,  angl, 1 )
    148148
    149   IF (firstcal.and.resetvarc) then
     149  IF (firstcal.and.resetvarc) THEN
    150150     WRITE(lunout,3500) itau, rjour, heure, time
    151151     WRITE(lunout,*) trim(modname), &
     
    162162  ! compute relative changes in etot,... (except if 'reference' values
    163163  ! are zero, which can happen when using iniacademic)
    164   if (etot0/=0) then
     164  if (etot0/=0) THEN
    165165    etot= etot/etot0
    166166  else
     
    168168  endif
    169169  rmsv= SQRT(rmsv/ptot)
    170   if (ptot0/=0) then
     170  if (ptot0/=0) THEN
    171171    ptot= ptot/ptot0
    172172  else
    173173    ptot=1.
    174174  endif
    175   if (ztot0/=0) then
     175  if (ztot0/=0) THEN
    176176    ztot= ztot/ztot0
    177177  else
    178178    ztot=1.
    179179  endif
    180   if (stot0/=0) then
     180  if (stot0/=0) THEN
    181181    stot= stot/stot0
    182182  else
    183183    stot=1.
    184184  endif
    185   if (ang0/=0) then
     185  if (ang0/=0) THEN
    186186    ang = ang /ang0
    187187  else
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/test_period.f90

    r5106 r5116  
    4444     do ij=1,iim
    4545      if (teta(ij,l)/=teta(1,l) &
    46             .or.teta(ip1jm+ij,l)/=teta(ip1jm+1,l) ) then
     46            .or.teta(ip1jm+ij,l)/=teta(ip1jm+1,l) ) THEN
    4747      PRINT *,'STOP dans test_period car ---  TETA  ---  n est pas', &
    4848            ' constant aux poles ! '
     
    100100     do ij=1,iim
    101101      if (p(ij,l)/=p(1,l) &
    102             .or.p(ip1jm+ij,l)/=p(ip1jm+1,l) ) then
     102            .or.p(ip1jm+ij,l)/=p(ip1jm+1,l) ) THEN
    103103      PRINT *,'STOP dans test_period car ---  P     ---  n est pas', &
    104104            ' constant aux poles ! '
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/traceurpole.f90

    r5114 r5116  
    1212
    1313  !   Arguments
    14   integer :: iq
    15   real :: masse(iip1, jjp1, llm)
    16   real :: q(iip1, jjp1, llm)
     14  INTEGER :: iq
     15  REAL :: masse(iip1, jjp1, llm)
     16  REAL :: q(iip1, jjp1, llm)
    1717
    1818
    1919  !   Locals
    20   integer :: i, j, l
    21   real :: sommemassen(llm)
    22   real :: sommemqn(llm)
    23   real :: sommemasses(llm)
    24   real :: sommemqs(llm)
    25   real :: qpolen(llm), qpoles(llm)
     20  INTEGER :: i, j, l
     21  REAL :: sommemassen(llm)
     22  REAL :: sommemqn(llm)
     23  REAL :: sommemasses(llm)
     24  REAL :: sommemqs(llm)
     25  REAL :: qpolen(llm), qpoles(llm)
    2626
    2727
     
    5656  enddo
    5757
    58   return
    59 end subroutine traceurpole
     58  RETURN
     59END SUBROUTINE traceurpole
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/ugeostr.F90

    r5113 r5116  
    1111  ! levels are pressure levels.
    1212
    13   use comconst_mod, only: omeg, rad
     13  use comconst_mod, ONLY: omeg, rad
    1414 
    1515  IMPLICIT NONE
     
    2929  DO j=1,jjm
    3030
    31      if (abs(sin(rlatv(j)))<1.e-4) then
     31     if (abs(sin(rlatv(j)))<1.e-4) THEN
    3232        zlat=1.e-4
    3333     else
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/write_grads_dyn.h

    r5105 r5116  
    22! $Header$
    33
    4 if (callinigrads) then
    5 
     4if (callinigrads) THEN
    65   string10='dyn'
    76   CALL inigrads(1,iip1 &
     
    2625do iq=1,nqtot
    2726   string10='q'
    28    write(string10(2:2),'(i1)') iq
     27   WRITE(string10(2:2),'(i1)') iq
    2928   CALL wrgrads(1,llm,q(:,:,iq),string10,string10)
    3029enddo
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/writedynav.F90

    r5114 r5116  
    120120  ! CALL histwrite(histaveid, 'phis', itau_w, phis, iip1*jjp1, ndex2d)
    121121
    122   if (ok_sync) then
     122  if (ok_sync) THEN
    123123     CALL histsync(histaveid)
    124124     CALL histsync(histvaveid)
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/writehist.f90

    r5114 r5116  
    4747  REAL :: phis(ip1jmp1)
    4848  REAL :: q(ip1jmp1, llm, nqtot)
    49   integer :: time
     49  INTEGER :: time
    5050
    5151
     
    5353  !   Variables locales
    5454  !
    55   integer :: iq, ii, ll
    56   integer :: ndexu(ip1jmp1 * llm), ndexv(ip1jm * llm), ndex2d(ip1jmp1)
     55  INTEGER :: iq, ii, ll
     56  INTEGER :: ndexu(ip1jmp1 * llm), ndexv(ip1jm * llm), ndex2d(ip1jmp1)
    5757  logical :: ok_sync
    58   integer :: itau_w
     58  INTEGER :: itau_w
    5959  REAL :: vnat(ip1jm, llm), unat(ip1jmp1, llm)
    6060
     
    114114  !  Fin
    115115  !
    116   if (ok_sync) then
     116  if (ok_sync) THEN
    117117    CALL histsync(histid)
    118118    CALL histsync(histvid)
    119119    CALL histsync(histuid)
    120120  endif
    121   return
    122 end subroutine writehist
     121  RETURN
     122END SUBROUTINE writehist
Note: See TracChangeset for help on using the changeset viewer.