Ignore:
Timestamp:
Jun 17, 2022, 4:24:49 PM (3 years ago)
Author:
lguez
Message:

Sync latest trunk changes to branch LMDZ-ECRAD.

Location:
LMDZ6/branches/LMDZ-ECRAD
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ-ECRAD

  • LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/mod_phys_lmdz_mpi_data.F90

    r3435 r4171  
    4646CONTAINS
    4747 
    48   SUBROUTINE init_phys_lmdz_mpi_data(nbp, nbp_lon, nbp_lat, communicator)
     48  SUBROUTINE init_phys_lmdz_mpi_data(nbp, nbp_lon, nbp_lat, nbp_lev, grid_type, nvertex, communicator)
     49
    4950  IMPLICIT NONE
    5051#ifdef CPP_MPI
     
    5455    INTEGER,INTENT(IN) :: nbp_lon
    5556    INTEGER,INTENT(IN) :: nbp_lat
     57    INTEGER,INTENT(IN) :: nbp_lev
    5658    INTEGER,INTENT(IN) :: communicator
     59    INTEGER,INTENT(IN) :: grid_type
     60    INTEGER,INTENT(IN) :: nvertex
    5761   
    5862    INTEGER,ALLOCATABLE :: distrib(:)
     
    179183   
    180184    CALL Print_module_data
     185
     186#ifdef INCA
     187       CALL init_inca_para( &
     188            nbp_lon,nbp_lat,nbp_lev,klon_glo,mpi_size, &
     189            distrib,nvertex, grid_type,communicator)
     190#endif
    181191   
    182192  END SUBROUTINE Init_phys_lmdz_mpi_data
  • LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/mod_phys_lmdz_omp_transfert.F90

    r3465 r4171  
    498498    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
    499499
    500     CALL Check_buffer_r(size(VarOut))   
    501     CALL gather_omp_rgen(VarIn,Varout,1,buffer_r)
     500    CALL gather_omp_rgen(VarIn,Varout,1)
    502501   
    503502  END SUBROUTINE gather_omp_r
     
    509508    REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    510509    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    511 
    512     CALL Check_buffer_r(size(VarOut))   
    513     CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2),buffer_r)
     510 
     511    CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2))
    514512       
    515513  END SUBROUTINE gather_omp_r1
     
    521519    REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    522520    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    523    
    524     CALL Check_buffer_r(size(VarOut))   
    525     CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3),buffer_r)
     521 
     522    CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3))
    526523   
    527524  END SUBROUTINE gather_omp_r2
     
    533530    REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    534531    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    535 
    536     CALL Check_buffer_r(size(VarOut))       
    537     CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4),buffer_r)
     532     
     533    CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
    538534   
    539535  END SUBROUTINE gather_omp_r3
     
    10711067
    10721068
    1073   SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize,Buff)
     1069  SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize)
    10741070  USE mod_phys_lmdz_omp_data
    10751071  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
     
    10781074    INTEGER,INTENT(IN) :: dimsize
    10791075    REAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn
    1080     REAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
    1081     REAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
     1076    REAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize),TARGET :: VarOut
     1077
     1078    REAL, POINTER, SAVE :: Varout_ptr(:,:) ! Shared between threads NOT THREADPRIVATE
     1079
     1080    INTEGER :: i,ij
     1081   
     1082    !$omp master
     1083    Varout_ptr => VarOut
     1084    !$omp end master
     1085    !$omp barrier
     1086
     1087    DO i=1,dimsize
     1088      DO ij=1,klon_omp
     1089        Varout_ptr(klon_omp_begin-1+ij,i)=VarIn(ij,i)
     1090      ENDDO
     1091    ENDDO
     1092    !$omp barrier
     1093  END SUBROUTINE gather_omp_rgen
     1094
     1095
     1096  SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff)
     1097  USE mod_phys_lmdz_omp_data
     1098  USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
     1099  IMPLICIT NONE
     1100
     1101    INTEGER,INTENT(IN) :: dimsize
     1102    LOGICAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn
     1103    LOGICAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
     1104    LOGICAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
    10821105
    10831106    INTEGER :: i,ij
     
    11001123  !$OMP BARRIER
    11011124
    1102   END SUBROUTINE gather_omp_rgen
    1103 
    1104 
    1105   SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff)
    1106   USE mod_phys_lmdz_omp_data
    1107   USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi
    1108   IMPLICIT NONE
    1109 
    1110     INTEGER,INTENT(IN) :: dimsize
    1111     LOGICAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn
    1112     LOGICAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
    1113     LOGICAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
    1114 
    1115     INTEGER :: i,ij
    1116    
    1117     DO i=1,dimsize
    1118       DO ij=1,klon_omp
    1119         Buff(klon_omp_begin-1+ij,i)=VarIn(ij,i)
    1120       ENDDO
    1121     ENDDO
    1122   !$OMP BARRIER 
    1123 
    1124 
    1125   !$OMP MASTER
    1126     DO i=1,dimsize
    1127       DO ij=1,klon_mpi
    1128         VarOut(ij,i)=Buff(ij,i)
    1129       ENDDO
    1130     ENDDO 
    1131   !$OMP END MASTER
    1132   !$OMP BARRIER
    1133 
    11341125  END SUBROUTINE gather_omp_lgen
    11351126
  • LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/mod_phys_lmdz_para.F90

    r3465 r4171  
    1717CONTAINS
    1818
    19   SUBROUTINE Init_phys_lmdz_para(nbp,nbp_lon,nbp_lat,communicator)
     19  SUBROUTINE Init_phys_lmdz_para(nbp,nbp_lon,nbp_lat,nbp_lev,grid_type, nvertex,communicator)
    2020  IMPLICIT NONE
    2121    INTEGER,INTENT(in) :: nbp
    2222    INTEGER,INTENT(in) :: nbp_lon
    2323    INTEGER,INTENT(in) :: nbp_lat
     24    INTEGER,INTENT(in) :: nbp_lev
    2425    INTEGER,INTENT(in) :: communicator
     26    INTEGER,INTENT(IN) :: grid_type
     27    INTEGER,INTENT(IN) :: nvertex
    2528
    26     CALL Init_phys_lmdz_mpi_data(nbp,nbp_lon,nbp_lat,communicator)
     29    CALL Init_phys_lmdz_mpi_data(nbp,nbp_lon,nbp_lat,nbp_lev, grid_type, nvertex,communicator)
    2730!$OMP PARALLEL
    2831    CALL Init_phys_lmdz_omp_data(klon_mpi)
  • LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/physics_distribution_mod.F90

    r3435 r4171  
    1313  USE mod_grid_phy_lmdz, ONLY: init_grid_phy_lmdz
    1414  USE dimphy, ONLY : Init_dimphy
    15   USE infotrac_phy, ONLY : type_trac
     15  USE infotrac_phy, ONLY : types_trac
    1616#ifdef REPROBUS
    1717  USE CHEM_REP, ONLY : Init_chem_rep_phys
     
    2929
    3030    CALL init_grid_phy_lmdz(grid_type,nvertex, nbp_lon,nbp_lat,nbp_lev)
    31     CALL init_phys_lmdz_para(nbp,nbp_lon, nbp_lat, communicator)
     31    CALL init_phys_lmdz_para(nbp,nbp_lon, nbp_lat,nbp_lev, grid_type,nvertex, communicator)
    3232!$OMP PARALLEL
    3333    CALL init_dimphy(klon_omp,nbp_lev)
    3434
     35#ifdef INCA
     36       CALL Init_inca_dim(klon_omp,nbp_lev)
     37#endif
     38
    3539! Initialization of Reprobus
    36     IF (type_trac == 'repr') THEN
     40    IF (ANY(types_trac == 'repr')) THEN
    3741#ifdef REPROBUS
    3842       CALL Init_chem_rep_phys(klon_omp,nbp_lev)
     
    4852!  USE mod_grid_phy_lmdz, ONLY: Init_grid_phy_lmdz!, nbp_lev
    4953!  USE dimphy, ONLY : Init_dimphy
    50 !  USE infotrac_phy, ONLY : type_trac
     54!  USE infotrac_phy, ONLY : types_trac
    5155!#ifdef REPROBUS
    5256!  USE CHEM_REP, ONLY : Init_chem_rep_phys
     
    6872!
    6973!! Initialization of Reprobus
    70 !    IF (type_trac == 'repr') THEN
     74!    IF (ANY(types_trac == 'repr')) THEN
    7175!#ifdef REPROBUS
    7276!       CALL Init_chem_rep_phys(klon_omp,nbp_lev)
  • LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/print_control_mod.F90

    r3435 r4171  
    55  INTEGER,SAVE :: prt_level ! debug output level
    66  LOGICAL,SAVE :: debug ! flag to specify if in "debug mode"
    7 !$OMP THREADPRIVATE(lunout,prt_level,debug)
     7  LOGICAL,SAVE :: alert_first_call = .TRUE. ! for printing alerts on first call to routine only           
     8  LOGICAL,SAVE :: call_alert ! (combination of is_master and alert_first_call for easier use     
     9!$OMP THREADPRIVATE(lunout,prt_level,debug, alert_first_call, call_alert)
    810
    911  ! NB: Module variable Initializations done by set_print_control
     
    1517  SUBROUTINE set_print_control(lunout_,prt_level_,debug_)
    1618  IMPLICIT NONE
    17     INTEGER :: lunout_
    18     INTEGER :: prt_level_
    19     LOGICAL :: debug_
     19    INTEGER, INTENT(IN) :: lunout_
     20    INTEGER, INTENT(IN) :: prt_level_
     21    LOGICAL, INTENT(IN) :: debug_
    2022     
    2123    lunout = lunout_
     
    2527  END SUBROUTINE set_print_control
    2628
     29  SUBROUTINE prt_alerte(message, modname, niv_alerte)
     30    ! Function to print different values of alarms when first encountered
     31    ! Meant for informative purposee
     32    IMPLICIT NONE
     33    ! Arguments:
     34    ! message: message to print out
     35    ! modname: module/routine name
     36    ! niv_alerte: alert level (0/1/2)
     37    CHARACTER(LEN=*), INTENT(IN) :: modname
     38    CHARACTER(LEN=*) :: message
     39    INTEGER :: niv_alerte
     40    ! local variables
     41    CHARACTER(LEN=7), DIMENSION(0:2) :: alarm_color = (/ 'VERTE  ','ORANGE ','ROUGE  ' /)
     42    CHARACTER(LEN=7) :: alarm_couleur
     43    INTEGER :: alarm_file=15 ! in case we want/need to print out the special alarms in a separate file     
     44
     45    IF ( alert_first_call) then
     46       IF ( alarm_file .ne. lunout ) THEN
     47          OPEN(unit = alarm_file, file = "ALERTES.txt")
     48       ENDIF
     49    ENDIF
     50
     51    alarm_couleur = alarm_color(niv_alerte)
     52    IF (niv_alerte < 0 .OR. niv_alerte > 3) then
     53       message = 'NIVEAU ALERTE INVALIDE  '//message
     54       alarm_couleur='NOIRE  '
     55    ENDIF
     56
     57    WRITE(alarm_file, *)' ALERTE ',alarm_couleur, trim(modname),  trim(message)
     58   
     59  END SUBROUTINE prt_alerte
     60
     61 
    2762END MODULE print_control_mod
Note: See TracChangeset for help on using the changeset viewer.