- Timestamp:
- Mar 14, 2019, 10:34:31 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_omp_transfert.F90
r2326 r3465 47 47 END INTERFACE 48 48 49 50 PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp, omp_barrier 49 INTERFACE reduce_min_omp 50 MODULE PROCEDURE reduce_min_omp_i,reduce_min_omp_i1,reduce_min_omp_i2,reduce_min_omp_i3,reduce_min_omp_i4, & 51 reduce_min_omp_r,reduce_min_omp_r1,reduce_min_omp_r2,reduce_min_omp_r3,reduce_min_omp_r4 52 END INTERFACE 53 54 55 PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp, reduce_min_omp, omp_barrier 51 56 52 57 CONTAINS … … 710 715 END SUBROUTINE reduce_sum_omp_r4 711 716 717 718 719 SUBROUTINE reduce_min_omp_i(VarIn, VarOut) 720 IMPLICIT NONE 721 722 INTEGER,INTENT(IN) :: VarIn 723 INTEGER,INTENT(OUT) :: VarOut 724 INTEGER :: VarIn_tmp(1) 725 INTEGER :: VarOut_tmp(1) 726 727 VarIn_tmp(1)=VarIn 728 CALL Check_buffer_i(1) 729 CALL reduce_min_omp_igen(VarIn_tmp,Varout_tmp,1,buffer_i) 730 VarOut=VarOut_tmp(1) 731 732 END SUBROUTINE reduce_min_omp_i 733 734 SUBROUTINE reduce_min_omp_i1(VarIn, VarOut) 735 IMPLICIT NONE 736 737 INTEGER,INTENT(IN),DIMENSION(:) :: VarIn 738 INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut 739 740 CALL Check_buffer_i(size(VarIn)) 741 CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 742 743 END SUBROUTINE reduce_min_omp_i1 744 745 746 SUBROUTINE reduce_min_omp_i2(VarIn, VarOut) 747 IMPLICIT NONE 748 749 INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn 750 INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut 751 752 CALL Check_buffer_i(size(VarIn)) 753 CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 754 755 END SUBROUTINE reduce_min_omp_i2 756 757 758 SUBROUTINE reduce_min_omp_i3(VarIn, VarOut) 759 IMPLICIT NONE 760 761 INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn 762 INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 763 764 CALL Check_buffer_i(size(VarIn)) 765 CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 766 767 END SUBROUTINE reduce_min_omp_i3 768 769 770 SUBROUTINE reduce_min_omp_i4(VarIn, VarOut) 771 IMPLICIT NONE 772 773 INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 774 INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 775 776 CALL Check_buffer_i(size(VarIn)) 777 CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 778 779 END SUBROUTINE reduce_min_omp_i4 780 781 782 SUBROUTINE reduce_min_omp_r(VarIn, VarOut) 783 IMPLICIT NONE 784 785 REAL,INTENT(IN) :: VarIn 786 REAL,INTENT(OUT) :: VarOut 787 REAL :: VarIn_tmp(1) 788 REAL :: VarOut_tmp(1) 789 790 VarIn_tmp(1)=VarIn 791 CALL Check_buffer_r(1) 792 CALL reduce_min_omp_rgen(VarIn_tmp,Varout_tmp,1,buffer_r) 793 VarOut=VarOut_tmp(1) 794 795 END SUBROUTINE reduce_min_omp_r 796 797 SUBROUTINE reduce_min_omp_r1(VarIn, VarOut) 798 IMPLICIT NONE 799 800 REAL,INTENT(IN),DIMENSION(:) :: VarIn 801 REAL,INTENT(OUT),DIMENSION(:) :: VarOut 802 803 CALL Check_buffer_r(size(VarIn)) 804 CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 805 806 END SUBROUTINE reduce_min_omp_r1 807 808 809 SUBROUTINE reduce_min_omp_r2(VarIn, VarOut) 810 IMPLICIT NONE 811 812 REAL,INTENT(IN),DIMENSION(:,:) :: VarIn 813 REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut 814 815 CALL Check_buffer_r(size(VarIn)) 816 CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 817 818 END SUBROUTINE reduce_min_omp_r2 819 820 821 SUBROUTINE reduce_min_omp_r3(VarIn, VarOut) 822 IMPLICIT NONE 823 824 REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn 825 REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 826 827 CALL Check_buffer_r(size(VarIn)) 828 CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 829 830 END SUBROUTINE reduce_min_omp_r3 831 832 833 SUBROUTINE reduce_min_omp_r4(VarIn, VarOut) 834 IMPLICIT NONE 835 836 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 837 REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 838 839 CALL Check_buffer_r(size(VarIn)) 840 CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 841 842 END SUBROUTINE reduce_min_omp_r4 843 844 845 846 712 847 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 713 848 ! LES ROUTINES GENERIQUES ! … … 1062 1197 END SUBROUTINE reduce_sum_omp_rgen 1063 1198 1199 1200 SUBROUTINE reduce_min_omp_igen(VarIn,VarOut,dimsize,Buff) 1201 IMPLICIT NONE 1202 1203 INTEGER,INTENT(IN) :: dimsize 1204 INTEGER,INTENT(IN),DIMENSION(dimsize) :: VarIn 1205 INTEGER,INTENT(OUT),DIMENSION(dimsize) :: VarOut 1206 INTEGER,INTENT(INOUT),DIMENSION(dimsize) :: Buff 1207 1208 INTEGER :: i 1209 INTEGER :: var 1210 1211 !$OMP MASTER 1212 Buff(:)=HUGE(var) 1213 !$OMP END MASTER 1214 !$OMP BARRIER 1215 1216 !$OMP CRITICAL 1217 DO i=1,dimsize 1218 Buff(i)=MIN(Buff(i),VarIn(i)) 1219 ENDDO 1220 !$OMP END CRITICAL 1221 !$OMP BARRIER 1222 1223 !$OMP MASTER 1224 DO i=1,dimsize 1225 VarOut(i)=Buff(i) 1226 ENDDO 1227 !$OMP END MASTER 1228 !$OMP BARRIER 1229 1230 END SUBROUTINE reduce_min_omp_igen 1231 1232 SUBROUTINE reduce_min_omp_rgen(VarIn,VarOut,dimsize,Buff) 1233 IMPLICIT NONE 1234 1235 INTEGER,INTENT(IN) :: dimsize 1236 REAL,INTENT(IN),DIMENSION(dimsize) :: VarIn 1237 REAL,INTENT(OUT),DIMENSION(dimsize) :: VarOut 1238 REAL,INTENT(INOUT),DIMENSION(dimsize) :: Buff 1239 1240 INTEGER :: i 1241 REAL :: var 1242 1243 !$OMP MASTER 1244 Buff(:)=HUGE(var) 1245 !$OMP END MASTER 1246 !$OMP BARRIER 1247 1248 !$OMP CRITICAL 1249 DO i=1,dimsize 1250 Buff(i)=MIN(Buff(i),VarIn(i)) 1251 ENDDO 1252 !$OMP END CRITICAL 1253 !$OMP BARRIER 1254 1255 !$OMP MASTER 1256 DO i=1,dimsize 1257 VarOut(i)=Buff(i) 1258 ENDDO 1259 !$OMP END MASTER 1260 !$OMP BARRIER 1261 1262 END SUBROUTINE reduce_min_omp_rgen 1263 1264 1064 1265 END MODULE mod_phys_lmdz_omp_transfert
Note: See TracChangeset
for help on using the changeset viewer.