source: codes/icosagcm/trunk/src/geopotential_mod.f90 @ 12

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

dynamico tree creation

YM

File size: 1.9 KB
Line 
1MODULE geopotential_mod
2
3CONTAINS
4
5  SUBROUTINE geopotential(f_phis,f_pks,f_pk,f_theta,f_phi)
6  USE transfert_mod
7  USE field_mod
8  USE dimensions
9  USE geometry
10  USE domain_mod
11  IMPLICIT NONE
12    TYPE(t_field), POINTER :: f_phis(:)
13    TYPE(t_field), POINTER :: f_pks(:)
14    TYPE(t_field), POINTER :: f_pk(:)
15    TYPE(t_field), POINTER :: f_theta(:)
16    TYPE(t_field), POINTER :: f_phi(:)
17 
18    REAL(rstd), POINTER :: phis(:)
19    REAL(rstd), POINTER :: pks(:)
20    REAL(rstd), POINTER :: pk(:,:)
21    REAL(rstd), POINTER :: theta(:,:)
22    REAL(rstd), POINTER :: phi(:,:)
23    INTEGER :: ind
24
25    DO ind=1,ndomain
26      CALL swap_dimensions(ind)
27      CALL swap_geometry(ind)
28      phis=f_phis(ind)
29      pks=f_pks(ind)
30      pk=f_pk(ind)
31      theta=f_theta(ind)
32      phi=f_phi(ind)
33      CALL compute_geopotential(phis,pks,pk,theta,phi,0)
34    ENDDO
35 
36  END SUBROUTINE geopotential
37 
38  SUBROUTINE compute_geopotential(phis,pks,pk,theta,phi,offset)
39  USE dimensions
40  USE geometry
41  USE metric
42  IMPLICIT NONE
43    REAL(rstd),INTENT(IN) :: phis(iim*jjm)
44    REAL(rstd),INTENT(IN) :: pks(iim*jjm)
45    REAL(rstd),INTENT(IN) :: pk(iim*jjm,llm)
46    REAL(rstd),INTENT(IN) :: theta(iim*jjm,llm)
47    REAL(rstd),INTENT(OUT) :: phi(iim*jjm,llm)
48    INTEGER,INTENT(IN) :: offset
49    INTEGER :: i,j,ij,l
50
51!!! Compute geopotential
52
53  ! for first layer
54   DO j=jj_begin-offset,jj_end+offset
55     DO i=ii_begin-offset,ii_end+offset
56       ij=(j-1)*iim+i
57       phi( ij,1 ) = phis( ij ) + theta(ij,1) * ( pks(ij) - pk(ij,1) )
58     ENDDO
59   ENDDO
60         
61  ! for other layers
62   DO l = 2, llm
63     DO j=jj_begin-offset,jj_end+offset
64       DO i=ii_begin-offset,ii_end+offset
65         ij=(j-1)*iim+i
66         phi(ij,l) = phi(ij,l-1) + 0.5 * ( theta(ij,l)  + theta(ij,l-1) )  & 
67                                       * (  pk(ij,l-1) -  pk(ij,l)    )
68       ENDDO
69     ENDDO
70   ENDDO
71   
72  END SUBROUTINE compute_geopotential
73
74END MODULE geopotential_mod
Note: See TracBrowser for help on using the repository browser.