Changeset 7646 for trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
- Timestamp:
- 2017-02-06T10:25:03+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r6722 r7646 18 18 !! sbc_cpl_snd : send fields to the atmosphere 19 19 !!---------------------------------------------------------------------- 20 USE dom_oce ! ocean space and time domain 21 USE sbc_oce ! Surface boundary condition: ocean fields 22 USE sbc_ice ! Surface boundary condition: ice fields 23 USE sbcapr ! Stochastic param. : ??? 24 USE sbcdcy ! surface boundary condition: diurnal cycle 25 USE phycst ! physical constants 20 USE dom_oce ! ocean space and time domain 21 USE sbc_oce ! Surface boundary condition: ocean fields 22 USE trc_oce ! share SMS/Ocean variables 23 USE sbc_ice ! Surface boundary condition: ice fields 24 USE sbcapr ! Stochastic param. : ??? 25 USE sbcdcy ! surface boundary condition: diurnal cycle 26 USE sbcwave ! surface boundary condition: waves 27 USE phycst ! physical constants 26 28 #if defined key_lim3 27 29 USE ice ! ice variables … … 36 38 USE albedo ! 37 39 USE eosbn2 ! 38 USE sbcrnf , ONLY : l_rnfcpl 39 #if defined key_cpl_carbon_cycle 40 USE p4zflx, ONLY : oce_co2 41 #endif 40 USE sbcrnf, ONLY : l_rnfcpl 42 41 #if defined key_cice 43 42 USE ice_domain_size, only: ncat … … 106 105 INTEGER, PARAMETER :: jpr_e3t1st = 41 ! first T level thickness 107 106 INTEGER, PARAMETER :: jpr_fraqsr = 42 ! fraction of solar net radiation absorbed in the first ocean level 108 INTEGER, PARAMETER :: jprcv = 42 ! total number of fields received 107 INTEGER, PARAMETER :: jpr_mslp = 43 ! mean sea level pressure 108 INTEGER, PARAMETER :: jpr_hsig = 44 ! Hsig 109 INTEGER, PARAMETER :: jpr_phioc = 45 ! Wave=>ocean energy flux 110 INTEGER, PARAMETER :: jpr_sdrftx = 46 ! Stokes drift on grid 1 111 INTEGER, PARAMETER :: jpr_sdrfty = 47 ! Stokes drift on grid 2 112 INTEGER, PARAMETER :: jpr_wper = 48 ! Mean wave period 113 INTEGER, PARAMETER :: jpr_wnum = 49 ! Mean wavenumber 114 INTEGER, PARAMETER :: jpr_wstrf = 50 ! Stress fraction adsorbed by waves 115 INTEGER, PARAMETER :: jpr_wdrag = 51 ! Neutral surface drag coefficient 116 INTEGER, PARAMETER :: jprcv = 51 ! total number of fields received 109 117 110 118 INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction sent to the atmosphere … … 136 144 INTEGER, PARAMETER :: jps_e3t1st = 27 ! first level depth (vvl) 137 145 INTEGER, PARAMETER :: jps_fraqsr = 28 ! fraction of solar net radiation absorbed in the first ocean level 138 INTEGER, PARAMETER :: jpsnd = 28 ! total number of fields sended 146 INTEGER, PARAMETER :: jps_ficet = 29 ! total ice fraction 147 INTEGER, PARAMETER :: jps_ocxw = 30 ! currents on grid 1 148 INTEGER, PARAMETER :: jps_ocyw = 31 ! currents on grid 2 149 INTEGER, PARAMETER :: jps_wlev = 32 ! water level 150 INTEGER, PARAMETER :: jpsnd = 32 ! total number of fields sent 139 151 140 152 ! !!** namelist namsbc_cpl ** … … 150 162 ! ! Received from the atmosphere 151 163 TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, sn_rcv_qns, sn_rcv_emp, sn_rcv_rnf 152 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2 164 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp 165 ! Send to waves 166 TYPE(FLD_C) :: sn_snd_ifrac, sn_snd_crtw, sn_snd_wlev 167 ! Received from waves 168 TYPE(FLD_C) :: sn_rcv_hsig,sn_rcv_phioc,sn_rcv_sdrfx,sn_rcv_sdrfy,sn_rcv_wper,sn_rcv_wnum,sn_rcv_wstrf,sn_rcv_wdrag 153 169 ! ! Other namelist parameters 154 170 INTEGER :: nn_cplmodel ! Maximum number of models to/from which NEMO is potentialy sending/receiving data … … 163 179 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: albedo_oce_mix ! ocean albedo sent to atmosphere (mix clear/overcast sky) 164 180 165 INTEGER , ALLOCATABLE, SAVE, DIMENSION( :) :: nrcvinfo ! OASIS info argument 181 REAL(wp) :: rpref = 101000._wp ! reference atmospheric pressure[N/m2] 182 REAL(wp) :: r1_grau ! = 1.e0 / (grav * rau0) 183 184 INTEGER , ALLOCATABLE, SAVE, DIMENSION( :) :: nrcvinfo ! OASIS info argument 166 185 167 186 !! Substitution 168 187 # include "vectopt_loop_substitute.h90" 169 188 !!---------------------------------------------------------------------- 170 !! NEMO/OPA 3. 7 , NEMO Consortium (2015)189 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 171 190 !! $Id$ 172 191 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 178 197 !! *** FUNCTION sbc_cpl_alloc *** 179 198 !!---------------------------------------------------------------------- 180 INTEGER :: ierr( 3)199 INTEGER :: ierr(4) 181 200 !!---------------------------------------------------------------------- 182 201 ierr(:) = 0 … … 189 208 ALLOCATE( xcplmask(jpi,jpj,0:nn_cplmodel) , STAT=ierr(3) ) 190 209 ! 210 IF( .NOT. ln_apr_dyn ) ALLOCATE( ssh_ib(jpi,jpj), ssh_ibb(jpi,jpj), apr(jpi, jpj), STAT=ierr(4) ) 211 191 212 sbc_cpl_alloc = MAXVAL( ierr ) 192 213 IF( lk_mpp ) CALL mpp_sum ( sbc_cpl_alloc ) … … 214 235 REAL(wp), POINTER, DIMENSION(:,:) :: zacs, zaos 215 236 !! 216 NAMELIST/namsbc_cpl/ sn_snd_temp, sn_snd_alb , sn_snd_thick, sn_snd_crt , sn_snd_co2, & 217 & sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr, & 218 & sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal , sn_rcv_iceflx, & 219 & sn_rcv_co2 , nn_cplmodel , ln_usecplmask 237 NAMELIST/namsbc_cpl/ sn_snd_temp , sn_snd_alb , sn_snd_thick , sn_snd_crt , sn_snd_co2, & 238 & sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr, & 239 & sn_snd_ifrac, sn_snd_crtw , sn_snd_wlev , sn_rcv_hsig , sn_rcv_phioc , & 240 & sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper , sn_rcv_wnum , sn_rcv_wstrf , & 241 & sn_rcv_wdrag, sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal , & 242 & sn_rcv_iceflx,sn_rcv_co2 , nn_cplmodel , ln_usecplmask, sn_rcv_mslp 220 243 !!--------------------------------------------------------------------- 221 244 ! … … 258 281 WRITE(numout,*)' sea ice heat fluxes = ', TRIM(sn_rcv_iceflx%cldes), ' (', TRIM(sn_rcv_iceflx%clcat), ')' 259 282 WRITE(numout,*)' atm co2 = ', TRIM(sn_rcv_co2%cldes ), ' (', TRIM(sn_rcv_co2%clcat ), ')' 283 WRITE(numout,*)' significant wave heigth = ', TRIM(sn_rcv_hsig%cldes ), ' (', TRIM(sn_rcv_hsig%clcat ), ')' 284 WRITE(numout,*)' wave to oce energy flux = ', TRIM(sn_rcv_phioc%cldes ), ' (', TRIM(sn_rcv_phioc%clcat ), ')' 285 WRITE(numout,*)' Surface Stokes drift grid u = ', TRIM(sn_rcv_sdrfx%cldes ), ' (', TRIM(sn_rcv_sdrfx%clcat ), ')' 286 WRITE(numout,*)' Surface Stokes drift grid v = ', TRIM(sn_rcv_sdrfy%cldes ), ' (', TRIM(sn_rcv_sdrfy%clcat ), ')' 287 WRITE(numout,*)' Mean wave period = ', TRIM(sn_rcv_wper%cldes ), ' (', TRIM(sn_rcv_wper%clcat ), ')' 288 WRITE(numout,*)' Mean wave number = ', TRIM(sn_rcv_wnum%cldes ), ' (', TRIM(sn_rcv_wnum%clcat ), ')' 289 WRITE(numout,*)' Stress frac adsorbed by waves = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')' 290 WRITE(numout,*)' Neutral surf drag coefficient = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')' 260 291 WRITE(numout,*)' sent fields (multiple ice categories)' 261 292 WRITE(numout,*)' surface temperature = ', TRIM(sn_snd_temp%cldes ), ' (', TRIM(sn_snd_temp%clcat ), ')' 262 293 WRITE(numout,*)' albedo = ', TRIM(sn_snd_alb%cldes ), ' (', TRIM(sn_snd_alb%clcat ), ')' 263 294 WRITE(numout,*)' ice/snow thickness = ', TRIM(sn_snd_thick%cldes ), ' (', TRIM(sn_snd_thick%clcat ), ')' 295 WRITE(numout,*)' total ice fraction = ', TRIM(sn_snd_ifrac%cldes ), ' (', TRIM(sn_snd_ifrac%clcat ), ')' 264 296 WRITE(numout,*)' surface current = ', TRIM(sn_snd_crt%cldes ), ' (', TRIM(sn_snd_crt%clcat ), ')' 265 297 WRITE(numout,*)' - referential = ', sn_snd_crt%clvref … … 267 299 WRITE(numout,*)' - mesh = ', sn_snd_crt%clvgrd 268 300 WRITE(numout,*)' oce co2 flux = ', TRIM(sn_snd_co2%cldes ), ' (', TRIM(sn_snd_co2%clcat ), ')' 301 WRITE(numout,*)' water level = ', TRIM(sn_snd_wlev%cldes ), ' (', TRIM(sn_snd_wlev%clcat ), ')' 302 WRITE(numout,*)' mean sea level pressure = ', TRIM(sn_rcv_mslp%cldes ), ' (', TRIM(sn_rcv_mslp%clcat ), ')' 303 WRITE(numout,*)' surface current to waves = ', TRIM(sn_snd_crtw%cldes ), ' (', TRIM(sn_snd_crtw%clcat ), ')' 304 WRITE(numout,*)' - referential = ', sn_snd_crtw%clvref 305 WRITE(numout,*)' - orientation = ', sn_snd_crtw%clvor 306 WRITE(numout,*)' - mesh = ', sn_snd_crtw%clvgrd 269 307 WRITE(numout,*)' nn_cplmodel = ', nn_cplmodel 270 308 WRITE(numout,*)' ln_usecplmask = ', ln_usecplmask … … 305 343 ! 306 344 ! Vectors: change of sign at north fold ONLY if on the local grid 345 IF( TRIM( sn_rcv_tau%cldes ) == 'oce only' .OR. TRIM(sn_rcv_tau%cldes ) == 'oce and ice') THEN ! avoid working with the atmospheric fields if they are not coupled 307 346 IF( TRIM( sn_rcv_tau%clvor ) == 'local grid' ) srcv(jpr_otx1:jpr_itz2)%nsgn = -1. 308 347 … … 372 411 srcv(jpr_ity1)%clgrid = 'V' ! i.e. it is always at U- & V-points for i- & j-comp. resp. 373 412 ENDIF 374 ! 413 ENDIF 414 375 415 ! ! ------------------------- ! 376 416 ! ! freshwater budget ! E-P … … 467 507 ! ! Atmospheric CO2 ! 468 508 ! ! ------------------------- ! 469 srcv(jpr_co2 )%clname = 'O_AtmCO2' ; IF( TRIM(sn_rcv_co2%cldes ) == 'coupled' ) srcv(jpr_co2 )%laction = .TRUE. 509 srcv(jpr_co2 )%clname = 'O_AtmCO2' 510 IF( TRIM(sn_rcv_co2%cldes ) == 'coupled' ) THEN 511 srcv(jpr_co2 )%laction = .TRUE. 512 l_co2cpl = .TRUE. 513 IF(lwp) WRITE(numout,*) 514 IF(lwp) WRITE(numout,*) ' Atmospheric pco2 received from oasis ' 515 IF(lwp) WRITE(numout,*) 516 ENDIF 517 518 ! ! ------------------------- ! 519 ! ! Mean Sea Level Pressure ! 520 ! ! ------------------------- ! 521 srcv(jpr_mslp)%clname = 'O_MSLP' ; IF( TRIM(sn_rcv_mslp%cldes ) == 'coupled' ) srcv(jpr_mslp)%laction = .TRUE. 522 470 523 ! ! ------------------------- ! 471 524 ! ! topmelt and botmelt ! … … 481 534 srcv(jpr_topm:jpr_botm)%laction = .TRUE. 482 535 ENDIF 536 ! ! ------------------------- ! 537 ! ! Wave breaking ! 538 ! ! ------------------------- ! 539 srcv(jpr_hsig)%clname = 'O_Hsigwa' ! significant wave height 540 IF( TRIM(sn_rcv_hsig%cldes ) == 'coupled' ) THEN 541 srcv(jpr_hsig)%laction = .TRUE. 542 cpl_hsig = .TRUE. 543 ENDIF 544 srcv(jpr_phioc)%clname = 'O_PhiOce' ! wave to ocean energy 545 IF( TRIM(sn_rcv_phioc%cldes ) == 'coupled' ) THEN 546 srcv(jpr_phioc)%laction = .TRUE. 547 cpl_phioc = .TRUE. 548 ENDIF 549 srcv(jpr_sdrftx)%clname = 'O_Sdrfx' ! Stokes drift in the u direction 550 IF( TRIM(sn_rcv_sdrfx%cldes ) == 'coupled' ) THEN 551 srcv(jpr_sdrftx)%laction = .TRUE. 552 cpl_sdrftx = .TRUE. 553 ENDIF 554 srcv(jpr_sdrfty)%clname = 'O_Sdrfy' ! Stokes drift in the v direction 555 IF( TRIM(sn_rcv_sdrfy%cldes ) == 'coupled' ) THEN 556 srcv(jpr_sdrfty)%laction = .TRUE. 557 cpl_sdrfty = .TRUE. 558 ENDIF 559 srcv(jpr_wper)%clname = 'O_WPer' ! mean wave period 560 IF( TRIM(sn_rcv_wper%cldes ) == 'coupled' ) THEN 561 srcv(jpr_wper)%laction = .TRUE. 562 cpl_wper = .TRUE. 563 ENDIF 564 srcv(jpr_wnum)%clname = 'O_WNum' ! mean wave number 565 IF( TRIM(sn_rcv_wnum%cldes ) == 'coupled' ) THEN 566 srcv(jpr_wnum)%laction = .TRUE. 567 cpl_wnum = .TRUE. 568 ENDIF 569 srcv(jpr_wstrf)%clname = 'O_WStrf' ! stress fraction adsorbed by the wave 570 IF( TRIM(sn_rcv_wstrf%cldes ) == 'coupled' ) THEN 571 srcv(jpr_wstrf)%laction = .TRUE. 572 cpl_wstrf = .TRUE. 573 ENDIF 574 srcv(jpr_wdrag)%clname = 'O_WDrag' ! neutral surface drag coefficient 575 IF( TRIM(sn_rcv_wdrag%cldes ) == 'coupled' ) THEN 576 srcv(jpr_wdrag)%laction = .TRUE. 577 cpl_wdrag = .TRUE. 578 ENDIF 579 ! 483 580 ! ! ------------------------------- ! 484 581 ! ! OPA-SAS coupling - rcv by opa ! … … 555 652 WRITE(numout,*)' Additional received fields from OPA component : ' 556 653 ENDIF 557 WRITE(numout,*)' sea surface temperature (Cel cius) '654 WRITE(numout,*)' sea surface temperature (Celsius) ' 558 655 WRITE(numout,*)' sea surface salinity ' 559 656 WRITE(numout,*)' surface currents ' … … 635 732 ! ! ------------------------- ! 636 733 ssnd(jps_fice)%clname = 'OIceFrc' 734 ssnd(jps_ficet)%clname = 'OIceFrcT' 637 735 ssnd(jps_hice)%clname = 'OIceTck' 638 736 ssnd(jps_hsnw)%clname = 'OSnwTck' … … 643 741 ENDIF 644 742 743 IF (TRIM( sn_snd_ifrac%cldes ) == 'coupled') ssnd(jps_ficet)%laction = .TRUE. 744 645 745 SELECT CASE ( TRIM( sn_snd_thick%cldes ) ) 646 746 CASE( 'none' ) ! nothing to do … … 663 763 ssnd(jps_ocy1)%clname = 'O_OCury1' ; ssnd(jps_ivy1)%clname = 'O_IVely1' 664 764 ssnd(jps_ocz1)%clname = 'O_OCurz1' ; ssnd(jps_ivz1)%clname = 'O_IVelz1' 765 ssnd(jps_ocxw)%clname = 'O_OCurxw' 766 ssnd(jps_ocyw)%clname = 'O_OCuryw' 665 767 ! 666 768 ssnd(jps_ocx1:jps_ivz1)%nsgn = -1. ! vectors: change of the sign at the north fold … … 683 785 END SELECT 684 786 787 ssnd(jps_ocxw:jps_ocyw)%nsgn = -1. ! vectors: change of the sign at the north fold 788 789 IF( sn_snd_crtw%clvgrd == 'U,V' ) THEN 790 ssnd(jps_ocxw)%clgrid = 'U' ; ssnd(jps_ocyw)%clgrid = 'V' 791 ELSE IF( sn_snd_crtw%clvgrd /= 'T' ) THEN 792 CALL ctl_stop( 'sn_snd_crtw%clvgrd must be equal to T' ) 793 ENDIF 794 IF( TRIM( sn_snd_crtw%clvor ) == 'eastward-northward' ) ssnd(jps_ocxw:jps_ocyw)%nsgn = 1. 795 SELECT CASE( TRIM( sn_snd_crtw%cldes ) ) 796 CASE( 'none' ) ; ssnd(jps_ocxw:jps_ocyw)%laction = .FALSE. 797 CASE( 'oce only' ) ; ssnd(jps_ocxw:jps_ocyw)%laction = .TRUE. 798 CASE( 'weighted oce and ice' ) ! nothing to do 799 CASE( 'mixed oce-ice' ) ; ssnd(jps_ivx1:jps_ivz1)%laction = .FALSE. 800 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_crtw%cldes' ) 801 END SELECT 802 685 803 ! ! ------------------------- ! 686 804 ! ! CO2 flux ! 687 805 ! ! ------------------------- ! 688 806 ssnd(jps_co2)%clname = 'O_CO2FLX' ; IF( TRIM(sn_snd_co2%cldes) == 'coupled' ) ssnd(jps_co2 )%laction = .TRUE. 807 808 ! ! ------------------------- ! 809 ! ! Sea surface height ! 810 ! ! ------------------------- ! 811 ssnd(jps_wlev)%clname = 'O_Wlevel' ; IF( TRIM(sn_snd_wlev%cldes) == 'coupled' ) ssnd(jps_wlev)%laction = .TRUE. 689 812 690 813 ! ! ------------------------------- ! … … 710 833 WRITE(numout,*) 711 834 WRITE(numout,*)' sent fields to SAS component ' 712 WRITE(numout,*)' sea surface temperature (T before, Cel cius) '835 WRITE(numout,*)' sea surface temperature (T before, Celsius) ' 713 836 WRITE(numout,*)' sea surface salinity ' 714 837 WRITE(numout,*)' surface currents U,V on local grid and spherical coordinates' … … 781 904 IF( ln_dm2dc .AND. ln_cpl .AND. ncpl_qsr_freq /= 86400 ) & 782 905 & CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 783 ncpl_qsr_freq = 86400 / ncpl_qsr_freq906 IF( ln_dm2dc .AND. ln_cpl ) ncpl_qsr_freq = 86400 / ncpl_qsr_freq 784 907 785 908 CALL wrk_dealloc( jpi,jpj, zacs, zaos ) … … 835 958 !! emp upward mass flux [evap. - precip. (- runoffs) (- calving)] (ocean only case) 836 959 !!---------------------------------------------------------------------- 837 INTEGER, INTENT(in) :: kt ! ocean model time step index 838 INTEGER, INTENT(in) :: k_fsbc ! frequency of sbc (-> ice model) computation 839 INTEGER, INTENT(in) :: k_ice ! ice management in the sbc (=0/1/2/3) 840 960 USE zdf_oce, ONLY : ln_zdfqiao 961 962 IMPLICIT NONE 963 964 INTEGER, INTENT(in) :: kt ! ocean model time step index 965 INTEGER, INTENT(in) :: k_fsbc ! frequency of sbc (-> ice model) computation 966 INTEGER, INTENT(in) :: k_ice ! ice management in the sbc (=0/1/2/3) 841 967 !! 842 968 LOGICAL :: llnewtx, llnewtau ! update wind stress components and module?? … … 894 1020 IF( srcv(jpr_otx2)%laction ) THEN 895 1021 CALL rot_rep( frcv(jpr_otx2)%z3(:,:,1), frcv(jpr_oty2)%z3(:,:,1), srcv(jpr_otx2)%clgrid, 'en->j', zty ) 896 ELSE 1022 ELSE 897 1023 CALL rot_rep( frcv(jpr_otx1)%z3(:,:,1), frcv(jpr_oty1)%z3(:,:,1), srcv(jpr_otx1)%clgrid, 'en->j', zty ) 898 1024 ENDIF … … 984 1110 ENDIF 985 1111 986 #if defined key_cpl_carbon_cycle987 1112 ! ! ================== ! 988 1113 ! ! atmosph. CO2 (ppm) ! 989 1114 ! ! ================== ! 990 1115 IF( srcv(jpr_co2)%laction ) atm_co2(:,:) = frcv(jpr_co2)%z3(:,:,1) 991 #endif 1116 ! 1117 ! ! ========================= ! 1118 ! ! Mean Sea Level Pressure ! (taum) 1119 ! ! ========================= ! 1120 ! 1121 IF( srcv(jpr_mslp)%laction ) THEN ! UKMO SHELF effect of atmospheric pressure on SSH 1122 IF( kt /= nit000 ) ssh_ibb(:,:) = ssh_ib(:,:) !* Swap of ssh_ib fields 1123 1124 r1_grau = 1.e0 / (grav * rau0) !* constant for optimization 1125 ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau ! equivalent ssh (inverse barometer) 1126 apr (:,:) = frcv(jpr_mslp)%z3(:,:,1) !atmospheric pressure 1127 1128 IF( kt == nit000 ) ssh_ibb(:,:) = ssh_ib(:,:) ! correct this later (read from restart if possible) 1129 END IF 1130 ! 1131 IF( ln_sdw ) THEN ! Stokes Drift correction activated 1132 ! ! ========================= ! 1133 ! ! Stokes drift u ! 1134 ! ! ========================= ! 1135 IF( srcv(jpr_sdrftx)%laction ) ut0sd(:,:) = frcv(jpr_sdrftx)%z3(:,:,1) 1136 ! 1137 ! ! ========================= ! 1138 ! ! Stokes drift v ! 1139 ! ! ========================= ! 1140 IF( srcv(jpr_sdrfty)%laction ) vt0sd(:,:) = frcv(jpr_sdrfty)%z3(:,:,1) 1141 ! 1142 ! ! ========================= ! 1143 ! ! Wave mean period ! 1144 ! ! ========================= ! 1145 IF( srcv(jpr_wper)%laction ) wmp(:,:) = frcv(jpr_wper)%z3(:,:,1) 1146 ! 1147 ! ! ========================= ! 1148 ! ! Significant wave height ! 1149 ! ! ========================= ! 1150 IF( srcv(jpr_hsig)%laction ) hsw(:,:) = frcv(jpr_hsig)%z3(:,:,1) 1151 ! 1152 ! ! ========================= ! 1153 ! ! Vertical mixing Qiao ! 1154 ! ! ========================= ! 1155 IF( srcv(jpr_wnum)%laction .AND. ln_zdfqiao ) wnum(:,:) = frcv(jpr_wnum)%z3(:,:,1) 1156 1157 ! Calculate the 3D Stokes drift both in coupled and not fully uncoupled mode 1158 IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. srcv(jpr_wper)%laction & 1159 .OR. srcv(jpr_hsig)%laction ) THEN 1160 CALL sbc_stokes() 1161 ENDIF 1162 ENDIF 1163 ! ! ========================= ! 1164 ! ! Stress adsorbed by waves ! 1165 ! ! ========================= ! 1166 IF( srcv(jpr_wstrf)%laction .AND. ln_tauoc ) tauoc_wave(:,:) = frcv(jpr_wstrf)%z3(:,:,1) 1167 1168 ! ! ========================= ! 1169 ! ! Wave drag coefficient ! 1170 ! ! ========================= ! 1171 IF( srcv(jpr_wdrag)%laction .AND. ln_cdgw ) cdn_wave(:,:) = frcv(jpr_wdrag)%z3(:,:,1) 992 1172 993 1173 ! Fields received by SAS when OASIS coupling … … 1599 1779 ENDIF 1600 1780 1601 !! clem: we should output qemp_oce and qemp_ice (at least) 1602 IF( iom_use('hflx_snow_cea') ) CALL iom_put( 'hflx_snow_cea', sprecip(:,:) * ( zcptn(:,:) - Lfus ) ) ! heat flux from snow (cell average) 1603 !! these diags are not outputed yet 1604 !! IF( iom_use('hflx_rain_cea') ) CALL iom_put( 'hflx_rain_cea', ( tprecip(:,:) - sprecip(:,:) ) * zcptn(:,:) ) ! heat flux from rain (cell average) 1605 !! IF( iom_use('hflx_snow_ao_cea') ) CALL iom_put( 'hflx_snow_ao_cea', sprecip(:,:) * ( zcptn(:,:) - Lfus ) * (1._wp - zsnw(:,:)) ) ! heat flux from snow (cell average) 1606 !! IF( iom_use('hflx_snow_ai_cea') ) CALL iom_put( 'hflx_snow_ai_cea', sprecip(:,:) * ( zcptn(:,:) - Lfus ) * zsnw(:,:) ) ! heat flux from snow (cell average) 1781 ! some more outputs 1782 IF( iom_use('hflx_snow_cea') ) CALL iom_put('hflx_snow_cea', sprecip(:,:) * ( zcptn(:,:) - Lfus ) ) ! heat flux from snow (cell average) 1783 IF( iom_use('hflx_rain_cea') ) CALL iom_put('hflx_rain_cea', ( tprecip(:,:) - sprecip(:,:) ) * zcptn(:,:) ) ! heat flux from rain (cell average) 1784 IF( iom_use('hflx_snow_ao_cea') ) CALL iom_put('hflx_snow_ao_cea',sprecip(:,:) * ( zcptn(:,:) - Lfus ) * (1._wp - zsnw(:,:)) ) ! heat flux from snow (cell average) 1785 IF( iom_use('hflx_snow_ai_cea') ) CALL iom_put('hflx_snow_ai_cea',sprecip(:,:) * ( zcptn(:,:) - Lfus ) * zsnw(:,:) ) ! heat flux from snow (cell average) 1607 1786 1608 1787 #else … … 1919 2098 IF( ssnd(jps_hsnw)%laction ) CALL cpl_snd( jps_hsnw, isec, ztmp4, info ) 1920 2099 ENDIF 1921 !1922 #if defined key_cpl_carbon_cycle1923 2100 ! ! ------------------------- ! 1924 2101 ! ! CO2 flux from PISCES ! 1925 2102 ! ! ------------------------- ! 1926 IF( ssnd(jps_co2)%laction ) CALL cpl_snd( jps_co2, isec, RESHAPE ( oce_co2, (/jpi,jpj,1/) ) , info ) 1927 ! 1928 #endif 2103 IF( ssnd(jps_co2)%laction .AND. l_co2cpl ) CALL cpl_snd( jps_co2, isec, RESHAPE ( oce_co2, (/jpi,jpj,1/) ) , info ) 2104 ! 1929 2105 ! ! ------------------------- ! 1930 2106 IF( ssnd(jps_ocx1)%laction ) THEN ! Surface current ! … … 2063 2239 ENDIF 2064 2240 ! 2241 ! ! ------------------------- ! 2242 ! ! Surface current to waves ! 2243 ! ! ------------------------- ! 2244 IF( ssnd(jps_ocxw)%laction .OR. ssnd(jps_ocyw)%laction ) THEN 2245 ! 2246 ! j+1 j -----V---F 2247 ! surface velocity always sent from T point ! | 2248 ! j | T U 2249 ! | | 2250 ! j j-1 -I-------| 2251 ! (for I) | | 2252 ! i-1 i i 2253 ! i i+1 (for I) 2254 SELECT CASE( TRIM( sn_snd_crtw%cldes ) ) 2255 CASE( 'oce only' ) ! C-grid ==> T 2256 DO jj = 2, jpjm1 2257 DO ji = fs_2, fs_jpim1 ! vector opt. 2258 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) 2259 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji , jj-1,1) ) 2260 END DO 2261 END DO 2262 CASE( 'weighted oce and ice' ) 2263 SELECT CASE ( cp_ice_msh ) 2264 CASE( 'C' ) ! Ocean and Ice on C-grid ==> T 2265 DO jj = 2, jpjm1 2266 DO ji = fs_2, fs_jpim1 ! vector opt. 2267 zotx1(ji,jj) = 0.5 * ( un (ji,jj,1) + un (ji-1,jj ,1) ) * zfr_l(ji,jj) 2268 zoty1(ji,jj) = 0.5 * ( vn (ji,jj,1) + vn (ji ,jj-1,1) ) * zfr_l(ji,jj) 2269 zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj ) + u_ice(ji-1,jj ) ) * fr_i(ji,jj) 2270 zity1(ji,jj) = 0.5 * ( v_ice(ji,jj ) + v_ice(ji ,jj-1 ) ) * fr_i(ji,jj) 2271 END DO 2272 END DO 2273 CASE( 'I' ) ! Ocean on C grid, Ice on I-point (B-grid) ==> T 2274 DO jj = 2, jpjm1 2275 DO ji = 2, jpim1 ! NO vector opt. 2276 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) * zfr_l(ji,jj) 2277 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji ,jj-1,1) ) * zfr_l(ji,jj) 2278 zitx1(ji,jj) = 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1) & 2279 & + u_ice(ji+1,jj ) + u_ice(ji,jj ) ) * fr_i(ji,jj) 2280 zity1(ji,jj) = 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1) & 2281 & + v_ice(ji+1,jj ) + v_ice(ji,jj ) ) * fr_i(ji,jj) 2282 END DO 2283 END DO 2284 CASE( 'F' ) ! Ocean on C grid, Ice on F-point (B-grid) ==> T 2285 DO jj = 2, jpjm1 2286 DO ji = 2, jpim1 ! NO vector opt. 2287 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) * zfr_l(ji,jj) 2288 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji ,jj-1,1) ) * zfr_l(ji,jj) 2289 zitx1(ji,jj) = 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1) & 2290 & + u_ice(ji-1,jj ) + u_ice(ji,jj ) ) * fr_i(ji,jj) 2291 zity1(ji,jj) = 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1) & 2292 & + v_ice(ji-1,jj ) + v_ice(ji,jj ) ) * fr_i(ji,jj) 2293 END DO 2294 END DO 2295 END SELECT 2296 CALL lbc_lnk( zitx1, 'T', -1. ) ; CALL lbc_lnk( zity1, 'T', -1. ) 2297 CASE( 'mixed oce-ice' ) 2298 SELECT CASE ( cp_ice_msh ) 2299 CASE( 'C' ) ! Ocean and Ice on C-grid ==> T 2300 DO jj = 2, jpjm1 2301 DO ji = fs_2, fs_jpim1 ! vector opt. 2302 zotx1(ji,jj) = 0.5 * ( un (ji,jj,1) + un (ji-1,jj ,1) ) * zfr_l(ji,jj) & 2303 & + 0.5 * ( u_ice(ji,jj ) + u_ice(ji-1,jj ) ) * fr_i(ji,jj) 2304 zoty1(ji,jj) = 0.5 * ( vn (ji,jj,1) + vn (ji ,jj-1,1) ) * zfr_l(ji,jj) & 2305 & + 0.5 * ( v_ice(ji,jj ) + v_ice(ji ,jj-1 ) ) * fr_i(ji,jj) 2306 END DO 2307 END DO 2308 CASE( 'I' ) ! Ocean on C grid, Ice on I-point (B-grid) ==> T 2309 DO jj = 2, jpjm1 2310 DO ji = 2, jpim1 ! NO vector opt. 2311 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) * zfr_l(ji,jj) & 2312 & + 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1) & 2313 & + u_ice(ji+1,jj ) + u_ice(ji,jj ) ) * fr_i(ji,jj) 2314 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji ,jj-1,1) ) * zfr_l(ji,jj) & 2315 & + 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1) & 2316 & + v_ice(ji+1,jj ) + v_ice(ji,jj ) ) * fr_i(ji,jj) 2317 END DO 2318 END DO 2319 CASE( 'F' ) ! Ocean on C grid, Ice on F-point (B-grid) ==> T 2320 DO jj = 2, jpjm1 2321 DO ji = 2, jpim1 ! NO vector opt. 2322 zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj ,1) ) * zfr_l(ji,jj) & 2323 & + 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1) & 2324 & + u_ice(ji-1,jj ) + u_ice(ji,jj ) ) * fr_i(ji,jj) 2325 zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji ,jj-1,1) ) * zfr_l(ji,jj) & 2326 & + 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1) & 2327 & + v_ice(ji-1,jj ) + v_ice(ji,jj ) ) * fr_i(ji,jj) 2328 END DO 2329 END DO 2330 END SELECT 2331 END SELECT 2332 CALL lbc_lnk( zotx1, ssnd(jps_ocxw)%clgrid, -1. ) ; CALL lbc_lnk( zoty1, ssnd(jps_ocyw)%clgrid, -1. ) 2333 ! 2334 ! 2335 IF( TRIM( sn_snd_crtw%clvor ) == 'eastward-northward' ) THEN ! Rotation of the components 2336 ! ! Ocean component 2337 CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->e', ztmp1 ) ! 1st component 2338 CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->n', ztmp2 ) ! 2nd component 2339 zotx1(:,:) = ztmp1(:,:) ! overwrite the components 2340 zoty1(:,:) = ztmp2(:,:) 2341 IF( ssnd(jps_ivx1)%laction ) THEN ! Ice component 2342 CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->e', ztmp1 ) ! 1st component 2343 CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->n', ztmp2 ) ! 2nd component 2344 zitx1(:,:) = ztmp1(:,:) ! overwrite the components 2345 zity1(:,:) = ztmp2(:,:) 2346 ENDIF 2347 ENDIF 2348 ! 2349 ! ! spherical coordinates to cartesian -> 2 components to 3 components 2350 ! IF( TRIM( sn_snd_crtw%clvref ) == 'cartesian' ) THEN 2351 ! ztmp1(:,:) = zotx1(:,:) ! ocean currents 2352 ! ztmp2(:,:) = zoty1(:,:) 2353 ! CALL oce2geo ( ztmp1, ztmp2, 'T', zotx1, zoty1, zotz1 ) 2354 ! ! 2355 ! IF( ssnd(jps_ivx1)%laction ) THEN ! ice velocities 2356 ! ztmp1(:,:) = zitx1(:,:) 2357 ! ztmp1(:,:) = zity1(:,:) 2358 ! CALL oce2geo ( ztmp1, ztmp2, 'T', zitx1, zity1, zitz1 ) 2359 ! ENDIF 2360 ! ENDIF 2361 ! 2362 IF( ssnd(jps_ocxw)%laction ) CALL cpl_snd( jps_ocxw, isec, RESHAPE ( zotx1, (/jpi,jpj,1/) ), info ) ! ocean x current 1st grid 2363 IF( ssnd(jps_ocyw)%laction ) CALL cpl_snd( jps_ocyw, isec, RESHAPE ( zoty1, (/jpi,jpj,1/) ), info ) ! ocean y current 1st grid 2364 ! 2365 ENDIF 2366 ! 2367 IF( ssnd(jps_ficet)%laction ) THEN 2368 CALL cpl_snd( jps_ficet, isec, RESHAPE ( fr_i, (/jpi,jpj,1/) ), info ) 2369 END IF 2370 ! ! ------------------------- ! 2371 ! ! Water levels to waves ! 2372 ! ! ------------------------- ! 2373 IF( ssnd(jps_wlev)%laction ) THEN 2374 IF( ln_apr_dyn ) THEN 2375 IF( kt /= nit000 ) THEN 2376 ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 2377 ELSE 2378 ztmp1(:,:) = sshb(:,:) 2379 ENDIF 2380 ELSE 2381 ztmp1(:,:) = sshn(:,:) 2382 ENDIF 2383 CALL cpl_snd( jps_wlev , isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 2384 END IF 2065 2385 ! 2066 2386 ! Fields sent by OPA to SAS when doing OPA<->SAS coupling
Note: See TracChangeset
for help on using the changeset viewer.