- Timestamp:
- 2016-10-28T11:13:57+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_r6999_CONFIGMAN_1/NEMOGCM/TOOLS/SIREN/src/create_meshmask.f90
r7025 r7153 9 9 !> @brief 10 10 !> This program creates the NetCDF file(s) which contain(s) all the 11 !> ocean domain informations (mesh and mask arrays). 11 !> ocean domain informations. 12 !> It allows to create the domain_cfg.nc file needed to run NEMO, or 13 !> the mesh_mask file(s). 12 14 !> 13 15 !> @details … … 26 28 !> 27 29 !> @section sec2 how to 28 !> to create meshmask file:<br/>30 !> to create domain_cfg or meshmask file:<br/> 29 31 !> @code{.sh} 30 32 !> ./SIREN/bin/create_meshmask create_meshmask.nam … … 34 36 !> you could find a template of the namelist in templates directory. 35 37 !> 36 !> create_meshmask.nam contains 1 5namelists:<br/>38 !> create_meshmask.nam contains 13 namelists:<br/> 37 39 !> - logger namelist (namlog) 38 40 !> - config namelist (namcfg) … … 44 46 !> - partial step namelist (namzps) 45 47 !> - sigma or hybrid namelist (namsco) 46 ! >- cross land advection namelist (namcla)48 ! - cross land advection namelist (namcla) 47 49 !> - lateral boundary condition namelist (namlbc) 48 50 !> - wetting and dryong namelist (namwd) 49 51 !> - grid namelist (namgrd) 50 ! >- zoom namelist (namzoom)52 ! - zoom namelist (namzoom) 51 53 !> - output namelist (namout) 52 54 !> … … 138 140 !> - dn_zb_b : Offset for Zb 139 141 !> 140 ! >* _cross land advection namelist (namcla)_:<br/>141 ! >- in_cla : =1 cross land advection for exchanges through some straits (only for ORCA2)142 ! >142 ! * _cross land advection namelist (namcla)_:<br/> 143 ! - in_cla : =1 cross land advection for exchanges through some straits (only for ORCA2) 144 ! 143 145 !> * _lateral boundary condition namelist (namlbc)_:<br/> 144 146 !> - rn_shlat : lateral boundary conditions at the coast (modify fmask) … … 156 158 !> 157 159 !> * _grid namelist (namgrd)_:<br/> 158 ! >- cn_cfg : name of the configuration159 !> - in_cfg : resolution of the configuration160 !> - in_bench : benchmark parameter (in_mshhgr = 5 ).<br/>161 !> if /= 0 :forced the resolution to be about 100 km162 ! >- ln_zoom : use zoom (namzoom)160 ! - cn_cfg : name of the configuration 161 !> - in_cfg : inverse resolution of the configuration (1/4° => 4) 162 !> - ln_bench : GYRE (in_mshhgr = 5 ) used as Benchmark.<br/> 163 !> => forced the resolution to be about 100 km 164 ! - ln_zoom : use zoom (namzoom) 163 165 !> - ln_c1d : use configuration 1D 164 ! >165 ! >* _zoom namelist (namzoom)_:<br/>166 ! >- cn_cfz : name of the zoom of configuration167 ! >- in_izoom : left bottom i-indices of the zoom in data domain indices168 ! >- in_jzoom : left bottom j-indices of the zoom in data domain indices169 ! >- ln_zoom_s : South zoom type flag170 ! >- ln_zoom_e : East zoom type flag171 ! >- ln_zoom_w : West zoom type flag172 ! >- ln_zoom_n : North zoom type flag173 ! >166 ! 167 ! * _zoom namelist (namzoom)_:<br/> 168 ! - cn_cfz : name of the zoom of configuration 169 ! - in_izoom : left bottom i-indices of the zoom in data domain indices 170 ! - in_jzoom : left bottom j-indices of the zoom in data domain indices 171 ! - ln_zoom_s : South zoom type flag 172 ! - ln_zoom_e : East zoom type flag 173 ! - ln_zoom_w : West zoom type flag 174 ! - ln_zoom_n : North zoom type flag 175 ! 174 176 !> * _output namelist (namout)_:<br/> 175 !> - in_msh : number of output file and contain ( 1-9)177 !> - in_msh : number of output file and contain (0-9) 176 178 !> - in_nproc : number of processor to be used 177 179 !> - in_niproc : i-direction number of processor … … 179 181 !> 180 182 !> @note 181 !> MOD(in_msh, 3) = 1 : '<b>mesh_mask.nc</b>' file 182 !> = 2 : '<b>mesh.nc</b>' and '<b>mask.nc</b>' files 183 !> = 0 : '<b>mesh_hgr.nc</b>', '<b>mesh_zgr.nc</b>' and '<b>mask.nc</b>' files 183 !> if in_msh == 0 : write '<b>domain_cfg.nc</b>' file 184 !> MOD(in_msh, 3) = 1 : '<b>mesh_mask.nc</b>' file 185 !> = 2 : '<b>mesh.nc</b>' and '<b>mask.nc</b>' files 186 !> = 0 : '<b>mesh_hgr.nc</b>', '<b>mesh_zgr.nc</b>' and '<b>mask.nc</b>' files 184 187 !> 185 188 !> For huge size domain, use option 2 or 3 depending on your vertical coordinate. … … 197 200 !> @date October, 2016 198 201 !> - update from trunk (revision 6961): add wetting and drying, ice sheet coupling.. 202 !> @date October, 2016 203 !> - dimension to be used select from configuration file 204 !> - do not use anymore special case for ORCA grid 205 !> - allow to write domain_cfg file 199 206 !> 200 207 !> @note Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 224 231 CHARACTER(LEN=lc) :: cl_date 225 232 233 INTEGER(i1), DIMENSION(:) , ALLOCATABLE :: bl_tmp 234 226 235 INTEGER(i4) :: il_narg 227 236 INTEGER(i4) :: il_status … … 232 241 INTEGER(i4) :: jpj 233 242 INTEGER(i4) :: jpk 243 INTEGER(i4), DIMENSION(:) , ALLOCATABLE :: il_tmp 234 244 INTEGER(i4), DIMENSION(:,:) , ALLOCATABLE :: il_mask 235 245 236 246 LOGICAL :: ll_exist 247 LOGICAL :: ll_domcfg 237 248 238 249 REAL(dp) , DIMENSION(:,:) , ALLOCATABLE :: dl_tmp2D … … 241 252 TYPE(TATT) :: tl_att 242 253 TYPE(TATT) , DIMENSION(:) , ALLOCATABLE :: tl_gatt 254 255 TYPE(TDIM) :: tl_dim 243 256 244 257 TYPE(TVAR) :: tl_bathy … … 249 262 TYPE(TVAR) :: tl_hdept 250 263 TYPE(TVAR) :: tl_hdepw 264 TYPE(TVAR) :: tl_scalar 251 265 252 266 TYPE(TNAMH) :: tl_namh … … 278 292 279 293 ! namcfg 280 CHARACTER(LEN=lc) :: cn_varcfg = 'variable.cfg' 281 CHARACTER(LEN=lc) :: cn_dumcfg = 'dummy.cfg' 294 CHARACTER(LEN=lc) :: cn_varcfg = './cfg/variable.cfg' 295 CHARACTER(LEN=lc) :: cn_dimcfg = './cfg/dimension.cfg' 296 CHARACTER(LEN=lc) :: cn_dumcfg = './cfg/dummy.cfg' 282 297 283 298 ! namin … … 301 316 302 317 ! namout 303 INTEGER(i4) :: in_msh = 1318 INTEGER(i4) :: in_msh = 0 304 319 CHARACTER(LEN=lc) :: cn_type = 'cdf' 305 320 INTEGER(i4) :: in_nproc = 0 … … 314 329 NAMELIST /namcfg/ & !< configuration namelist 315 330 & cn_varcfg, & !< variable configuration file 331 & cn_dimcfg, & !< dimension configuration file 316 332 & cn_dumcfg !< dummy configuration file 317 333 … … 379 395 CALL var_def_extra(TRIM(cn_varcfg)) 380 396 397 ! get dimension allowed 398 CALL dim_def_extra(TRIM(cn_dimcfg)) 399 381 400 ! get dummy variable 382 401 CALL var_get_dummy(TRIM(cn_dumcfg)) … … 405 424 406 425 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 426 ll_domcfg=.FALSE. 427 IF( in_msh == 0 )THEN 428 ll_domcfg=.TRUE. 429 ENDIF 407 430 408 431 ! open file … … 443 466 & tl_bathy%d_value(:,:,1,1) < 0._dp ) 444 467 tl_bathy%d_value(:,:,1,1) = 0._dp 445 END WHERE468 END WHERE 446 469 447 470 IF ( ln_isfcav ) THEN … … 495 518 496 519 ! init Horizontal grid global variable 497 CALL grid_hgr_init(jpi,jpj,jpk )520 CALL grid_hgr_init(jpi,jpj,jpk,ll_domcfg) 498 521 499 522 ! compute horizontal mesh 500 523 WRITE(*,*) "COMPUTE HORIZONTAL MESH" 501 CALL grid_hgr_fill(tl_namh,jpi,jpj )524 CALL grid_hgr_fill(tl_namh,jpi,jpj,ll_domcfg) 502 525 503 526 ! Vertyical mesh (dom_zgr) ------------------------------------------------- … … 505 528 506 529 ! init Vertical grid global variable 507 CALL grid_zgr_init(jpi,jpj,jpk )530 CALL grid_zgr_init(jpi,jpj,jpk,ln_sco) 508 531 IF( ln_zps ) CALL grid_zgr_zps_init(jpi,jpj) 509 532 IF( ln_sco ) CALL grid_zgr_sco_init(jpi,jpj) … … 515 538 ! compute masks 516 539 WRITE(*,*) "COMPUTE MASK" 517 CALL create__mask(tl_namh,jpi,jpj,jpk )540 CALL create__mask(tl_namh,jpi,jpj,jpk,ll_domcfg) 518 541 519 542 ! Maximum stiffness ratio/hydrostatic consistency … … 534 557 535 558 WRITE(*,*) "WRITE FILE(S)" 536 SELECT CASE ( MOD(in_msh, 3) ) 537 ! ! ============================ 538 CASE ( 1 ) ! create 'mesh_mask.nc' file 539 ! ! ============================ 540 tl_mppout0=mpp_init( 'mesh_mask', tg_tmask, & 541 & in_niproc, in_njproc, in_nproc, & 542 & cd_type=cn_type ) 543 544 tl_mppmsk=>tl_mppout0 545 tl_mpphgr=>tl_mppout0 546 tl_mppzgr=>tl_mppout0 559 IF( ll_domcfg )THEN 560 ! ! ============================ 561 ! ! create 'domain_cfg.nc' file 562 ! ! ============================ 563 tl_mppout0=mpp_init( 'domain_cfg', tg_tmask, & 564 & in_niproc, in_njproc, in_nproc, & 565 & cd_type=cn_type ) 566 567 tl_mppmsk=>tl_mppout0 568 tl_mpphgr=>tl_mppout0 569 tl_mppzgr=>tl_mppout0 570 571 ELSE 572 SELECT CASE ( MOD(in_msh, 3) ) 573 ! ! ============================ 574 CASE ( 1 ) ! create 'mesh_mask.nc' file 575 ! ! ============================ 576 tl_mppout0=mpp_init( 'mesh_mask', tg_tmask, & 577 & in_niproc, in_njproc, in_nproc, & 578 & cd_type=cn_type ) 579 580 tl_mppmsk=>tl_mppout0 581 tl_mpphgr=>tl_mppout0 582 tl_mppzgr=>tl_mppout0 583 584 ! ! ============================ 585 CASE ( 2 ) ! create 'mesh.nc' and 586 ! ! 'mask.nc' files 587 ! ! ============================ 588 tl_mppout0=mpp_init( 'mask', tg_tmask, & 589 & in_niproc, in_njproc, in_nproc, & 590 & cd_type=cn_type ) 591 tl_mppout1=mpp_init( 'mesh', tg_tmask, & 592 & in_niproc, in_njproc, in_nproc, & 593 & cd_type=cn_type ) 594 595 tl_mppmsk=>tl_mppout0 596 tl_mpphgr=>tl_mppout1 597 tl_mppzgr=>tl_mppout1 598 599 ! ! ============================ 600 CASE ( 0 ) ! create 'mesh_hgr.nc' 601 ! ! 'mesh_zgr.nc' and 602 ! ! 'mask.nc' files 603 ! ! ============================ 604 tl_mppout0=mpp_init( 'mask', tg_tmask, & 605 & in_niproc, in_njproc, in_nproc, & 606 & cd_type=cn_type ) 607 tl_mppout1=mpp_init( 'mesh_hgr', tg_tmask, & 608 & in_niproc, in_njproc, in_nproc, & 609 & cd_type=cn_type ) 610 tl_mppout2=mpp_init( 'mesh_zgr', tg_tmask, & 611 & in_niproc, in_njproc, in_nproc, & 612 & cd_type=cn_type ) 613 ! 614 615 tl_mppmsk=>tl_mppout0 616 tl_mpphgr=>tl_mppout1 617 tl_mppzgr=>tl_mppout2 618 619 END SELECT 620 ENDIF 621 622 ! add variables 623 IF( ll_domcfg )THEN 624 ALLOCATE(il_tmp(1)) 625 tl_dim%l_use=.FALSE. 626 627 il_tmp(:)=jpi 628 tl_scalar=var_init('jpiglo', il_tmp(:), id_type=NF90_INT, td_dim=tl_dim) 629 CALL mpp_add_var(tl_mppmsk, tl_scalar) 630 631 il_tmp(:)=jpj 632 tl_scalar=var_init('jpjglo', il_tmp(:), id_type=NF90_INT, td_dim=tl_dim) 633 CALL mpp_add_var(tl_mppmsk, tl_scalar) 634 635 il_tmp(:)=jpk 636 tl_scalar=var_init('jpkglo', il_tmp(:), id_type=NF90_INT, td_dim=tl_dim) 637 CALL mpp_add_var(tl_mppmsk, tl_scalar) 547 638 548 ! ! ============================ 549 CASE ( 2 ) ! create 'mesh.nc' and 550 ! ! 'mask.nc' files 551 ! ! ============================ 552 tl_mppout0=mpp_init( 'mask', tg_tmask, & 553 & in_niproc, in_njproc, in_nproc, & 554 & cd_type=cn_type ) 555 tl_mppout1=mpp_init( 'mesh', tg_tmask, & 556 & in_niproc, in_njproc, in_nproc, & 557 & cd_type=cn_type ) 558 559 tl_mppmsk=>tl_mppout0 560 tl_mpphgr=>tl_mppout1 561 tl_mppzgr=>tl_mppout1 562 563 ! ! ============================ 564 CASE ( 0 ) ! create 'mesh_hgr.nc' 565 ! ! 'mesh_zgr.nc' and 566 ! ! 'mask.nc' files 567 ! ! ============================ 568 tl_mppout0=mpp_init( 'mask', tg_tmask, & 569 & in_niproc, in_njproc, in_nproc, & 570 & cd_type=cn_type ) 571 tl_mppout1=mpp_init( 'mesh_hgr', tg_tmask, & 572 & in_niproc, in_njproc, in_nproc, & 573 & cd_type=cn_type ) 574 tl_mppout2=mpp_init( 'mesh_zgr', tg_tmask, & 575 & in_niproc, in_njproc, in_nproc, & 576 & cd_type=cn_type ) 577 ! 578 579 tl_mppmsk=>tl_mppout0 580 tl_mpphgr=>tl_mppout1 581 tl_mppzgr=>tl_mppout2 582 583 END SELECT 584 585 ! add variables 639 il_tmp(:)=tl_mppout0%i_perio 640 tl_scalar=var_init('jperio', il_tmp(:), id_type=NF90_INT, td_dim=tl_dim) 641 CALL mpp_add_var(tl_mppmsk, tl_scalar) 642 643 DEALLOCATE(il_tmp) 644 ALLOCATE(bl_tmp(1)) 645 646 bl_tmp(:)=0 647 IF( ln_zco ) bl_tmp(:)=1 648 tl_scalar=var_init('ln_zco',bl_tmp(:), id_type=NF90_BYTE, td_dim=tl_dim) 649 CALL mpp_add_var(tl_mppmsk, tl_scalar) 650 651 bl_tmp(:)=0 652 IF( ln_zps ) bl_tmp(:)=1 653 tl_scalar=var_init('ln_zps',bl_tmp(:), id_type=NF90_BYTE, td_dim=tl_dim) 654 CALL mpp_add_var(tl_mppmsk, tl_scalar) 655 656 bl_tmp(:)=0 657 IF( ln_sco ) bl_tmp(:)=1 658 tl_scalar=var_init('ln_sco',bl_tmp(:), id_type=NF90_BYTE, td_dim=tl_dim) 659 CALL mpp_add_var(tl_mppmsk, tl_scalar) 660 661 bl_tmp(:)=0 662 IF( ln_isfcav ) bl_tmp(:)=1 663 tl_scalar=var_init('ln_isfcav',bl_tmp(:), id_type=NF90_BYTE, td_dim=tl_dim) 664 CALL mpp_add_var(tl_mppmsk, tl_scalar) 665 666 DEALLOCATE(bl_tmp) 667 CALL var_clean(tl_scalar) 668 ENDIF 669 586 670 !!! mask (msk) 587 671 !!!---------------------- 588 589 ! tmask 590 CALL mpp_add_var(tl_mppmsk, tg_tmask) 591 CALL var_clean(tg_tmask) 592 ! umask 593 CALL mpp_add_var(tl_mppmsk, tg_umask) 594 CALL var_clean(tg_umask) 595 ! vmask 596 CALL mpp_add_var(tl_mppmsk, tg_vmask) 597 CALL var_clean(tg_vmask) 598 ! fmask 599 CALL mpp_add_var(tl_mppmsk, tg_fmask) 600 CALL var_clean(tg_fmask) 601 602 !!! VOIR CAS TMASKUTIL ??? 603 672 IF( .NOT. ll_domcfg )THEN 673 ! tmask 674 CALL mpp_add_var(tl_mppmsk, tg_tmask) 675 CALL var_clean(tg_tmask) 676 ! umask 677 CALL mpp_add_var(tl_mppmsk, tg_umask) 678 CALL var_clean(tg_umask) 679 ! vmask 680 CALL mpp_add_var(tl_mppmsk, tg_vmask) 681 CALL var_clean(tg_vmask) 682 ! fmask 683 CALL mpp_add_var(tl_mppmsk, tg_fmask) 684 CALL var_clean(tg_fmask) 685 ENDIF 686 604 687 !!! horizontal mesh (hgr) 605 688 !!!---------------------- … … 662 745 663 746 ! coriolis factor 664 ! ff 665 CALL mpp_add_var(tl_mpphgr, tg_ff) 666 CALL var_clean(tg_ff) 747 ! ff_t 748 CALL mpp_add_var(tl_mpphgr, tg_ff_t) 749 CALL var_clean(tg_ff_t) 750 ! ff_f 751 CALL mpp_add_var(tl_mpphgr, tg_ff_f) 752 CALL var_clean(tg_ff_f) 667 753 668 754 ! angles 669 ! cost 670 CALL mpp_add_var(tl_mpphgr, tg_gcost) 671 CALL var_clean(tg_gcost) 672 ! cosu 673 CALL mpp_add_var(tl_mpphgr, tg_gcosu) 674 CALL var_clean(tg_gcosu) 675 ! cosv 676 CALL mpp_add_var(tl_mpphgr, tg_gcosv) 677 CALL var_clean(tg_gcosv) 678 ! cosf 679 CALL mpp_add_var(tl_mpphgr, tg_gcosf) 680 CALL var_clean(tg_gcosf) 681 682 ! sint 683 CALL mpp_add_var(tl_mpphgr, tg_gsint) 684 CALL var_clean(tg_gsint) 685 ! sinu 686 CALL mpp_add_var(tl_mpphgr, tg_gsinu) 687 CALL var_clean(tg_gsinu) 688 ! sinv 689 CALL mpp_add_var(tl_mpphgr, tg_gsinv) 690 CALL var_clean(tg_gsinv) 691 ! sinf 692 CALL mpp_add_var(tl_mpphgr, tg_gsinf) 693 CALL var_clean(tg_gsinf) 755 IF( .NOT. ll_domcfg )THEN 756 ! cost 757 CALL mpp_add_var(tl_mpphgr, tg_gcost) 758 CALL var_clean(tg_gcost) 759 ! cosu 760 CALL mpp_add_var(tl_mpphgr, tg_gcosu) 761 CALL var_clean(tg_gcosu) 762 ! cosv 763 CALL mpp_add_var(tl_mpphgr, tg_gcosv) 764 CALL var_clean(tg_gcosv) 765 ! cosf 766 CALL mpp_add_var(tl_mpphgr, tg_gcosf) 767 CALL var_clean(tg_gcosf) 768 769 ! sint 770 CALL mpp_add_var(tl_mpphgr, tg_gsint) 771 CALL var_clean(tg_gsint) 772 ! sinu 773 CALL mpp_add_var(tl_mpphgr, tg_gsinu) 774 CALL var_clean(tg_gsinu) 775 ! sinv 776 CALL mpp_add_var(tl_mpphgr, tg_gsinv) 777 CALL var_clean(tg_gsinv) 778 ! sinf 779 CALL mpp_add_var(tl_mpphgr, tg_gsinf) 780 CALL var_clean(tg_gsinf) 781 ENDIF 694 782 695 783 !!! vertical mesh (zgr) 696 784 !!!---------------------- 697 698 785 ! note that mbkt is set to 1 over land ==> use surface tmask 699 786 ! 700 787 ! mbathy 701 788 tg_mbathy%d_value(:,:,:,:) = tg_ssmask%d_value(:,:,:,:) * & 702 &tg_mbkt%d_value(:,:,:,:)789 & tg_mbkt%d_value(:,:,:,:) 703 790 ! 791 IF( ll_domcfg ) tg_mbathy%c_name='bottom_level' 704 792 CALL mpp_add_var(tl_mppzgr, tg_mbathy) 705 793 CALL var_clean(tg_mbathy) … … 709 797 dl_tmp2D(:,:)=dp_fill 710 798 711 tl_misf =var_init('misf ',dl_tmp2D(:,:), id_type=NF90_INT)799 tl_misf =var_init('misf ',dl_tmp2D(:,:), id_type=NF90_INT) 712 800 713 801 DEALLOCATE(dl_tmp2D) 714 802 tl_misf%d_value(:,:,1,1) = tg_ssmask%d_value(:,:,1,1) * & 715 &tg_mikt%d_value(:,:,1,1)803 & tg_mikt%d_value(:,:,1,1) 716 804 ! 805 IF( ll_domcfg ) tl_misf%c_name='top_level' 717 806 CALL mpp_add_var(tl_mppzgr, tl_misf) 718 807 CALL var_clean(tl_misf) 719 808 720 ! isfdraft 721 tl_risfdep%d_value(:,:,:,:) = tl_risfdep%d_value(:,:,:,:) * & 722 & tg_mikt%d_value(:,:,:,:) 723 CALL mpp_add_var(tl_mppzgr, tl_risfdep) 724 CALL var_clean(tl_risfdep) 809 IF( .NOT. ll_domcfg )THEN 810 ! isfdraft 811 tl_risfdep%d_value(:,:,:,:) = tl_risfdep%d_value(:,:,:,:) * & 812 & tg_mikt%d_value(:,:,:,:) 813 814 CALL mpp_add_var(tl_mppzgr, tl_risfdep) 815 CALL var_clean(tl_risfdep) 816 ENDIF 725 817 726 818 IF( ln_sco ) THEN ! s-coordinate 727 819 728 ! hbatt 729 CALL mpp_add_var(tl_mppzgr, tg_hbatt) 730 CALL var_clean(tg_hbatt) 731 ! hbatu 732 CALL mpp_add_var(tl_mppzgr, tg_hbatu) 733 CALL var_clean(tg_hbatu) 734 ! hbatv 735 CALL mpp_add_var(tl_mppzgr, tg_hbatv) 736 CALL var_clean(tg_hbatv) 737 ! hbatf 738 CALL mpp_add_var(tl_mppzgr, tg_hbatf) 739 CALL var_clean(tg_hbatf) 740 741 ! scaling coef. 742 IF( .NOT. (tl_namz%l_s_sh94 .OR. tl_namz%l_s_sf12) )THEN 743 ! gsigt 744 CALL mpp_add_var(tl_mppzgr, tg_gsigt) 745 CALL var_clean(tg_gsigt) 746 ! gsigw 747 CALL mpp_add_var(tl_mppzgr, tg_gsigw) 748 CALL var_clean(tg_gsigw) 749 ! gsi3w 750 CALL mpp_add_var(tl_mppzgr, tg_gsi3w) 751 CALL var_clean(tg_gsi3w) 752 ! esigt 753 CALL mpp_add_var(tl_mppzgr, tg_esigt) 754 CALL var_clean(tg_esigt) 755 ! esigw 756 CALL mpp_add_var(tl_mppzgr, tg_esigw) 757 CALL var_clean(tg_esigw) 820 IF( .NOT. ll_domcfg )THEN 821 ! hbatt 822 CALL mpp_add_var(tl_mppzgr, tg_hbatt) 823 CALL var_clean(tg_hbatt) 824 ! hbatu 825 CALL mpp_add_var(tl_mppzgr, tg_hbatu) 826 CALL var_clean(tg_hbatu) 827 ! hbatv 828 CALL mpp_add_var(tl_mppzgr, tg_hbatv) 829 CALL var_clean(tg_hbatv) 830 ! hbatf 831 CALL mpp_add_var(tl_mppzgr, tg_hbatf) 832 CALL var_clean(tg_hbatf) 833 834 ! scaling coef. 835 IF( .NOT. (tl_namz%l_s_sh94 .OR. tl_namz%l_s_sf12) )THEN 836 ! gsigt 837 CALL mpp_add_var(tl_mppzgr, tg_gsigt) 838 CALL var_clean(tg_gsigt) 839 ! gsigw 840 CALL mpp_add_var(tl_mppzgr, tg_gsigw) 841 CALL var_clean(tg_gsigw) 842 ! gsi3w 843 CALL mpp_add_var(tl_mppzgr, tg_gsi3w) 844 CALL var_clean(tg_gsi3w) 845 ! esigt 846 CALL mpp_add_var(tl_mppzgr, tg_esigt) 847 CALL var_clean(tg_esigt) 848 ! esigw 849 CALL mpp_add_var(tl_mppzgr, tg_esigw) 850 CALL var_clean(tg_esigw) 851 ENDIF 758 852 ENDIF 759 853 … … 774 868 ! Max. grid stiffness ratio 775 869 ! rx1 870 IF( ll_domcfg ) tg_rx1%c_name='stiffness' 776 871 CALL mpp_add_var(tl_mppzgr, tg_rx1) 777 872 CALL var_clean(tg_rx1) … … 796 891 IF( ln_zps ) THEN ! z-coordinate - partial steps 797 892 798 IF( in_msh <= 6 ) THEN ! 3D vertical scale factors893 IF( ll_domcfg .OR. in_msh <= 6 ) THEN ! 3D vertical scale factors 799 894 800 895 ! e3t_0 … … 831 926 ENDIF ! 3D vertical scale factors 832 927 833 IF( in_msh <= 3 ) THEN ! 3D depth928 IF( ll_domcfg .OR. in_msh <= 3 ) THEN ! 3D depth 834 929 835 930 ! gdept_0 … … 837 932 838 933 ! gdepu, gdepv 839 ALLOCATE(dl_tmp3D(jpi,jpj,jpk)) 840 dl_tmp3D(:,:,:)=dp_fill 841 842 tl_gdepu=var_init('gdepu',dl_tmp3D(:,:,:), id_type=NF90_FLOAT) 843 tl_gdepv=var_init('gdepv',dl_tmp3D(:,:,:), id_type=NF90_FLOAT) 844 845 DEALLOCATE(dl_tmp3D) 846 DO jk = 1,jpk 847 DO jj = 1, jpj-1 848 DO ji = 1, jpi-1 ! vector opt. 849 tl_gdepu%d_value(ji,jj,jk,1) = MIN( tg_gdept_0%d_value(ji ,jj ,jk,1) , & 850 & tg_gdept_0%d_value(ji+1,jj ,jk,1) ) 851 852 tl_gdepv%d_value(ji,jj,jk,1) = MIN( tg_gdept_0%d_value(ji ,jj ,jk,1) , & 853 & tg_gdept_0%d_value(ji ,jj+1,jk,1) ) 934 IF( .NOT. ll_domcfg )THEN 935 ALLOCATE(dl_tmp3D(jpi,jpj,jpk)) 936 dl_tmp3D(:,:,:)=dp_fill 937 938 tl_gdepu=var_init('gdepu',dl_tmp3D(:,:,:), id_type=NF90_FLOAT) 939 tl_gdepv=var_init('gdepv',dl_tmp3D(:,:,:), id_type=NF90_FLOAT) 940 941 DEALLOCATE(dl_tmp3D) 942 DO jk = 1,jpk 943 DO jj = 1, jpj-1 944 DO ji = 1, jpi-1 ! vector opt. 945 tl_gdepu%d_value(ji,jj,jk,1) = MIN( tg_gdept_0%d_value(ji ,jj ,jk,1) , & 946 & tg_gdept_0%d_value(ji+1,jj ,jk,1) ) 947 948 tl_gdepv%d_value(ji,jj,jk,1) = MIN( tg_gdept_0%d_value(ji ,jj ,jk,1) , & 949 & tg_gdept_0%d_value(ji ,jj+1,jk,1) ) 950 END DO 854 951 END DO 855 END DO 856 END DO857 CALL lbc_lnk( tl_gdepu%d_value(:,:,:,1), 'U', in_perio, 1._dp )858 CALL lbc_lnk( tl_gdepv%d_value(:,:,:,1), 'V', in_perio, 1._dp ) 859 860 ! gdepu861 CALL mpp_add_var(tl_mppzgr,tl_gdepu)862 CALL var_clean(tl_gdepu)863 ! gdepv864 CALL mpp_add_var(tl_mppzgr,tl_gdepv)865 CALL var_clean(tl_gdepv)952 END DO 953 CALL lbc_lnk( tl_gdepu%d_value(:,:,:,1), 'U', in_perio, 1._dp ) 954 CALL lbc_lnk( tl_gdepv%d_value(:,:,:,1), 'V', in_perio, 1._dp ) 955 956 ! gdepu 957 CALL mpp_add_var(tl_mppzgr, tl_gdepu) 958 CALL var_clean(tl_gdepu) 959 ! gdepv 960 CALL mpp_add_var(tl_mppzgr, tl_gdepv) 961 CALL var_clean(tl_gdepv) 962 ENDIF 866 963 867 964 ! clean … … 1133 1230 DEALLOCATE(tl_gatt) 1134 1231 1135 CALL grid_hgr_clean( )1136 CALL grid_zgr_clean( )1232 CALL grid_hgr_clean(ll_domcfg) 1233 CALL grid_zgr_clean(ln_sco) 1137 1234 IF( ln_zps ) CALL grid_zgr_zps_clean() 1138 1235 IF( ln_sco ) CALL grid_zgr_sco_clean() 1236 CALL var_clean_extra() 1139 1237 1140 1238 ! close log file … … 1198 1296 !> @author J.Paul 1199 1297 !> @date September, 2015 - rewrite from dom_msk 1298 !> @date October, 2016 1299 !> - do not use anymore special case for ORCA grid 1200 1300 !> 1201 1301 !> @param[in] td_nam … … 1204 1304 !> @param[in] jpk 1205 1305 !------------------------------------------------------------------- 1206 SUBROUTINE create__mask(td_nam,jpi,jpj,jpk )1306 SUBROUTINE create__mask(td_nam,jpi,jpj,jpk,ld_domcfg) 1207 1307 IMPLICIT NONE 1208 1308 ! Argument 1209 TYPE(TNAMH), INTENT(IN ) :: td_nam 1210 INTEGER(i4), INTENT(IN ) :: jpi 1211 INTEGER(i4), INTENT(IN ) :: jpj 1212 INTEGER(i4), INTENT(IN ) :: jpk 1309 TYPE(TNAMH), INTENT(IN) :: td_nam 1310 INTEGER(i4), INTENT(IN) :: jpi 1311 INTEGER(i4), INTENT(IN) :: jpj 1312 INTEGER(i4), INTENT(IN) :: jpk 1313 LOGICAL , INTENT(IN) :: ld_domcfg 1213 1314 1214 1315 ! local variable 1215 INTEGER(i4) :: ii0, ii1 ! local integers1216 INTEGER(i4) :: ij0, ij11217 INTEGER(i4) :: isrow1316 ! INTEGER(i4) :: ii0, ii1 ! local integers 1317 ! INTEGER(i4) :: ij0, ij1 1318 ! INTEGER(i4) :: isrow 1218 1319 1219 1320 ! INTEGER(i4), DIMENSION(:,:), ALLOCATABLE :: imsk … … 1230 1331 1231 1332 ! ALLOCATE( imsk(jpi,jpj) ) 1232 ALLOCATE( zwf(jpi,jpj) )1233 1333 1234 1334 ! ALLOCATE( dl_tpol(jpi) ) … … 1304 1404 ! ENDIF 1305 1405 1406 IF( .NOT. ld_domcfg )THEN 1306 1407 ! 2. Ocean/land mask at u-, v-, and z-points (computed from tmask) 1307 1408 ! ------------------------------------------- … … 1366 1467 ! Lateral boundary conditions on velocity (modify fmask) 1367 1468 ! --------------------------------------- 1469 ALLOCATE( zwf(jpi,jpj) ) 1368 1470 DO jk = 1, jpk 1369 1471 zwf(:,:) = tg_fmask%d_value(:,:,jk,1) … … 1398 1500 END DO 1399 1501 END DO 1400 1401 IF( td_nam%c_cfg == "orca" .AND. td_nam%i_cfg == 2 )THEN ! ORCA_R2 configuration 1402 ! ! Increased lateral friction near of some straits 1403 IF( td_nam%i_cla == 0 ) THEN 1404 ! Gibraltar strait : partial slip (fmask=0.5) 1405 ij0 = 101 ; ij1 = 101 1406 ii0 = 139 ; ii1 = 140 1407 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 0.5_dp 1408 1409 ij0 = 102 ; ij1 = 102 1410 ii0 = 139 ; ii1 = 140 1411 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 0.5_dp 1412 ! 1413 !Bab el Mandeb : partial slip (fmask=1) 1414 ij0 = 87 ; ij1 = 88 1415 ii0 = 160 ; ii1 = 160 1416 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 1._dp 1417 1418 ij0 = 88 ; ij1 = 88 1419 ii0 = 159 ; ii1 = 159 1420 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 1._dp 1421 ! 1422 ENDIF 1423 ENDIF 1424 ! 1425 IF( td_nam%c_cfg == "orca" .AND. td_nam%i_cfg == 1 )THEN ! ORCA R1 configuration 1426 ! Increased lateral friction near of some straits 1427 ! This dirty section will be suppressed by simplification process: 1428 ! all this will come back in input files 1429 ! Currently these hard-wired indices relate to configuration with 1430 ! extend grid (jpjglo=332) 1431 ! 1432 isrow = 332 - jpj 1433 ! Gibraltar Strait 1434 ii0 = 282 ; ii1 = 283 1435 ij0 = 201 + isrow ; ij1 = 241 - isrow 1436 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 2._dp 1437 1438 ! Bhosporus Strait 1439 ii0 = 314 ; ii1 = 315 1440 ij0 = 208 + isrow ; ij1 = 248 - isrow 1441 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp 1442 1443 ! Makassar Strait (Top) 1444 ii0 = 48 ; ii1 = 48 1445 ij0 = 149 + isrow ; ij1 = 190 - isrow 1446 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp 1447 1448 ! Lombok Strait 1449 ii0 = 44 ; ii1 = 44 1450 ij0 = 124 + isrow ; ij1 = 165 - isrow 1451 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp 1452 1453 ! Ombai Strait 1454 ii0 = 53 ; ii1 = 53 1455 ij0 = 124 + isrow ; ij1 = 165 - isrow 1456 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp 1457 1458 ! Timor Passage 1459 ii0 = 56 ; ii1 = 56 1460 ij0 = 124 + isrow ; ij1 = 165 - isrow 1461 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp 1462 1463 ! West Halmahera Strait 1464 ii0 = 58 ; ii1 = 58 1465 ij0 = 141 + isrow ; ij1 = 182 - isrow 1466 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp 1467 1468 ! East Halmahera Strait 1469 ii0 = 55 ; ii1 = 55 1470 ij0 = 141 + isrow ; ij1 = 182 - isrow 1471 tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp 1472 ! 1473 ENDIF 1502 DEALLOCATE( zwf ) 1503 1504 ! IF( td_nam%c_cfg == "orca" .AND. td_nam%i_cfg == 2 )THEN ! ORCA_R2 configuration 1505 ! ! ! Increased lateral friction near of some straits 1506 ! IF( td_nam%i_cla == 0 ) THEN 1507 ! ! Gibraltar strait : partial slip (fmask=0.5) 1508 ! ij0 = 101 ; ij1 = 101 1509 ! ii0 = 139 ; ii1 = 140 1510 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 0.5_dp 1511 ! 1512 ! ij0 = 102 ; ij1 = 102 1513 ! ii0 = 139 ; ii1 = 140 1514 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 0.5_dp 1515 ! ! 1516 ! !Bab el Mandeb : partial slip (fmask=1) 1517 ! ij0 = 87 ; ij1 = 88 1518 ! ii0 = 160 ; ii1 = 160 1519 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 1._dp 1520 ! 1521 ! ij0 = 88 ; ij1 = 88 1522 ! ii0 = 159 ; ii1 = 159 1523 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 1._dp 1524 ! ! 1525 ! ENDIF 1526 ! ENDIF 1527 ! ! 1528 ! IF( td_nam%c_cfg == "orca" .AND. td_nam%i_cfg == 1 )THEN ! ORCA R1 configuration 1529 ! ! Increased lateral friction near of some straits 1530 ! ! This dirty section will be suppressed by simplification process: 1531 ! ! all this will come back in input files 1532 ! ! Currently these hard-wired indices relate to configuration with 1533 ! ! extend grid (jpjglo=332) 1534 ! ! 1535 ! isrow = 332 - jpj 1536 ! ! Gibraltar Strait 1537 ! ii0 = 282 ; ii1 = 283 1538 ! ij0 = 201 + isrow ; ij1 = 241 - isrow 1539 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 2._dp 1540 ! 1541 ! ! Bhosporus Strait 1542 ! ii0 = 314 ; ii1 = 315 1543 ! ij0 = 208 + isrow ; ij1 = 248 - isrow 1544 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp 1545 ! 1546 ! ! Makassar Strait (Top) 1547 ! ii0 = 48 ; ii1 = 48 1548 ! ij0 = 149 + isrow ; ij1 = 190 - isrow 1549 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp 1550 ! 1551 ! ! Lombok Strait 1552 ! ii0 = 44 ; ii1 = 44 1553 ! ij0 = 124 + isrow ; ij1 = 165 - isrow 1554 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp 1555 ! 1556 ! ! Ombai Strait 1557 ! ii0 = 53 ; ii1 = 53 1558 ! ij0 = 124 + isrow ; ij1 = 165 - isrow 1559 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp 1560 ! 1561 ! ! Timor Passage 1562 ! ii0 = 56 ; ii1 = 56 1563 ! ij0 = 124 + isrow ; ij1 = 165 - isrow 1564 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp 1565 ! 1566 ! ! West Halmahera Strait 1567 ! ii0 = 58 ; ii1 = 58 1568 ! ij0 = 141 + isrow ; ij1 = 182 - isrow 1569 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp 1570 ! 1571 ! ! East Halmahera Strait 1572 ! ii0 = 55 ; ii1 = 55 1573 ! ij0 = 141 + isrow ; ij1 = 182 - isrow 1574 ! tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp 1575 ! ! 1576 ! ENDIF 1474 1577 ! 1475 1578 CALL lbc_lnk( tg_fmask%d_value(:,:,:,1), 'F', td_nam%i_perio, 1._dp ) ! Lateral boundary conditions on fmask 1476 1579 1477 1580 ! DEALLOCATE( imsk ) 1478 DEALLOCATE( zwf )1581 ENDIF ! ld_domcfg 1479 1582 1480 1583 ! DEALLOCATE( dl_tpol )
Note: See TracChangeset
for help on using the changeset viewer.