- Timestamp:
- 10/09/15 16:13:43 (9 years ago)
- Location:
- codes/icosagcm/trunk/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/advect_tracer.f90
r347 r364 82 82 IF (first) THEN 83 83 first=.FALSE. 84 CALL init_message(f_u,req_e1_vect,req_u )85 CALL init_message(f_cc,req_e1_scal,req_cc )86 CALL init_message(f_wfluxt,req_i1,req_wfluxt )87 CALL init_message(f_q,req_i1,req_q )88 CALL init_message(f_rhodz,req_i1,req_rhodz )89 CALL init_message(f_gradq3d,req_i1,req_gradq3d )84 CALL init_message(f_u,req_e1_vect,req_u, 'req_u') 85 CALL init_message(f_cc,req_e1_scal,req_cc, 'req_cc') 86 CALL init_message(f_wfluxt,req_i1,req_wfluxt, 'req_wfluxt') 87 CALL init_message(f_q,req_i1,req_q, 'req_q') 88 CALL init_message(f_rhodz,req_i1,req_rhodz, 'req_rhodz') 89 CALL init_message(f_gradq3d,req_i1,req_gradq3d, 'req_gradq3d') 90 90 ENDIF 91 91 92 92 !!$OMP BARRIER 93 93 94 IF(nqtot<1) RETURN 94 95 CALL trace_start("advect_tracer") 95 96 -
codes/icosagcm/trunk/src/observable.f90
r356 r364 32 32 USE omp_para 33 33 TYPE(t_field),POINTER :: f_ps(:), f_u(:), f_q(:) 34 IF (is_master) PRINT *,'CALL write_output_fields_basic'34 ! IF (is_master) PRINT *,'CALL write_output_fields_basic' 35 35 CALL un2ulonlat(f_u, f_buf_ulon, f_buf_ulat) 36 36 CALL output_field("ulon",f_buf_ulon) -
codes/icosagcm/trunk/src/timeloop_gcm.f90
r363 r364 195 195 !$OMP MASTER 196 196 CALL SYSTEM_CLOCK(start_clock) 197 CALL SYSTEM_CLOCK(count_rate=rate_clock) 197 198 !$OMP END MASTER 198 199 … … 203 204 DO it=itau0+1,itau0+itaumax 204 205 205 CALL check_conserve_detailed('detailed_budget 0', & 206 f_ps,f_dps,f_u,f_theta_rhodz,f_phis,it) 207 208 IF (xios_output) CALL xios_update_calendar(it) 206 IF (is_master) CALL print_iteration(it, itau0, itaumax, start_clock, rate_clock) 207 IF (xios_output) THEN 208 CALL xios_update_calendar(it) 209 ELSE 210 CALL update_time_counter(dt*it) 211 END IF 212 209 213 IF (it==itau0+1 .OR. MOD(it,itau_sync)==0) THEN 210 214 CALL send_message(f_ps,req_ps0) … … 220 224 ENDIF 221 225 222 IF (is_master) PRINT *,"It No :",It," t :",dt*It223 224 226 IF (mod(it,itau_out)==0 ) THEN 225 CALL update_time_counter(dt*it)226 227 CALL write_output_fields_basic(f_ps, f_u, f_q) 227 228 ENDIF 229 230 CALL check_conserve_detailed('detailed_budget 0', & 231 f_ps,f_dps,f_u,f_theta_rhodz,f_phis,it) 228 232 229 233 CALL guided(it*dt,f_ps,f_theta_rhodz,f_u,f_q) … … 235 239 CALL HEVI_scheme(it, fluxt_zero) 236 240 END SELECT 237 241 238 242 CALL check_conserve_detailed('detailed_budget 1', & 239 243 f_ps,f_dps,f_u,f_theta_rhodz,f_phis,it) … … 266 270 267 271 IF(MOD(it,itau_adv)==0) THEN 268 IF(nqtot>0)CALL advect_tracer(f_hfluxt,f_wfluxt,f_u, f_q,f_rhodz) ! update q and rhodz after RK step272 CALL advect_tracer(f_hfluxt,f_wfluxt,f_u, f_q,f_rhodz) ! update q and rhodz after RK step 269 273 fluxt_zero=.TRUE. 270 274 ! FIXME : check that rhodz is consistent with ps … … 278 282 END DO 279 283 ENDIF 280 281 284 END IF 282 285 … … 301 304 !$OMP MASTER 302 305 CALL SYSTEM_CLOCK(stop_clock) 303 CALL SYSTEM_CLOCK(count_rate=rate_clock)304 306 305 307 IF (mpi_rank==0) THEN … … 310 312 ! CONTAINS 311 313 END SUBROUTINE timeloop 312 314 315 SUBROUTINE print_iteration(it,itau0,itaumax,start_clock,rate_clock) 316 INTEGER :: it, itau0, itaumax, start_clock, stop_clock, rate_clock, throughput 317 REAL :: per_step,total, elapsed 318 WRITE(*,'(A,I7,A,F8.1)') "It No :",it," t :",dt*it 319 IF(MOD(it,10)==0) THEN 320 CALL SYSTEM_CLOCK(stop_clock) 321 elapsed = (stop_clock-start_clock)*1./rate_clock 322 per_step = elapsed/(it-itau0) 323 throughput = dt/per_step 324 total = per_step*(itaumax-itau0) 325 WRITE(*,'(A,I5,A,F6.2,A,I6)') 'Time spent (s):',INT(elapsed), & 326 ' -- ms/step : ', 1000*per_step, & 327 ' -- Throughput :', throughput 328 WRITE(*,'(A,I5,A,I5)') 'Whole job (min) :', INT(total/60.), & 329 ' -- Completion in (min) : ', INT((total-elapsed)/60.) 330 END IF 331 END SUBROUTINE print_iteration 332 313 333 END MODULE timeloop_gcm_mod -
codes/icosagcm/trunk/src/transfert_mpi.f90
r358 r364 61 61 62 62 TYPE t_message 63 CHARACTER(LEN=100) :: name ! for debug 63 64 TYPE(t_request), POINTER :: request(:) 64 65 INTEGER :: nreq … … 72 73 LOGICAL :: completed 73 74 LOGICAL :: pending 75 LOGICAL :: open ! for debug 74 76 INTEGER :: number 75 77 END TYPE t_message … … 816 818 817 819 818 SUBROUTINE init_message_seq(field, request, message )820 SUBROUTINE init_message_seq(field, request, message, name) 819 821 USE field_mod 820 822 USE domain_mod … … 826 828 TYPE(t_request),POINTER :: request(:) 827 829 TYPE(t_message) :: message 828 830 CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: name 829 831 !$OMP MASTER 830 832 message%request=>request 833 IF(PRESENT(name)) THEN 834 message%name = TRIM(name) 835 ELSE 836 message%name = 'unknown' 837 END IF 831 838 !$OMP END MASTER 832 839 !$OMP BARRIER … … 879 886 880 887 881 SUBROUTINE init_message_mpi(field,request, message )888 SUBROUTINE init_message_mpi(field,request, message, name) 882 889 USE field_mod 883 890 USE domain_mod … … 890 897 TYPE(t_request),POINTER :: request(:) 891 898 TYPE(t_message) :: message 899 CHARACTER(LEN=*), INTENT(IN),OPTIONAL :: name 892 900 893 901 TYPE(ARRAY),POINTER :: recv,send … … 904 912 !$OMP BARRIER 905 913 !$OMP MASTER 914 IF(PRESENT(name)) THEN 915 message%name = TRIM(name) 916 ELSE 917 message%name = 'unknown' 918 END IF 906 919 message%number=message_number 907 920 message_number=message_number+1 … … 921 934 message%pending=.FALSE. 922 935 message%completed=.FALSE. 923 936 message%open=.FALSE. 937 924 938 DO ind=1,ndomain 925 939 req=>request(ind) … … 1046 1060 ENDIF 1047 1061 1048 1062 DEALLOCATE(message%mpi_req) 1063 DEALLOCATE(message%buffers) 1064 DEALLOCATE(message%status) 1049 1065 1050 1066 !$OMP END MASTER … … 1112 1128 1113 1129 !$OMP MASTER 1130 IF(message%open) THEN 1131 PRINT *, 'send_message_mpi : message ' // TRIM(message%name) // & 1132 ' is still open, no call to wait_message_mpi after last send_message_mpi' 1133 CALL ABORT 1134 END IF 1135 message%open=.TRUE. ! will be set to .FALSE. by wait_message_mpi 1136 1114 1137 message%field=>field 1115 1138 … … 1461 1484 INTEGER :: offset 1462 1485 1486 message%open=.FALSE. 1463 1487 IF (.NOT. message%pending) RETURN 1464 1488
Note: See TracChangeset
for help on using the changeset viewer.