Changeset 5609 for trunk/NEMOGCM/TOOLS/SIREN/src/mpp.f90
- Timestamp:
- 2015-07-17T17:42:15+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/TOOLS/SIREN/src/mpp.f90
r5037 r5609 165 165 !> to get processors to be used:<br/> 166 166 !> @code 167 !> CALL mpp_get_use( td_mpp, id_imin, id_imax, id_idim,&168 !> & id_jmin, id_jmax , id_jdim)167 !> CALL mpp_get_use( td_mpp, id_imin, id_imax, & 168 !> & id_jmin, id_jmax ) 169 169 !> @endcode 170 170 !> - id_imin 171 171 !> - id_imax 172 !> - id_idim173 172 !> - id_jmin 174 173 !> - id_jmax 175 !> - id_jdim176 174 !> 177 175 !> to get sub domains which form global domain contour:<br/> … … 379 377 ! copy mpp variable 380 378 mpp__copy_unit%c_name = TRIM(td_mpp%c_name) 379 mpp__copy_unit%i_id = td_mpp%i_id 381 380 mpp__copy_unit%i_niproc = td_mpp%i_niproc 382 381 mpp__copy_unit%i_njproc = td_mpp%i_njproc … … 495 494 ! print dimension 496 495 IF( td_mpp%i_ndim /= 0 )THEN 497 WRITE(*,'(/a)') " Filedimension"496 WRITE(*,'(/a)') " MPP dimension" 498 497 DO ji=1,ip_maxdim 499 498 IF( td_mpp%t_dim(ji)%l_use )THEN … … 698 697 CALL dim_clean(tl_dim) 699 698 700 IF( ( PRESENT(id_niproc) .AND. (.NOT. PRESENT(id_n iproc))) .OR. &699 IF( ( PRESENT(id_niproc) .AND. (.NOT. PRESENT(id_njproc))) .OR. & 701 700 ((.NOT. PRESENT(id_niproc)) .AND. PRESENT(id_njproc) ) )THEN 702 701 CALL logger_warn( "MPP INIT: number of processors following I and J "//& … … 1028 1027 ! create some attributes for domain decomposition (use with dimg file) 1029 1028 tl_att=att_init( "DOMAIN_number_total", mpp__init_file%i_nproc ) 1030 CALL mpp_ add_att(mpp__init_file, tl_att)1029 CALL mpp_move_att(mpp__init_file, tl_att) 1031 1030 1032 1031 tl_att=att_init( "DOMAIN_I_position_first", mpp__init_file%t_proc(:)%i_impp ) 1033 CALL mpp_ add_att(mpp__init_file, tl_att)1032 CALL mpp_move_att(mpp__init_file, tl_att) 1034 1033 1035 1034 tl_att=att_init( "DOMAIN_J_position_first", mpp__init_file%t_proc(:)%i_jmpp ) 1036 CALL mpp_ add_att(mpp__init_file, tl_att)1035 CALL mpp_move_att(mpp__init_file, tl_att) 1037 1036 1038 1037 tl_att=att_init( "DOMAIN_I_position_last", mpp__init_file%t_proc(:)%i_lci ) 1039 CALL mpp_ add_att(mpp__init_file, tl_att)1038 CALL mpp_move_att(mpp__init_file, tl_att) 1040 1039 1041 1040 tl_att=att_init( "DOMAIN_J_position_last", mpp__init_file%t_proc(:)%i_lcj ) 1042 CALL mpp_ add_att(mpp__init_file, tl_att)1041 CALL mpp_move_att(mpp__init_file, tl_att) 1043 1042 1044 1043 tl_att=att_init( "DOMAIN_I_halo_size_start", mpp__init_file%t_proc(:)%i_ldi ) 1045 CALL mpp_ add_att(mpp__init_file, tl_att)1044 CALL mpp_move_att(mpp__init_file, tl_att) 1046 1045 1047 1046 tl_att=att_init( "DOMAIN_J_halo_size_start", mpp__init_file%t_proc(:)%i_ldj ) 1048 CALL mpp_ add_att(mpp__init_file, tl_att)1047 CALL mpp_move_att(mpp__init_file, tl_att) 1049 1048 1050 1049 tl_att=att_init( "DOMAIN_I_halo_size_end", mpp__init_file%t_proc(:)%i_lei ) 1051 CALL mpp_ add_att(mpp__init_file, tl_att)1050 CALL mpp_move_att(mpp__init_file, tl_att) 1052 1051 1053 1052 tl_att=att_init( "DOMAIN_J_halo_size_end", mpp__init_file%t_proc(:)%i_lej ) 1054 CALL mpp_ add_att(mpp__init_file, tl_att)1053 CALL mpp_move_att(mpp__init_file, tl_att) 1055 1054 1056 1055 ! clean … … 1122 1121 CALL file_clean(tl_file) 1123 1122 1124 CALL logger_debug("MPP INIT READ: fin init_read ")1125 1123 END FUNCTION mpp__init_file 1126 1124 !------------------------------------------------------------------- … … 1131 1129 ! 1132 1130 !> @author J.Paul 1133 !> - November, 2013- Initial Version 1131 !> - November, 2013 - Initial Version 1132 !> @date July, 2015 - add only use dimension in MPP structure 1134 1133 !> 1135 1134 !> @param[in] td_file file strcuture … … 1163 1162 IF( td_file%i_id == 0 )THEN 1164 1163 CALL logger_info(" id "//TRIM(fct_str(td_file%i_id))) 1165 CALL logger_error("MPP INIT READ: netcdf file "// TRIM(td_file%c_name)//&1166 &" not opened")1164 CALL logger_error("MPP INIT READ: netcdf file "//& 1165 & TRIM(td_file%c_name)//" not opened") 1167 1166 ELSE 1168 1167 … … 1191 1190 CALL mpp_add_dim(mpp__init_file_cdf,tl_dim) 1192 1191 ENDIF 1193 tl_dim=dim_init( td_file%t_dim(3)%c_name, td_file%t_dim(3)%i_len) 1194 CALL mpp_add_dim(mpp__init_file_cdf,tl_dim) 1195 1196 tl_dim=dim_init( td_file%t_dim(4)%c_name, td_file%t_dim(4)%i_len) 1197 CALL mpp_add_dim(mpp__init_file_cdf,tl_dim) 1192 1193 IF( td_file%t_dim(3)%l_use )THEN 1194 tl_dim=dim_init( td_file%t_dim(3)%c_name, td_file%t_dim(3)%i_len) 1195 CALL mpp_add_dim(mpp__init_file_cdf,tl_dim) 1196 ENDIF 1197 1198 IF( td_file%t_dim(4)%l_use )THEN 1199 tl_dim=dim_init( td_file%t_dim(4)%c_name, td_file%t_dim(4)%i_len) 1200 CALL mpp_add_dim(mpp__init_file_cdf,tl_dim) 1201 ENDIF 1198 1202 1199 1203 ! initialise file/processor … … 1624 1628 IF( il_varid /= 0 )THEN 1625 1629 1626 CALL logger_error( " MPP ADD VAR: variable "//TRIM(td_var%c_name)//&1627 & ", standard name "//TRIM(td_var%c_stdname)//&1628 & ", already in mpp "//TRIM(td_mpp%c_name) )1629 1630 1630 DO ji=1,td_mpp%t_proc(1)%i_nvar 1631 1631 CALL logger_debug( " MPP ADD VAR: in mpp structure : & … … 1634 1634 & TRIM(td_mpp%t_proc(1)%t_var(ji)%c_stdname) ) 1635 1635 ENDDO 1636 CALL logger_error( " MPP ADD VAR: variable "//TRIM(td_var%c_name)//& 1637 & ", standard name "//TRIM(td_var%c_stdname)//& 1638 & ", already in mpp "//TRIM(td_mpp%c_name) ) 1636 1639 1637 1640 ELSE … … 1840 1843 !> @author J.Paul 1841 1844 !> @date November, 2013 - Initial version 1845 !> @date February, 2015 - define local variable structure to avoid mistake 1846 !> with pointer 1842 1847 ! 1843 1848 !> @param[inout] td_mpp mpp strcuture … … 1852 1857 ! local variable 1853 1858 INTEGER(i4) :: il_varid 1859 TYPE(TVAR) :: tl_var 1854 1860 !---------------------------------------------------------------- 1855 1861 ! check if mpp exist … … 1882 1888 ELSE 1883 1889 1884 CALL mpp_del_var(td_mpp, td_mpp%t_proc(1)%t_var(il_varid)) 1890 tl_var=var_copy(td_mpp%t_proc(1)%t_var(il_varid)) 1891 CALL mpp_del_var(td_mpp, tl_var) 1885 1892 1886 1893 ENDIF … … 2194 2201 !> @author J.Paul 2195 2202 !> - November, 2013- Initial Version 2203 !> @date July, 2015 - rewrite the same as way var_add_dim 2196 2204 !> 2197 2205 !> @param[inout] td_mpp mpp structure … … 2208 2216 2209 2217 ! loop indices 2210 INTEGER(i4) :: ji2211 2218 !---------------------------------------------------------------- 2212 2219 IF( td_mpp%i_ndim <= ip_maxdim )THEN 2213 2220 2214 ! check if dimension already in mpp structure 2215 il_ind=dim_get_index(td_mpp%t_dim(:), td_dim%c_name, td_dim%c_sname) 2216 IF( il_ind /= 0 )THEN 2217 2218 IF( td_mpp%t_dim(il_ind)%l_use )THEN 2219 CALL logger_error( & 2220 & "MPP ADD DIM: dimension "//TRIM(td_dim%c_name)//& 2221 & ", short name "//TRIM(td_dim%c_sname)//& 2222 & ", already used in mpp "//TRIM(td_mpp%c_name) ) 2223 ELSE 2224 ! replace dimension 2225 td_mpp%t_dim(il_ind)=dim_copy(td_dim) 2226 td_mpp%t_dim(il_ind)%i_id=il_ind 2227 td_mpp%t_dim(il_ind)%l_use=.TRUE. 2228 ENDIF 2229 2221 ! check if dimension already used in mpp structure 2222 il_ind=SCAN(TRIM(cp_dimorder),TRIM(td_dim%c_sname)) 2223 IF( il_ind == 0 )THEN 2224 CALL logger_warn( & 2225 & " MPP ADD DIM: dimension "//TRIM(td_dim%c_name)//& 2226 & ", short name "//TRIM(td_dim%c_sname)//& 2227 & ", will not be added in mpp "//TRIM(td_mpp%c_name) ) 2228 ELSEIF( td_mpp%t_dim(il_ind)%l_use )THEN 2229 CALL logger_error( & 2230 & " MPP ADD DIM: dimension "//TRIM(td_dim%c_name)//& 2231 & ", short name "//TRIM(td_dim%c_sname)//& 2232 & ", already used in mpp "//TRIM(td_mpp%c_name) ) 2230 2233 ELSE 2231 2234 2232 IF( td_mpp%i_ndim == ip_maxdim )THEN 2233 CALL logger_error( & 2234 & "MPP ADD DIM: can not add dimension "//TRIM(td_dim%c_name)//& 2235 & ", short name "//TRIM(td_dim%c_sname)//& 2236 & ", in mpp "//TRIM(td_mpp%c_name)//". Already "//& 2237 & TRIM(fct_str(ip_maxdim))//" dimensions." ) 2238 ELSE 2239 ! search empty dimension 2240 DO ji=1,ip_maxdim 2241 IF( td_mpp%t_dim(ji)%i_id == 0 )THEN 2242 il_ind=ji 2243 EXIT 2244 ENDIF 2245 ENDDO 2246 2247 ! add new dimension 2248 td_mpp%t_dim(il_ind)=dim_copy(td_dim) 2249 ! update number of attribute 2250 td_mpp%i_ndim=COUNT(td_mpp%t_dim(:)%l_use) 2251 2252 td_mpp%t_dim(il_ind)%l_use=.TRUE. 2253 td_mpp%t_dim(il_ind)%i_id=td_mpp%i_ndim 2254 ENDIF 2235 ! back to disorder dimension array 2236 CALL dim_disorder(td_mpp%t_dim(:)) 2237 2238 ! add new dimension 2239 td_mpp%t_dim(td_mpp%i_ndim+1)=dim_copy(td_dim) 2240 2241 ! update number of attribute 2242 td_mpp%i_ndim=COUNT(td_mpp%t_dim(:)%l_use) 2255 2243 2256 2244 ENDIF 2245 ! reorder dimension to ('x','y','z','t') 2246 CALL dim_reorder(td_mpp%t_dim(:)) 2257 2247 2258 2248 ELSE … … 2269 2259 !> @author J.Paul 2270 2260 !> - November, 2013- Initial Version 2261 !> @date July, 2015 - rewrite the same as way var_del_dim 2271 2262 !> 2272 2263 !> @param[inout] td_mpp mpp structure … … 2280 2271 2281 2272 ! local variable 2282 INTEGER(i4) :: il_status2283 2273 INTEGER(i4) :: il_ind 2284 TYPE(TDIM) , DIMENSION(:), ALLOCATABLE:: tl_dim2274 TYPE(TDIM) :: tl_dim 2285 2275 2286 2276 ! loop indices 2287 INTEGER(i4) :: ji 2288 !---------------------------------------------------------------- 2289 ! check if dimension already in mpp structure 2290 il_ind=dim_get_index(td_mpp%t_dim(:), td_dim%c_name, td_dim%c_sname) 2291 IF( il_ind == 0 )THEN 2292 2293 CALL logger_error( & 2294 & "MPP DEL DIM: no dimension "//TRIM(td_dim%c_name)//& 2277 !---------------------------------------------------------------- 2278 2279 2280 IF( td_mpp%i_ndim <= ip_maxdim )THEN 2281 2282 CALL logger_trace( & 2283 & " MPP DEL DIM: delete dimension "//TRIM(td_dim%c_name)//& 2295 2284 & ", short name "//TRIM(td_dim%c_sname)//& 2296 2285 & ", in mpp "//TRIM(td_mpp%c_name) ) 2286 2287 ! check if dimension already in variable structure 2288 il_ind=SCAN(TRIM(cp_dimorder),TRIM(td_dim%c_sname)) 2289 2290 ! replace dimension by empty one 2291 td_mpp%t_dim(il_ind)=dim_copy(tl_dim) 2292 2293 ! update number of dimension 2294 td_mpp%i_ndim=COUNT(td_mpp%t_dim(:)%l_use) 2295 2296 ! reorder dimension to ('x','y','z','t') 2297 CALL dim_reorder(td_mpp%t_dim) 2297 2298 2298 2299 ELSE 2299 2300 ALLOCATE( tl_dim(td_mpp%i_ndim-1), stat=il_status ) 2301 IF(il_status /= 0 )THEN 2302 2303 CALL logger_error( & 2304 & "MPP DEL DIM: not enough space to put dimensions from "//& 2305 & TRIM(td_mpp%c_name)//" in temporary dimension structure") 2306 2307 ELSE 2308 2309 ! save temporary dimension's mpp structure 2310 tl_dim( 1 : il_ind-1 ) = dim_copy(td_mpp%t_dim( 1 : il_ind-1 )) 2311 tl_dim( il_ind : td_mpp%i_ndim-1 ) = & 2312 & dim_copy(td_mpp%t_dim( il_ind+1 : td_mpp%i_ndim )) 2313 2314 ! remove dimension from file 2315 CALL dim_clean(td_mpp%t_dim(:)) 2316 ! copy dimension in file, except one 2317 td_mpp%t_dim(1:td_mpp%i_ndim)=dim_copy(tl_dim(:)) 2318 2319 ! update number of dimension 2320 td_mpp%i_ndim=td_mpp%i_ndim-1 2321 2322 ! update dimension id 2323 DO ji=1,td_mpp%i_ndim 2324 td_mpp%t_dim(ji)%i_id=ji 2325 ENDDO 2326 2327 ! clean 2328 CALL dim_clean(tl_dim(:)) 2329 DEALLOCATE(tl_dim) 2330 2331 ENDIF 2332 2300 CALL logger_error( & 2301 & " MPP DEL DIM: too much dimension in mpp "//& 2302 & TRIM(td_mpp%c_name)//" ("//TRIM(fct_str(td_mpp%i_ndim))//")") 2333 2303 ENDIF 2334 2304 … … 2488 2458 & ", in mpp structure "//TRIM(td_mpp%c_name) ) 2489 2459 2490 IF( ASSOCIATED(td_mpp%t_proc(1)%t_ var) )THEN2460 IF( ASSOCIATED(td_mpp%t_proc(1)%t_att) )THEN 2491 2461 DO ji=1,td_mpp%t_proc(1)%i_natt 2492 2462 CALL logger_debug( "MPP DEL ATT: in mpp structure : & 2493 & attribute : "//TRIM(td_mpp%t_proc(1)%t_ var(ji)%c_name) )2463 & attribute : "//TRIM(td_mpp%t_proc(1)%t_att(ji)%c_name) ) 2494 2464 ENDDO 2495 2465 ENDIF … … 2516 2486 !> @author J.Paul 2517 2487 !> @date November, 2013 - Initial version 2488 !> @date February, 2015 - define local attribute structure to avoid mistake 2489 !> with pointer 2518 2490 ! 2519 2491 !> @param[inout] td_mpp mpp strcuture … … 2527 2499 2528 2500 ! local variable 2529 INTEGER(i4) :: il_attid 2501 INTEGER(i4) :: il_attid 2502 TYPE(TATT) :: tl_att 2530 2503 !---------------------------------------------------------------- 2531 2504 ! check if mpp exist … … 2551 2524 IF( il_attid == 0 )THEN 2552 2525 2553 CALL logger_ warn( &2526 CALL logger_debug( & 2554 2527 & "MPP DEL ATT : there is no attribute with "//& 2555 2528 & "name "//TRIM(cd_name)//" in mpp structure "//& … … 2558 2531 ELSE 2559 2532 2560 CALL mpp_del_att(td_mpp, td_mpp%t_proc(1)%t_att(il_attid)) 2533 tl_att=att_copy(td_mpp%t_proc(1)%t_att(il_attid)) 2534 CALL mpp_del_att(td_mpp, tl_att) 2561 2535 2562 2536 ENDIF … … 2863 2837 2864 2838 CALL logger_info("MPP OPTIMIZ: number of processor "//& 2865 & TRIM(fct_str(tl_mpp%i_nproc)) ) 2839 & TRIM(fct_str(ji))//"x"//TRIM(fct_str(jj))//"="//& 2840 & TRIM(fct_str(tl_mpp%i_nproc)) ) 2866 2841 IF( tl_mpp%i_nproc > td_mpp%i_nproc .AND. & 2867 2842 & tl_mpp%i_nproc <= il_maxproc )THEN 2868 2843 ! save optimiz decomposition 2844 2845 CALL logger_info("MPP OPTIMIZ:save this decomposition "//& 2846 & TRIM(fct_str(ji))//"x"//TRIM(fct_str(jj))//"="//& 2847 & TRIM(fct_str(tl_mpp%i_nproc)) ) 2869 2848 2870 2849 ! clean mpp … … 3417 3396 3418 3397 ! local variable 3419 INTEGER(i4) :: il_ndim3420 3398 3421 3399 ! loop indices … … 3429 3407 mpp__check_var_dim=.FALSE. 3430 3408 3431 CALL logger_error( &3432 & "MPP CHECK DIM: variable and mpp dimension differ"//&3433 & " for variable "//TRIM(td_var%c_name)//&3434 & " and mpp "//TRIM(td_mpp%c_name))3435 3436 3409 CALL logger_debug( & 3437 3410 & " mpp dimension: "//TRIM(fct_str(td_mpp%i_ndim))//& 3438 3411 & " variable dimension: "//TRIM(fct_str(td_var%i_ndim)) ) 3439 il_ndim=MIN(td_var%i_ndim, td_mpp%i_ndim ) 3440 DO ji = 1, il_ndim 3412 DO ji = 1, ip_maxdim 3441 3413 CALL logger_debug( & 3442 3414 & "MPP CHECK DIM: for dimension "//& … … 3448 3420 & ", variable used "//TRIM(fct_str(td_var%t_dim(ji)%l_use))) 3449 3421 ENDDO 3422 3423 CALL logger_error( & 3424 & "MPP CHECK DIM: variable and mpp dimension differ"//& 3425 & " for variable "//TRIM(td_var%c_name)//& 3426 & " and mpp "//TRIM(td_mpp%c_name)) 3427 3450 3428 ENDIF 3451 3429
Note: See TracChangeset
for help on using the changeset viewer.