source: LMDZ6/branches/Amaury_dev/libf/dyn3dmem/nxgraro2_loc.f90 @ 5119

Last change on this file since 5119 was 5117, checked in by abarral, 2 months ago

rename modules properly lmdz_*
move some unused files to obsolete/
(lint) uppercase fortran keywords

  • 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.3 KB
Line 
1 SUBROUTINE nxgraro2_loc(klevel,xcov,ycov,lr,grx_out,gry_out)
2  !
3  !  P.Le Van .
4  !   ***********************************************************
5  !                             lr
6  !  calcul de  ( nxgrad (rot) )   du vect. v  ....
7  !
8  !   xcov et ycov  etant les compos. covariantes de  v
9  !   ***********************************************************
10  ! xcov , ycov et lr  sont des arguments  d'entree pour le s-prog
11  !  grx   et  gry     sont des arguments de sortie pour le s-prog
12  !
13  !
14  USE write_Field_p
15  USE parallel_lmdz
16  USE times
17  USE mod_hallo
18  USE lmdz_filtreg_p
19  USE nxgraro2_mod
20  IMPLICIT NONE
21  !
22  INCLUDE "dimensions.h"
23  INCLUDE "paramet.h"
24  INCLUDE "comdissipn.h"
25  !
26  !    ......  variables en arguments  .......
27  !
28  INTEGER :: klevel
29  REAL :: xcov( ijb_u:ije_u,klevel ), ycov( ijb_v:ije_v,klevel )
30  REAL :: grx_out( ijb_u:ije_u,klevel ),gry_out(ijb_v:ije_v,klevel)
31  !
32  !    ......   variables locales     ........
33  !
34  REAL :: signe, nugradrs
35  INTEGER :: l,ij,iter,lr
36  Type(Request),SAVE :: Request_dissip
37!$OMP THREADPRIVATE(Request_dissip)
38  !    ........................................................
39  !
40  INTEGER :: ijb,ije,jjb,jje
41
42  !
43  !
44  signe    = (-1.)**lr
45  nugradrs = signe * crot
46  !
47  !  CALL SCOPY ( ip1jmp1* klevel, xcov, 1, grx, 1 )
48  !  CALL SCOPY (  ip1jm * klevel, ycov, 1, gry, 1 )
49
50  ijb=ij_begin
51  ije=ij_end
52
53!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
54  DO    l = 1, klevel
55    grx(ijb:ije,l)=xcov(ijb:ije,l)
56  ENDDO
57!$OMP END DO NOWAIT
58
59!$OMP BARRIER
60   CALL Register_Hallo_u(grx,llm,0,1,1,0,Request_dissip)
61   CALL SendRequest(Request_dissip)
62!$OMP BARRIER
63   CALL WaitRequest(Request_dissip)
64!$OMP BARRIER
65
66  ijb=ij_begin
67  ije=ij_end
68  IF(pole_sud) ije=ij_end-iip1
69
70!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
71  DO    l = 1, klevel
72    gry(ijb:ije,l)=ycov(ijb:ije,l)
73  ENDDO
74!$OMP END DO NOWAIT
75
76  !
77  CALL     rotatf_loc ( klevel, grx, gry, rot )
78   ! CALL write_field3d_p('rot1',reshape(rot,(/iip1,jjm,llm/)))
79
80!$OMP BARRIER
81   CALL Register_Hallo_v(rot,llm,1,1,1,1,Request_dissip)
82   CALL SendRequest(Request_dissip)
83!$OMP BARRIER
84   CALL WaitRequest(Request_dissip)
85!$OMP BARRIER
86
87  CALL laplacien_rot_loc ( klevel, rot, rot,grx,gry      )
88    ! CALL write_field3d_p('rot2',reshape(rot,(/iip1,jjm,llm/)))
89  !
90  !    .....   Iteration de l'operateur laplacien_rotgam  .....
91  !
92  DO  iter = 1, lr -2
93!$OMP BARRIER
94   CALL Register_Hallo_v(rot,llm,1,1,1,1,Request_dissip)
95   CALL SendRequest(Request_dissip)
96!$OMP BARRIER
97   CALL WaitRequest(Request_dissip)
98!$OMP BARRIER
99
100    CALL laplacien_rotgam_loc( klevel, rot, rot )
101  ENDDO
102
103    ! CALL write_field3d_p('rot3',reshape(rot,(/iip1,jjm,llm/)))
104
105  !
106  !
107  jjb=jj_begin
108  jje=jj_end
109  IF (pole_sud) jje=jj_end-1
110
111  CALL filtreg_p( rot, jjb_v,jje_v, jjb,jje,jjm, &
112        klevel, 2,1, .FALSE.,1)
113!$OMP BARRIER
114   CALL Register_Hallo_v(rot,llm,1,0,0,1,Request_dissip)
115   CALL SendRequest(Request_dissip)
116!$OMP BARRIER
117   CALL WaitRequest(Request_dissip)
118!$OMP BARRIER
119
120  CALL nxgrad_loc ( klevel, rot, grx, gry )
121
122  !
123  ijb=ij_begin
124  ije=ij_end
125
126!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
127  DO    l = 1, klevel
128
129     IF(pole_sud) ije=ij_end-iip1
130     DO  ij = ijb, ije
131      gry_out( ij,l ) = gry( ij,l ) * nugradrs
132     ENDDO
133
134     IF(pole_sud) ije=ij_end
135     DO  ij = ijb, ije
136      grx_out( ij,l ) = grx( ij,l ) * nugradrs
137     ENDDO
138
139  ENDDO
140!$OMP END DO NOWAIT
141  !
142
143END SUBROUTINE nxgraro2_loc
Note: See TracBrowser for help on using the repository browser.