SUBROUTINE nxgraro2_p (klevel,xcov, ycov, lr, grx, gry ) c c P.Le Van . c *********************************************************** c lr c calcul de ( nxgrad (rot) ) du vect. v .... c c xcov et ycov etant les compos. covariantes de v c *********************************************************** c xcov , ycov et lr sont des arguments d'entree pour le s-prog c grx et gry sont des arguments de sortie pour le s-prog c c USE write_Field_p USE parallel USE times IMPLICIT NONE c #include "dimensions.h" #include "paramet.h" #include "comdissipn.h" c c ...... variables en arguments ....... c INTEGER klevel REAL xcov( ip1jmp1,klevel ), ycov( ip1jm,klevel ) REAL grx( ip1jmp1,klevel ), gry( ip1jm,klevel ) c c ...... variables locales ........ c REAL rot(ip1jm,llm) , signe, nugradrs INTEGER l,ij,iter,lr c ........................................................ c EXTERNAL filtreg EXTERNAL SCOPY, rotatf, nxgrad, laplacien_rotgam INTEGER :: ijb,ije,jjb,jje c c signe = (-1.)**lr nugradrs = signe * crot c c CALL SCOPY ( ip1jmp1* klevel, xcov, 1, grx, 1 ) c CALL SCOPY ( ip1jm * klevel, ycov, 1, gry, 1 ) ijb=ij_begin ije=ij_end grx(ijb:ije,1:klevel)=xcov(ijb:ije,1:klevel) call suspend_timer(timer_dissip) call exchange_Hallo(grx,ip1jmp1,llm,0,1) call resume_timer(timer_dissip) ijb=ij_begin ije=ij_end if(pole_sud) ije=ij_end-iip1 gry(ijb:ije,1:klevel)=ycov(ijb:ije,1:klevel) c CALL rotatf_p ( klevel, grx, gry, rot ) c call write_field3d_p('rot1',reshape(rot,(/iip1,jjm,llm/))) call suspend_timer(timer_dissip) call exchange_Hallo(rot,ip1jm,llm,1,1) call resume_timer(timer_dissip) CALL laplacien_rot_p ( klevel, rot, rot,grx,gry ) c call write_field3d_p('rot2',reshape(rot,(/iip1,jjm,llm/))) c c ..... Iteration de l'operateur laplacien_rotgam ..... c DO iter = 1, lr -2 call suspend_timer(timer_dissip) call exchange_Hallo(rot,ip1jm,llm,1,1) call resume_timer(timer_dissip) CALL laplacien_rotgam_p ( klevel, rot, rot ) ENDDO c call write_field3d_p('rot3',reshape(rot,(/iip1,jjm,llm/))) c c jjb=jj_begin jje=jj_end if (pole_sud) jje=jj_end-1 CALL filtreg_p( rot, jjb,jje,jjm, klevel, 2,1, .FALSE.,1) call suspend_timer(timer_dissip) call exchange_Hallo(rot,ip1jm,llm,1,0) call resume_timer(timer_dissip) CALL nxgrad_p ( klevel, rot, grx, gry ) c ijb=ij_begin ije=ij_end DO l = 1, klevel if(pole_sud) ije=ij_end-iip1 DO ij = ijb, ije gry( ij,l ) = gry( ij,l ) * nugradrs ENDDO if(pole_sud) ije=ij_end DO ij = ijb, ije grx( ij,l ) = grx( ij,l ) * nugradrs ENDDO ENDDO c RETURN END