Changeset 8975
- Timestamp:
- 2017-12-11T14:04:27+01:00 (7 years ago)
- Location:
- branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r6755 r8975 154 154 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn ) 155 155 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop ) 156 CALL iom_rstput( kt, nitrst, numrow, 'fromCICE' , vcice ) 156 157 #if defined key_zdfkpp 157 158 CALL iom_rstput( kt, nitrst, numrow, 'rhd' , rhd ) -
branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90
r6486 r8975 41 41 PUBLIC cpl_freq 42 42 PUBLIC cpl_finalize 43 INTEGER, PUBLIC :: paral(5) ! OASIS3 box partition 43 44 44 45 INTEGER, PUBLIC :: OASIS_Rcv = 1 !: return code if received field … … 71 72 TYPE, PUBLIC :: FLD_CPL !: Type for coupling field information 72 73 LOGICAL :: laction ! To be coupled or not 73 CHARACTER(len = 8 ):: clname ! Name of the coupling field74 CHARACTER(len = 80) :: clname ! Name of the coupling field 74 75 CHARACTER(len = 1) :: clgrid ! Grid type 75 76 REAL(wp) :: nsgn ! Control of the sign change … … 80 81 81 82 TYPE(FLD_CPL), DIMENSION(nmaxfld), PUBLIC :: srcv, ssnd !: Coupling fields 83 TYPE(FLD_CPL), DIMENSION(nmaxfld), PUBLIC :: srcv_c2n, ssnd_n2c 82 84 83 85 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: exfld ! Temporary buffer for receiving … … 137 139 ! 138 140 INTEGER :: id_part 139 141 ! INTEGER :: paral(5) ! OASIS3 box partition 140 142 INTEGER :: ishape(2,2) ! shape of arrays passed to PSMILe 141 143 INTEGER :: ji,jc,jm ! local loop indicees … … 145 147 146 148 IF(lwp) WRITE(numout,*) 147 IF(lwp) WRITE(numout,*) 'cpl_define : initialization in coupled ocean/atmospherecase'149 IF(lwp) WRITE(numout,*) 'cpl_define : initialization in coupled case' 148 150 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~' 149 151 IF(lwp) WRITE(numout,*) … … 188 190 paral(4) = nlej-nldj+1 ! local extent in j 189 191 paral(5) = jpiglo ! global extent in x 190 191 192 IF( ln_ctl ) THEN 192 193 WRITE(numout,*) ' multiexchg: paral (1:5)', paral … … 196 197 ENDIF 197 198 198 CALL oasis_def_partition ( id_part, paral, nerror )199 CALL oasis_def_partition ( id_part, paral, nerror, name="oce" ) 199 200 ! 200 201 ! ... Announce send variables. 201 202 ! 202 ssnd(:)%ncplmodel = kcplmodel203 ssnd(:)%ncplmodel = 1 203 204 ! 204 205 DO ji = 1, ksnd … … 238 239 IF( ln_ctl .AND. ssnd(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple" 239 240 IF( ln_ctl .AND. ssnd(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple" 241 END DO 242 END DO 243 ENDIF 244 245 IF ( ssnd_n2c(ji)%laction ) THEN 246 IF( ssnd_n2c(ji)%nct > nmaxcat ) THEN 247 CALL oasis_abort ( ncomp_id, 'cpl_define', 'Number of categories of '// & 248 & TRIM(ssnd_n2c(ji)%clname)//' is larger than nmaxcat, increase nmaxcat' ) 249 RETURN 250 ENDIF 251 DO jc = 1, ssnd_n2c(ji)%nct 252 DO jm = 1, kcplmodel 253 254 IF ( ssnd_n2c(ji)%nct .GT. 1 ) THEN 255 WRITE(cli2,'(i2.2)') jc 256 zclname = TRIM(ssnd_n2c(ji)%clname)//'_cat'//cli2 257 ELSE 258 zclname = ssnd_n2c(ji)%clname 259 ENDIF 260 IF ( kcplmodel > 1 ) THEN 261 WRITE(cli2,'(i2.2)') jm 262 zclname = 'model'//cli2//'_'//TRIM(zclname) 263 ENDIF 264 IF( ln_ctl ) WRITE(numout,*) "Define", ji, jc, jm, " "//TRIM(zclname), " for ", OASIS_Out 265 CALL oasis_def_var (ssnd_n2c(ji)%nid(jc,jm), zclname, id_part , (/ 2, 0 /), & 266 & OASIS_Out , ishape , OASIS_REAL, nerror ) 267 IF ( nerror /= OASIS_Ok ) THEN 268 WRITE(numout,*) 'Failed to define transient ', ji, jc, jm, " "//TRIM(zclname) 269 CALL oasis_abort ( ssnd_n2c(ji)%nid(jc,jm), 'cpl_define', 'Failure in oasis_def_var' ) 270 ENDIF 271 IF( ln_ctl .AND. ssnd_n2c(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple" 272 IF( ln_ctl .AND. ssnd_n2c(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple" 240 273 END DO 241 274 END DO … … 287 320 END DO 288 321 ENDIF 322 323 IF ( srcv_c2n(ji)%laction ) THEN 324 325 IF( srcv_c2n(ji)%nct > nmaxcat ) THEN 326 CALL oasis_abort ( ncomp_id, 'cpl_define', 'Number of categories of '// & 327 & TRIM(srcv_c2n(ji)%clname)//' is larger than nmaxcat, increase nmaxcat' ) 328 RETURN 329 ENDIF 330 331 DO jc = 1, srcv_c2n(ji)%nct 332 DO jm = 1, kcplmodel 333 334 IF ( srcv_c2n(ji)%nct .GT. 1 ) THEN 335 WRITE(cli2,'(i2.2)') jc 336 zclname = TRIM(srcv_c2n(ji)%clname)//'_cat'//cli2 337 ELSE 338 zclname = srcv_c2n(ji)%clname 339 ENDIF 340 IF ( kcplmodel > 1 ) THEN 341 WRITE(cli2,'(i2.2)') jm 342 zclname = 'model'//cli2//'_'//TRIM(zclname) 343 ENDIF 344 IF( ln_ctl ) WRITE(numout,*) "Define", ji, jc, jm, " "//TRIM(zclname), " for ", OASIS_In 345 CALL oasis_def_var (srcv_c2n(ji)%nid(jc,jm), zclname, id_part , (/ 2, 0 /), & 346 & OASIS_In , ishape , OASIS_REAL, nerror ) 347 IF ( nerror /= OASIS_Ok ) THEN 348 WRITE(numout,*) 'Failed to define transient ', ji, jc, jm, " "//TRIM(zclname) 349 CALL oasis_abort ( srcv_c2n(ji)%nid(jc,jm), 'cpl_define', 'Failure in oasis_def_var' ) 350 ENDIF 351 IF( ln_ctl .AND. srcv_c2n(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple" 352 IF( ln_ctl .AND. srcv_c2n(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple" 353 END DO 354 END DO 355 ENDIF 289 356 END DO 290 357 … … 293 360 !------------------------------------------------------------------ 294 361 295 296 362 ! CALL oasis_enddef(nerror) 363 ! IF( nerror /= OASIS_Ok ) CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef') 297 364 ! 298 365 END SUBROUTINE cpl_define … … 430 497 INTEGER :: ji,jm ! local loop index 431 498 INTEGER :: mop 499 INTEGER :: ncpl 432 500 !!---------------------------------------------------------------------- 433 501 cpl_freq = 0 ! defaut definition 434 502 id = -1 ! defaut definition 503 ncpl = 1 435 504 ! 436 505 DO ji = 1, nsnd … … 459 528 ENDDO 460 529 ! 530 531 DO ji = 1, nsnd 532 IF (ssnd_n2c(ji)%laction ) THEN 533 DO jm = 1, 1 534 IF( ssnd_n2c(ji)%nid(1,jm) /= -1 ) THEN 535 IF( TRIM(cdfieldname) == TRIM(ssnd_n2c(ji)%clname) ) THEN 536 id = ssnd_n2c(ji)%nid(1,1) 537 mop = OASIS_Out 538 ncpl = 1 539 ENDIF 540 ENDIF 541 ENDDO 542 ENDIF 543 ENDDO 461 544 IF( id /= -1 ) THEN 462 545 #if defined key_oa3mct_v3 463 CALL oasis_get_freqs(id, mop, 1, itmp, info)546 CALL oasis_get_freqs(id, mop, ncpl, itmp, info) 464 547 #else 465 CALL oasis_get_freqs(id, 1, itmp, info)548 CALL oasis_get_freqs(id, ncpl, itmp, info) 466 549 #endif 467 550 cpl_freq = itmp(1) … … 514 597 END SUBROUTINE oasis_get_localcomm 515 598 516 SUBROUTINE oasis_def_partition(k1,k2,k3 )599 SUBROUTINE oasis_def_partition(k1,k2,k3, name) 517 600 INTEGER , INTENT( out) :: k1,k3 518 601 INTEGER , INTENT(in ) :: k2(5) 602 CHARACTER(len=*), INTENT(IN), OPTIONAL :: name 519 603 k1 = k2(1) ; k3 = k2(5) 520 604 WRITE(numout,*) 'oasis_def_partition: Error you sould not be there...' -
branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r7540 r8975 35 35 LOGICAL , PUBLIC :: ln_blk_core !: CORE bulk formulation 36 36 LOGICAL , PUBLIC :: ln_blk_mfs !: MFS bulk formulation 37 #if defined key_oasis3 37 #if defined key_oasis3 || ! defined key_nemocice_decomp 38 38 LOGICAL , PUBLIC :: lk_oasis = .TRUE. !: OASIS used 39 39 #else -
branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r7540 r8975 52 52 #endif 53 53 USE lib_fortran, ONLY: glob_sum 54 #if ! defined key_nemocice_decomp 55 USE OASIS_NEMO_CICE 56 #endif 57 54 58 55 59 IMPLICIT NONE … … 149 153 INTEGER, PARAMETER :: jpsnd = 35 ! total number of fields sent 150 154 155 !NEMO CICE coupling intervace 156 !NEMO send: 157 INTEGER, PARAMETER, PUBLIC :: id_sst0_np = 1 158 INTEGER, PARAMETER, PUBLIC :: id_sstfrz0_np = 2 159 INTEGER, PARAMETER, PUBLIC :: id_strax_np = 3 160 INTEGER, PARAMETER, PUBLIC :: id_stray_np = 4 161 INTEGER, PARAMETER, PUBLIC :: id_flatn_f_np = 5 162 INTEGER, PARAMETER, PUBLIC :: id_fcondtopn_f_np = 6 163 INTEGER, PARAMETER, PUBLIC :: id_fsurfn_f_np = 7 164 INTEGER, PARAMETER, PUBLIC :: id_uatm_np = 8 165 INTEGER, PARAMETER, PUBLIC :: id_vatm_np = 9 166 INTEGER, PARAMETER, PUBLIC :: id_wind_np = 10 167 INTEGER, PARAMETER, PUBLIC :: id_fsw_np = 11 168 INTEGER, PARAMETER, PUBLIC :: id_flw_np = 12 169 INTEGER, PARAMETER, PUBLIC :: id_Tair_np = 13 170 INTEGER, PARAMETER, PUBLIC :: id_potT_np = 14 171 INTEGER, PARAMETER, PUBLIC :: id_rhoa_np = 15 172 INTEGER, PARAMETER, PUBLIC :: id_Qa_np = 16 173 INTEGER, PARAMETER, PUBLIC :: id_zlvl_np = 17 174 INTEGER, PARAMETER, PUBLIC :: id_swvdr_np = 18 175 INTEGER, PARAMETER, PUBLIC :: id_swvdf_np = 19 176 INTEGER, PARAMETER, PUBLIC :: id_swidr_np = 20 177 INTEGER, PARAMETER, PUBLIC :: id_swidf_np = 21 178 INTEGER, PARAMETER, PUBLIC :: id_fsnow_np = 22 179 INTEGER, PARAMETER, PUBLIC :: id_frain_np = 23 180 INTEGER, PARAMETER, PUBLIC :: id_sstfrz_np = 24 181 INTEGER, PARAMETER, PUBLIC :: id_nfrzmlt_np = 25 182 INTEGER, PARAMETER, PUBLIC :: id_sst_m_np = 26 183 INTEGER, PARAMETER, PUBLIC :: id_sss_m_np = 27 184 INTEGER, PARAMETER, PUBLIC :: id_tsfc_ice_np = 28 185 INTEGER, PARAMETER, PUBLIC :: id_uocn_np = 29 186 INTEGER, PARAMETER, PUBLIC :: id_vocn_np = 30 187 INTEGER, PARAMETER, PUBLIC :: id_ss_tltx_np = 31 188 INTEGER, PARAMETER, PUBLIC :: id_ss_tlty_np = 32 189 !NEMO get: 190 INTEGER, PARAMETER, PUBLIC :: id_fr_i0_ng = 1 191 INTEGER, PARAMETER, PUBLIC :: id_a_i0_ng = 2 192 INTEGER, PARAMETER, PUBLIC :: id_vsno0_ng = 3 193 INTEGER, PARAMETER, PUBLIC :: id_vice0_ng = 4 194 INTEGER, PARAMETER, PUBLIC :: id_strocnx_ng = 5 195 INTEGER, PARAMETER, PUBLIC :: id_strocny_ng = 6 196 INTEGER, PARAMETER, PUBLIC :: id_strocnxT_ng = 7 197 INTEGER, PARAMETER, PUBLIC :: id_strocnyT_ng = 8 198 INTEGER, PARAMETER, PUBLIC :: id_fresh_ai_ng = 9 199 INTEGER, PARAMETER, PUBLIC :: id_fsalt_ai_ng = 10 200 INTEGER, PARAMETER, PUBLIC :: id_fswthru_ai_ng = 11 201 INTEGER, PARAMETER, PUBLIC :: id_fhocn_ai_ng = 12 202 INTEGER, PARAMETER, PUBLIC :: id_fr_i_ng = 13 203 INTEGER, PARAMETER, PUBLIC :: id_a_i_ng = 14 204 INTEGER, PARAMETER, PUBLIC :: id_vsno_ng = 15 205 INTEGER, PARAMETER, PUBLIC :: id_vice_ng = 16 206 INTEGER, PARAMETER, PUBLIC :: id_a_p_ng = 17 207 INTEGER, PARAMETER, PUBLIC :: id_ht_p_ng = 18 208 !hadgem 209 INTEGER, PARAMETER, PUBLIC :: id_u_ice_ng = 19 210 INTEGER, PARAMETER, PUBLIC :: id_v_ice_ng = 20 211 INTEGER, PARAMETER, PUBLIC :: id_ht_s_ng = 21 212 INTEGER, PARAMETER, PUBLIC :: id_ht_i_ng = 22 213 INTEGER, PARAMETER, PUBLIC :: id_tn_ice_ng = 23 214 INTEGER, PARAMETER, PUBLIC :: id_kn_ice_ng = 24 215 151 216 REAL(wp), PARAMETER :: dms_unit_conv = 1.0e+6 ! Coversion factor to get outgong DMS in standard units for coupling 152 ! i.e. specifically nmol/L (= umol/m3) 217 153 218 154 219 ! !!** namelist namsbc_cpl ** … … 173 238 LOGICAL :: ln_usecplmask ! use a coupling mask file to merge data received from several models 174 239 ! -> file cplmask.nc with the float variable called cplmask (jpi,jpj,nn_cplmodel) 240 LOGICAL, PARAMETER :: LOASIS_NEMO_CICE = .TRUE. 175 241 TYPE :: DYNARR 176 242 REAL(wp), POINTER, DIMENSION(:,:,:) :: z3 … … 274 340 WRITE(numout,*)'~~~~~~~~~~~~' 275 341 ENDIF 276 IF( lwp .AND. ln_cpl ) THEN ! control print 342 ! IF( lwp .AND. ln_cpl ) THEN ! control print 343 IF( lwp ) THEN 277 344 WRITE(numout,*)' received fields (mutiple ice categories)' 278 345 WRITE(numout,*)' 10m wind module = ', TRIM(sn_rcv_w10m%cldes ), ' (', TRIM(sn_rcv_w10m%clcat ), ')' … … 535 602 srcv(jpr_atm_dust)%laction = .TRUE. 536 603 END IF 537 604 538 605 ! ! ------------------------- ! 539 606 ! ! topmelt and botmelt ! … … 645 712 ENDIF 646 713 ENDIF 647 714 715 srcv(:)%laction = .FALSE. 716 648 717 ! =================================================== ! 649 718 ! Allocate all parts of frcv used for received fields ! … … 665 734 END IF 666 735 736 ! =================================================== ! 737 ! NEMO CICE interface recv definitions ! 738 ! =================================================== ! 739 srcv_c2n(:)%laction = .FALSE. 740 ! 741 ! srcv_c2n(1)%laction = .TRUE. 742 ! srcv_c2n(1)%clgrid = 'T' 743 ! srcv_c2n(1)%nsgn = 1. 744 ! srcv_c2n(1)%clname = 'OCN_O1G' 745 ! srcv_c2n(1)%nct = 1 746 ! srcv_c2n(1)%ncplmodel = 1 747 #if ! defined key_nemocice_decomp 748 !initialization 749 srcv_c2n(id_fr_i0_ng)%laction = .TRUE. 750 srcv_c2n(id_fr_i0_ng)%clgrid = 'T' 751 srcv_c2n(id_fr_i0_ng)%nsgn = 1. 752 srcv_c2n(id_fr_i0_ng)%clname = 'fr_i0_ng' 753 srcv_c2n(id_fr_i0_ng)%nct = 1 754 srcv_c2n(id_fr_i0_ng)%ncplmodel = 1 755 756 srcv_c2n(id_a_i0_ng)%laction = .FALSE. 757 srcv_c2n(id_a_i0_ng)%clgrid = 'T' 758 srcv_c2n(id_a_i0_ng)%nsgn = 1. 759 srcv_c2n(id_a_i0_ng)%clname = 'a_i0_ng' 760 srcv_c2n(id_a_i0_ng)%nct = 5 761 srcv_c2n(id_a_i0_ng)%ncplmodel = 1 762 763 srcv_c2n(id_vsno0_ng)%laction = .TRUE. 764 srcv_c2n(id_vsno0_ng)%clgrid = 'T' 765 srcv_c2n(id_vsno0_ng)%nsgn = 1. 766 srcv_c2n(id_vsno0_ng)%clname = 'vsno0_ng' 767 srcv_c2n(id_vsno0_ng)%nct = 1 768 srcv_c2n(id_vsno0_ng)%ncplmodel = 1 769 770 srcv_c2n(id_vice0_ng)%laction = .TRUE. 771 srcv_c2n(id_vice0_ng)%clgrid = 'T' 772 srcv_c2n(id_vice0_ng)%nsgn = 1. 773 srcv_c2n(id_vice0_ng)%clname = 'vice0_ng' 774 srcv_c2n(id_vice0_ng)%nct = 1 775 srcv_c2n(id_vice0_ng)%ncplmodel = 1 776 !time stepping 777 srcv_c2n(id_strocnx_ng)%laction = .TRUE. 778 srcv_c2n(id_strocnx_ng)%clgrid = 'F' 779 srcv_c2n(id_strocnx_ng)%nsgn = 1. 780 srcv_c2n(id_strocnx_ng)%clname = 'strocnx_ng' 781 srcv_c2n(id_strocnx_ng)%nct = 1 782 srcv_c2n(id_strocnx_ng)%ncplmodel = 1 783 784 srcv_c2n(id_strocny_ng)%laction = .TRUE. 785 srcv_c2n(id_strocny_ng)%clgrid = 'F' 786 srcv_c2n(id_strocny_ng)%nsgn = 1. 787 srcv_c2n(id_strocny_ng)%clname = 'strocny_ng' 788 srcv_c2n(id_strocny_ng)%nct = 1 789 srcv_c2n(id_strocny_ng)%ncplmodel = 1 790 791 srcv_c2n(id_strocnxT_ng)%laction = .TRUE. 792 srcv_c2n(id_strocnxT_ng)%clgrid = 'T' 793 srcv_c2n(id_strocnxT_ng)%nsgn = 1. 794 srcv_c2n(id_strocnxT_ng)%clname = 'strocnxT_ng' 795 srcv_c2n(id_strocnxT_ng)%nct = 1 796 srcv_c2n(id_strocnxT_ng)%ncplmodel = 1 797 798 srcv_c2n(id_strocnyT_ng)%laction = .TRUE. 799 srcv_c2n(id_strocnyT_ng)%clgrid = 'T' 800 srcv_c2n(id_strocnyT_ng)%nsgn = 1. 801 srcv_c2n(id_strocnyT_ng)%clname = 'strocnyT_ng' 802 srcv_c2n(id_strocnyT_ng)%nct = 1 803 srcv_c2n(id_strocnyT_ng)%ncplmodel = 1 804 805 srcv_c2n(id_fresh_ai_ng)%laction = .TRUE. 806 srcv_c2n(id_fresh_ai_ng)%clgrid = 'T' 807 srcv_c2n(id_fresh_ai_ng)%nsgn = 1. 808 srcv_c2n(id_fresh_ai_ng)%clname = 'fresh_ai_ng' 809 srcv_c2n(id_fresh_ai_ng)%nct = 1 810 srcv_c2n(id_fresh_ai_ng)%ncplmodel = 1 811 812 srcv_c2n(id_fsalt_ai_ng)%laction = .TRUE. 813 srcv_c2n(id_fsalt_ai_ng)%clgrid = 'T' 814 srcv_c2n(id_fsalt_ai_ng)%nsgn = 1. 815 srcv_c2n(id_fsalt_ai_ng)%clname = 'fsalt_ai_ng' 816 srcv_c2n(id_fsalt_ai_ng)%nct = 1 817 srcv_c2n(id_fsalt_ai_ng)%ncplmodel = 1 818 819 srcv_c2n(id_fswthru_ai_ng)%laction = .TRUE. 820 srcv_c2n(id_fswthru_ai_ng)%clgrid = 'T' 821 srcv_c2n(id_fswthru_ai_ng)%nsgn = 1. 822 srcv_c2n(id_fswthru_ai_ng)%clname = 'fswthru_ai_ng' 823 srcv_c2n(id_fswthru_ai_ng)%nct = 1 824 srcv_c2n(id_fswthru_ai_ng)%ncplmodel = 1 825 826 srcv_c2n(id_fhocn_ai_ng)%laction = .TRUE. 827 srcv_c2n(id_fhocn_ai_ng)%clgrid = 'T' 828 srcv_c2n(id_fhocn_ai_ng)%nsgn = 1. 829 srcv_c2n(id_fhocn_ai_ng)%clname = 'fhocn_ai_ng' 830 srcv_c2n(id_fhocn_ai_ng)%nct = 1 831 srcv_c2n(id_fhocn_ai_ng)%ncplmodel = 1 832 833 srcv_c2n(id_fr_i_ng)%laction = .TRUE. 834 srcv_c2n(id_fr_i_ng)%clgrid = 'T' 835 srcv_c2n(id_fr_i_ng)%nsgn = 1. 836 srcv_c2n(id_fr_i_ng)%clname = 'fr_i_ng' 837 srcv_c2n(id_fr_i_ng)%nct = 1 838 srcv_c2n(id_fr_i_ng)%ncplmodel = 1 839 840 srcv_c2n(id_a_i_ng)%laction = .TRUE. 841 srcv_c2n(id_a_i_ng)%clgrid = 'F' 842 srcv_c2n(id_a_i_ng)%nsgn = 1. 843 srcv_c2n(id_a_i_ng)%clname = 'a_i_ng' 844 srcv_c2n(id_a_i_ng)%nct = 5 845 srcv_c2n(id_a_i_ng)%ncplmodel = 1 846 847 srcv_c2n(id_vsno_ng)%laction = .TRUE. 848 srcv_c2n(id_vsno_ng)%clgrid = 'F' 849 srcv_c2n(id_vsno_ng)%nsgn = 1. 850 srcv_c2n(id_vsno_ng)%clname = 'vsno_ng' 851 srcv_c2n(id_vsno_ng)%nct = 1 852 srcv_c2n(id_vsno_ng)%ncplmodel = 1 853 854 srcv_c2n(id_vice_ng)%laction = .TRUE. 855 srcv_c2n(id_vice_ng)%clgrid = 'F' 856 srcv_c2n(id_vice_ng)%nsgn = 1. 857 srcv_c2n(id_vice_ng)%clname = 'vice_ng' 858 srcv_c2n(id_vice_ng)%nct = 1 859 srcv_c2n(id_vice_ng)%ncplmodel = 1 860 #endif 667 861 ! ================================ ! 668 862 ! Define the send interface ! … … 724 918 ssnd(jps_fice)%laction = .TRUE. ! if ice treated in the ocean (even in climato case) 725 919 ssnd(jps_fice1)%laction = .TRUE. ! First-order regridded ice concentration, to be used 726 920 ! in producing atmos-to-ice fluxes 727 921 ! Currently no namelist entry to determine sending of multi-category ice fraction so use the thickness entry for now 728 922 IF ( TRIM( sn_snd_thick%clcat ) == 'yes' ) ssnd(jps_fice)%nct = jpl … … 926 1120 ENDIF 927 1121 ENDIF 928 929 ! 1122 1123 ssnd(:)%laction = .FALSE. 1124 ! NEMO cice send interface 1125 ssnd_n2c(:)%laction = .FALSE. 1126 ! ssnd_n2c(1)%laction = .TRUE. 1127 ! ssnd_n2c(1)%clgrid = 'T' 1128 ! ssnd_n2c(1)%nsgn = 1. 1129 ! ssnd_n2c(1)%clname = 'OCN_O1P' 1130 ! ssnd_n2c(1)%nct = 1 1131 ! ssnd_n2c(1)%ncplmodel = 1 1132 #if ! defined key_nemocice_decomp 1133 ssnd_n2c(id_sst0_np)%laction = .TRUE. 1134 ssnd_n2c(id_sst0_np)%clgrid = 'T' 1135 ssnd_n2c(id_sst0_np)%nsgn = 1. 1136 ssnd_n2c(id_sst0_np)%clname = 'sst_np' 1137 ssnd_n2c(id_sst0_np)%nct = 1 1138 ssnd_n2c(id_sst0_np)%ncplmodel = 1 1139 1140 ssnd_n2c(id_sstfrz0_np)%laction = .TRUE. 1141 ssnd_n2c(id_sstfrz0_np)%clgrid = 'T' 1142 ssnd_n2c(id_sstfrz0_np)%nsgn = 1. 1143 ssnd_n2c(id_sstfrz0_np)%clname = 'sstfrz0_np' 1144 ssnd_n2c(id_sstfrz0_np)%nct = 1 1145 ssnd_n2c(id_sstfrz0_np)%ncplmodel = 1 1146 1147 ssnd_n2c(id_strax_np)%laction = .TRUE. 1148 ssnd_n2c(id_strax_np)%clgrid = 'T' 1149 ssnd_n2c(id_strax_np)%nsgn = 1. 1150 ssnd_n2c(id_strax_np)%clname = 'strax_np' 1151 ssnd_n2c(id_strax_np)%nct = 1 1152 ssnd_n2c(id_strax_np)%ncplmodel = 1 1153 1154 ssnd_n2c(id_stray_np)%laction = .TRUE. 1155 ssnd_n2c(id_stray_np)%clgrid = 'T' 1156 ssnd_n2c(id_stray_np)%nsgn = 1. 1157 ssnd_n2c(id_stray_np)%clname = 'stray_np' 1158 ssnd_n2c(id_stray_np)%nct = 1 1159 ssnd_n2c(id_stray_np)%ncplmodel = 1 1160 1161 ssnd_n2c(id_flatn_f_np)%laction = .TRUE. 1162 ssnd_n2c(id_flatn_f_np)%clgrid = 'T' 1163 ssnd_n2c(id_flatn_f_np)%nsgn = 1. 1164 ssnd_n2c(id_flatn_f_np)%clname = 'flatn_f_np' 1165 ssnd_n2c(id_flatn_f_np)%nct = 5 1166 ssnd_n2c(id_flatn_f_np)%ncplmodel = 1 1167 1168 ssnd_n2c(id_fcondtopn_f_np)%laction = .FALSE. 1169 ssnd_n2c(id_fcondtopn_f_np)%clgrid = 'T' 1170 ssnd_n2c(id_fcondtopn_f_np)%nsgn = 1. 1171 ssnd_n2c(id_fcondtopn_f_np)%clname = 'fcondtopn_f_np' 1172 ssnd_n2c(id_fcondtopn_f_np)%nct = 5 1173 ssnd_n2c(id_fcondtopn_f_np)%ncplmodel = 1 1174 1175 ssnd_n2c(id_fsurfn_f_np)%laction = .TRUE. 1176 ssnd_n2c(id_fsurfn_f_np)%clgrid = 'T' 1177 ssnd_n2c(id_fsurfn_f_np)%nsgn = 1. 1178 ssnd_n2c(id_fsurfn_f_np)%clname = 'fsurfn_f_np' 1179 ssnd_n2c(id_fsurfn_f_np)%nct = 5 1180 ssnd_n2c(id_fsurfn_f_np)%ncplmodel = 1 1181 1182 ssnd_n2c(id_uatm_np)%laction = .TRUE. 1183 ssnd_n2c(id_uatm_np)%clgrid = 'T' 1184 ssnd_n2c(id_uatm_np)%nsgn = 1. 1185 ssnd_n2c(id_uatm_np)%clname = 'uatm_np' 1186 ssnd_n2c(id_uatm_np)%nct = 1 1187 ssnd_n2c(id_uatm_np)%ncplmodel = 1 1188 1189 ssnd_n2c(id_vatm_np)%laction = .TRUE. 1190 ssnd_n2c(id_vatm_np)%clgrid = 'T' 1191 ssnd_n2c(id_vatm_np)%nsgn = 1. 1192 ssnd_n2c(id_vatm_np)%clname = 'vatm_np' 1193 ssnd_n2c(id_vatm_np)%nct = 1 1194 ssnd_n2c(id_vatm_np)%ncplmodel = 1 1195 1196 ssnd_n2c(id_wind_np)%laction = .TRUE. 1197 ssnd_n2c(id_wind_np)%clgrid = 'T' 1198 ssnd_n2c(id_wind_np)%nsgn = 1. 1199 ssnd_n2c(id_wind_np)%clname = 'wind_np' 1200 ssnd_n2c(id_wind_np)%nct = 1 1201 ssnd_n2c(id_wind_np)%ncplmodel = 1 1202 1203 ssnd_n2c(id_fsw_np)%laction = .TRUE. 1204 ssnd_n2c(id_fsw_np)%clgrid = 'T' 1205 ssnd_n2c(id_fsw_np)%nsgn = 1. 1206 ssnd_n2c(id_fsw_np)%clname = 'fsw_np' 1207 ssnd_n2c(id_fsw_np)%nct = 1 1208 ssnd_n2c(id_fsw_np)%ncplmodel = 1 1209 1210 ssnd_n2c(id_flw_np)%laction = .TRUE. 1211 ssnd_n2c(id_flw_np)%clgrid = 'T' 1212 ssnd_n2c(id_flw_np)%nsgn = 1. 1213 ssnd_n2c(id_flw_np)%clname = 'flw_np' 1214 ssnd_n2c(id_flw_np)%nct = 1 1215 ssnd_n2c(id_flw_np)%ncplmodel = 1 1216 1217 ssnd_n2c(id_Tair_np)%laction = .TRUE. 1218 ssnd_n2c(id_Tair_np)%clgrid = 'T' 1219 ssnd_n2c(id_Tair_np)%nsgn = 1. 1220 ssnd_n2c(id_Tair_np)%clname = 'Tair_np' 1221 ssnd_n2c(id_Tair_np)%nct = 1 1222 ssnd_n2c(id_Tair_np)%ncplmodel = 1 1223 1224 ssnd_n2c(id_potT_np)%laction = .TRUE. 1225 ssnd_n2c(id_potT_np)%clgrid = 'T' 1226 ssnd_n2c(id_potT_np)%nsgn = 1. 1227 ssnd_n2c(id_potT_np)%clname = 'potT_np' 1228 ssnd_n2c(id_potT_np)%nct = 1 1229 ssnd_n2c(id_potT_np)%ncplmodel = 1 1230 1231 ssnd_n2c(id_rhoa_np)%laction = .TRUE. 1232 ssnd_n2c(id_rhoa_np)%clgrid = 'T' 1233 ssnd_n2c(id_rhoa_np)%nsgn = 1. 1234 ssnd_n2c(id_rhoa_np)%clname = 'rhoa_np' 1235 ssnd_n2c(id_rhoa_np)%nct = 1 1236 ssnd_n2c(id_rhoa_np)%ncplmodel = 1 1237 1238 ssnd_n2c(id_Qa_np)%laction = .TRUE. 1239 ssnd_n2c(id_Qa_np)%clgrid = 'T' 1240 ssnd_n2c(id_Qa_np)%nsgn = 1. 1241 ssnd_n2c(id_Qa_np)%clname = 'Qa_np' 1242 ssnd_n2c(id_Qa_np)%nct = 1 1243 ssnd_n2c(id_Qa_np)%ncplmodel = 1 1244 1245 ssnd_n2c(id_zlvl_np)%laction = .TRUE. 1246 ssnd_n2c(id_zlvl_np)%clgrid = 'T' 1247 ssnd_n2c(id_zlvl_np)%nsgn = 1. 1248 ssnd_n2c(id_zlvl_np)%clname = 'zlvl_np' 1249 ssnd_n2c(id_zlvl_np)%nct = 1 1250 ssnd_n2c(id_zlvl_np)%ncplmodel = 1 1251 1252 ssnd_n2c(id_swvdr_np)%laction = .TRUE. 1253 ssnd_n2c(id_swvdr_np)%clgrid = 'T' 1254 ssnd_n2c(id_swvdr_np)%nsgn = 1. 1255 ssnd_n2c(id_swvdr_np)%clname = 'swvdr_np' 1256 ssnd_n2c(id_swvdr_np)%nct = 1 1257 ssnd_n2c(id_swvdr_np)%ncplmodel = 1 1258 1259 ssnd_n2c(id_swvdf_np)%laction = .TRUE. 1260 ssnd_n2c(id_swvdf_np)%clgrid = 'T' 1261 ssnd_n2c(id_swvdf_np)%nsgn = 1. 1262 ssnd_n2c(id_swvdf_np)%clname = 'swvdf_np' 1263 ssnd_n2c(id_swvdf_np)%nct = 1 1264 ssnd_n2c(id_swvdf_np)%ncplmodel = 1 1265 1266 ssnd_n2c(id_swidr_np)%laction = .TRUE. 1267 ssnd_n2c(id_swidr_np)%clgrid = 'T' 1268 ssnd_n2c(id_swidr_np)%nsgn = 1. 1269 ssnd_n2c(id_swidr_np)%clname = 'swidr_np' 1270 ssnd_n2c(id_swidr_np)%nct = 1 1271 ssnd_n2c(id_swidr_np)%ncplmodel = 1 1272 1273 ssnd_n2c(id_swidf_np)%laction = .TRUE. 1274 ssnd_n2c(id_swidf_np)%clgrid = 'T' 1275 ssnd_n2c(id_swidf_np)%nsgn = 1. 1276 ssnd_n2c(id_swidf_np)%clname = 'swidf_np' 1277 ssnd_n2c(id_swidf_np)%nct = 1 1278 ssnd_n2c(id_swidf_np)%ncplmodel = 1 1279 1280 ssnd_n2c(id_fsnow_np)%laction = .TRUE. 1281 ssnd_n2c(id_fsnow_np)%clgrid = 'T' 1282 ssnd_n2c(id_fsnow_np)%nsgn = 1. 1283 ssnd_n2c(id_fsnow_np)%clname = 'fsnow_np' 1284 ssnd_n2c(id_fsnow_np)%nct = 1 1285 ssnd_n2c(id_fsnow_np)%ncplmodel = 1 1286 1287 ssnd_n2c(id_frain_np)%laction = .TRUE. 1288 ssnd_n2c(id_frain_np)%clgrid = 'T' 1289 ssnd_n2c(id_frain_np)%nsgn = 1. 1290 ssnd_n2c(id_frain_np)%clname = 'frain_np' 1291 ssnd_n2c(id_frain_np)%nct = 1 1292 ssnd_n2c(id_frain_np)%ncplmodel = 1 1293 1294 ssnd_n2c(id_sstfrz_np)%laction = .TRUE. 1295 ssnd_n2c(id_sstfrz_np)%clgrid = 'T' 1296 ssnd_n2c(id_sstfrz_np)%nsgn = 1. 1297 ssnd_n2c(id_sstfrz_np)%clname = 'sstfrz_np' 1298 ssnd_n2c(id_sstfrz_np)%nct = 1 1299 ssnd_n2c(id_sstfrz_np)%ncplmodel = 1 1300 1301 ssnd_n2c(id_nfrzmlt_np)%laction = .TRUE. 1302 ssnd_n2c(id_nfrzmlt_np)%clgrid = 'T' 1303 ssnd_n2c(id_nfrzmlt_np)%nsgn = 1. 1304 ssnd_n2c(id_nfrzmlt_np)%clname = 'nfrzmlt_np' 1305 ssnd_n2c(id_nfrzmlt_np)%nct = 1 1306 ssnd_n2c(id_nfrzmlt_np)%ncplmodel = 1 1307 1308 ssnd_n2c(id_sst_m_np)%laction = .TRUE. 1309 ssnd_n2c(id_sst_m_np)%clgrid = 'T' 1310 ssnd_n2c(id_sst_m_np)%nsgn = 1. 1311 ssnd_n2c(id_sst_m_np)%clname = 'sst_m_np' 1312 ssnd_n2c(id_sst_m_np)%nct = 1 1313 ssnd_n2c(id_sst_m_np)%ncplmodel = 1 1314 1315 ssnd_n2c(id_sss_m_np)%laction = .TRUE. 1316 ssnd_n2c(id_sss_m_np)%clgrid = 'T' 1317 ssnd_n2c(id_sss_m_np)%nsgn = 1. 1318 ssnd_n2c(id_sss_m_np)%clname = 'sss_m_np' 1319 ssnd_n2c(id_sss_m_np)%nct = 1 1320 ssnd_n2c(id_sss_m_np)%ncplmodel = 1 1321 1322 ssnd_n2c(id_tsfc_ice_np)%laction = .FALSE. 1323 ssnd_n2c(id_tsfc_ice_np)%clgrid = 'F' 1324 ssnd_n2c(id_tsfc_ice_np)%nsgn = 1. 1325 ssnd_n2c(id_tsfc_ice_np)%clname = 'tsfc_ice_np' 1326 ssnd_n2c(id_tsfc_ice_np)%nct = 5 1327 ssnd_n2c(id_tsfc_ice_np)%ncplmodel = 1 1328 1329 ssnd_n2c(id_uocn_np)%laction = .TRUE. 1330 ssnd_n2c(id_uocn_np)%clgrid = 'T' 1331 ssnd_n2c(id_uocn_np)%nsgn = 1. 1332 ssnd_n2c(id_uocn_np)%clname = 'uocn_np' 1333 ssnd_n2c(id_uocn_np)%nct = 1 1334 ssnd_n2c(id_uocn_np)%ncplmodel = 1 1335 1336 ssnd_n2c(id_vocn_np)%laction = .TRUE. 1337 ssnd_n2c(id_vocn_np)%clgrid = 'F' 1338 ssnd_n2c(id_vocn_np)%nsgn = 1. 1339 ssnd_n2c(id_vocn_np)%clname = 'vocn_np' 1340 ssnd_n2c(id_vocn_np)%nct = 1 1341 ssnd_n2c(id_vocn_np)%ncplmodel = 1 1342 1343 ssnd_n2c(id_ss_tltx_np)%laction = .TRUE. 1344 ssnd_n2c(id_ss_tltx_np)%clgrid = 'F' 1345 ssnd_n2c(id_ss_tltx_np)%nsgn = 1. 1346 ssnd_n2c(id_ss_tltx_np)%clname = 'ss_tltx_np' 1347 ssnd_n2c(id_ss_tltx_np)%nct = 1 1348 ssnd_n2c(id_ss_tltx_np)%ncplmodel = 1 1349 1350 ssnd_n2c(id_ss_tlty_np)%laction = .TRUE. 1351 ssnd_n2c(id_ss_tlty_np)%clgrid = 'F' 1352 ssnd_n2c(id_ss_tlty_np)%nsgn = 1. 1353 ssnd_n2c(id_ss_tlty_np)%clname = 'ss_tlty_np' 1354 ssnd_n2c(id_ss_tlty_np)%nct = 1 1355 ssnd_n2c(id_ss_tlty_np)%ncplmodel = 1 1356 #endif 930 1357 ! ================================ ! 931 1358 ! initialisation of the coupler ! … … 933 1360 934 1361 CALL cpl_define(jprcv, jpsnd, nn_cplmodel) 935 1362 936 1363 IF (ln_usecplmask) THEN 937 1364 xcplmask(:,:,:) = 0. … … 948 1375 IF( ln_dm2dc .AND. ln_cpl .AND. ncpl_qsr_freq /= 86400 ) & 949 1376 & CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 1377 if(ncpl_qsr_freq.LT.1) ncpl_qsr_freq = 1 ! cpl_freq("OCN_O1P") 950 1378 ncpl_qsr_freq = 86400 / ncpl_qsr_freq 951 1379 … … 1093 1521 IF( srcv(jpr_otx2)%laction ) THEN 1094 1522 CALL rot_rep( frcv(jpr_otx2)%z3(:,:,1), frcv(jpr_oty2)%z3(:,:,1), srcv(jpr_otx2)%clgrid, 'en->j', zty ) 1095 ELSE 1523 ELSE 1096 1524 CALL rot_rep( frcv(jpr_otx1)%z3(:,:,1), frcv(jpr_oty1)%z3(:,:,1), srcv(jpr_otx1)%clgrid, 'en->j', zty ) 1097 1525 ENDIF … … 1321 1749 ELSE ; zqsr(:,:) = 0._wp 1322 1750 ENDIF 1323 IF( ln_dm2dc .AND. ln_cpl ) zqsr(:,:) = sbc_dcy( zqsr ) ! modify qsr to include the diurnal cycle1751 IF( ln_dm2dc .AND. ln_cpl .AND. .NOT.LOASIS_NEMO_CICE ) zqsr(:,:) = sbc_dcy( zqsr ) ! modify qsr to include the diurnal cycle 1324 1752 IF( ln_mixcpl ) THEN ; qsr(:,:) = qsr(:,:) * xcplmask(:,:,0) + zqsr(:,:) * zmsk(:,:) 1325 1753 ELSE ; qsr(:,:) = zqsr(:,:) … … 2008 2436 & + palbi (:,:,1) * zicefr(:,:) ) ) 2009 2437 END SELECT 2010 IF( ln_dm2dc .AND. ln_cpl ) THEN ! modify qsr to include the diurnal cycle2438 IF( ln_dm2dc .AND. ln_cpl .AND. .NOT.LOASIS_NEMO_CICE) THEN ! modify qsr to include the diurnal cycle 2011 2439 zqsr_tot(:,: ) = sbc_dcy( zqsr_tot(:,: ) ) 2012 2440 DO jl=1,jpl … … 2150 2578 SELECT CASE( sn_snd_temp%clcat ) 2151 2579 CASE( 'yes' ) 2152 2580 ztmp3(:,:,1:jpl) = tn_ice(:,:,1:jpl) * a_i(:,:,1:jpl) 2153 2581 CASE( 'no' ) 2154 2155 2582 ztmp3(:,:,:) = 0.0 2583 DO jl=1,jpl 2156 2584 ztmp3(:,:,1) = ztmp3(:,:,1) + tn_ice(:,:,jl) * a_i(:,:,jl) 2157 2585 ENDDO 2158 2586 CASE default ; CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_temp%clcat' ) 2159 2587 END SELECT … … 2236 2664 CASE( 'no' ) ; ztmp3(:,:,1) = fr_i(:,:) 2237 2665 CASE default ; CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_thick1%clcat' ) 2238 2666 END SELECT 2239 2667 CALL cpl_snd (jps_fice1, isec, ztmp3, info) 2240 2668 ENDIF -
branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r6500 r8975 58 58 uatm,vatm,wind,fsw,flw,Tair,potT,Qa,rhoa,zlvl, & 59 59 swvdr,swvdf,swidr,swidf,Tf, & 60 61 62 63 60 !! When using NEMO with CICE, this change requires use of 61 !! one of the following two CICE branches: 62 !! - at CICE5.0, hadax/r1015_GSI8_with_GSI7 63 !! - at CICE5.1.2, hadax/vn5.1.2_GSI8 64 64 keffn_top,Tn_top 65 65 … … 73 73 USE CICE_RunMod 74 74 USE CICE_FinalMod 75 USE cpl_oasis3 76 USE mod_oasis 77 USE OASIS_NEMO_CICE 75 78 76 79 IMPLICIT NONE … … 173 176 REAL(wp), DIMENSION(:,:,:), POINTER :: ztfrz3d 174 177 INTEGER :: ji, jj, jl, jk ! dummy loop indices 178 INTEGER, PARAMETER :: zkt = 1 175 179 !!--------------------------------------------------------------------- 176 180 … … 186 190 ! Initialize CICE 187 191 CALL CICE_Initialize 188 189 192 ! Do some CICE consistency checks 190 193 IF ( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN … … 202 205 IF( sbc_ice_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'sbc_ice_alloc : unable to allocate arrays' ) 203 206 IF( sbc_ice_cice_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'sbc_ice_cice_alloc : unable to allocate cice arrays' ) 204 207 #if ! defined key_nemocice_decomp 208 call nemo_cice_cpl_define() 209 #endif 205 210 ! Ensure that no temperature points are below freezing if not a NEMO restart 206 211 IF( .NOT. ln_rstart ) THEN … … 214 219 CALL wrk_dealloc( jpi,jpj,jpk, ztfrz3d ) 215 220 216 #if defined key_nemocice_decomp217 221 ! Pass initial SST from NEMO to CICE so ice is initialised correctly if 218 222 ! there is no restart file. 219 223 ! Values from a CICE restart file would overwrite this 220 CALL nemo2cice( tsn(:,:,1,jp_tem) , sst , 'T' , 1.) 221 #endif 224 CALL nemo2cice( tsn(:,:,1,jp_tem) , sst , 'T' , 1., zkt, ssnd_n2c(id_sst0_np)%nid(1,1), srcv_n2c(id_sst_ig)%nid(1,1)) 222 225 223 226 ENDIF 224 227 225 228 ! calculate surface freezing temperature and send to CICE 226 CALL 227 CALL nemo2cice(sstfrz,Tf, 'T', 1. )228 229 CALL cice2nemo(aice,fr_i, 'T', 1. 229 CALL eos_fzp(sss_m(:,:), sstfrz(:,:), fsdept_n(:,:,1)) 230 CALL nemo2cice(sstfrz,Tf, 'T', 1., zkt, ssnd_n2c(id_sstfrz0_np)%nid(1,1), srcv_n2c(id_Tf0_ig)%nid(1,1) ) 231 232 CALL cice2nemo(aice,fr_i, 'T', 1., zkt, ssnd_c2n(id_aice0_ip)%nid(1,1), srcv_c2n(id_fr_i0_ng)%nid(1,1)) 230 233 IF ( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN 234 if(lwp) write(numout,*) 'jp_flx OR jp_purecpl' 235 if(lwp) call flush(numout) 231 236 DO jl=1,ncat 232 CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1. )237 CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1., zkt, ssnd_c2n(id_aicen0_ip)%nid(1,jl), srcv_c2n(id_a_i0_ng)%nid(1,1) ) 233 238 ENDDO 234 239 ENDIF … … 250 255 ! ! embedded sea ice 251 256 IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 252 CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1. ) 253 CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1. ) 257 if(lwp) write(numout,*) 'nn_ice_embd' 258 if(lwp) call flush(numout) 259 CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1., zkt, ssnd_c2n(id_vsno0_ip)%nid(1,1), srcv_c2n(id_vsno0_ng)%nid(1,1) ) 260 CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1., zkt, ssnd_c2n(id_vice0_ip)%nid(1,1), srcv_c2n(id_vice0_ng)%nid(1,1) ) 254 261 snwice_mass (:,:) = ( rhosn * ztmp1(:,:) + rhoic * ztmp2(:,:) ) 255 262 snwice_mass_b(:,:) = snwice_mass(:,:) … … 299 306 ENDIF 300 307 ENDIF 301 308 if(lwp) write(numout,*) 'END cice_sbc_init' 309 if(lwp) call flush(numout) 302 310 CALL wrk_dealloc( jpi,jpj, ztmp1, ztmp2 ) 303 311 ! … … 319 327 REAL(wp), DIMENSION(:,:,:), POINTER :: ztmpn 320 328 REAL(wp) :: zintb, zintn ! dummy argument 329 INTEGER :: kinfo, isec 321 330 !!--------------------------------------------------------------------- 322 331 … … 330 339 ENDIF 331 340 332 ztmp(:,:)=0.0333 334 341 ! Aggregate ice concentration already set in cice_sbc_out (or cice_sbc_init on 335 342 ! the first time-step) 336 343 337 ! forced and coupled case 338 344 ztmp(:,:)=0.0 339 345 IF ( (ksbc == jp_flx).OR.(ksbc == jp_purecpl) ) THEN 340 346 … … 349 355 ENDDO 350 356 ENDDO 351 CALL nemo2cice(ztmp,strax,'F', -1. )357 CALL nemo2cice(ztmp,strax,'F', -1., kt, ssnd_n2c(id_strax_np)%nid(1,1), srcv_n2c(id_strax_ig)%nid(1,1) ) 352 358 353 359 ! y comp of wind stress (CI_2) … … 359 365 ENDDO 360 366 ENDDO 361 CALL nemo2cice(ztmp,stray,'F', -1. 367 CALL nemo2cice(ztmp,stray,'F', -1., kt, ssnd_n2c(id_stray_np)%nid(1,1), srcv_n2c(id_stray_ig)%nid(1,1)) 362 368 363 369 … … 382 388 ztmpn(:,:,jl)=qla_ice(:,:,jl)*a_i(:,:,jl) 383 389 ENDDO 384 390 ELSE 385 391 !In coupled mode - qla_ice calculated in sbc_cpl for each category 386 392 ztmpn(:,:,1:ncat)=qla_ice(:,:,1:ncat) … … 388 394 389 395 DO jl=1,ncat 390 CALL nemo2cice(ztmpn(:,:,jl),flatn_f(:,:,jl,:),'T', 1. 396 CALL nemo2cice(ztmpn(:,:,jl),flatn_f(:,:,jl,:),'T', 1., kt, ssnd_n2c(id_flatn_f_np)%nid(1,jl), srcv_n2c(id_flatn_f_ig)%nid(1,jl)) 391 397 392 398 ! GBM conductive flux through ice (CI_6) … … 397 403 ztmp(:,:) = botmelt(:,:,jl) 398 404 ENDIF 399 CALL nemo2cice(ztmp,fcondtopn_f(:,:,jl,:),'T', 1. 405 CALL nemo2cice(ztmp,fcondtopn_f(:,:,jl,:),'T', 1., kt, ssnd_n2c(id_fcondtopn_f_np)%nid(1,jl), srcv_n2c(id_fcondtopn_f_ig)%nid(1,jl)) 400 406 401 407 ! GBM surface heat flux (CI_7) … … 406 412 ztmp(:,:) = (topmelt(:,:,jl)+botmelt(:,:,jl)) 407 413 ENDIF 408 CALL nemo2cice(ztmp,fsurfn_f(:,:,jl,:),'T', 1. 414 CALL nemo2cice(ztmp,fsurfn_f(:,:,jl,:),'T', 1., kt, ssnd_n2c(id_fsurfn_f_np)%nid(1,jl), srcv_n2c(id_fsurfn_f_ig)%nid(1,jl)) 409 415 ENDDO 410 416 … … 414 420 ! x comp and y comp of atmosphere surface wind (CICE expects on T points) 415 421 ztmp(:,:) = wndi_ice(:,:) 416 CALL nemo2cice(ztmp,uatm,'T', -1. )422 CALL nemo2cice(ztmp,uatm,'T', -1., kt, ssnd_n2c(id_uatm_np)%nid(1,1), srcv_n2c(id_uatm_ig)%nid(1,1) ) 417 423 ztmp(:,:) = wndj_ice(:,:) 418 CALL nemo2cice(ztmp,vatm,'T', -1. )424 CALL nemo2cice(ztmp,vatm,'T', -1., kt, ssnd_n2c(id_vatm_np)%nid(1,1), srcv_n2c(id_vatm_ig)%nid(1,1) ) 419 425 ztmp(:,:) = SQRT ( wndi_ice(:,:)**2 + wndj_ice(:,:)**2 ) 420 CALL nemo2cice(ztmp,wind,'T', 1. ) ! Wind speed (m/s)426 CALL nemo2cice(ztmp,wind,'T', 1., kt, ssnd_n2c(id_wind_np)%nid(1,1), srcv_n2c(id_wind_ig)%nid(1,1) ) ! Wind speed (m/s) 421 427 ztmp(:,:) = qsr_ice(:,:,1) 422 CALL nemo2cice(ztmp,fsw,'T', 1. ) ! Incoming short-wave (W/m^2)428 CALL nemo2cice(ztmp,fsw,'T', 1., kt, ssnd_n2c(id_fsw_np)%nid(1,1), srcv_n2c(id_fsw_ig)%nid(1,1) ) ! Incoming short-wave (W/m^2) 423 429 ztmp(:,:) = qlw_ice(:,:,1) 424 CALL nemo2cice(ztmp,flw,'T', 1. ) ! Incoming long-wave (W/m^2)430 CALL nemo2cice(ztmp,flw,'T', 1., kt, ssnd_n2c(id_flw_np)%nid(1,1), srcv_n2c(id_flw_ig)%nid(1,1) ) ! Incoming long-wave (W/m^2) 425 431 ztmp(:,:) = tatm_ice(:,:) 426 CALL nemo2cice(ztmp,Tair,'T', 1. ) ! Air temperature (K)427 CALL nemo2cice(ztmp,potT,'T', 1. ) ! Potential temp (K)432 CALL nemo2cice(ztmp,Tair,'T', 1., kt, ssnd_n2c(id_Tair_np)%nid(1,1), srcv_n2c(id_Tair_ig)%nid(1,1) ) ! Air temperature (K) 433 CALL nemo2cice(ztmp,potT,'T', 1., kt, ssnd_n2c(id_potT_np)%nid(1,1), srcv_n2c(id_potT_ig)%nid(1,1) ) ! Potential temp (K) 428 434 ! Following line uses MAX(....) to avoid problems if tatm_ice has unset halo rows 429 435 ztmp(:,:) = 101000. / ( 287.04 * MAX(1.0,tatm_ice(:,:)) ) 430 436 ! Constant (101000.) atm pressure assumed 431 CALL nemo2cice(ztmp,rhoa,'T', 1. ) ! Air density (kg/m^3)437 CALL nemo2cice(ztmp,rhoa,'T', 1., kt, ssnd_n2c(id_rhoa_np)%nid(1,1), srcv_n2c(id_rhoa_ig)%nid(1,1) ) ! Air density (kg/m^3) 432 438 ztmp(:,:) = qatm_ice(:,:) 433 CALL nemo2cice(ztmp,Qa,'T', 1. ) ! Specific humidity (kg/kg)439 CALL nemo2cice(ztmp,Qa,'T', 1., kt, ssnd_n2c(id_Qa_np)%nid(1,1), srcv_n2c(id_Qa_ig)%nid(1,1) ) ! Specific humidity (kg/kg) 434 440 ztmp(:,:)=10.0 435 CALL nemo2cice(ztmp,zlvl,'T', 1. ) ! Atmos level height (m)441 CALL nemo2cice(ztmp,zlvl,'T', 1., kt, ssnd_n2c(id_zlvl_np)%nid(1,1), srcv_n2c(id_zlvl_ig)%nid(1,1) ) ! Atmos level height (m) 436 442 437 443 ! May want to check all values are physically realistic (as in CICE routine … … 440 446 ! Divide shortwave into spectral bands (as in prepare_forcing) 441 447 ztmp(:,:)=qsr_ice(:,:,1)*frcvdr ! visible direct 442 CALL nemo2cice(ztmp,swvdr,'T', 1. )448 CALL nemo2cice(ztmp,swvdr,'T', 1., kt, ssnd_n2c(id_swvdr_np)%nid(1,1), srcv_n2c(id_swvdr_ig)%nid(1,1) ) 443 449 ztmp(:,:)=qsr_ice(:,:,1)*frcvdf ! visible diffuse 444 CALL nemo2cice(ztmp,swvdf,'T', 1. )450 CALL nemo2cice(ztmp,swvdf,'T', 1., kt, ssnd_n2c(id_swvdf_np)%nid(1,1), srcv_n2c(id_swvdf_ig)%nid(1,1) ) 445 451 ztmp(:,:)=qsr_ice(:,:,1)*frcidr ! near IR direct 446 CALL nemo2cice(ztmp,swidr,'T', 1. )452 CALL nemo2cice(ztmp,swidr,'T', 1., kt, ssnd_n2c(id_swidr_np)%nid(1,1), srcv_n2c(id_swidr_ig)%nid(1,1) ) 447 453 ztmp(:,:)=qsr_ice(:,:,1)*frcidf ! near IR diffuse 448 CALL nemo2cice(ztmp,swidf,'T', 1. )454 CALL nemo2cice(ztmp,swidf,'T', 1., kt, ssnd_n2c(id_swidf_np)%nid(1,1), srcv_n2c(id_swidf_ig)%nid(1,1) ) 449 455 450 456 ENDIF … … 454 460 IF( iom_use('snowpre') ) CALL iom_put('snowpre',MAX( (1.0-fr_i(:,:))*sprecip(:,:) ,0.0)) !!Joakim edit 455 461 ztmp(:,:)=MAX(fr_i(:,:)*sprecip(:,:),0.0) 456 CALL nemo2cice(ztmp,fsnow,'T', 1. )462 CALL nemo2cice(ztmp,fsnow,'T', 1., kt, ssnd_n2c(id_fsnow_np)%nid(1,1), srcv_n2c(id_fsnow_ig)%nid(1,1) ) 457 463 458 464 ! Rainfall 459 465 IF( iom_use('precip') ) CALL iom_put('precip', (1.0-fr_i(:,:))*(tprecip(:,:)-sprecip(:,:)) ) !!Joakim edit 460 466 ztmp(:,:)=fr_i(:,:)*(tprecip(:,:)-sprecip(:,:)) 461 CALL nemo2cice(ztmp,frain,'T', 1. )467 CALL nemo2cice(ztmp,frain,'T', 1., kt, ssnd_n2c(id_frain_np)%nid(1,1), srcv_n2c(id_frain_ig)%nid(1,1) ) 462 468 463 469 ! Recalculate freezing temperature and send to CICE 464 470 CALL eos_fzp(sss_m(:,:), sstfrz(:,:), fsdept_n(:,:,1)) 465 CALL nemo2cice(sstfrz,Tf,'T', 1. )471 CALL nemo2cice(sstfrz,Tf,'T', 1., kt, ssnd_n2c(id_sstfrz_np)%nid(1,1), srcv_n2c(id_Tf_ig)%nid(1,1) ) 466 472 467 473 ! Freezing/melting potential 468 474 ! Calculated over NEMO leapfrog timestep (hence 2*dt) 469 475 nfrzmlt(:,:)=rau0*rcp*fse3t_m(:,:)*(sstfrz(:,:)-sst_m(:,:))/(2.0*dt) 470 CALL nemo2cice(nfrzmlt,frzmlt,'T', 1. )476 CALL nemo2cice(nfrzmlt,frzmlt,'T', 1., kt, ssnd_n2c(id_nfrzmlt_np)%nid(1,1), srcv_n2c(id_frzmlt_ig)%nid(1,1) ) 471 477 472 478 ! SST and SSS 473 479 474 CALL nemo2cice(sst_m,sst,'T', 1. )475 CALL nemo2cice(sss_m,sss,'T', 1. )480 CALL nemo2cice(sst_m,sst,'T', 1., kt, ssnd_n2c(id_sst_m_np)%nid(1,1), srcv_n2c(id_sst_m_ig)%nid(1,1) ) 481 CALL nemo2cice(sss_m,sss,'T', 1., kt, ssnd_n2c(id_sss_m_np)%nid(1,1), srcv_n2c(id_sss_m_ig)%nid(1,1) ) 476 482 477 483 IF( ksbc == jp_purecpl ) THEN 478 484 ! Sea ice surface skin temperature 479 485 DO jl=1,ncat 480 CALL nemo2cice(tsfc_ice(:,:,jl), trcrn(:,:,nt_tsfc,jl,:),'T',1. )486 CALL nemo2cice(tsfc_ice(:,:,jl), trcrn(:,:,nt_tsfc,jl,:),'T',1., kt, ssnd_n2c(id_tsfc_ice_np)%nid(1,jl), srcv_n2c(id_trcrn_ig)%nid(1,jl)) 481 487 ENDDO 482 488 ENDIF … … 489 495 ENDDO 490 496 ENDDO 491 CALL nemo2cice(ztmp,uocn,'F', -1. )497 CALL nemo2cice(ztmp,uocn,'F', -1., kt, ssnd_n2c(id_uocn_np)%nid(1,1), srcv_n2c(id_uocn_ig)%nid(1,1) ) 492 498 493 499 ! V point to F point … … 497 503 ENDDO 498 504 ENDDO 499 CALL nemo2cice(ztmp,vocn,'F', -1. )505 CALL nemo2cice(ztmp,vocn,'F', -1., kt, ssnd_n2c(id_vocn_np)%nid(1,1), srcv_n2c(id_vocn_ig)%nid(1,1) ) 500 506 501 507 IF( nn_ice_embd == 2 ) THEN !== embedded sea ice: compute representative ice top surface ==! … … 525 531 ENDDO 526 532 ENDDO 527 CALL nemo2cice(ztmp,ss_tltx,'F', -1. )533 CALL nemo2cice(ztmp,ss_tltx,'F', -1., kt, ssnd_n2c(id_ss_tltx_np)%nid(1,1), srcv_n2c(id_ss_tltx_ig)%nid(1,1) ) 528 534 529 535 ! T point to F point … … 535 541 ENDDO 536 542 ENDDO 537 CALL nemo2cice(ztmp,ss_tlty,'F', -1. )543 CALL nemo2cice(ztmp,ss_tlty,'F', -1., kt, ssnd_n2c(id_ss_tlty_np)%nid(1,1), srcv_n2c(id_ss_tlty_ig)%nid(1,1) ) 538 544 539 545 CALL wrk_dealloc( jpi,jpj, ztmp, zpice ) … … 555 561 INTEGER :: ji, jj, jl ! dummy loop indices 556 562 REAL(wp), DIMENSION(:,:), POINTER :: ztmp1, ztmp2 563 INTEGER :: kinfo, isec 564 REAL(wp) :: amaxv, aminv 557 565 !!--------------------------------------------------------------------- 558 566 … … 564 572 IF(lwp) WRITE(numout,*)'cice_sbc_out' 565 573 ENDIF 566 574 ! isec = (kt-1)*rdt 575 ! ztmp1 = 2. 576 ! CALL oasis_get ( srcv_n2c(1)%nid(1,1), isec, ztmp1(nldi:nlei, nldj:nlej), kinfo ) 577 ! amaxv = maxval(ztmp1(nldi:nlei, nldj:nlej)) 578 ! aminv = minval(ztmp1(nldi:nlei, nldj:nlej)) 579 ! vcice = ztmp1 580 ! call mpp_max(amaxv) 581 ! call mpp_min(aminv) 582 ! if(lwp) write(numout,*) 'MAX/MIN OASIS: ', amaxv, aminv, kinfo 583 ! write(*,*) amaxv, aminv, 'NEMO from CICE ',narea 567 584 ! x comp of ocean-ice stress 568 CALL cice2nemo(strocnx,ztmp1,'F', -1. 585 CALL cice2nemo(strocnx,ztmp1,'F', -1., kt, ssnd_c2n(id_strocnx_ip)%nid(1,1), srcv_c2n(id_strocnx_ng)%nid(1,1)) 569 586 ss_iou(:,:)=0.0 570 587 ! F point to U point … … 577 594 578 595 ! y comp of ocean-ice stress 579 CALL cice2nemo(strocny,ztmp1,'F', -1. )596 CALL cice2nemo(strocny,ztmp1,'F', -1., kt, ssnd_c2n(id_strocny_ip)%nid(1,1), srcv_c2n(id_strocny_ng)%nid(1,1) ) 580 597 ss_iov(:,:)=0.0 581 598 ! F point to V point … … 598 615 ! Also need ice/ocean stress on T points so that taum can be updated 599 616 ! This interpolation is already done in CICE so best to use those values 600 CALL cice2nemo(strocnxT,ztmp1,'T',-1. )601 CALL cice2nemo(strocnyT,ztmp2,'T',-1. )617 CALL cice2nemo(strocnxT,ztmp1,'T',-1., kt, ssnd_c2n(id_strocnxT_ip)%nid(1,1), srcv_c2n(id_strocnxT_ng)%nid(1,1)) 618 CALL cice2nemo(strocnyT,ztmp2,'T',-1., kt, ssnd_c2n(id_strocnyT_ip)%nid(1,1), srcv_c2n(id_strocnyT_ng)%nid(1,1)) 602 619 603 620 ! Update taum with modulus of ice-ocean stress … … 622 639 623 640 #if defined key_cice4 624 CALL cice2nemo(fresh_gbm,ztmp1,'T', 1. 625 CALL cice2nemo(fsalt_gbm,ztmp2,'T', 1. )641 CALL cice2nemo(fresh_gbm,ztmp1,'T', 1., kt, ssnd_c2n(id_fresh_ai_ip)%nid(1,1), srcv_c2n(id_fresh_ai_ng)%nid(1,1)) 642 CALL cice2nemo(fsalt_gbm,ztmp2,'T', 1., kt, ssnd_c2n(id_fsalt_ai_ip)%nid(1,1), srcv_c2n(id_fsalt_ai_ng)%nid(1,1) ) 626 643 #else 627 CALL cice2nemo(fresh_ai,ztmp1,'T', 1. )628 CALL cice2nemo(fsalt_ai,ztmp2,'T', 1. )644 CALL cice2nemo(fresh_ai,ztmp1,'T', 1., kt, ssnd_c2n(id_fresh_ai_ip)%nid(1,1), srcv_c2n(id_fresh_ai_ng)%nid(1,1) ) 645 CALL cice2nemo(fsalt_ai,ztmp2,'T', 1., kt, ssnd_c2n(id_fsalt_ai_ip)%nid(1,1), srcv_c2n(id_fsalt_ai_ng)%nid(1,1) ) 629 646 #endif 630 647 … … 661 678 ! [fswthru will be zero unless running with calc_Tsfc=T in CICE] 662 679 #if defined key_cice4 663 CALL cice2nemo(fswthru_gbm,ztmp1,'T', 1. )680 CALL cice2nemo(fswthru_gbm,ztmp1,'T', 1., kt, ssnd_c2n(id_fswthru_ai_ip)%nid(1,1), srcv_c2n(id_fswthru_ai_ng)%nid(1,1) ) 664 681 #else 665 CALL cice2nemo(fswthru_ai,ztmp1,'T', 1. )682 CALL cice2nemo(fswthru_ai,ztmp1,'T', 1., kt, ssnd_c2n(id_fswthru_ai_ip)%nid(1,1), srcv_c2n(id_fswthru_ai_ng)%nid(1,1) ) 666 683 #endif 667 684 qsr(:,:)=qsr(:,:)+ztmp1(:,:) … … 675 692 676 693 #if defined key_cice4 677 CALL cice2nemo(fhocn_gbm,ztmp1,'T', 1. )694 CALL cice2nemo(fhocn_gbm,ztmp1,'T', 1., kt, ssnd_c2n(id_fhocn_ai_ip)%nid(1,1), srcv_c2n(id_fhocn_ai_ng)%nid(1,1) ) 678 695 #else 679 CALL cice2nemo(fhocn_ai,ztmp1,'T', 1. )696 CALL cice2nemo(fhocn_ai,ztmp1,'T', 1., kt, ssnd_c2n(id_fhocn_ai_ip)%nid(1,1), srcv_c2n(id_fhocn_ai_ng)%nid(1,1) ) 680 697 #endif 681 698 qns(:,:)=qns(:,:)+nfrzmlt(:,:)+ztmp1(:,:) … … 685 702 ! Prepare for the following CICE time-step 686 703 687 CALL cice2nemo(aice,fr_i,'T', 1. )704 CALL cice2nemo(aice,fr_i,'T', 1., kt, ssnd_c2n(id_aice_ip)%nid(1,1), srcv_c2n(id_fr_i_ng)%nid(1,1) ) 688 705 IF ( (ksbc == jp_flx).OR.(ksbc == jp_purecpl) ) THEN 689 706 DO jl=1,ncat 690 CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1. )707 CALL cice2nemo(aicen(:,:,jl,:),a_i(:,:,jl), 'T', 1., kt, ssnd_c2n(id_aicen_ip)%nid(1,jl), srcv_c2n(id_a_i_ng)%nid(1,jl) ) 691 708 ENDDO 692 709 ENDIF … … 706 723 ! ! embedded sea ice 707 724 IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 708 CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1. )709 CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1. )725 CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1., kt, ssnd_c2n(id_vsno_ip)%nid(1,1), srcv_c2n(id_vsno_ng)%nid(1,1) ) 726 CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1., kt, ssnd_c2n(id_vice_ip)%nid(1,1), srcv_c2n(id_vice_ng)%nid(1,1) ) 710 727 snwice_mass (:,:) = ( rhosn * ztmp1(:,:) + rhoic * ztmp2(:,:) ) 711 728 snwice_mass_b(:,:) = snwice_mass(:,:) … … 747 764 ! x and y comp of ice velocity 748 765 749 CALL cice2nemo(uvel,u_ice,'F', -1. )750 CALL cice2nemo(vvel,v_ice,'F', -1. )766 CALL cice2nemo(uvel,u_ice,'F', -1., kt, ssnd_c2n(id_uvel_ip)%nid(1,1) , srcv_c2n(id_u_ice_ng)%nid(1,1) ) 767 CALL cice2nemo(vvel,v_ice,'F', -1., kt, ssnd_c2n(id_vvel_ip)%nid(1,1), srcv_c2n(id_v_ice_ng)%nid(1,1) ) 751 768 752 769 ! Ice concentration (CO_1) = a_i calculated at end of cice_sbc_out … … 755 772 756 773 DO jl = 1,ncat 757 CALL cice2nemo(vsnon(:,:,jl,:),ht_s(:,:,jl),'T', 1. 758 CALL cice2nemo(vicen(:,:,jl,:),ht_i(:,:,jl),'T', 1. 774 CALL cice2nemo(vsnon(:,:,jl,:),ht_s(:,:,jl),'T', 1., kt, ssnd_c2n(id_vsnon_ip)%nid(1,jl), srcv_c2n(id_ht_s_ng)%nid(1,jl)) 775 CALL cice2nemo(vicen(:,:,jl,:),ht_i(:,:,jl),'T', 1., kt, ssnd_c2n(id_vicen_ip)%nid(1,jl), srcv_c2n(id_ht_i_ng)%nid(1,jl)) 759 776 ENDDO 760 777 … … 762 779 ! Meltpond fraction and depth 763 780 DO jl = 1,ncat 764 CALL cice2nemo(apeffn(:,:,jl,:),a_p(:,:,jl),'T', 1. )765 CALL cice2nemo(trcrn(:,:,nt_hpnd,jl,:),ht_p(:,:,jl),'T', 1. )781 CALL cice2nemo(apeffn(:,:,jl,:),a_p(:,:,jl),'T', 1., kt, ssnd_c2n(id_apeffn_ip)%nid(1,jl), srcv_c2n(id_a_p_ng)%nid(1,jl) ) 782 CALL cice2nemo(trcrn(:,:,nt_hpnd,jl,:),ht_p(:,:,jl),'T', 1., kt, ssnd_c2n(id_trcrn_ip)%nid(1,jl), srcv_c2n(id_ht_p_ng)%nid(1,jl) ) 766 783 ENDDO 767 784 #endif … … 776 793 IF (heat_capacity) THEN 777 794 DO jl = 1,ncat 778 CALL cice2nemo(Tn_top(:,:,jl,:),tn_ice(:,:,jl),'T', 1. )779 CALL cice2nemo(keffn_top(:,:,jl,:),kn_ice(:,:,jl),'T', 1. )795 CALL cice2nemo(Tn_top(:,:,jl,:),tn_ice(:,:,jl),'T', 1., kt, ssnd_c2n(id_Tn_top_ip)%nid(1,jl), srcv_c2n(id_tn_ice_ng)%nid(1,jl) ) 796 CALL cice2nemo(keffn_top(:,:,jl,:),kn_ice(:,:,jl),'T', 1., kt, ssnd_c2n(id_keffn_top_ip)%nid(1,jl), srcv_c2n(id_kn_ice_ng)%nid(1,jl) ) 780 797 ENDDO 781 798 ! Convert surface temperature to Kelvin … … 926 943 END SUBROUTINE cice_sbc_force 927 944 928 SUBROUTINE nemo2cice( pn, pc, cd_type, psgn )945 SUBROUTINE nemo2cice( pn, pc, cd_type, psgn, kt, idn, idc) 929 946 !!--------------------------------------------------------------------- 930 947 !! *** ROUTINE nemo2cice *** … … 944 961 #endif 945 962 !!--------------------------------------------------------------------- 946 963 INTEGER, INTENT( in ) :: idn, idc 947 964 CHARACTER(len=1), INTENT( in ) :: & 948 965 cd_type ! nature of pn grid-point … … 952 969 ! ! =-1 , the sign is modified following the type of b.c. used 953 970 ! ! = 1 , no sign change 971 INTEGER, INTENT(IN) :: kt 954 972 REAL(wp), DIMENSION(jpi,jpj) :: pn 955 #if !defined key_nemocice_decomp956 REAL(wp), DIMENSION(jpiglo,jpjglo) :: png2957 REAL (kind=dbl_kind), dimension(nx_global,ny_global) :: pcg958 #endif959 973 REAL (kind=dbl_kind), dimension(nx_block,ny_block,max_blocks) :: pc 960 974 INTEGER (int_kind) :: & … … 964 978 965 979 INTEGER :: ji, jj, jn ! dummy loop indices 980 INTEGER :: isec, kinfo, iblk 981 type (block) :: bk 966 982 967 983 ! A. Ensure all haloes are filled in NEMO field (pn) … … 980 996 981 997 #else 982 983 ! B. Gather pn into global array (png) 984 985 IF ( jpnij > 1) THEN 986 CALL mppsync 987 CALL mppgather (pn,0,png) 988 CALL mppsync 989 ELSE 990 png(:,:,1)=pn(:,:) 991 ENDIF 992 993 ! C. Map png into CICE global array (pcg) 994 995 ! Need to make sure this is robust to changes in NEMO halo rows.... 996 ! (may be OK but not 100% sure) 997 998 IF (nproc==0) THEN 999 ! pcg(:,:)=0.0 1000 DO jn=1,jpnij 1001 DO jj=nldjt(jn),nlejt(jn) 1002 DO ji=nldit(jn),nleit(jn) 1003 png2(ji+nimppt(jn)-1,jj+njmppt(jn)-1)=png(ji,jj,jn) 1004 ENDDO 1005 ENDDO 1006 ENDDO 1007 DO jj=1,ny_global 1008 DO ji=1,nx_global 1009 pcg(ji,jj)=png2(ji+ji_off,jj+jj_off) 1010 ENDDO 1011 ENDDO 1012 ENDIF 1013 998 !MA 999 !MA! B. Gather pn into global array (png) 1000 !MA 1001 !MA IF ( jpnij > 1) THEN 1002 !MA CALL mppsync 1003 !MA CALL mppgather (pn,0,png) 1004 !MA CALL mppsync 1005 !MA ELSE 1006 !MA png(:,:,1)=pn(:,:) 1007 !MA ENDIF 1008 1009 !MA! C. Map png into CICE global array (pcg) 1010 1011 !MA! Need to make sure this is robust to changes in NEMO halo rows.... 1012 !MA! (may be OK but not 100% sure) 1013 1014 !MA IF (nproc==0) THEN 1015 !MA! pcg(:,:)=0.0 1016 !MA DO jn=1,jpnij 1017 !MA DO jj=nldjt(jn),nlejt(jn) 1018 !MA DO ji=nldit(jn),nleit(jn) 1019 !MA png2(ji+nimppt(jn)-1,jj+njmppt(jn)-1)=png(ji,jj,jn) 1020 !MA ENDDO 1021 !MA ENDDO 1022 !MA ENDDO 1023 !MA DO jj=1,ny_global 1024 !MA DO ji=1,nx_global 1025 !MA pcg(ji,jj)=png2(ji+ji_off,jj+jj_off) 1026 !MA ENDDO 1027 !MA ENDDO 1028 !MA ENDIF 1029 1030 ! forced and coupled case 1031 isec = (kt-1)*rdt 1032 iblk = 1 1033 bk = get_block(blocks_ice(iblk), iblk) 1034 CALL oasis_put ( idn, isec, pn(nldi:nlei, nldj:nlej), kinfo ) 1035 CALL oasis_get ( idc, isec, pc(bk%ilo:bk%ihi,bk%jlo:bk%jhi,1), kinfo ) 1014 1036 #endif 1015 1037 … … 1033 1055 #else 1034 1056 ! D. Scatter pcg to CICE blocks (pc) + update halos 1035 CALL scatter_global(pc, pcg, 0, distrb_info, grid_loc, field_type) 1057 !MA CALL scatter_global(pc, pcg, 0, distrb_info, grid_loc, field_type) 1058 ! Ensure CICE halos are up to date 1059 CALL ice_HaloUpdate (pc, halo_info, grid_loc, field_type) 1036 1060 #endif 1037 1061 1038 1062 END SUBROUTINE nemo2cice 1039 1063 1040 SUBROUTINE cice2nemo ( pc, pn, cd_type, psgn )1064 SUBROUTINE cice2nemo ( pc, pn, cd_type, psgn, kt, idc, idn ) 1041 1065 !!--------------------------------------------------------------------- 1042 1066 !! *** ROUTINE cice2nemo *** … … 1065 1089 ! ! = 1 , no sign change 1066 1090 REAL(wp), DIMENSION(jpi,jpj) :: pn 1067 1068 #if defined key_nemocice_decomp 1091 INTEGER, INTENT( in ) :: idc, idn 1092 INTEGER, INTENT(IN) :: kt 1093 1094 !#if defined key_nemocice_decomp 1069 1095 INTEGER (int_kind) :: & 1070 1096 field_type, & ! id for type of field (scalar, vector, angle) 1071 1097 grid_loc ! id for location on horizontal grid 1072 1098 ! (center, NEcorner, Nface, Eface) 1073 #else 1074 REAL (kind=dbl_kind), dimension(nx_global,ny_global) :: pcg 1075 #endif 1099 !#else 1100 !MA REAL (kind=dbl_kind), dimension(nx_global,ny_global) :: pcg 1101 !#endif 1102 type(block) :: bk 1076 1103 1077 1104 REAL (kind=dbl_kind), dimension(nx_block,ny_block,max_blocks) :: pc 1078 1105 1079 1106 INTEGER :: ji, jj, jn ! dummy loop indices 1080 1081 1082 #if defined key_nemocice_decomp 1107 INTEGER :: kinfo, isec, iblk 1083 1108 1084 1109 SELECT CASE ( cd_type ) … … 1098 1123 CALL ice_HaloUpdate (pc, halo_info, grid_loc, field_type) 1099 1124 1100 1125 #if defined key_nemocice_decomp 1101 1126 pn(:,:)=0.0 1102 1127 DO jj=1,jpjm1 … … 1108 1133 #else 1109 1134 1110 ! A. Gather CICE blocks (pc) into global array (pcg)1111 1112 CALL gather_global(pcg, pc, 0, distrb_info)1113 1114 ! B. Map pcg into NEMO global array (png)1115 1116 ! Need to make sure this is robust to changes in NEMO halo rows....1117 ! (may be OK but not spent much time thinking about it)1118 ! Note that non-existent pcg elements may be used below, but1119 ! the lbclnk call on pn will replace these with sensible values1120 1121 IF (nproc==0) THEN1122 png(:,:,:)=0.01123 DO jn=1,jpnij1124 DO jj=nldjt(jn),nlejt(jn)1125 DO ji=nldit(jn),nleit(jn)1126 png(ji,jj,jn)=pcg(ji+nimppt(jn)-1-ji_off,jj+njmppt(jn)-1-jj_off)1127 ENDDO1128 ENDDO1129 ENDDO1130 ENDIF1135 !MA! A. Gather CICE blocks (pc) into global array (pcg) 1136 1137 !MA CALL gather_global(pcg, pc, 0, distrb_info) 1138 1139 !MA! B. Map pcg into NEMO global array (png) 1140 1141 !MA! Need to make sure this is robust to changes in NEMO halo rows.... 1142 !MA! (may be OK but not spent much time thinking about it) 1143 !MA! Note that non-existent pcg elements may be used below, but 1144 !MA! the lbclnk call on pn will replace these with sensible values 1145 1146 !MA IF (nproc==0) THEN 1147 !MA png(:,:,:)=0.0 1148 !MA DO jn=1,jpnij 1149 !MA DO jj=nldjt(jn),nlejt(jn) 1150 !MA DO ji=nldit(jn),nleit(jn) 1151 !MA png(ji,jj,jn)=pcg(ji+nimppt(jn)-1-ji_off,jj+njmppt(jn)-1-jj_off) 1152 !MA ENDDO 1153 !MA ENDDO 1154 !MA ENDDO 1155 !MA ENDIF 1131 1156 1132 1157 ! C. Scatter png into NEMO field (pn) for each processor 1133 1158 1134 IF ( jpnij > 1) THEN 1135 CALL mppsync 1136 CALL mppscatter (png,0,pn) 1137 CALL mppsync 1138 ELSE 1139 pn(:,:)=png(:,:,1) 1140 ENDIF 1141 1159 !MA IF ( jpnij > 1) THEN 1160 !MA CALL mppsync 1161 !MA CALL mppscatter (png,0,pn) 1162 !MA CALL mppsync 1163 !MA ELSE 1164 !MA pn(:,:)=png(:,:,1) 1165 !MA ENDIF 1166 isec = (kt-1)*rdt 1167 iblk = 1 1168 bk = get_block(blocks_ice(iblk), iblk) 1169 CALL oasis_put ( idc, isec, pc(bk%ilo:bk%ihi,bk%jlo:bk%jhi,1), kinfo ) 1170 CALL oasis_get ( idn, isec, pn(nldi:nlei, nldj:nlej), kinfo ) 1142 1171 #endif 1143 1172 … … 1156 1185 1157 1186 SUBROUTINE sbc_ice_cice ( kt, ksbc ) ! Dummy routine 1187 INTEGER, INTENT(IN) :: kt, ksbc 1158 1188 WRITE(*,*) 'sbc_ice_cice: You should not have seen this print! error?', kt 1159 1189 END SUBROUTINE sbc_ice_cice 1160 1190 1161 SUBROUTINE cice_sbc_init (ksbc) ! Dummy routine 1191 SUBROUTINE cice_sbc_init (kt, ksbc) ! Dummy routine 1192 INTEGER, INTENT(IN) :: kt, ksbc 1162 1193 WRITE(*,*) 'cice_sbc_init: You should not have seen this print! error?' 1163 1194 END SUBROUTINE cice_sbc_init -
branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r6498 r8975 267 267 ! 268 268 IF( lk_oasis ) CALL sbc_cpl_init (nn_ice) ! OASIS initialisation. must be done before: (1) first time step 269 ! ! (2) the use of nn_fsbc 270 269 IF( nn_ice == 4 ) CALL cice_sbc_init( nsbc ) ! CICE initialisation 270 call flush(numout) 271 ! (2) the use of nn_fsbc 271 272 ! nn_fsbc initialization if OPA-SAS coupling via OASIS 272 273 ! sas model time step has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly … … 304 305 IF( nn_ice == 3 ) CALL sbc_lim_init ! LIM3 initialisation 305 306 306 IF( nn_ice == 4 ) CALL cice_sbc_init( nsbc ) ! CICE initialisation307 308 307 END SUBROUTINE sbc_init 309 308 -
branches/UKMO/2017_dev_r7573_oasis/NEMOGCM/NEMO/OPA_SRC/oce.F90
r6755 r8975 32 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhd !: in situ density anomalie rhd=(rho-rau0)/rau0 [no units] 33 33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhop !: potential volumic mass [kg/m3] 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vcice 34 35 35 36 !! free surface ! before ! now ! after ! … … 97 98 !! *** FUNCTION oce_alloc *** 98 99 !!---------------------------------------------------------------------- 99 INTEGER :: ierr( 4)100 INTEGER :: ierr(5) 100 101 !!---------------------------------------------------------------------- 101 102 ! … … 129 130 & riceload(jpi,jpj), STAT=ierr(2) ) 130 131 ! 132 ALLOCATE(vcice (jpi,jpj)) 131 133 ALLOCATE( snwice_mass(jpi,jpj) , snwice_mass_b(jpi,jpj), snwice_fmass(jpi,jpj) , STAT=ierr(3) ) 132 134 !
Note: See TracChangeset
for help on using the changeset viewer.