Ignore:
Timestamp:
Mar 5, 2014, 2:19:12 PM (10 years ago)
Author:
lguez
Message:

Converted to free source form files in libf/phylmd which were still in
fixed source form. The conversion was done using the polish mode of
the NAG Fortran Compiler.

In addition to converting to free source form, the processing of the
files also:

-- indented the code (including comments);

-- set Fortran keywords to uppercase, and set all other identifiers
to lower case;

-- added qualifiers to end statements (for example "end subroutine
conflx", instead of "end");

-- changed the terminating statements of all DO loops so that each
loop ends with an ENDDO statement (instead of a labeled continue).

-- replaced #include by include.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/coefkzmin.F90

    r1988 r1992  
    1 !
    2        SUBROUTINE coefkzmin(knon,ypaprs,ypplay,yu,yv,yt,yq,ycdragm
    3      .   ,km,kn)
    41
    5       USE dimphy
    6       IMPLICIT NONE
     2SUBROUTINE coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, ycdragm, km, kn)
    73
    8       include "YOMCST.h"
     4  USE dimphy
     5  IMPLICIT NONE
    96
    10 c.......................................................................
    11 c  Entrees modifies en attendant une version ou les zlev, et zlay soient
    12 c  disponibles.
     7  include "YOMCST.h"
    138
    14       REAL  ycdragm(klon)
     9  ! .......................................................................
     10  ! Entrees modifies en attendant une version ou les zlev, et zlay soient
     11  ! disponibles.
    1512
    16       REAL yu(klon,klev), yv(klon,klev)
    17       REAL yt(klon,klev), yq(klon,klev)
    18       REAL ypaprs(klon,klev+1), ypplay(klon,klev)
    19       REAL yustar(klon)
    20       real yzlay(klon,klev),yzlev(klon,klev+1),yteta(klon,klev)
     13  REAL ycdragm(klon)
    2114
    22       integer i
     15  REAL yu(klon, klev), yv(klon, klev)
     16  REAL yt(klon, klev), yq(klon, klev)
     17  REAL ypaprs(klon, klev+1), ypplay(klon, klev)
     18  REAL yustar(klon)
     19  REAL yzlay(klon, klev), yzlev(klon, klev+1), yteta(klon, klev)
    2320
    24 c.......................................................................
    25 c
    26 c  En entree :
    27 c  -----------
    28 c
    29 c zlev : altitude a chaque niveau (interface inferieure de la couche
    30 c        de meme indice)
    31 c ustar : u*
    32 c
    33 c teta : temperature potentielle au centre de chaque couche
    34 c        (en entree : la valeur au debut du pas de temps)
    35 c
    36 c  en sortier :
    37 c  ------------
    38 c
    39 c km : diffusivite turbulente de quantite de mouvement (au bas de chaque
    40 c      couche)
    41 c      (en sortie : la valeur a la fin du pas de temps)
    42 c kn : diffusivite turbulente des scalaires (au bas de chaque couche)
    43 c      (en sortie : la valeur a la fin du pas de temps)
    44 c
    45 c.......................................................................
     21  INTEGER i
    4622
    47       real ustar(klon)
    48       real kmin,qmin,pblhmin(klon),coriol(klon)
    49       REAL zlev(klon,klev+1)
    50       REAL teta(klon,klev)
     23  ! .......................................................................
    5124
    52       REAL km(klon,klev)
    53       REAL kn(klon,klev)
    54       integer knon
     25  ! En entree :
     26  ! -----------
     27
     28  ! zlev : altitude a chaque niveau (interface inferieure de la couche
     29  ! de meme indice)
     30  ! ustar : u*
     31
     32  ! teta : temperature potentielle au centre de chaque couche
     33  ! (en entree : la valeur au debut du pas de temps)
     34
     35  ! en sortier :
     36  ! ------------
     37
     38  ! km : diffusivite turbulente de quantite de mouvement (au bas de chaque
     39  ! couche)
     40  ! (en sortie : la valeur a la fin du pas de temps)
     41  ! kn : diffusivite turbulente des scalaires (au bas de chaque couche)
     42  ! (en sortie : la valeur a la fin du pas de temps)
     43
     44  ! .......................................................................
     45
     46  REAL ustar(klon)
     47  REAL kmin, qmin, pblhmin(klon), coriol(klon)
     48  REAL zlev(klon, klev+1)
     49  REAL teta(klon, klev)
     50
     51  REAL km(klon, klev)
     52  REAL kn(klon, klev)
     53  INTEGER knon
    5554
    5655
    57       integer nlay,nlev
    58       integer ig,k
     56  INTEGER nlay, nlev
     57  INTEGER ig, k
    5958
    60       real,parameter :: kap=0.4
     59  REAL, PARAMETER :: kap = 0.4
    6160
    62       nlay=klev
    63       nlev=klev+1
    64 c.......................................................................
    65 c  en attendant une version ou les zlev, et zlay soient
    66 c  disponibles.
    67 c  Debut de la partie qui doit etre unclue a terme dans clmain.
    68 c
    69          do i=1,knon
    70             yzlay(i,1)=RD*yt(i,1)/(0.5*(ypaprs(i,1)+ypplay(i,1)))
    71      .                *(ypaprs(i,1)-ypplay(i,1))/RG
    72          enddo
    73          do k=2,klev
    74             do i=1,knon
    75                yzlay(i,k)=yzlay(i,k-1)+RD*0.5*(yt(i,k-1)+yt(i,k))
    76      s                /ypaprs(i,k)*(ypplay(i,k-1)-ypplay(i,k))/RG
    77             enddo
    78          enddo
    79          do k=1,klev
    80             do i=1,knon
    81 cATTENTION:on passe la temperature potentielle virt. pour le calcul de K
    82              yteta(i,k)=yt(i,k)*(ypaprs(i,1)/ypplay(i,k))**rkappa
    83      s          *(1.+0.61*yq(i,k))
    84             enddo
    85          enddo
    86          do i=1,knon
    87             yzlev(i,1)=0.
    88             yzlev(i,klev+1)=2.*yzlay(i,klev)-yzlay(i,klev-1)
    89          enddo
    90          do k=2,klev
    91             do i=1,knon
    92                yzlev(i,k)=0.5*(yzlay(i,k)+yzlay(i,k-1))
    93             enddo
    94          enddo
     61  nlay = klev
     62  nlev = klev + 1
     63  ! .......................................................................
     64  ! en attendant une version ou les zlev, et zlay soient
     65  ! disponibles.
     66  ! Debut de la partie qui doit etre unclue a terme dans clmain.
    9567
    96       yustar(1:knon) =SQRT(ycdragm(1:knon)*
    97      $       (yu(1:knon,1)*yu(1:knon,1)+yv(1:knon,1)*yv(1:knon,1)))
     68  DO i = 1, knon
     69    yzlay(i, 1) = rd*yt(i, 1)/(0.5*(ypaprs(i,1)+ypplay(i, &
     70      1)))*(ypaprs(i,1)-ypplay(i,1))/rg
     71  END DO
     72  DO k = 2, klev
     73    DO i = 1, knon
     74      yzlay(i, k) = yzlay(i, k-1) + rd*0.5*(yt(i,k-1)+yt(i,k))/ypaprs(i, k)*( &
     75        ypplay(i,k-1)-ypplay(i,k))/rg
     76    END DO
     77  END DO
     78  DO k = 1, klev
     79    DO i = 1, knon
     80      ! ATTENTION:on passe la temperature potentielle virt. pour le calcul de
     81      ! K
     82      yteta(i, k) = yt(i, k)*(ypaprs(i,1)/ypplay(i,k))**rkappa* &
     83        (1.+0.61*yq(i,k))
     84    END DO
     85  END DO
     86  DO i = 1, knon
     87    yzlev(i, 1) = 0.
     88    yzlev(i, klev+1) = 2.*yzlay(i, klev) - yzlay(i, klev-1)
     89  END DO
     90  DO k = 2, klev
     91    DO i = 1, knon
     92      yzlev(i, k) = 0.5*(yzlay(i,k)+yzlay(i,k-1))
     93    END DO
     94  END DO
    9895
    99 c  Fin de la partie qui doit etre unclue a terme dans clmain.
     96  yustar(1:knon) = sqrt(ycdragm(1:knon)*(yu(1:knon,1)*yu(1:knon,1)+yv(1:knon, &
     97    1)*yv(1:knon,1)))
    10098
    101 Cette routine est ecrite pour avoir en entree ustar, teta et zlev
    102 c  Ici, on a inclut le calcul de ces trois variables dans la routine
    103 c  coefkzmin en attendant une nouvelle version de la couche limite
    104 c  ou ces variables seront disponibles.
     99  ! Fin de la partie qui doit etre unclue a terme dans clmain.
    105100
    106 c Debut de la routine coefkzmin proprement dite.
     101  ! ette routine est ecrite pour avoir en entree ustar, teta et zlev
     102  ! Ici, on a inclut le calcul de ces trois variables dans la routine
     103  ! coefkzmin en attendant une nouvelle version de la couche limite
     104  ! ou ces variables seront disponibles.
    107105
    108       ustar=yustar
    109       teta=yteta
    110       zlev=yzlev
     106  ! Debut de la routine coefkzmin proprement dite.
    111107
    112       do ig=1,knon
    113          coriol(ig)=1.e-4
    114          pblhmin(ig)=0.07*ustar(ig)/max(abs(coriol(ig)),2.546e-5)
    115       enddo
    116          
    117       do k=2,klev
    118          do ig=1,knon
    119             if (teta(ig,2).gt.teta(ig,1)) then
    120                qmin=ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2
    121                kmin=kap*zlev(ig,k)*qmin
    122             else
    123                kmin=0. ! kmin n'est utilise que pour les SL stables.
    124             endif
    125             kn(ig,k)=kmin
    126             km(ig,k)=kmin
    127          enddo
    128       enddo
     108  ustar = yustar
     109  teta = yteta
     110  zlev = yzlev
     111
     112  DO ig = 1, knon
     113    coriol(ig) = 1.E-4
     114    pblhmin(ig) = 0.07*ustar(ig)/max(abs(coriol(ig)), 2.546E-5)
     115  END DO
     116
     117  DO k = 2, klev
     118    DO ig = 1, knon
     119      IF (teta(ig,2)>teta(ig,1)) THEN
     120        qmin = ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2
     121        kmin = kap*zlev(ig, k)*qmin
     122      ELSE
     123        kmin = 0. ! kmin n'est utilise que pour les SL stables.
     124      END IF
     125      kn(ig, k) = kmin
     126      km(ig, k) = kmin
     127    END DO
     128  END DO
    129129
    130130
    131       return
    132       end
     131  RETURN
     132END SUBROUTINE coefkzmin
Note: See TracChangeset for help on using the changeset viewer.