source: trunk/LMDZ.COMMON/libf/dyn3dpar/divgrad_p.F @ 2902

Last change on this file since 2902 was 1422, checked in by milmd, 10 years ago

In GENERIC, MARS and COMMON models replace some include files by modules (usefull for decoupling physics with dynamics).

File size: 2.1 KB
Line 
1      SUBROUTINE divgrad_p (klevel,h, lh, divgra_out )
2      USE parallel_lmdz
3      USE times
4      IMPLICIT NONE
5c
6c=======================================================================
7c
8c  Auteur :   P. Le Van
9c  ----------
10c
11c                              lh
12c      calcul de  (div( grad ))   de h  .....
13c      h  et lh  sont des arguments  d'entree pour le s-prog
14c      divgra     est  un argument  de sortie pour le s-prog
15c
16c=======================================================================
17c
18c   declarations:
19c   -------------
20c
21#include "dimensions.h"
22#include "paramet.h"
23#include "comgeom.h"
24#include "comdissipn.h"
25c
26      INTEGER klevel
27      REAL h( ip1jmp1,klevel ), divgra_out( ip1jmp1,klevel )
28      REAL,SAVE :: divgra( ip1jmp1,llm )
29
30c
31      REAL ghy(ip1jm,llm), ghx(ip1jmp1,llm)
32
33      INTEGER  l,ij,iter,lh
34c
35      INTEGER ijb,ije,jjb,jje
36c
37c
38c      CALL SCOPY ( ip1jmp1*klevel,h,1,divgra,1 )
39     
40      ijb=ij_begin
41      ije=ij_end
42c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
43      DO l = 1, klevel     
44      divgra(ijb:ije,l)=h(ijb:ije,l)
45      ENDDO
46c$OMP END DO NOWAIT
47c
48
49c
50      DO 10 iter = 1,lh
51
52      jjb=jj_begin
53      jje=jj_end
54      CALL filtreg_p ( divgra,jjb,jje,jjp1,klevel,2,1,.true.,1  )
55
56c      call exchange_Hallo(divgra,ip1jmp1,llm,0,1)
57c$OMP BARRIER
58c$OMP MASTER     
59      call suspend_timer(timer_dissip)
60      call exchange_Hallo(divgra,ip1jmp1,llm,1,1)
61      call resume_timer(timer_dissip)
62c$OMP END MASTER
63c$OMP BARRIER       
64      CALL    grad_p (klevel,divgra, ghx  , ghy          )
65
66c$OMP BARRIER
67c$OMP MASTER   
68      call suspend_timer(timer_dissip)
69      call exchange_Hallo(ghy,ip1jm,llm,1,0)
70      call resume_timer(timer_dissip)
71c$OMP END MASTER
72c$OMP BARRIER           
73
74      CALL  diverg_p (klevel,  ghx , ghy  , divgra       )
75
76      jjb=jj_begin
77      jje=jj_end
78      CALL filtreg_p( divgra,jjb,jje,jjp1,klevel,2,1,.true.,1)
79
80c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
81      DO 5 l = 1,klevel
82      DO 4  ij = ijb, ije
83      divgra_out( ij,l ) = - cdivh * divgra( ij,l )
84   4  CONTINUE
85   5  CONTINUE
86c$OMP END DO NOWAIT
87c
88  10  CONTINUE
89      RETURN
90      END
Note: See TracBrowser for help on using the repository browser.