source: LMDZ6/branches/Amaury_dev/libf/dyn3dmem/gradiv2_loc.f90 @ 5153

Last change on this file since 5153 was 5136, checked in by abarral, 8 weeks ago

Put comgeom.h, comgeom2.h into modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 3.6 KB
Line 
1SUBROUTINE gradiv2_loc(klevel, xcov, ycov, ld, gdx_out, gdy_out )
2  !
3  ! P. Le Van
4  !
5  !   **********************************************************
6  !                            ld
7  !   calcul  de  (grad (div) )   du vect. v ....
8  !
9  ! xcov et ycov etant les composant.covariantes de v
10  !   **********************************************************
11  ! xcont , ycont et ld  sont des arguments  d'entree pour le s-prog
12  !  gdx   et  gdy       sont des arguments de sortie pour le s-prog
13  !
14  !
15  USE parallel_lmdz
16  USE times
17  USE Write_field_p
18  USE mod_hallo
19  USE lmdz_filtreg_p
20  USE gradiv2_mod
21  USE lmdz_comdissipn, ONLY: tetaudiv, tetaurot, tetah, cdivu, crot, cdivh
22  USE lmdz_comgeom
23
24  IMPLICIT NONE
25  !
26  INCLUDE "dimensions.h"
27  INCLUDE "paramet.h"
28  !
29  ! ........    variables en arguments      ........
30
31  INTEGER :: klevel
32  REAL :: xcov( ijb_u:ije_u,klevel ), ycov( ijb_v:ije_v,klevel )
33  REAL :: gdx_out( ijb_u:ije_u,klevel ), gdy_out( ijb_v:ije_v,klevel)
34  !
35  ! ........       variables locales       .........
36  !
37  REAL      :: tmp_div2(ijb_u:ije_u,llm)
38  REAL :: signe, nugrads
39  INTEGER :: l,ij,iter,ld
40  INTEGER :: ijb,ije,jjb,jje
41  Type(Request),SAVE  :: request_dissip
42!$OMP THREADPRIVATE(request_dissip)
43  !    ........................................................
44  !
45  !
46  !  CALL SCOPY( ip1jmp1 * klevel, xcov, 1, gdx, 1 )
47  !  CALL SCOPY(   ip1jm * klevel, ycov, 1, gdy, 1 )
48
49  ijb=ij_begin
50  ije=ij_end
51
52!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
53  DO   l = 1, klevel
54    gdx(ijb:ije,l)=xcov(ijb:ije,l)
55  ENDDO
56!$OMP END DO NOWAIT
57
58  ijb=ij_begin
59  ije=ij_end
60  IF(pole_sud) ije=ij_end-iip1
61
62!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
63  DO   l = 1, klevel
64    gdy(ijb:ije,l)=ycov(ijb:ije,l)
65  ENDDO
66!$OMP END DO NOWAIT
67
68!$OMP BARRIER
69   CALL Register_Hallo_v(gdy,llm,1,0,0,1,Request_dissip)
70   CALL SendRequest(Request_dissip)
71!$OMP BARRIER
72   CALL WaitRequest(Request_dissip)
73!$OMP BARRIER
74  !
75  !
76  signe   = (-1.)**ld
77  nugrads = signe * cdivu
78  !
79
80
81  CALL    divergf_loc( klevel, gdx,   gdy , div )
82   ! CALL write_field3d_p('div1',reshape(div,(/iip1,jjp1,llm/)))
83
84  IF( ld>1 )   THEN
85!$OMP BARRIER
86   CALL Register_Hallo_u(div,llm,1,1,1,1,Request_dissip)
87   CALL SendRequest(Request_dissip)
88!$OMP BARRIER
89   CALL WaitRequest(Request_dissip)
90!$OMP BARRIER
91    CALL laplacien_loc( klevel, div,  div     )
92
93  !    ......  Iteration de l'operateur laplacien_gam   .......
94      ! CALL write_field3d_p('div2',reshape(div,(/iip1,jjp1,llm/)))
95
96    DO iter = 1, ld -2
97!$OMP BARRIER
98   CALL Register_Hallo_u(div,llm,1,1,1,1,Request_dissip)
99   CALL SendRequest(Request_dissip)
100!$OMP BARRIER
101   CALL WaitRequest(Request_dissip)
102
103!$OMP BARRIER
104
105     CALL laplacien_gam_loc(klevel,cuvscvgam1,cvuscugam1, &
106           unsair_gam1,unsapolnga1, unsapolsga1, &
107           div, div       )
108    ENDDO
109     ! CALL write_field3d_p('div3',reshape(div,(/iip1,jjp1,llm/)))
110  ENDIF
111
112   jjb=jj_begin
113   jje=jj_end
114
115   CALL filtreg_p( div   ,jjb_u,jje_u,jjb,jje, jjp1, &
116         klevel, 2, 1, .TRUE., 1 )
117    ! CALL exchange_Hallo(div,ip1jmp1,llm,0,1)
118!$OMP BARRIER
119   CALL Register_Hallo_u(div,llm,1,1,1,1,Request_dissip)
120   CALL SendRequest(Request_dissip)
121!$OMP BARRIER
122   CALL WaitRequest(Request_dissip)
123
124!$OMP BARRIER
125
126
127   CALL  grad_loc( klevel,  div,   gdx,  gdy )
128
129  !
130  ijb=ij_begin
131  ije=ij_end
132
133!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
134   DO   l = 1, klevel
135
136     IF (pole_sud) ije=ij_end
137     DO  ij = ijb, ije
138      gdx_out( ij,l ) = gdx( ij,l ) * nugrads
139     ENDDO
140
141     IF (pole_sud) ije=ij_end-iip1
142     DO  ij = ijb, ije
143      gdy_out( ij,l ) = gdy( ij,l ) * nugrads
144     ENDDO
145
146   ENDDO
147!$OMP END DO NOWAIT
148  !
149
150END SUBROUTINE gradiv2_loc
Note: See TracBrowser for help on using the repository browser.