source: codes/icosagcm/trunk/src/vertical_interp.f90 @ 155

Last change on this file since 155 was 105, checked in by ymipsl, 12 years ago

Minor correction for output at levl pression

YM

File size: 1.7 KB
Line 
1MODULE vertical_interp_mod
2  USE icosa
3  PRIVATE
4 
5  TYPE(t_field),POINTER :: f_p(:)
6 
7
8  PUBLIC init_vertical_interp, vertical_interp, compute_vertical_interp
9
10CONTAINS
11
12  SUBROUTINE init_vertical_interp
13  USE icosa
14  IMPLICIT NONE
15   
16    CALL allocate_field(f_p,field_t,type_real,llm+1)
17   
18  END SUBROUTINE init_vertical_interp
19   
20  SUBROUTINE vertical_interp(f_ps,f_in,f_out,pval)
21  USE icosa
22  USE pression_mod
23  IMPLICIT NONE
24    TYPE(t_field),POINTER :: f_ps(:)
25    TYPE(t_field),POINTER :: f_in(:)
26    TYPE(t_field),POINTER :: f_out(:)
27    REAL(rstd),INTENT(IN) :: pval
28
29    REAL(rstd),POINTER :: in(:,:)
30    REAL(rstd),POINTER :: out(:)
31    REAL(rstd),POINTER :: p(:,:)
32   
33    INTEGER :: ind
34       
35    CALL pression(f_ps,f_p)
36 
37    DO ind=1,ndomain
38      CALL swap_dimensions(ind)
39      CALL swap_geometry(ind)
40      p=f_p(ind)
41      in=f_in(ind)
42      out=f_out(ind)
43      CALL compute_vertical_interp(p,in,out,pval)
44    ENDDO
45   
46  END SUBROUTINE  vertical_interp
47
48  SUBROUTINE compute_vertical_interp(p,in,out,pval)
49  IMPLICIT NONE
50    REAL(rstd),INTENT(IN) :: p(iim*jjm,llm+1)
51    REAL(rstd),INTENT(IN) :: in(iim*jjm,llm)
52    REAL(rstd),INTENT(OUT) :: out(iim*jjm)
53    REAL(rstd) :: pval
54    REAL(rstd) :: coeff, pmid,pmidp1
55    INTEGER :: i,j,ij,l
56       
57    DO j=jj_begin-1,jj_end+1
58      DO i=ii_begin-1,ii_end+1
59        ij=(j-1)*iim+i
60        l=llm-1
61        DO WHILE(0.5*(p(ij,l)+p(ij,l+1))<pval .AND. l>1)
62          l=l-1
63        ENDDO
64        pmid=0.5*(p(ij,l)+p(ij,l+1))
65        pmidp1=0.5*(p(ij,l+1)+p(ij,l+2))
66
67        coeff=(pval-pmid)/(pmid-pmidp1)
68       
69        out(ij)=in(ij,l)+coeff*(in(ij,l)-in(ij,l+1))
70      ENDDO
71    ENDDO
72       
73  END SUBROUTINE compute_vertical_interp
74
75END MODULE vertical_interp_mod
Note: See TracBrowser for help on using the repository browser.