Changeset 4171 for LMDZ6/branches/LMDZ-ECRAD/libf/phy_common
- Timestamp:
- Jun 17, 2022, 4:24:49 PM (3 years ago)
- Location:
- LMDZ6/branches/LMDZ-ECRAD
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ-ECRAD
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/mod_phys_lmdz_mpi_data.F90
r3435 r4171 46 46 CONTAINS 47 47 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 49 50 IMPLICIT NONE 50 51 #ifdef CPP_MPI … … 54 55 INTEGER,INTENT(IN) :: nbp_lon 55 56 INTEGER,INTENT(IN) :: nbp_lat 57 INTEGER,INTENT(IN) :: nbp_lev 56 58 INTEGER,INTENT(IN) :: communicator 59 INTEGER,INTENT(IN) :: grid_type 60 INTEGER,INTENT(IN) :: nvertex 57 61 58 62 INTEGER,ALLOCATABLE :: distrib(:) … … 179 183 180 184 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 181 191 182 192 END SUBROUTINE Init_phys_lmdz_mpi_data -
LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/mod_phys_lmdz_omp_transfert.F90
r3465 r4171 498 498 REAL,INTENT(OUT),DIMENSION(:) :: VarOut 499 499 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) 502 501 503 502 END SUBROUTINE gather_omp_r … … 509 508 REAL,INTENT(IN),DIMENSION(:,:) :: VarIn 510 509 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)) 514 512 515 513 END SUBROUTINE gather_omp_r1 … … 521 519 REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn 522 520 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)) 526 523 527 524 END SUBROUTINE gather_omp_r2 … … 533 530 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 534 531 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)) 538 534 539 535 END SUBROUTINE gather_omp_r3 … … 1071 1067 1072 1068 1073 SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize ,Buff)1069 SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize) 1074 1070 USE mod_phys_lmdz_omp_data 1075 1071 USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi … … 1078 1074 INTEGER,INTENT(IN) :: dimsize 1079 1075 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 1082 1105 1083 1106 INTEGER :: i,ij … … 1100 1123 !$OMP BARRIER 1101 1124 1102 END SUBROUTINE gather_omp_rgen1103 1104 1105 SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff)1106 USE mod_phys_lmdz_omp_data1107 USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi1108 IMPLICIT NONE1109 1110 INTEGER,INTENT(IN) :: dimsize1111 LOGICAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn1112 LOGICAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut1113 LOGICAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff1114 1115 INTEGER :: i,ij1116 1117 DO i=1,dimsize1118 DO ij=1,klon_omp1119 Buff(klon_omp_begin-1+ij,i)=VarIn(ij,i)1120 ENDDO1121 ENDDO1122 !$OMP BARRIER1123 1124 1125 !$OMP MASTER1126 DO i=1,dimsize1127 DO ij=1,klon_mpi1128 VarOut(ij,i)=Buff(ij,i)1129 ENDDO1130 ENDDO1131 !$OMP END MASTER1132 !$OMP BARRIER1133 1134 1125 END SUBROUTINE gather_omp_lgen 1135 1126 -
LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/mod_phys_lmdz_para.F90
r3465 r4171 17 17 CONTAINS 18 18 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) 20 20 IMPLICIT NONE 21 21 INTEGER,INTENT(in) :: nbp 22 22 INTEGER,INTENT(in) :: nbp_lon 23 23 INTEGER,INTENT(in) :: nbp_lat 24 INTEGER,INTENT(in) :: nbp_lev 24 25 INTEGER,INTENT(in) :: communicator 26 INTEGER,INTENT(IN) :: grid_type 27 INTEGER,INTENT(IN) :: nvertex 25 28 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) 27 30 !$OMP PARALLEL 28 31 CALL Init_phys_lmdz_omp_data(klon_mpi) -
LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/physics_distribution_mod.F90
r3435 r4171 13 13 USE mod_grid_phy_lmdz, ONLY: init_grid_phy_lmdz 14 14 USE dimphy, ONLY : Init_dimphy 15 USE infotrac_phy, ONLY : type _trac15 USE infotrac_phy, ONLY : types_trac 16 16 #ifdef REPROBUS 17 17 USE CHEM_REP, ONLY : Init_chem_rep_phys … … 29 29 30 30 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) 32 32 !$OMP PARALLEL 33 33 CALL init_dimphy(klon_omp,nbp_lev) 34 34 35 #ifdef INCA 36 CALL Init_inca_dim(klon_omp,nbp_lev) 37 #endif 38 35 39 ! Initialization of Reprobus 36 IF ( type_trac == 'repr') THEN40 IF (ANY(types_trac == 'repr')) THEN 37 41 #ifdef REPROBUS 38 42 CALL Init_chem_rep_phys(klon_omp,nbp_lev) … … 48 52 ! USE mod_grid_phy_lmdz, ONLY: Init_grid_phy_lmdz!, nbp_lev 49 53 ! USE dimphy, ONLY : Init_dimphy 50 ! USE infotrac_phy, ONLY : type _trac54 ! USE infotrac_phy, ONLY : types_trac 51 55 !#ifdef REPROBUS 52 56 ! USE CHEM_REP, ONLY : Init_chem_rep_phys … … 68 72 ! 69 73 !! Initialization of Reprobus 70 ! IF ( type_trac == 'repr') THEN74 ! IF (ANY(types_trac == 'repr')) THEN 71 75 !#ifdef REPROBUS 72 76 ! CALL Init_chem_rep_phys(klon_omp,nbp_lev) -
LMDZ6/branches/LMDZ-ECRAD/libf/phy_common/print_control_mod.F90
r3435 r4171 5 5 INTEGER,SAVE :: prt_level ! debug output level 6 6 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) 8 10 9 11 ! NB: Module variable Initializations done by set_print_control … … 15 17 SUBROUTINE set_print_control(lunout_,prt_level_,debug_) 16 18 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_ 20 22 21 23 lunout = lunout_ … … 25 27 END SUBROUTINE set_print_control 26 28 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 27 62 END MODULE print_control_mod
Note: See TracChangeset
for help on using the changeset viewer.