Changeset 12080 for utils/tools/SIREN/src/iom_dom.f90
- Timestamp:
- 2019-12-06T10:30:14+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
utils/tools/SIREN/src/iom_dom.f90
r9598 r12080 2 2 ! NEMO system team, System and Interface for oceanic RElocable Nesting 3 3 !---------------------------------------------------------------------- 4 !5 ! MODULE: iom_dom6 4 ! 7 5 ! DESCRIPTION: … … 24 22 !> @author 25 23 !> J.Paul 26 ! REVISION HISTORY:24 !> 27 25 !> @date October, 2014 - Initial Version 28 26 !> 29 !> @note Software governed by the CeCILL licence ( ./LICENSE)27 !> @note Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 30 28 !---------------------------------------------------------------------- 31 29 MODULE iom_dom 30 32 31 USE netcdf ! nf90 library 33 32 USE global ! global parameter … … 42 41 USe dom ! domain manager 43 42 USE iom_mpp ! I/O mpp manager 43 44 44 IMPLICIT NONE 45 45 ! NOTE_avoid_public_variables_if_possible … … 66 66 67 67 CONTAINS 68 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 69 SUBROUTINE iom_dom_open(td_mpp, td_dom, id_perio, id_ew) 68 70 !------------------------------------------------------------------- 69 71 !> @brief This subroutine open files composing mpp structure … … 75 77 !> @param[inout] td_mpp mpp structure 76 78 !------------------------------------------------------------------- 77 SUBROUTINE iom_dom_open(td_mpp, td_dom, id_perio, id_ew) 79 78 80 IMPLICIT NONE 81 79 82 ! Argument 80 83 TYPE(TMPP) , INTENT(INOUT) :: td_mpp … … 102 105 103 106 END SUBROUTINE iom_dom_open 107 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 108 SUBROUTINE iom_dom_close(td_mpp) 104 109 !------------------------------------------------------------------- 105 110 !> @brief This subroutine close files composing mpp structure. … … 110 115 !> @param[in] td_mpp mpp structure 111 116 !------------------------------------------------------------------- 112 SUBROUTINE iom_dom_close(td_mpp) 117 113 118 IMPLICIT NONE 119 114 120 ! Argument 115 121 TYPE(TMPP), INTENT(INOUT) :: td_mpp … … 121 127 122 128 END SUBROUTINE iom_dom_close 129 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 130 FUNCTION iom_dom__read_var_id(td_mpp, id_varid, td_dom) & 131 & RESULT (tf_var) 123 132 !------------------------------------------------------------------- 124 133 !> @brief This function read variable value in opened mpp files, … … 137 146 !> @return variable structure 138 147 !------------------------------------------------------------------- 139 TYPE(TVAR) FUNCTION iom_dom__read_var_id(td_mpp, id_varid, td_dom ) 148 140 149 IMPLICIT NONE 150 141 151 ! Argument 142 152 TYPE(TMPP) , INTENT(IN) :: td_mpp 143 153 INTEGER(i4), INTENT(IN) :: id_varid 144 154 TYPE(TDOM) , INTENT(IN) :: td_dom 155 156 ! function 157 TYPE(TVAR) :: tf_var 145 158 146 159 ! local variable … … 150 163 IF( .NOT. ASSOCIATED(td_mpp%t_proc) )THEN 151 164 152 CALL logger_error( 153 &"not define in mpp strcuture "//TRIM(td_mpp%c_name))165 CALL logger_error(" IOM DOM READ VAR: domain decomposition "//& 166 & "not define in mpp strcuture "//TRIM(td_mpp%c_name)) 154 167 155 168 ELSE … … 161 174 IF( il_ind(1) /= 0 )THEN 162 175 163 iom_dom__read_var_id=var_copy(td_mpp%t_proc(1)%t_var(il_ind(1)))176 tf_var=var_copy(td_mpp%t_proc(1)%t_var(il_ind(1))) 164 177 165 178 !!! read variable value 166 CALL iom_dom__read_var_value(td_mpp, iom_dom__read_var_id, & 167 & td_dom) 179 CALL iom_dom__read_var_value(td_mpp, tf_var, td_dom) 168 180 169 181 ELSE 170 182 CALL logger_error( & 171 & " IOM DOM READ VAR: there is no variable with id "//&172 & TRIM(fct_str(id_varid))//" in processor/file "//&173 & TRIM(td_mpp%t_proc(1)%c_name))183 & " IOM DOM READ VAR: there is no variable with id "//& 184 & TRIM(fct_str(id_varid))//" in processor/file "//& 185 & TRIM(td_mpp%t_proc(1)%c_name)) 174 186 ENDIF 175 187 ELSE 176 188 CALL logger_error(" IOM DOM READ VAR: can't read variable, mpp "//& 177 &TRIM(td_mpp%c_name)//" not opened")189 & TRIM(td_mpp%c_name)//" not opened") 178 190 ENDIF 179 191 … … 181 193 182 194 END FUNCTION iom_dom__read_var_id 195 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 196 FUNCTION iom_dom__read_var_name(td_mpp, cd_name, td_dom) & 197 & RESULT (tf_var) 183 198 !------------------------------------------------------------------- 184 199 !> @brief This function read variable value in opened mpp files, … … 192 207 !> exist in file, look for variable standard name.<br/> 193 208 !> If variable name is not present, check variable standard name.<br/> 194 ! 195 !> @author J.Paul 196 !> @date October, 2014 - Initial Version 197 ! 209 !> 210 !> @author J.Paul 211 !> @date October, 2014 - Initial Version 212 !> @date May, 2019 213 !> - copy variable struct without array of value, then read array of value. 214 !> 198 215 !> @param[in] td_mpp mpp structure 199 216 !> @param[in] cd_name variable name … … 201 218 !> @return variable structure 202 219 !------------------------------------------------------------------- 203 TYPE(TVAR) FUNCTION iom_dom__read_var_name(td_mpp, cd_name, td_dom ) 220 204 221 IMPLICIT NONE 222 205 223 ! Argument 206 224 TYPE(TMPP), INTENT(IN) :: td_mpp … … 208 226 TYPE(TDOM) , INTENT(IN) :: td_dom 209 227 228 ! function 229 TYPE(TVAR) :: tf_var 230 210 231 ! local variable 211 232 INTEGER(i4) :: il_ind … … 216 237 217 238 CALL logger_error( " IOM DOM READ VAR: domain decomposition not define "//& 218 & " in mpp strcuture "//TRIM(td_mpp%c_name))239 & " in mpp strcuture "//TRIM(td_mpp%c_name)) 219 240 220 241 ELSE 221 242 222 il_ind=var_get_index( td_mpp%t_proc(1)%t_var(:), cd_name) 223 IF( il_ind /= 0 )THEN 224 225 iom_dom__read_var_name=var_copy(td_mpp%t_proc(1)%t_var(il_ind)) 226 227 !!! read variable value 228 CALL iom_dom__read_var_value( td_mpp, & 229 & iom_dom__read_var_name, & 230 & td_dom ) 231 232 ELSE 233 234 CALL logger_error( & 243 il_ind=var_get_index( td_mpp%t_proc(1)%t_var(:), cd_name) 244 IF( il_ind /= 0 )THEN 245 246 tf_var=var_copy(td_mpp%t_proc(1)%t_var(il_ind), ld_value=.FALSE.) 247 248 !!! read variable value 249 CALL iom_dom__read_var_value( td_mpp, tf_var, td_dom ) 250 251 ELSE 252 253 CALL logger_error( & 235 254 & " IOM DOM READ VAR: there is no variable with "//& 236 255 & "name or standard name "//TRIM(cd_name)//& 237 256 & " in processor/file "//TRIM(td_mpp%t_proc(1)%c_name)) 238 257 ENDIF 239 258 240 259 ENDIF 241 260 242 261 END FUNCTION iom_dom__read_var_name 262 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 263 SUBROUTINE iom_dom__read_var_value(td_mpp, td_var, td_dom) 243 264 !------------------------------------------------------------------- 244 265 !> @brief This subroutine read variable value … … 255 276 !> @param[in] td_dom domain structure 256 277 !------------------------------------------------------------------- 257 SUBROUTINE iom_dom__read_var_value(td_mpp, td_var, td_dom ) 278 258 279 IMPLICIT NONE 280 259 281 ! Argument 260 282 TYPE(TMPP), INTENT(IN) :: td_mpp … … 263 285 264 286 ! local variable 265 INTEGER(i4) 266 267 TYPE(TATT) 268 TYPE(TMPP) 269 TYPE(TDOM) 287 INTEGER(i4) :: il_status 288 289 TYPE(TATT) :: tl_att 290 TYPE(TMPP) :: tl_mpp 291 TYPE(TDOM) :: tl_dom 270 292 271 293 ! loop indices 272 INTEGER(i4) 294 INTEGER(i4) :: jk 273 295 !---------------------------------------------------------------- 274 296 … … 403 425 404 426 END SUBROUTINE iom_dom__read_var_value 427 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 428 SUBROUTINE iom_dom__no_pole_no_overlap(td_mpp, td_var, td_dom) 405 429 !------------------------------------------------------------------- 406 430 !> @brief This subroutine read variable value … … 412 436 !> @author J.Paul 413 437 !> @date October, 2014 - Initial Version 414 ! 438 !> 415 439 !> @param[in] td_mpp mpp structure 416 440 !> @param[inout] td_var variable structure 417 441 !> @param[in] td_dom domain structure 418 442 !------------------------------------------------------------------- 419 SUBROUTINE iom_dom__no_pole_no_overlap(td_mpp, td_var, td_dom ) 443 420 444 IMPLICIT NONE 445 421 446 ! Argument 422 447 TYPE(TMPP), INTENT(IN) :: td_mpp … … 457 482 458 483 END SUBROUTINE iom_dom__no_pole_no_overlap 484 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 485 SUBROUTINE iom_dom__no_pole_cyclic(td_mpp, td_var, td_dom) 459 486 !------------------------------------------------------------------- 460 487 !> @brief This subroutine read cyclic variable value … … 471 498 !> @param[in] td_dom domain structure 472 499 !------------------------------------------------------------------- 473 SUBROUTINE iom_dom__no_pole_cyclic(td_mpp, td_var, td_dom ) 500 474 501 IMPLICIT NONE 502 475 503 ! Argument 476 504 TYPE(TMPP), INTENT(IN ) :: td_mpp … … 516 544 517 545 END SUBROUTINE iom_dom__no_pole_cyclic 546 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 547 SUBROUTINE iom_dom__no_pole_overlap(td_mpp, td_var, td_dom) 518 548 !------------------------------------------------------------------- 519 549 !> @brief This subroutine read East West overlap variable value … … 530 560 !> @param[in] td_dom domain structure 531 561 !------------------------------------------------------------------- 532 SUBROUTINE iom_dom__no_pole_overlap(td_mpp, td_var, td_dom ) 562 533 563 IMPLICIT NONE 564 534 565 ! Argument 535 566 TYPE(TMPP), INTENT(IN) :: td_mpp … … 628 659 629 660 END SUBROUTINE iom_dom__no_pole_overlap 661 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 662 ! SUBROUTINE iom_dom__pole_no_overlap(td_mpp, td_var, td_dom) 630 663 !------------------------------------------------------------------- 631 664 !> @brief This subroutine read north fold variable value … … 637 670 !> @author J.Paul 638 671 !> @date October, 2014 - Initial Version 639 ! 672 !> 640 673 !> @param[in] td_mpp mpp structure 641 674 !> @param[inout] td_var variable structure 642 675 !> @param[in] td_dom domain structure 643 676 !------------------------------------------------------------------- 644 ! SUBROUTINE iom_dom__pole_no_overlap(td_mpp, td_var, td_dom )677 ! 645 678 ! IMPLICIT NONE 679 ! 646 680 ! ! Argument 647 681 ! TYPE(TMPP), INTENT(IN) :: td_mpp … … 655 689 ! 656 690 ! END SUBROUTINE iom_dom__pole_no_overlap 691 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 692 ! SUBROUTINE iom_dom__pole_cyclic(td_mpp, td_var, td_dom) 657 693 !------------------------------------------------------------------- 658 694 !> @brief This subroutine read semi global variable value … … 664 700 !> @author J.Paul 665 701 !> @date October, 2014 - Initial Version 666 ! 702 !> 667 703 !> @param[in] td_mpp mpp structure 668 704 !> @param[inout] td_var variable structure … … 670 706 !> @return variable structure completed 671 707 !------------------------------------------------------------------- 672 ! SUBROUTINE iom_dom__pole_cyclic(td_mpp, td_var, td_dom )708 ! 673 709 ! IMPLICIT NONE 710 ! 674 711 ! ! Argument 675 712 ! TYPE(TMPP), INTENT(IN) :: td_mpp … … 683 720 ! 684 721 ! END SUBROUTINE iom_dom__pole_cyclic 722 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 723 ! SUBROUTINE iom_dom__pole_overlap(td_mpp, td_var, td_dom) 685 724 !------------------------------------------------------------------- 686 725 !> @brief This subroutine read north fold East West overlap variable value … … 692 731 !> @author J.Paul 693 732 !> @date October, 2014 - Initial Version 694 ! 733 !> 695 734 !> @param[in] td_mpp mpp structure 696 735 !> @param[inout] td_var variable structure … … 698 737 !> @return variable structure completed 699 738 !------------------------------------------------------------------- 700 ! SUBROUTINE iom_dom__pole_overlap(td_mpp, td_var, td_dom )739 ! 701 740 ! IMPLICIT NONE 741 ! 702 742 ! ! Argument 703 743 ! TYPE(TMPP), INTENT(IN) :: td_mpp … … 711 751 ! 712 752 ! END SUBROUTINE iom_dom__pole_overlap 713 753 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 714 754 END MODULE iom_dom
Note: See TracChangeset
for help on using the changeset viewer.