1 | SUBROUTINE dx_dp(jjp1,llm,indefini,pniv,x,dxdp) |
---|
2 | c======================================================================= |
---|
3 | c |
---|
4 | c |
---|
5 | c Subject: |
---|
6 | c ------ |
---|
7 | c Calcul de la derivee /p d'1 moyenne zonale |
---|
8 | c EXTRAPOLEE EN COORDONNEE DE PRESSION |
---|
9 | c |
---|
10 | c======================================================================= |
---|
11 | IMPLICIT NONE |
---|
12 | c----------------------------------------------------------------------- |
---|
13 | c Declararations: |
---|
14 | c --------------- |
---|
15 | |
---|
16 | c Arguments: |
---|
17 | c ---------- |
---|
18 | |
---|
19 | integer jjp1,llm |
---|
20 | real indefini |
---|
21 | REAL pniv(llm) |
---|
22 | REAL x(jjp1,llm) |
---|
23 | REAL dxdp(jjp1,llm) |
---|
24 | |
---|
25 | c Local: |
---|
26 | c ------ |
---|
27 | |
---|
28 | INTEGER i,j,l , k |
---|
29 | |
---|
30 | c----------------------------------------------------------------------- |
---|
31 | do j=1,jjp1 |
---|
32 | if ((x(j,1).lt.indefini).and.(x(j,2).lt.indefini)) then |
---|
33 | dxdp(j,1) = (x(j,2)-x(j,1))/(pniv(2) - pniv(1)) |
---|
34 | else |
---|
35 | dxdp(j,1) = indefini |
---|
36 | end if |
---|
37 | |
---|
38 | do l=2,llm-1 |
---|
39 | if ((x(j,l-1).lt.indefini).and.(x(j,l+1).lt.indefini))then |
---|
40 | dxdp(j,l)= (x(j,l+1)-x(j,l-1))/(pniv(l+1) - pniv(l-1)) |
---|
41 | else if((x(j,l+1).lt.indefini).and.(x(j,l).lt.indefini))then |
---|
42 | dxdp(j,l)= (x(j,l+1)-x(j,l)) /(pniv(l+1) - pniv(l)) |
---|
43 | else if((x(j,l-1).lt.indefini).and.(x(j,l).lt.indefini))then |
---|
44 | dxdp(j,l)= (x(j,l)-x(j,l-1)) /(pniv(l) - pniv(l-1)) |
---|
45 | else |
---|
46 | dxdp(j,l)= indefini |
---|
47 | end if |
---|
48 | end do |
---|
49 | if ((x(j,llm).lt.indefini).and.(x(j,llm-1).lt.indefini)) then |
---|
50 | dxdp(j,llm)= (x(j,llm)-x(j,llm-1))/(pniv(llm)-pniv(llm-1)) |
---|
51 | else |
---|
52 | dxdp(j,llm)= indefini |
---|
53 | end if |
---|
54 | end do |
---|
55 | |
---|
56 | c Test |
---|
57 | |
---|
58 | do j=1,jjp1 |
---|
59 | do l = 1, llm |
---|
60 | if ( (abs(dxdp(j,l)).gt.(indefini/100.)).and. |
---|
61 | . (dxdp(j,l).ne.indefini)) then |
---|
62 | write(*,*) '----> j= ', j , ' l= ' , l |
---|
63 | write(*,*) 'dxdp(j,l) ' , dxdp(j,l) |
---|
64 | write(*,*) 'x' , (x(j,k),k=1,llm) |
---|
65 | write(*,*) 'pniv' , pniv |
---|
66 | write(*,*) |
---|
67 | end if |
---|
68 | end do |
---|
69 | end do |
---|
70 | |
---|
71 | |
---|
72 | |
---|
73 | RETURN |
---|
74 | END |
---|