Ignore:
Timestamp:
Aug 2, 2024, 2:12:03 PM (3 months ago)
Author:
abarral
Message:

Add missing klon on strataer_emiss_mod.F90
Correct various missing explicit declarations
Replace tabs by spaces (tabs are not part of the fortran charset)
Continue cleaning modules
Removed unused arguments and variables

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/dyn3d/groupe.F90

    r5136 r5158  
    11! $Header$
    22
    3 SUBROUTINE groupe(pext, pbaru, pbarv, pbarum, pbarvm, wm)
     3MODULE lmdz_groupe
     4  IMPLICIT NONE; PRIVATE
     5  PUBLIC groupe
    46
    5   USE comconst_mod, ONLY: ngroup
    6   USE lmdz_ssum_scopy, ONLY: scopy
    7   USE lmdz_comgeom2
     7CONTAINS
    88
    9   IMPLICIT NONE
     9  SUBROUTINE groupe(pbaru, pbarv, pbarum, pbarvm, wm)
    1010
    11   !   sous-programme servant a fitlrer les champs de flux de masse aux
    12   !   poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur
    13   !   et a mesure qu'on se rapproche du pole.
    14   !
    15   !   en entree: pext, pbaru et pbarv
    16   !
    17   !   en sortie:  pbarum,pbarvm et wm.
    18   !
    19   !   remarque, le wm est recalcule a partir des pbaru pbarv et on n'a donc
    20   !   pas besoin de w en entree.
     11    USE comconst_mod, ONLY: ngroup
     12    USE lmdz_ssum_scopy, ONLY: scopy
     13    USE lmdz_comgeom2
    2114
    22   INCLUDE "dimensions.h"
    23   INCLUDE "paramet.h"
     15    IMPLICIT NONE
    2416
    25   ! integer ngroup
    26   ! parameter (ngroup=3)
     17    !   sous-programme servant a fitlrer les champs de flux de masse aux
     18    !   poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur
     19    !   et a mesure qu'on se rapproche du pole.
     20    !
     21    !   en entree: pbaru et pbarv
     22    !
     23    !   en sortie:  pbarum,pbarvm et wm.
     24    !
     25    !   remarque, le wm est recalcule a partir des pbaru pbarv et on n'a donc
     26    !   pas besoin de w en entree.
    2727
    28   REAL :: pbaru(iip1, jjp1, llm), pbarv(iip1, jjm, llm)
    29   REAL :: pext(iip1, jjp1, llm)
     28    INCLUDE "dimensions.h"
     29    INCLUDE "paramet.h"
    3030
    31   REAL :: pbarum(iip1, jjp1, llm), pbarvm(iip1, jjm, llm)
    32   REAL :: wm(iip1, jjp1, llm)
     31    ! integer ngroup
     32    ! parameter (ngroup=3)
    3333
    34   REAL :: zconvm(iip1, jjp1, llm), zconvmm(iip1, jjp1, llm)
     34    REAL :: pbaru(iip1, jjp1, llm), pbarv(iip1, jjm, llm)
    3535
    36   REAL :: uu
     36    REAL :: pbarum(iip1, jjp1, llm), pbarvm(iip1, jjm, llm)
     37    REAL :: wm(iip1, jjp1, llm)
    3738
    38   INTEGER :: i, j, l
     39    REAL :: zconvm(iip1, jjp1, llm), zconvmm(iip1, jjp1, llm)
     40    ! (gfortran) Warning: Array ‘zconvm’ at (1) is larger than limit set by ‘-fmax-stack-var-size=’, moved from stack to static storage.
     41    ! This makes the procedure unsafe when called recursively, or concurrently from multiple threads.
    3942
    40   LOGICAL :: firstcall, groupe_ok
    41   save firstcall, groupe_ok
     43    REAL :: uu
    4244
    43   data firstcall/.TRUE./
    44   data groupe_ok/.TRUE./
     45    INTEGER :: i, j, l
    4546
    46   IF (iim==1) THEN
    47     groupe_ok = .FALSE.
    48   ENDIF
     47    LOGICAL :: firstcall, groupe_ok
     48    save firstcall, groupe_ok
    4949
    50   IF (firstcall) THEN
    51     IF (groupe_ok) THEN
    52       IF(mod(iim, 2**ngroup)/=0) &
    53               CALL abort_gcm('groupe', 'probleme du nombre de point', 1)
    54     endif
    55     firstcall = .FALSE.
    56   ENDIF
     50    data firstcall/.TRUE./
     51    data groupe_ok/.TRUE./
     52
     53    IF (iim==1) THEN
     54      groupe_ok = .FALSE.
     55    ENDIF
     56
     57    IF (firstcall) THEN
     58      IF (groupe_ok) THEN
     59        IF(mod(iim, 2**ngroup)/=0) &
     60                CALL abort_gcm('groupe', 'probleme du nombre de point', 1)
     61      endif
     62      firstcall = .FALSE.
     63    ENDIF
    5764
    5865
    59   !   Champs 1D
     66    !   Champs 1D
    6067
    61   CALL convflu(pbaru, pbarv, llm, zconvm)
     68    CALL convflu(pbaru, pbarv, llm, zconvm)
    6269
    63   CALL scopy(ijp1llm, zconvm, 1, zconvmm, 1)
    64   CALL scopy(ijmllm, pbarv, 1, pbarvm, 1)
     70    CALL scopy(ijp1llm, zconvm, 1, zconvmm, 1)
     71    CALL scopy(ijmllm, pbarv, 1, pbarvm, 1)
    6572
    66   IF (groupe_ok) THEN
    67     CALL groupeun(jjp1, llm, zconvmm)
    68     CALL groupeun(jjm, llm, pbarvm)
     73    IF (groupe_ok) THEN
     74      CALL groupeun(jjp1, llm, zconvmm)
     75      CALL groupeun(jjm, llm, pbarvm)
    6976
    70     !   Champs 3D
    71     do l = 1, llm
    72       do j = 2, jjm
    73         uu = pbaru(iim, j, l)
    74         do i = 1, iim
    75           uu = uu + pbarvm(i, j, l) - pbarvm(i, j - 1, l) - zconvmm(i, j, l)
    76           pbarum(i, j, l) = uu
    77           ! zconvm(i,j,l ) =  xflu(i-1,j,l)-xflu(i,j,l)+
    78           !    *                      yflu(i,j,l)-yflu(i,j-1,l)
     77      !   Champs 3D
     78      DO l = 1, llm
     79        DO j = 2, jjm
     80          uu = pbaru(iim, j, l)
     81          DO i = 1, iim
     82            uu = uu + pbarvm(i, j, l) - pbarvm(i, j - 1, l) - zconvmm(i, j, l)
     83            pbarum(i, j, l) = uu
     84            ! zconvm(i,j,l ) =  xflu(i-1,j,l)-xflu(i,j,l)+
     85            !    *                      yflu(i,j,l)-yflu(i,j-1,l)
     86          enddo
     87          pbarum(iip1, j, l) = pbarum(1, j, l)
    7988        enddo
    80         pbarum(iip1, j, l) = pbarum(1, j, l)
     89      enddo
     90
     91    else
     92      pbarum(:, :, :) = pbaru(:, :, :)
     93      pbarvm(:, :, :) = pbarv(:, :, :)
     94    ENDIF
     95
     96    !    integration de la convergence de masse de haut  en bas ......
     97    DO l = 1, llm
     98      DO j = 1, jjp1
     99        DO i = 1, iip1
     100          zconvmm(i, j, l) = zconvmm(i, j, l)
     101        enddo
     102      enddo
     103    enddo
     104    DO  l = llm - 1, 1, -1
     105      DO j = 1, jjp1
     106        DO i = 1, iip1
     107          zconvmm(i, j, l) = zconvmm(i, j, l) + zconvmm(i, j, l + 1)
     108        enddo
    81109      enddo
    82110    enddo
    83111
    84   else
    85     pbarum(:, :, :) = pbaru(:, :, :)
    86     pbarvm(:, :, :) = pbarv(:, :, :)
    87   ENDIF
     112    CALL vitvert(zconvmm, wm)
    88113
    89   !    integration de la convergence de masse de haut  en bas ......
    90   do l = 1, llm
    91     do j = 1, jjp1
    92       do i = 1, iip1
    93         zconvmm(i, j, l) = zconvmm(i, j, l)
    94       enddo
    95     enddo
    96   enddo
    97   do  l = llm - 1, 1, -1
    98     do j = 1, jjp1
    99       do i = 1, iip1
    100         zconvmm(i, j, l) = zconvmm(i, j, l) + zconvmm(i, j, l + 1)
    101       enddo
    102     enddo
    103   enddo
     114  END SUBROUTINE  groupe
    104115
    105   CALL vitvert(zconvmm, wm)
    106 
    107 END SUBROUTINE  groupe
    108 
     116END MODULE lmdz_groupe
Note: See TracChangeset for help on using the changeset viewer.