Changeset 186 for codes/icosagcm/trunk/src/omp_para.F90
- Timestamp:
- 01/09/14 09:56:11 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/omp_para.F90
r151 r186 18 18 LOGICAL,SAVE :: using_openmp 19 19 20 LOGICAL,PARAMETER :: omp_by_domain=.TRUE. 21 20 22 CONTAINS 21 23 … … 23 25 SUBROUTINE init_omp_para 24 26 USE grid_param 25 #ifdef CPP_USING_O PENMP27 #ifdef CPP_USING_OMP 26 28 USE omp_lib 27 29 #endif … … 29 31 INTEGER :: ll_nb,i 30 32 31 #ifdef CPP_USING_O PENMP33 #ifdef CPP_USING_OMP 32 34 using_openmp=.TRUE. 33 35 #else … … 39 41 40 42 !$OMP MASTER 41 #ifdef CPP_USING_O PENMP43 #ifdef CPP_USING_OMP 42 44 omp_size=OMP_GET_NUM_THREADS() 43 45 #endif 44 46 !$OMP END MASTER 45 47 !$OMP BARRIER 46 #ifdef CPP_USING_O PENMP48 #ifdef CPP_USING_OMP 47 49 omp_rank=OMP_GET_THREAD_NUM() 48 50 #endif 49 omp_first=.FALSE. 50 omp_last=.FALSE. 51 omp_master=.FALSE. 51 52 IF (omp_by_domain) THEN 53 omp_first=.TRUE. 54 omp_last=.TRUE. 55 IF (omp_rank==0) THEN 56 omp_master=.TRUE. 57 ELSE 58 omp_master=.FALSE. 59 ENDIF 60 61 ll_begin=1 62 ll_beginp1=2 63 ll_end=llm 64 ll_endm1=llm-1 65 ll_endp1=llm+1 66 67 ELSE 52 68 53 IF (omp_rank==0) THEN 54 omp_first=.TRUE. 55 omp_master=.TRUE. 69 omp_first=.FALSE. 70 omp_last=.FALSE. 71 omp_master=.FALSE. 72 73 IF (omp_rank==0) THEN 74 omp_first=.TRUE. 75 omp_master=.TRUE. 76 ENDIF 77 78 IF (omp_rank==omp_size-1) omp_last=.TRUE. 79 80 ll_end=0 81 DO i=0,omp_rank 82 ll_begin=ll_end+1 83 ll_nb=llm/omp_size 84 IF (MOD(llm,omp_size)>i) ll_nb=ll_nb+1 85 ll_end=ll_begin+ll_nb-1 86 ENDDO 87 88 ll_beginp1=ll_begin 89 ll_endp1=ll_end 90 ll_endm1=ll_end 91 92 IF (omp_first) ll_beginp1=ll_begin+1 93 IF (omp_last) ll_endp1=ll_endp1+1 94 IF (omp_last) ll_endm1=ll_endm1-1 95 56 96 ENDIF 57 58 IF (omp_rank==omp_size-1) omp_last=.TRUE.59 60 ll_end=061 DO i=0,omp_rank62 ll_begin=ll_end+163 ll_nb=llm/omp_size64 IF (MOD(llm,omp_size)>i) ll_nb=ll_nb+165 ll_end=ll_begin+ll_nb-166 ENDDO67 68 ll_beginp1=ll_begin69 ll_endp1=ll_end70 ll_endm1=ll_end71 72 IF (omp_first) ll_beginp1=ll_begin+173 IF (omp_last) ll_endp1=ll_endp1+174 IF (omp_last) ll_endm1=ll_endm1-175 76 97 !$OMP END PARALLEL 77 98 … … 91 112 END SUBROUTINE init_omp_para 92 113 93 114 FUNCTION omp_in_parallel() 115 #ifdef CPP_USING_OMP 116 USE omp_lib, ONLY : omp_in_parallel_=>omp_in_parallel 117 #endif 118 IMPLICIT NONE 119 LOGICAL :: omp_in_parallel 120 121 #ifdef CPP_USING_OMP 122 omp_in_parallel=omp_in_parallel_() 123 #else 124 omp_in_parallel=.FALSE. 125 #endif 126 127 END FUNCTION omp_in_parallel 128 94 129 END MODULE omp_para 95 130
Note: See TracChangeset
for help on using the changeset viewer.