Ignore:
Timestamp:
Oct 21, 2024, 2:58:45 PM (23 hours ago)
Author:
abarral
Message:

Convert fixed-form to free-form sources .F -> .{f,F}90
(WIP: some .F remain, will be handled in subsequent commits)

File:
1 moved

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/dyn3d_common/limz.f90

    r5245 r5246  
    22! $Header$
    33!
    4       SUBROUTINE limz(s0,sz,sm,pente_max)
    5 c
    6 c     Auteurs:   P.Le Van, F.Hourdin, F.Forget
    7 c
    8 c    ********************************************************************
    9 c    Shema  d'advection " pseudo amont " .
    10 c    ********************************************************************
    11 c    nq,iq,q,pbaru,pbarv,w sont des arguments d'entree  pour le s-pg ....
    12 c
    13 c
    14 c   --------------------------------------------------------------------
    15       IMPLICIT NONE
    16 c
    17       include "dimensions.h"
    18       include "paramet.h"
    19       include "comgeom.h"
    20 c
    21 c
    22 c   Arguments:
    23 c   ----------
    24       real pente_max
    25       REAL s0(ip1jmp1,llm),sm(ip1jmp1,llm)
    26       real sz(ip1jmp1,llm)
    27 c
    28 c      Local
    29 c   ---------
    30 c
    31       INTEGER ij,l,j,i,iju,ijq,indu(ip1jmp1),niju
    32       integer n0,iadvplus(ip1jmp1,llm),nl(llm)
    33 c
    34       REAL q(ip1jmp1,llm)
    35       real dzq(ip1jmp1,llm)
     4SUBROUTINE limz(s0,sz,sm,pente_max)
     5  !
     6  ! Auteurs:   P.Le Van, F.Hourdin, F.Forget
     7  !
     8  !    ********************************************************************
     9  ! Shema  d'advection " pseudo amont " .
     10  !    ********************************************************************
     11  ! nq,iq,q,pbaru,pbarv,w sont des arguments d'entree  pour le s-pg ....
     12  !
     13  !
     14  !   --------------------------------------------------------------------
     15  IMPLICIT NONE
     16  !
     17  include "dimensions.h"
     18  include "paramet.h"
     19  include "comgeom.h"
     20  !
     21  !
     22  !   Arguments:
     23  !   ----------
     24  real :: pente_max
     25  REAL :: s0(ip1jmp1,llm),sm(ip1jmp1,llm)
     26  real :: sz(ip1jmp1,llm)
     27  !
     28  !  Local
     29  !   ---------
     30  !
     31  INTEGER :: ij,l,j,i,iju,ijq,indu(ip1jmp1),niju
     32  integer :: n0,iadvplus(ip1jmp1,llm),nl(llm)
     33  !
     34  REAL :: q(ip1jmp1,llm)
     35  real :: dzq(ip1jmp1,llm)
    3636
    3737
    38       REAL new_m,zm
    39       real dzqw(ip1jmp1)
    40       real adzqw(ip1jmp1),dzqmax(ip1jmp1)
     38  REAL :: new_m,zm
     39  real :: dzqw(ip1jmp1)
     40  real :: adzqw(ip1jmp1),dzqmax(ip1jmp1)
    4141
    42       Logical extremum,first
    43       save first
     42  Logical :: extremum,first
     43  save first
    4444
    45       REAL      SSUM,CVMGP,CVMGT
    46       integer ismax,ismin
    47       EXTERNAL  SSUM, ismin,ismax
     45  REAL :: SSUM,CVMGP,CVMGT
     46  integer :: ismax,ismin
     47  EXTERNAL  SSUM, ismin,ismax
    4848
    49       data first/.true./
     49  data first/.true./
    5050
    5151
    52        DO  l = 1,llm
    53          DO  ij=1,ip1jmp1
    54                q(ij,l) = s0(ij,l) / sm ( ij,l )
    55                dzq(ij,l) = sz(ij,l) /sm(ij,l)
    56          ENDDO
    57        ENDDO
     52   DO  l = 1,llm
     53     DO  ij=1,ip1jmp1
     54           q(ij,l) = s0(ij,l) / sm ( ij,l )
     55           dzq(ij,l) = sz(ij,l) /sm(ij,l)
     56     ENDDO
     57   ENDDO
    5858
    59 c   calcul de la pente en haut et en bas de la maille
    60        do ij=1,ip1jmp1
    61        do l = 1, llm-1
    62             dzqw(l)=q(ij,l+1)-q(ij,l)
    63          enddo
    64             dzqw(llm)=0.
     59  !   calcul de la pente en haut et en bas de la maille
     60   do ij=1,ip1jmp1
     61   do l = 1, llm-1
     62        dzqw(l)=q(ij,l+1)-q(ij,l)
     63     enddo
     64        dzqw(llm)=0.
    6565
    66          do  l=1,llm
    67             adzqw(l)=abs(dzqw(l))
    68          enddo
     66     do  l=1,llm
     67        adzqw(l)=abs(dzqw(l))
     68     enddo
    6969
    70 c   calcul de la pente maximum dans la maille en valeur absolue
     70  !   calcul de la pente maximum dans la maille en valeur absolue
    7171
    72          do l=2,llm-1
    73             dzqmax(l)=pente_max*min(adzqw(l-1),adzqw(l))
    74          enddo
     72     do l=2,llm-1
     73        dzqmax(l)=pente_max*min(adzqw(l-1),adzqw(l))
     74     enddo
    7575
    76 c   calcul de la pente avec limitation
     76  !   calcul de la pente avec limitation
    7777
    78          do l=2,llm-1
    79             if(     dzqw(l-1)*dzqw(l).gt.0.
    80      &         .and. dzq(ij,l)*dzqw(l).gt.0.) then
    81               dzq(ij,l)=
    82      &         sign(min(abs(dzq(ij,l)),dzqmax(l)),dzq(ij,l))
    83             else
    84 c   extremum local
    85                dzq(ij,l)=0.
    86             endif
    87          enddo
     78     do l=2,llm-1
     79        if(     dzqw(l-1)*dzqw(l).gt.0. &
     80              .and. dzq(ij,l)*dzqw(l).gt.0.) then
     81          dzq(ij,l)= &
     82                sign(min(abs(dzq(ij,l)),dzqmax(l)),dzq(ij,l))
     83        else
     84  !   extremum local
     85           dzq(ij,l)=0.
     86        endif
     87     enddo
    8888
    89          DO  l=1,llm
    90                sz(ij,l) = dzq(ij,l)*sm(ij,l)
    91          ENDDO
     89     DO  l=1,llm
     90           sz(ij,l) = dzq(ij,l)*sm(ij,l)
     91     ENDDO
    9292
    93        ENDDO
     93   ENDDO
    9494
    95       RETURN
    96       END
     95  RETURN
     96END SUBROUTINE limz
Note: See TracChangeset for help on using the changeset viewer.