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/aeropt.F90

    r1988 r1992  
    1 !
     1
    22! $Id$
    3 !
    4       SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, RHcl,
    5      .            tau_ae, piz_ae, cg_ae, ai        )
    6 c
    7       USE dimphy
    8       IMPLICIT none
    9 c
    10 c
    11 c     
    12 cym#include "dimensions.h"
    13 cym#include "dimphy.h"
    14 #include "YOMCST.h"
    15 c
    16 c Arguments:
    17 c
    18       REAL, INTENT(in) :: paprs(klon,klev+1)
    19       REAL, INTENT(in) :: pplay(klon,klev), t_seri(klon,klev)
    20       REAL, INTENT(in) :: msulfate(klon,klev) ! masse sulfate ug SO4/m3  [ug/m^3]
    21       REAL, INTENT(in) :: RHcl(klon,klev)     ! humidite relative ciel clair
    22       REAL, INTENT(out) :: tau_ae(klon,klev,2) ! epaisseur optique aerosol
    23       REAL, INTENT(out) :: piz_ae(klon,klev,2) ! single scattering albedo aerosol
    24       REAL, INTENT(out) :: cg_ae(klon,klev,2)  ! asymmetry parameter aerosol
    25       REAL, INTENT(out) :: ai(klon)            ! POLDER aerosol index
    26 c
    27 c Local
    28 c
    29       INTEGER i, k, inu
    30       INTEGER RH_num, nbre_RH
    31       PARAMETER (nbre_RH=12)
    32       REAL RH_tab(nbre_RH)
    33       REAL RH_MAX, DELTA, rh
    34       PARAMETER (RH_MAX=95.)
    35       DATA RH_tab/0.,10.,20.,30.,40.,50.,60.,70.,80.,85.,90.,95./
    36       REAL zrho, zdz
    37       REAL taue670(klon)       ! epaisseur optique aerosol absorption 550 nm
    38       REAL taue865(klon)       ! epaisseur optique aerosol extinction 865 nm
    39       REAL alpha_aer_sulfate(nbre_RH,5)   !--unit m2/g SO4
    40       REAL alphasulfate     
    413
    42       CHARACTER (LEN=20) :: modname='aeropt'
    43       CHARACTER (LEN=80) :: abort_message
     4SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, rhcl, tau_ae, piz_ae, &
     5    cg_ae, ai)
    446
    45 c
    46 c Proprietes optiques
    47 c
    48       REAL alpha_aer(nbre_RH,2)   !--unit m2/g SO4
    49       REAL cg_aer(nbre_RH,2)
    50       DATA alpha_aer/.500130E+01,  .500130E+01,  .500130E+01, 
    51      .               .500130E+01,  .500130E+01,  .616710E+01, 
    52      .               .826850E+01,  .107687E+02,  .136976E+02, 
    53      .               .162972E+02,  .211690E+02,  .354833E+02, 
    54      .               .139460E+01,  .139460E+01,  .139460E+01, 
    55      .               .139460E+01,  .139460E+01,  .173910E+01, 
    56      .               .244380E+01,  .332320E+01,  .440120E+01, 
    57      .               .539570E+01,  .734580E+01,  .136038E+02 /
    58       DATA cg_aer/.619800E+00,  .619800E+00,  .619800E+00, 
    59      .            .619800E+00,  .619800E+00,  .662700E+00, 
    60      .            .682100E+00,  .698500E+00,  .712500E+00, 
    61      .            .721800E+00,  .734600E+00,  .755800E+00, 
    62      .            .545600E+00,  .545600E+00,  .545600E+00, 
    63      .            .545600E+00,  .545600E+00,  .583700E+00, 
    64      .            .607100E+00,  .627700E+00,  .645800E+00, 
    65      .            .658400E+00,  .676500E+00,  .708500E+00 /
    66       DATA alpha_aer_sulfate/
    67      . 4.910,4.910,4.910,4.910,6.547,7.373,
    68      . 8.373,9.788,12.167,14.256,17.924,28.433,
    69      . 1.453,1.453,1.453,1.453,2.003,2.321,
    70      . 2.711,3.282,4.287,5.210,6.914,12.305,
    71      . 4.308,4.308,4.308,4.308,5.753,6.521,
    72      . 7.449,8.772,11.014,12.999,16.518,26.772,
    73      . 3.265,3.265,3.265,3.265,4.388,5.016,
    74      . 5.775,6.868,8.745,10.429,13.457,22.538,
    75      . 2.116,2.116,2.116,2.116,2.882,3.330,
    76      . 3.876,4.670,6.059,7.327,9.650,16.883/
    77 c
    78       DO i=1, klon
    79          taue670(i)=0.0
    80          taue865(i)=0.0
    81       ENDDO
    82 c     
    83       DO k=1, klev
    84       DO i=1, klon
    85          if (t_seri(i,k).eq.0) write (*,*) 'aeropt T ',i,k,t_seri(i,k)
    86          if (pplay(i,k).eq.0) write (*,*) 'aeropt p ',i,k,pplay(i,k)         
    87         zrho=pplay(i,k)/t_seri(i,k)/RD                  ! kg/m3
    88         zdz=(paprs(i,k)-paprs(i,k+1))/zrho/RG           ! m
    89         rh=MIN(RHcl(i,k)*100.,RH_MAX)
    90         RH_num = INT( rh/10. + 1.)
    91         IF (rh.LT.0.) THEN
    92           abort_message = 'aeropt: RH < 0 not possible'
    93           CALL abort_gcm (modname,abort_message,1)
    94         ENDIF
    95         IF (rh.gt.85.) RH_num=10
    96         IF (rh.gt.90.) RH_num=11
    97         DELTA=(rh-RH_tab(RH_num))/(RH_tab(RH_num+1)-RH_tab(RH_num))
    98 c               
    99         inu=1
    100         tau_ae(i,k,inu)=alpha_aer(RH_num,inu) +
    101      .             DELTA*(alpha_aer(RH_num+1,inu)-alpha_aer(RH_num,inu))
    102         tau_ae(i,k,inu)=tau_ae(i,k,inu)*msulfate(i,k)*zdz*1.e-6
    103         piz_ae(i,k,inu)=1.0
    104         cg_ae(i,k,inu)=cg_aer(RH_num,inu) +
    105      .                 DELTA*(cg_aer(RH_num+1,inu)-cg_aer(RH_num,inu))
    106 c
    107         inu=2
    108         tau_ae(i,k,inu)=alpha_aer(RH_num,inu) +
    109      .             DELTA*(alpha_aer(RH_num+1,inu)-alpha_aer(RH_num,inu))
    110         tau_ae(i,k,inu)=tau_ae(i,k,inu)*msulfate(i,k)*zdz*1.e-6
    111         piz_ae(i,k,inu)=1.0
    112         cg_ae(i,k,inu)=cg_aer(RH_num,inu) +
    113      .                 DELTA*(cg_aer(RH_num+1,inu)-cg_aer(RH_num,inu))
    114 cjq
    115 cjq for aerosol index
    116 c
    117         alphasulfate=alpha_aer_sulfate(RH_num,4) +
    118      .       DELTA*(alpha_aer_sulfate(RH_num+1,4)-
    119      .       alpha_aer_sulfate(RH_num,4)) !--m2/g
    120 c     
    121         taue670(i)=taue670(i)+
    122      .       alphasulfate*msulfate(i,k)*zdz*1.e-6
    123 c
    124         alphasulfate=alpha_aer_sulfate(RH_num,5) +
    125      .       DELTA*(alpha_aer_sulfate(RH_num+1,5)-
    126      .       alpha_aer_sulfate(RH_num,5)) !--m2/g
    127 c
    128         taue865(i)=taue865(i)+
    129      .         alphasulfate*msulfate(i,k)*zdz*1.e-6
    130        
    131       ENDDO
    132       ENDDO
    133 c     
    134       DO i=1, klon
    135         ai(i)=(-log(MAX(taue670(i),0.0001)/
    136      .                MAX(taue865(i),0.0001))/log(670./865.)) *
    137      .        taue865(i)
    138       ENDDO     
    139 c
    140       RETURN
    141       END
     7  USE dimphy
     8  IMPLICIT NONE
     9
     10
     11
     12  ! ym#include "dimensions.h"
     13  ! ym#include "dimphy.h"
     14  include "YOMCST.h"
     15
     16  ! Arguments:
     17
     18  REAL, INTENT (IN) :: paprs(klon, klev+1)
     19  REAL, INTENT (IN) :: pplay(klon, klev), t_seri(klon, klev)
     20  REAL, INTENT (IN) :: msulfate(klon, klev) ! masse sulfate ug SO4/m3  [ug/m^3]
     21  REAL, INTENT (IN) :: rhcl(klon, klev) ! humidite relative ciel clair
     22  REAL, INTENT (OUT) :: tau_ae(klon, klev, 2) ! epaisseur optique aerosol
     23  REAL, INTENT (OUT) :: piz_ae(klon, klev, 2) ! single scattering albedo aerosol
     24  REAL, INTENT (OUT) :: cg_ae(klon, klev, 2) ! asymmetry parameter aerosol
     25  REAL, INTENT (OUT) :: ai(klon) ! POLDER aerosol index
     26
     27  ! Local
     28
     29  INTEGER i, k, inu
     30  INTEGER rh_num, nbre_rh
     31  PARAMETER (nbre_rh=12)
     32  REAL rh_tab(nbre_rh)
     33  REAL rh_max, delta, rh
     34  PARAMETER (rh_max=95.)
     35  DATA rh_tab/0., 10., 20., 30., 40., 50., 60., 70., 80., 85., 90., 95./
     36  REAL zrho, zdz
     37  REAL taue670(klon) ! epaisseur optique aerosol absorption 550 nm
     38  REAL taue865(klon) ! epaisseur optique aerosol extinction 865 nm
     39  REAL alpha_aer_sulfate(nbre_rh, 5) !--unit m2/g SO4
     40  REAL alphasulfate
     41
     42  CHARACTER (LEN=20) :: modname = 'aeropt'
     43  CHARACTER (LEN=80) :: abort_message
     44
     45
     46  ! Proprietes optiques
     47
     48  REAL alpha_aer(nbre_rh, 2) !--unit m2/g SO4
     49  REAL cg_aer(nbre_rh, 2)
     50  DATA alpha_aer/.500130E+01, .500130E+01, .500130E+01, .500130E+01, &
     51    .500130E+01, .616710E+01, .826850E+01, .107687E+02, .136976E+02, &
     52    .162972E+02, .211690E+02, .354833E+02, .139460E+01, .139460E+01, &
     53    .139460E+01, .139460E+01, .139460E+01, .173910E+01, .244380E+01, &
     54    .332320E+01, .440120E+01, .539570E+01, .734580E+01, .136038E+02/
     55  DATA cg_aer/.619800E+00, .619800E+00, .619800E+00, .619800E+00, &
     56    .619800E+00, .662700E+00, .682100E+00, .698500E+00, .712500E+00, &
     57    .721800E+00, .734600E+00, .755800E+00, .545600E+00, .545600E+00, &
     58    .545600E+00, .545600E+00, .545600E+00, .583700E+00, .607100E+00, &
     59    .627700E+00, .645800E+00, .658400E+00, .676500E+00, .708500E+00/
     60  DATA alpha_aer_sulfate/4.910, 4.910, 4.910, 4.910, 6.547, 7.373, 8.373, &
     61    9.788, 12.167, 14.256, 17.924, 28.433, 1.453, 1.453, 1.453, 1.453, 2.003, &
     62    2.321, 2.711, 3.282, 4.287, 5.210, 6.914, 12.305, 4.308, 4.308, 4.308, &
     63    4.308, 5.753, 6.521, 7.449, 8.772, 11.014, 12.999, 16.518, 26.772, 3.265, &
     64    3.265, 3.265, 3.265, 4.388, 5.016, 5.775, 6.868, 8.745, 10.429, 13.457, &
     65    22.538, 2.116, 2.116, 2.116, 2.116, 2.882, 3.330, 3.876, 4.670, 6.059, &
     66    7.327, 9.650, 16.883/
     67
     68  DO i = 1, klon
     69    taue670(i) = 0.0
     70    taue865(i) = 0.0
     71  END DO
     72
     73  DO k = 1, klev
     74    DO i = 1, klon
     75      IF (t_seri(i,k)==0) WRITE (*, *) 'aeropt T ', i, k, t_seri(i, k)
     76      IF (pplay(i,k)==0) WRITE (*, *) 'aeropt p ', i, k, pplay(i, k)
     77      zrho = pplay(i, k)/t_seri(i, k)/rd ! kg/m3
     78      zdz = (paprs(i,k)-paprs(i,k+1))/zrho/rg ! m
     79      rh = min(rhcl(i,k)*100., rh_max)
     80      rh_num = int(rh/10.+1.)
     81      IF (rh<0.) THEN
     82        abort_message = 'aeropt: RH < 0 not possible'
     83        CALL abort_gcm(modname, abort_message, 1)
     84      END IF
     85      IF (rh>85.) rh_num = 10
     86      IF (rh>90.) rh_num = 11
     87      delta = (rh-rh_tab(rh_num))/(rh_tab(rh_num+1)-rh_tab(rh_num))
     88
     89      inu = 1
     90      tau_ae(i, k, inu) = alpha_aer(rh_num, inu) + delta*(alpha_aer(rh_num+1, &
     91        inu)-alpha_aer(rh_num,inu))
     92      tau_ae(i, k, inu) = tau_ae(i, k, inu)*msulfate(i, k)*zdz*1.E-6
     93      piz_ae(i, k, inu) = 1.0
     94      cg_ae(i, k, inu) = cg_aer(rh_num, inu) + delta*(cg_aer(rh_num+1,inu)- &
     95        cg_aer(rh_num,inu))
     96
     97      inu = 2
     98      tau_ae(i, k, inu) = alpha_aer(rh_num, inu) + delta*(alpha_aer(rh_num+1, &
     99        inu)-alpha_aer(rh_num,inu))
     100      tau_ae(i, k, inu) = tau_ae(i, k, inu)*msulfate(i, k)*zdz*1.E-6
     101      piz_ae(i, k, inu) = 1.0
     102      cg_ae(i, k, inu) = cg_aer(rh_num, inu) + delta*(cg_aer(rh_num+1,inu)- &
     103        cg_aer(rh_num,inu))
     104      ! jq
     105      ! jq for aerosol index
     106
     107      alphasulfate = alpha_aer_sulfate(rh_num, 4) + &
     108        delta*(alpha_aer_sulfate(rh_num+1,4)-alpha_aer_sulfate(rh_num,4)) !--m2/g
     109
     110      taue670(i) = taue670(i) + alphasulfate*msulfate(i, k)*zdz*1.E-6
     111
     112      alphasulfate = alpha_aer_sulfate(rh_num, 5) + &
     113        delta*(alpha_aer_sulfate(rh_num+1,5)-alpha_aer_sulfate(rh_num,5)) !--m2/g
     114
     115      taue865(i) = taue865(i) + alphasulfate*msulfate(i, k)*zdz*1.E-6
     116
     117    END DO
     118  END DO
     119
     120  DO i = 1, klon
     121    ai(i) = (-log(max(taue670(i),0.0001)/max(taue865(i), &
     122      0.0001))/log(670./865.))*taue865(i)
     123  END DO
     124
     125  RETURN
     126END SUBROUTINE aeropt
Note: See TracChangeset for help on using the changeset viewer.