/[lmdze]/trunk/phylmd/cltrac.f
ViewVC logotype

Annotation of /trunk/phylmd/cltrac.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 81 - (hide annotations)
Wed Mar 5 14:38:41 2014 UTC (10 years, 3 months ago) by guez
Original Path: trunk/phylmd/cltrac.f90
File size: 4262 byte(s)
 Converted to free source form files 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).

1 guez 3
2 guez 81 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/cltrac.F,v 1.1.1.1 2004/05/19
3     ! 12:53:07 lmdzadmin Exp $
4    
5     SUBROUTINE cltrac(dtime, coef, t, tr, flux, paprs, pplay, delp, d_tr)
6     USE dimens_m
7     USE dimphy
8     USE suphec_m
9     IMPLICIT NONE
10     ! ======================================================================
11     ! Auteur(s): O. Boucher (LOA/LMD) date: 19961127
12     ! inspire de clvent
13     ! Objet: diffusion verticale de traceurs avec flux fixe a la surface
14     ! ou/et flux du type c-drag
15     ! ======================================================================
16     ! Arguments:
17     ! dtime----input-R- intervalle du temps (en second)
18     ! coef-----input-R- le coefficient d'echange (m**2/s) l>1
19     ! tr-------input-R- la q. de traceurs
20     ! flux-----input-R- le flux de traceurs a la surface
21     ! paprs----input-R- pression a inter-couche (Pa)
22     ! pplay----input-R- pression au milieu de couche (Pa)
23     ! delp-----input-R- epaisseur de couche (Pa)
24     ! cdrag----input-R- cdrag pour le flux de surface (non active)
25     ! tr0------input-R- traceurs a la surface ou dans l'ocean (non active)
26     ! d_tr-----output-R- le changement de tr
27     ! flux_tr--output-R- flux de tr
28     ! ======================================================================
29     REAL, INTENT (IN) :: dtime
30     REAL coef(klon, klev)
31     REAL, INTENT (IN) :: t(klon, klev) ! temperature (K)
32     REAL tr(klon, klev)
33     REAL, INTENT (IN) :: paprs(klon, klev+1)
34     REAL, INTENT (IN) :: pplay(klon, klev)
35     REAL delp(klon, klev)
36     REAL d_tr(klon, klev)
37     REAL flux(klon), cdrag(klon), tr0(klon)
38     ! REAL flux_tr(klon,klev)
39     ! ======================================================================
40     ! ======================================================================
41     INTEGER i, k
42     REAL zx_ctr(klon, 2:klev)
43     REAL zx_dtr(klon, 2:klev)
44     REAL zx_buf(klon)
45     REAL zx_coef(klon, klev)
46     REAL local_tr(klon, klev)
47     REAL zx_alf1(klon), zx_alf2(klon), zx_flux(klon)
48     ! ======================================================================
49     DO k = 1, klev
50     DO i = 1, klon
51     local_tr(i, k) = tr(i, k)
52     END DO
53     END DO
54    
55    
56     ! ======================================================================
57     DO i = 1, klon
58     zx_alf1(i) = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2))
59     zx_alf2(i) = 1.0 - zx_alf1(i)
60     zx_flux(i) = -flux(i)*dtime*rg
61     ! --pour le moment le flux est prescrit
62     ! --cdrag et zx_coef(1) vaut 0
63     cdrag(i) = 0.0
64     tr0(i) = 0.0
65     zx_coef(i, 1) = cdrag(i)*dtime*rg
66     END DO
67     ! ======================================================================
68     DO k = 2, klev
69     DO i = 1, klon
70     zx_coef(i, k) = coef(i, k)*rg/(pplay(i,k-1)-pplay(i,k))* &
71     (paprs(i,k)*2/(t(i,k)+t(i,k-1))/rd)**2
72     zx_coef(i, k) = zx_coef(i, k)*dtime*rg
73     END DO
74     END DO
75     ! ======================================================================
76     DO i = 1, klon
77     zx_buf(i) = delp(i, 1) + zx_coef(i, 1)*zx_alf1(i) + zx_coef(i, 2)
78     zx_ctr(i, 2) = (local_tr(i,1)*delp(i,1)+zx_coef(i,1)*tr0(i)-zx_flux(i))/ &
79     zx_buf(i)
80     zx_dtr(i, 2) = (zx_coef(i,2)-zx_alf2(i)*zx_coef(i,1))/zx_buf(i)
81     END DO
82    
83     DO k = 3, klev
84     DO i = 1, klon
85     zx_buf(i) = delp(i, k-1) + zx_coef(i, k) + zx_coef(i, k-1)*(1.-zx_dtr(i &
86     ,k-1))
87     zx_ctr(i, k) = (local_tr(i,k-1)*delp(i,k-1)+zx_coef(i,k-1)*zx_ctr(i,k-1 &
88     ))/zx_buf(i)
89     zx_dtr(i, k) = zx_coef(i, k)/zx_buf(i)
90     END DO
91     END DO
92     DO i = 1, klon
93     local_tr(i, klev) = (local_tr(i,klev)*delp(i,klev)+zx_coef(i,klev)*zx_ctr &
94     (i,klev))/(delp(i,klev)+zx_coef(i,klev)-zx_coef(i,klev)*zx_dtr(i,klev))
95     END DO
96     DO k = klev - 1, 1, -1
97     DO i = 1, klon
98     local_tr(i, k) = zx_ctr(i, k+1) + zx_dtr(i, k+1)*local_tr(i, k+1)
99     END DO
100     END DO
101     ! ======================================================================
102     ! == flux_tr est le flux de traceur (positif vers bas)
103     ! DO i = 1, klon
104     ! flux_tr(i,1) = zx_coef(i,1)/(RG*dtime)
105     ! ENDDO
106     ! DO k = 2, klev
107     ! DO i = 1, klon
108     ! flux_tr(i,k) = zx_coef(i,k)/(RG*dtime)
109     ! . * (local_tr(i,k)-local_tr(i,k-1))
110     ! ENDDO
111     ! ENDDO
112     ! ======================================================================
113     DO k = 1, klev
114     DO i = 1, klon
115     d_tr(i, k) = local_tr(i, k) - tr(i, k)
116     END DO
117     END DO
118    
119     RETURN
120     END SUBROUTINE cltrac

  ViewVC Help
Powered by ViewVC 1.1.21