Ignore:
Timestamp:
Jun 20, 2015, 9:22:53 AM (10 years ago)
Author:
emillour
Message:

Common dynamics: A couple of bug fixes

  • calfis[_p].F array boundaries must be explicitely specified when underlying arrays are of different sizes.
  • advect_new_p.F : missing initializations of intermediate variables at topmost layer.

EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/dyn3dpar/advect_new_p.F

    r1422 r1459  
    2828c   -------------
    2929
    30 #include "dimensions.h"
    31 #include "paramet.h"
    32 #include "comgeom.h"
     30      include "dimensions.h"
     31      include "paramet.h"
     32      include "comgeom.h"
    3333
    3434c   Arguments:
    3535c   ----------
    3636
    37       REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
    38       REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm),w(ip1jmp1,llm)
    39       REAL dv(ip1jm,llm),du(ip1jmp1,llm),dteta(ip1jmp1,llm)
     37      REAL,INTENT(IN) :: vcov(ip1jm,llm)
     38      REAL,INTENT(IN) :: ucov(ip1jmp1,llm)
     39      REAL,INTENT(IN) :: teta(ip1jmp1,llm)
     40      REAL,INTENT(IN) :: massebx(ip1jmp1,llm)
     41      REAL,INTENT(IN) :: masseby(ip1jm,llm)
     42      REAL,INTENT(IN) :: w(ip1jmp1,llm)
     43      REAL,INTENT(INOUT) :: dv(ip1jm,llm)
     44      REAL,INTENT(INOUT) :: du(ip1jmp1,llm)
     45      REAL,INTENT(INOUT) :: dteta(ip1jmp1,llm)
     46c   Local:
     47c   ------
     48
    4049      REAL,SAVE :: dv1(ip1jm,llm),du1(ip1jmp1,llm),dteta1(ip1jmp1,llm)
    4150      REAL,SAVE :: dv2(ip1jm,llm),du2(ip1jmp1,llm),dteta2(ip1jmp1,llm)
    42 c   Local:
    43 c   ------
    44 
    4551      REAL,SAVE :: uav(ip1jmp1,llm),vav(ip1jm,llm)
    4652      REAL wsur2(ip1jmp1)
     
    6066         deuxjour = 2. * daysec
    6167
    62          DO   1  ij   = 1, ip1jmp1
     68         DO ij   = 1, ip1jmp1
    6369         unsaire2(ij) = unsaire(ij) * unsaire(ij)
    64    1     CONTINUE
     70         ENDDO
    6571      END IF
    6672
     
    7783      DO ij=ijb,ije
    7884        du2(ij,1)=0.
     85        du1(ij,llm)=0.
    7986      ENDDO
    8087     
     
    8592      DO ij=ijb,ije
    8693        dv2(ij,1)=0.
     94        dv1(ij,llm)=0.
    8795      ENDDO
    8896     
     
    92100      DO ij=ijb,ije
    93101        dteta2(ij,1)=0.
     102        dteta1(ij,llm)=0.
    94103      ENDDO
    95104c$OMP END MASTER
     
    129138           ENDDO
    130139         endif
    131          
     140
    132141      ENDDO
    133142c$OMP END DO     
     
    169178
    170179c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    171       DO 20 l = 1, llmm1
     180      DO l = 1, llmm1
    172181
    173182
    174183c       ......   calcul de  - w/2.    au niveau  l+1   .......
    175       ijb=ij_begin
    176       ije=ij_end+iip1
    177       if (pole_sud)  ije=ij_end
    178      
    179       DO 5  ij   = ijb, ije
    180       wsur2( ij ) = - 0.5 * w( ij,l+1 )
    181    5  CONTINUE
     184        ijb=ij_begin
     185        ije=ij_end+iip1
     186        if (pole_sud)  ije=ij_end
     187     
     188        DO ij   = ijb, ije
     189          wsur2( ij ) = - 0.5 * w( ij,l+1 )
     190        ENDDO
    182191
    183192
    184193c     .....................     calcul pour  du     ..................
    185194     
    186       ijb=ij_begin
    187       ije=ij_end
    188       if (pole_nord) ijb=ijb+iip1
    189       if (pole_sud)  ije=ije-iip1
    190          
    191       DO 6 ij = ijb ,ije-1
    192       ww        = wsur2 (  ij  )     + wsur2( ij+1 )
    193       uu        = 0.5 * ( ucov(ij,l) + ucov(ij,l+1) )
    194       du1(ij,l)  =  ww * ( uu - uav(ij, l ) )/massebx(ij, l )
    195       du2(ij,l+1)=  ww * ( uu - uav(ij,l+1) )/massebx(ij,l+1)
    196    6  CONTINUE
     195        ijb=ij_begin
     196        ije=ij_end
     197        if (pole_nord) ijb=ijb+iip1
     198        if (pole_sud)  ije=ije-iip1
     199         
     200        DO ij = ijb ,ije-1
     201          ww        = wsur2 (  ij  )     + wsur2( ij+1 )
     202          uu        = 0.5 * ( ucov(ij,l) + ucov(ij,l+1) )
     203          du1(ij,l)  =  ww * ( uu - uav(ij, l ) )/massebx(ij, l )
     204          du2(ij,l+1)=  ww * ( uu - uav(ij,l+1) )/massebx(ij,l+1)
     205        ENDDO
    197206
    198207c     .................    calcul pour   dv      .....................
    199       ijb=ij_begin
    200       ije=ij_end
    201       if (pole_sud)  ije=ij_end-iip1
    202      
    203       DO 8 ij = ijb, ije
    204       ww        = wsur2( ij+iip1 )   + wsur2( ij )
    205       vv        = 0.5 * ( vcov(ij,l) + vcov(ij,l+1) )
    206       dv1(ij,l)  =  ww * (vv - vav(ij, l ) )/masseby(ij, l )
    207       dv2(ij,l+1)=  ww * (vv - vav(ij,l+1) )/masseby(ij,l+1)
    208    8  CONTINUE
     208        ijb=ij_begin
     209        ije=ij_end
     210        if (pole_sud)  ije=ij_end-iip1
     211     
     212        DO ij = ijb, ije
     213          ww        = wsur2( ij+iip1 )   + wsur2( ij )
     214          vv        = 0.5 * ( vcov(ij,l) + vcov(ij,l+1) )
     215          dv1(ij,l)  =  ww * (vv - vav(ij, l ) )/masseby(ij, l )
     216          dv2(ij,l+1)=  ww * (vv - vav(ij,l+1) )/masseby(ij,l+1)
     217        ENDDO
    209218
    210219c
     
    220229        ije=ij_end
    221230       
    222         DO 15 ij = ijb, ije
     231        DO ij = ijb, ije
    223232         ww            = wsur2(ij) * (teta(ij,l) + teta(ij,l+1) )
    224233         dteta1(ij, l ) =   ww
    225234         dteta2(ij,l+1) =   ww
    226   15    CONTINUE
     235        ENDDO
    227236
    228237c ym ---> conser a voir plus tard
     
    237246c      END IF
    238247
    239   20  CONTINUE
     248      ENDDO ! of DO l = 1, llmm1
    240249c$OMP END DO
    241250
     
    279288c$OMP END DO NOWAIT     
    280289
    281       RETURN
    282290      END
Note: See TracChangeset for help on using the changeset viewer.