1 |
guez |
37 |
|
2 |
|
|
!=========================================================================== |
3 |
|
|
subroutine nat2gcm(u,v,t,rh,pk,ucov,vcov,teta,q) |
4 |
|
|
!=========================================================================== |
5 |
|
|
|
6 |
|
|
use dimens_m |
7 |
|
|
use paramet_m |
8 |
|
|
use comconst |
9 |
|
|
use comvert |
10 |
|
|
use comgeom |
11 |
|
|
use q_sat_m, only: q_sat |
12 |
|
|
use guide_m |
13 |
|
|
implicit none |
14 |
|
|
|
15 |
|
|
|
16 |
|
|
real u(iip1,jjp1,llm),v(iip1,jjm,llm) |
17 |
|
|
real t(iip1,jjp1,llm),pk(iip1,jjp1,llm),rh(iip1,jjp1,llm) |
18 |
|
|
real ps(iip1,jjp1) |
19 |
|
|
|
20 |
|
|
real ucov(iip1,jjp1,llm),vcov(iip1,jjm,llm) |
21 |
|
|
real teta(iip1,jjp1,llm),q(iip1,jjp1,llm) |
22 |
|
|
|
23 |
|
|
real pres(iip1,jjp1,llm),qsat(iip1,jjp1,llm) |
24 |
|
|
|
25 |
|
|
real unskap |
26 |
|
|
|
27 |
|
|
integer i,j,l |
28 |
|
|
|
29 |
|
|
|
30 |
|
|
print*,'Entree dans nat2gcm' |
31 |
|
|
! ucov(:,:,:)=0. |
32 |
|
|
! do l=1,llm |
33 |
|
|
! ucov(:,2:jjm,l)=u(:,2:jjm,l)*cu_2d(:,2:jjm) |
34 |
|
|
! enddo |
35 |
|
|
! ucov(iip1,:,:)=ucov(1,:,:) |
36 |
|
|
|
37 |
|
|
! teta(:,:,:)=t(:,:,:)*cpp/pk(:,:,:) |
38 |
|
|
! teta(iip1,:,:)=teta(1,:,:) |
39 |
|
|
|
40 |
|
|
! calcul de ucov et de la temperature potentielle |
41 |
|
|
do l=1,llm |
42 |
|
|
do j=1,jjp1 |
43 |
|
|
do i=1,iim |
44 |
|
|
ucov(i,j,l)=u(i,j,l)*cu_2d(i,j) |
45 |
|
|
teta(i,j,l)=t(i,j,l)*cpp/pk(i,j,l) |
46 |
|
|
enddo |
47 |
|
|
ucov(iip1,j,l)=ucov(1,j,l) |
48 |
|
|
teta(iip1,j,l)=teta(1,j,l) |
49 |
|
|
enddo |
50 |
|
|
do i=1,iip1 |
51 |
|
|
ucov(i,1,l)=0. |
52 |
|
|
ucov(i,jjp1,l)=0. |
53 |
|
|
teta(i,1,l)=teta(1,1,l) |
54 |
|
|
teta(i,jjp1,l)=teta(1,jjp1,l) |
55 |
|
|
enddo |
56 |
|
|
enddo |
57 |
|
|
|
58 |
|
|
! calcul de ucov |
59 |
|
|
do l=1,llm |
60 |
|
|
do j=1,jjm |
61 |
|
|
do i=1,iim |
62 |
|
|
vcov(i,j,l)=v(i,j,l)*cv_2d(i,j) |
63 |
|
|
enddo |
64 |
|
|
vcov(iip1,j,l)=vcov(1,j,l) |
65 |
|
|
enddo |
66 |
|
|
enddo |
67 |
|
|
|
68 |
|
|
! call dump2d(iip1,jjp1,teta,'TETA EN BAS ') |
69 |
|
|
! call dump2d(iip1,jjp1,teta(1,1,llm),'TETA EN HAUT ') |
70 |
|
|
|
71 |
|
|
! Humidite relative -> specifique |
72 |
|
|
! ------------------------------- |
73 |
|
|
if (1.eq.0) then |
74 |
|
|
! FINALEMENT ON GUIDE EN HUMIDITE RELATIVE |
75 |
|
|
print*,'calcul de unskap' |
76 |
|
|
unskap = 1./ kappa |
77 |
|
|
print*,'calcul de pres' |
78 |
|
|
pres(:,:,:)=preff*(pk(:,:,:)/cpp)**unskap |
79 |
|
|
print*,'calcul de qsat' |
80 |
|
|
qsat = q_sat(t, pres) |
81 |
|
|
print*,'calcul de q' |
82 |
|
|
! ATTENTION : humidites relatives en % |
83 |
|
|
rh(:,:,:)=max(rh(:,:,:)*0.01,1.e-6) |
84 |
|
|
q(:,:,:)=qsat(:,:,:)*rh(:,:,:) |
85 |
|
|
print*,'calcul de q OK' |
86 |
|
|
|
87 |
|
|
call dump2d(iip1,jjp1,pres,'PRESSION PREMIERE COUCHE ') |
88 |
|
|
call dump2d(iip1,jjp1,q,'HUMIDITE SPECIFIQUE COUCHE 1 ') |
89 |
|
|
endif |
90 |
|
|
|
91 |
|
|
|
92 |
|
|
return |
93 |
|
|
end |