New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 1463 for trunk/NEMO/OPA_SRC/SBC/sbccpl.F90 – NEMO

Ignore:
Timestamp:
2009-06-09T16:45:31+02:00 (15 years ago)
Author:
smasson
Message:

force 3rd dimension in sea-ice coupling fields, see ticket:444

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/SBC/sbccpl.F90

    r1308 r1463  
    816816    
    817817 
    818    SUBROUTINE sbc_cpl_ice_flx( p_frld, palbi   , psst    , pist,   & 
    819       &                                pqns_tot, pqns_ice,         & 
    820       &                                pqsr_tot, pqsr_ice,         & 
    821       &                                pemp_tot, pemp_ice, pdqns_ice, psprecip ) 
     818   SUBROUTINE sbc_cpl_ice_flx( p_frld  , palbi   , psst     , pist    ,   & 
     819      &                        pqns_tot, pqns_ice, pqsr_tot , pqsr_ice,   & 
     820      &                        pemp_tot, pemp_ice, pdqns_ice, psprecip ) 
    822821      !!---------------------------------------------------------------------- 
    823822      !!             ***  ROUTINE sbc_cpl_ice_flx_rcv  *** 
     
    863862      !!                   wndm                10m wind module 
    864863      !!---------------------------------------------------------------------- 
    865       REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj) ::   p_frld     ! lead fraction                [0 to 1] 
    866       REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj) ::   palbi      ! ice albedo 
    867       REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj) ::   psst       ! sea surface temperature      [Celcius] 
    868       REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj) ::   pist       ! ice surface temperature      [Kelvin] 
    869       REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   pqns_tot   ! total non solar heat flux    [W/m2] 
    870       REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   pqns_ice   ! ice   non solar heat flux    [W/m2] 
    871       REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   pqsr_tot   ! total     solar heat flux    [W/m2] 
    872       REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   pqsr_ice   ! ice       solar heat flux    [W/m2] 
    873       REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   pemp_tot   ! total     freshwater budget        [Kg/m2/s] 
    874       REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   pemp_ice   ! solid freshwater budget over ice   [Kg/m2/s] 
    875       REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   psprecip   ! Net solid precipitation (=emp_ice) [Kg/m2/s] 
    876       REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   pdqns_ice  ! d(Q non solar)/d(Temperature) over ice 
     864      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpl) ::   p_frld     ! lead fraction                [0 to 1] 
     865      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpl) ::   palbi      ! ice albedo 
     866      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj    ) ::   psst       ! sea surface temperature      [Celcius] 
     867      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpl) ::   pist       ! ice surface temperature      [Kelvin] 
     868      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj    ) ::   pqns_tot   ! total non solar heat flux    [W/m2] 
     869      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj,jpl) ::   pqns_ice   ! ice   non solar heat flux    [W/m2] 
     870      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj    ) ::   pqsr_tot   ! total     solar heat flux    [W/m2] 
     871      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj,jpl) ::   pqsr_ice   ! ice       solar heat flux    [W/m2] 
     872      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj    ) ::   pemp_tot   ! total     freshwater budget        [Kg/m2/s] 
     873      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj    ) ::   pemp_ice   ! solid freshwater budget over ice   [Kg/m2/s] 
     874      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj    ) ::   psprecip   ! Net solid precipitation (=emp_ice) [Kg/m2/s] 
     875      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj,jpl) ::   pdqns_ice  ! d(Q non solar)/d(Temperature) over ice 
    877876     !! 
    878877      INTEGER ::   ji, jj           ! dummy loop indices 
     
    895894         zsnow   (:,:) = frcv(:,:,jpr_snow) 
    896895      CASE( 'oce and ice'   )   ! received fields: jpr_sbpr, jpr_semp, jpr_oemp 
    897          pemp_tot(:,:) = p_frld(:,:) * frcv(:,:,jpr_oemp) + (1.- p_frld(:,:)) * frcv(:,:,jpr_sbpr)  
     896         pemp_tot(:,:) = p_frld(:,:,1) * frcv(:,:,jpr_oemp) + (1.- p_frld(:,:,1)) * frcv(:,:,jpr_sbpr)  
    898897         pemp_ice(:,:) = frcv(:,:,jpr_semp) 
    899898         zsnow   (:,:) = - frcv(:,:,jpr_semp) + frcv(:,:,jpr_ievp) 
     
    925924      !                                                      ! ========================= ! 
    926925      CASE( 'conservative' )                                      ! the required fields are directly provided 
    927          pqns_tot(:,:) = frcv(:,:,jpr_qnsmix) 
    928          pqns_ice(:,:) = frcv(:,:,jpr_qnsice) 
     926         pqns_tot(:,:  ) = frcv(:,:,jpr_qnsmix) 
     927         pqns_ice(:,:,1) = frcv(:,:,jpr_qnsice) 
    929928      CASE( 'oce and ice' )       ! the total flux is computed from ocean and ice fluxes 
    930          pqns_tot(:,:) =  p_frld(:,:) * frcv(:,:,jpr_qnsoce) + ( 1.- p_frld(:,:) ) * frcv(:,:,jpr_qnsice) 
    931          pqns_ice(:,:) =  frcv(:,:,jpr_qnsice) 
     929         pqns_tot(:,:  ) =  p_frld(:,:,1) * frcv(:,:,jpr_qnsoce) + ( 1.- p_frld(:,:,1) ) * frcv(:,:,jpr_qnsice) 
     930         pqns_ice(:,:,1) =  frcv(:,:,jpr_qnsice) 
    932931      CASE( 'mixed oce-ice' )     ! the ice flux is cumputed from the total flux, the SST and ice informations 
    933          pqns_tot(:,:) = frcv(:,:,jpr_qnsmix) 
    934          pqns_ice(:,:) = frcv(:,:,jpr_qnsmix)    & 
    935             &          + frcv(:,:,jpr_dqnsdt) * ( pist(:,:) - ( (rt0 + psst(:,:))*p_frld(:,:) + pist(:,:)*(1. - p_frld(:,:)) ) ) 
     932         pqns_tot(:,:  ) = frcv(:,:,jpr_qnsmix) 
     933         pqns_ice(:,:,1) = frcv(:,:,jpr_qnsmix)    & 
     934            &            + frcv(:,:,jpr_dqnsdt) * ( pist(:,:,1) - ( (rt0 + psst(:,:  ) ) *        p_frld(:,:,1)   & 
     935            &                                                   +          pist(:,:,1)   * ( 1. - p_frld(:,:,1) ) ) ) 
    936936      END SELECT 
    937937      !                                                           ! snow melting heat flux .... 
    938938      !   energy for melting solid precipitation over free ocean 
    939939      zcoef = xlsn / rhosn 
    940       pqns_tot(:,:) = pqns_tot(:,:) - p_frld(:,:) * zsnow(:,:) * zcoef 
     940      pqns_tot(:,:) = pqns_tot(:,:) - p_frld(:,:,1) * zsnow(:,:) * zcoef 
    941941!!gm 
    942942!!    currently it is taken into account in leads budget but not in the qns_tot, and thus not in  
     
    951951      !                                                      ! ========================= ! 
    952952      CASE( 'conservative' ) 
    953          pqsr_tot(:,:) = frcv(:,:,jpr_qsrmix) 
    954          pqsr_ice(:,:) = frcv(:,:,jpr_qsrice) 
     953         pqsr_tot(:,:  ) = frcv(:,:,jpr_qsrmix) 
     954         pqsr_ice(:,:,1) = frcv(:,:,jpr_qsrice) 
    955955      CASE( 'oce and ice' ) 
    956          pqsr_tot(:,:) =  p_frld(:,:) * frcv(:,:,jpr_qsroce) + ( 1.- p_frld(:,:) ) * frcv(:,:,jpr_qsrice) 
    957          pqsr_ice(:,:) =  frcv(:,:,jpr_qsrice) 
     956         pqsr_tot(:,:  ) =  p_frld(:,:,1) * frcv(:,:,jpr_qsroce) + ( 1.- p_frld(:,:,1) ) * frcv(:,:,jpr_qsrice) 
     957         pqsr_ice(:,:,1) =  frcv(:,:,jpr_qsrice) 
    958958      CASE( 'mixed oce-ice' ) 
    959          pqsr_tot(:,:) = frcv(:,:,jpr_qsrmix) 
     959         pqsr_tot(:,:  ) = frcv(:,:,jpr_qsrmix) 
    960960!       Create solar heat flux over ice using incoming solar heat flux and albedos 
    961961!       ( see OASIS3 user guide, 5th edition, p39 ) 
    962          pqsr_ice(:,:) = frcv(:,:,jpr_qsrmix) * ( 1.- palbi(:,:) )   & 
    963             &          / (  1.- ( albedo_oce_mix(:,:) * ( 1.- p_frld(:,:) )   & 
    964             &                   + palbi         (:,:) *       p_frld(:,:)   )  ) 
     962         pqsr_ice(:,:,1) = frcv(:,:,jpr_qsrmix) * ( 1.- palbi(:,:,1) )   & 
     963            &            / (  1.- ( albedo_oce_mix(:,:  ) * ( 1.- p_frld(:,:,1) )   & 
     964            &                     + palbi         (:,:,1) *       p_frld(:,:,1)   )  ) 
    965965      END SELECT 
    966966 
     
    968968      SELECT CASE( TRIM( cn_rcv_dqnsdt ) ) 
    969969      CASE ('coupled') 
    970           pdqns_ice(:,:) = frcv(:,:,jpr_dqnsdt) 
     970          pdqns_ice(:,:,1) = frcv(:,:,jpr_dqnsdt) 
    971971      END SELECT 
    972972 
     
    10091009      CASE( 'oce only'             )   ;   ztmp1(:,:) =   tn(:,:,1) + rt0 
    10101010      CASE( 'weighted oce and ice' )   ;   ztmp1(:,:) = ( tn(:,:,1) + rt0 ) * zfr_l(:,:)    
    1011                                            ztmp2(:,:) =   tn_ice(:,:     *  fr_i(:,:) 
    1012       CASE( 'mixed oce-ice'        )   ;   ztmp1(:,:) = ( tn(:,:,1) + rt0 ) * zfr_l(:,:) + tn_ice(:,:) * fr_i(:,:) 
     1011                                           ztmp2(:,:) =   tn_ice(:,:,1)     *  fr_i(:,:) 
     1012      CASE( 'mixed oce-ice'        )   ;   ztmp1(:,:) = ( tn(:,:,1) + rt0 ) * zfr_l(:,:) + tn_ice(:,:,1) * fr_i(:,:) 
    10131013      CASE default                     ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of cn_snd_temperature' ) 
    10141014      END SELECT 
     
    10211021      !                                                      ! ------------------------- ! 
    10221022      IF( ssnd(jps_albice)%laction ) THEN                         ! ice  
    1023          ztmp1(:,:) = alb_ice(:,:) * fr_i(:,:) 
     1023         ztmp1(:,:) = alb_ice(:,:,1) * fr_i(:,:) 
    10241024         CALL cpl_prism_snd( jps_albice, isec, ztmp1, info ) 
    10251025      ENDIF 
    10261026      IF( ssnd(jps_albmix)%laction ) THEN                         ! mixed ice-ocean 
    1027          ztmp1(:,:) = albedo_oce_mix(:,:) * zfr_l(:,:) + alb_ice(:,:) * fr_i(:,:) 
     1027         ztmp1(:,:) = albedo_oce_mix(:,:) * zfr_l(:,:) + alb_ice(:,:,1) * fr_i(:,:) 
    10281028         CALL cpl_prism_snd( jps_albmix, isec, ztmp1, info ) 
    10291029      ENDIF 
     
    11551155   END SUBROUTINE sbc_cpl_ice_tau 
    11561156   ! 
    1157    SUBROUTINE sbc_cpl_ice_flx( p_frld, palbi   , psst    , pist,   & 
    1158       &                                pqns_tot, pqns_ice,         & 
    1159       &                                pqsr_tot, pqsr_ice,         & 
    1160       &                                pemp_tot, pemp_ice, pdqns_ice, psprecip ) 
    1161       REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   p_frld     ! lead fraction                [0 to 1] 
    1162       REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   palbi      ! ice albedo 
    1163       REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   psst       ! sea surface temperature      [Celcius] 
    1164       REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   pist       ! ice surface temperature      [Celcius] 
    1165       REAL(wp), INTENT(  out), DIMENSION(:,:) ::   pqns_tot   ! total non solar heat flux    [W/m2] 
    1166       REAL(wp), INTENT(  out), DIMENSION(:,:) ::   pqns_ice   ! ice   non solar heat flux    [W/m2] 
    1167       REAL(wp), INTENT(  out), DIMENSION(:,:) ::   pqsr_tot   ! total     solar heat flux    [W/m2] 
    1168       REAL(wp), INTENT(  out), DIMENSION(:,:) ::   pqsr_ice   ! ice       solar heat flux    [W/m2] 
    1169       REAL(wp), INTENT(  out), DIMENSION(:,:) ::   pemp_tot   ! total     freshwater budget  [Kg/m2/s] 
    1170       REAL(wp), INTENT(  out), DIMENSION(:,:) ::   pemp_ice   ! ice solid freshwater budget  [Kg/m2/s] 
    1171       REAL(wp), INTENT(  out), DIMENSION(:,:) ::   pdqns_ice  ! d(Q non solar)/d(Temperature) over ice 
    1172       REAL(wp), INTENT(  out), DIMENSION(:,:) ::   psprecip   ! solid precipitation          [Kg/m2/s] 
    1173       WRITE(*,*) 'sbc_cpl_snd: You should not have seen this print! error?', p_frld(1,1), palbi(1,1), psst(1,1), pist(1,1) 
     1157   SUBROUTINE sbc_cpl_ice_flx( p_frld  , palbi   , psst     , pist    ,   & 
     1158      &                        pqns_tot, pqns_ice, pqsr_tot , pqsr_ice,   & 
     1159      &                        pemp_tot, pemp_ice, pdqns_ice, psprecip ) 
     1160      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   p_frld     ! lead fraction                [0 to 1] 
     1161      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   palbi      ! ice albedo 
     1162      REAL(wp), INTENT(in   ), DIMENSION(:,:  ) ::   psst       ! sea surface temperature      [Celcius] 
     1163      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pist       ! ice surface temperature      [Kelvin] 
     1164      REAL(wp), INTENT(  out), DIMENSION(:,:  ) ::   pqns_tot   ! total non solar heat flux    [W/m2] 
     1165      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pqns_ice   ! ice   non solar heat flux    [W/m2] 
     1166      REAL(wp), INTENT(  out), DIMENSION(:,:  ) ::   pqsr_tot   ! total     solar heat flux    [W/m2] 
     1167      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pqsr_ice   ! ice       solar heat flux    [W/m2] 
     1168      REAL(wp), INTENT(  out), DIMENSION(:,:  ) ::   pemp_tot   ! total     freshwater budget  [Kg/m2/s] 
     1169      REAL(wp), INTENT(  out), DIMENSION(:,:  ) ::   pemp_ice   ! ice solid freshwater budget  [Kg/m2/s] 
     1170      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pdqns_ice  ! d(Q non solar)/d(Temperature) over ice 
     1171      REAL(wp), INTENT(  out), DIMENSION(:,:  ) ::   psprecip   ! solid precipitation          [Kg/m2/s] 
     1172      WRITE(*,*) 'sbc_cpl_snd: You should not have seen this print! error?', p_frld(1,1,1), palbi(1,1,1), psst(1,1), pist(1,1,1) 
    11741173      ! stupid definition to avoid warning message when compiling... 
    1175       pqns_tot(:,:) = 0. ; pqns_ice(:,:) = 0. ; pdqns_ice(:,:) = 0. 
    1176       pqsr_tot(:,:) = 0. ; pqsr_ice(:,:) = 0.  
    1177       pemp_tot(:,:) = 0. ; pemp_ice(:,:) = 0. ; psprecip(:,:) = 0. 
     1174      pqns_tot(:,:) = 0. ; pqns_ice(:,:,:) = 0. ; pdqns_ice(:,:,:) = 0. 
     1175      pqsr_tot(:,:) = 0. ; pqsr_ice(:,:,:) = 0.  
     1176      pemp_tot(:,:) = 0. ; pemp_ice(:,:)   = 0. ; psprecip(:,:) = 0. 
    11781177   END SUBROUTINE sbc_cpl_ice_flx 
    11791178    
Note: See TracChangeset for help on using the changeset viewer.