- Timestamp:
- Aug 12, 2025, 12:18:23 PM (3 days ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/phy_common/mod_phys_lmdz_omp_transfert.F90
r3832 r3888 112 112 113 113 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 114 !! Definition des Broadcast--> 4D !!114 !! Definition of Broadcasts --> 4D !! 115 115 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 116 116 117 !! -- Les chaine de charactère-- !!117 !! -- For strings -- !! 118 118 119 119 SUBROUTINE bcast_omp_c(var) … … 125 125 END SUBROUTINE bcast_omp_c 126 126 127 !! -- Les entiers -- !!127 !! -- For integers -- !! 128 128 129 129 SUBROUTINE bcast_omp_i(var) … … 200 200 201 201 202 !! -- Les reels -- !!202 !! -- For reals -- !! 203 203 204 204 SUBROUTINE bcast_omp_r(var) … … 275 275 276 276 277 !! -- Les booleans -- !!277 !! -- For logicals -- !! 278 278 279 279 SUBROUTINE bcast_omp_l(var) … … 351 351 352 352 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 353 !! Definition desScatter --> 4D !!353 !! Definition for Scatter --> 4D !! 354 354 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 355 355 … … 557 557 558 558 CALL Check_buffer_r(size(VarOut)) 559 CALL gather_omp_rgen(VarIn,Varout,1 ,buffer_r)559 CALL gather_omp_rgen(VarIn,Varout,1) 560 560 561 561 END SUBROUTINE gather_omp_r … … 569 569 570 570 CALL Check_buffer_r(size(VarOut)) 571 CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2) ,buffer_r)571 CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)) 572 572 573 573 END SUBROUTINE gather_omp_r1 … … 581 581 582 582 CALL Check_buffer_r(size(VarOut)) 583 CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3) ,buffer_r)583 CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)) 584 584 585 585 END SUBROUTINE gather_omp_r2 … … 593 593 594 594 CALL Check_buffer_r(size(VarOut)) 595 CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4) ,buffer_r)595 CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4)) 596 596 597 597 END SUBROUTINE gather_omp_r3 … … 774 774 775 775 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 776 ! LES ROUTINES GENERIQUES!776 ! GENERIC ROUTINES ! 777 777 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 778 778 … … 999 999 1000 1000 1001 SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize ,Buff)1001 SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize) 1002 1002 USE mod_phys_lmdz_omp_data 1003 1003 USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi … … 1006 1006 INTEGER,INTENT(IN) :: dimsize 1007 1007 REAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn 1008 REAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut 1009 REAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff 1008 REAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize),TARGET :: VarOut 1009 1010 REAL, POINTER, SAVE :: Varout_ptr(:,:) ! Shared between threads NOT THREADPRIVATE 1011 1012 INTEGER :: i,ij 1013 1014 !$OMP MASTER 1015 Varout_ptr => VarOut 1016 !$OMP END MASTER 1017 !$OMP BARRIER 1018 1019 DO i=1,dimsize 1020 DO ij=1,klon_omp 1021 Varout_ptr(klon_omp_begin-1+ij,i)=VarIn(ij,i) 1022 ENDDO 1023 ENDDO 1024 !$OMP BARRIER 1025 1026 END SUBROUTINE gather_omp_rgen 1027 1028 1029 SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff) 1030 USE mod_phys_lmdz_omp_data 1031 USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi 1032 IMPLICIT NONE 1033 1034 INTEGER,INTENT(IN) :: dimsize 1035 LOGICAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn 1036 LOGICAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut 1037 LOGICAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff 1010 1038 1011 1039 INTEGER :: i,ij … … 1028 1056 !$OMP BARRIER 1029 1057 1030 END SUBROUTINE gather_omp_rgen1031 1032 1033 SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff)1034 USE mod_phys_lmdz_omp_data1035 USE mod_phys_lmdz_mpi_data, ONLY : klon_mpi1036 IMPLICIT NONE1037 1038 INTEGER,INTENT(IN) :: dimsize1039 LOGICAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn1040 LOGICAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut1041 LOGICAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff1042 1043 INTEGER :: i,ij1044 1045 DO i=1,dimsize1046 DO ij=1,klon_omp1047 Buff(klon_omp_begin-1+ij,i)=VarIn(ij,i)1048 ENDDO1049 ENDDO1050 !$OMP BARRIER1051 1052 1053 !$OMP MASTER1054 DO i=1,dimsize1055 DO ij=1,klon_mpi1056 VarOut(ij,i)=Buff(ij,i)1057 ENDDO1058 ENDDO1059 !$OMP END MASTER1060 !$OMP BARRIER1061 1062 1058 END SUBROUTINE gather_omp_lgen 1063 1059
Note: See TracChangeset
for help on using the changeset viewer.