source: LMDZ5/trunk/libf/dyn3dmem/diverg_gam_p.F @ 1632

Last change on this file since 1632 was 1632, checked in by Laurent Fairhead, 12 years ago

Import initial du répertoire dyn3dmem

Attention! ceci n'est qu'une version préliminaire du code "basse mémoire":
le code contenu dans ce répertoire est basé sur la r1320 et a donc besoin
d'être mis à jour par rapport à la dynamique parallèle d'aujourd'hui.
Ce code est toutefois mis à disposition pour circonvenir à des problèmes
de mémoire que certaines configurations du modèle pourraient rencontrer.
Dans l'état, il compile et tourne sur vargas et au CCRT


Initial import of dyn3dmem

Warning! this is just a preliminary version of the memory light code:
it is based on r1320 of the code and thus needs to be updated before
it can replace the present dyn3dpar code. It is nevertheless put at your
disposal to circumvent some memory problems some LMDZ configurations may
encounter. In its present state, it will compile and run on vargas and CCRT

File size: 2.8 KB
Line 
1      SUBROUTINE diverg_gam_p(klevel,cuvscvgam,cvuscugam,unsairegam ,
2     *                       unsapolnga,unsapolsga,  x, y,  div )
3c
4c     P. Le Van
5c
6c  *********************************************************************
7c  ... calcule la divergence a tous les niveaux d'1 vecteur de compos.
8c     x et y...
9c              x et y  etant des composantes covariantes   ...
10c  *********************************************************************
11      USE parallel
12      IMPLICIT NONE
13c
14c      x  et  y  sont des arguments  d'entree pour le s-prog
15c        div      est  un argument  de sortie pour le s-prog
16c
17c
18c   ---------------------------------------------------------------------
19c
20c    ATTENTION : pendant ce s-pg , ne pas toucher au COMMON/scratch/  .
21c
22c   ---------------------------------------------------------------------
23#include "dimensions.h"
24#include "paramet.h"
25#include "comgeom.h"
26c
27c    ..........          variables en arguments    ...................
28c
29      INTEGER klevel
30      REAL x( ip1jmp1,klevel ),y( ip1jm,klevel ),div( ip1jmp1,klevel )
31      REAL cuvscvgam(ip1jm),cvuscugam(ip1jmp1),unsairegam(ip1jmp1)
32      REAL unsapolnga,unsapolsga
33c
34c    ...............     variables  locales   .........................
35
36      REAL aiy1( iip1 ) , aiy2( iip1 )
37      REAL sumypn,sumyps
38      INTEGER   l,ij
39c    ...................................................................
40c
41      EXTERNAL  SSUM
42      REAL      SSUM
43      INTEGER :: ijb,ije,jjb,jje
44c
45c
46      ijb=ij_begin
47      ije=ij_end
48      if (pole_nord) ijb=ij_begin+iip1
49      if(pole_sud)  ije=ij_end-iip1
50
51c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
52      DO 10 l = 1,klevel
53c
54        DO  ij = ijb, ije - 1
55         div( ij + 1, l )     = ( 
56     *  cvuscugam( ij+1 ) * x( ij+1,l ) - cvuscugam( ij ) * x( ij , l) +
57     *  cuvscvgam(ij-iim) * y(ij-iim,l) - cuvscvgam(ij+1) * y(ij+1,l) )*
58     *         unsairegam( ij+1 )
59        ENDDO
60c
61c     ....  correction pour  div( 1,j,l)  ......
62c     ....   div(1,j,l)= div(iip1,j,l) ....
63c
64CDIR$ IVDEP
65        DO  ij = ijb,ije,iip1
66         div( ij,l ) = div( ij + iim,l )
67        ENDDO
68c
69c     ....  calcul  aux poles  .....
70c
71       if (pole_nord) then
72          DO  ij  = 1,iim
73           aiy1(ij) =    cuvscvgam(    ij       ) * y(     ij     , l )
74          ENDDO
75          sumypn = SSUM ( iim,aiy1,1 ) * unsapolnga
76
77          DO  ij = 1,iip1
78           div(     ij    , l ) = - sumypn
79          ENDDO
80       endif
81       
82        if (pole_sud) then
83          DO  ij  = 1,iim
84           aiy2(ij) =    cuvscvgam( ij+ ip1jmi1 ) * y( ij+ ip1jmi1, l )
85          ENDDO
86          sumyps = SSUM ( iim,aiy2,1 ) * unsapolsga
87
88          DO  ij = 1,iip1
89           div( ij + ip1jm, l ) =   sumyps
90          ENDDO
91       endif
92  10  CONTINUE
93c$OMP END DO NOWAIT
94c
95
96       RETURN
97       END
Note: See TracBrowser for help on using the repository browser.