Changeset 5605


Ignore:
Timestamp:
2015-07-16T20:05:07+02:00 (5 years ago)
Author:
mathiot
Message:

Marine glacier termini: initial commit

Location:
branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM
Files:
1 added
13 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/CONFIG/SHARED/field_def.xml

    r5517 r5605  
    193193 
    194194         <!-- * variable related to ice shelf forcing * --> 
    195          <field id="fwfisf"       long_name="Ice shelf melting"                             unit="kg/m2/s"  /> 
     195         <field id="nktop"        long_name="top plumes level"                              unit="lev"      /> 
     196         <field id="nksta"        long_name="sta plumes level"                              unit="lev"      /> 
     197         <field id="nkovt"        long_name="ovt plumes level"                              unit="lev"      /> 
     198         <field id="icwovt"       long_name="plumes ovt"                                    unit="m3/s"     /> 
     199         <field id="qsubg"        long_name="subglacial melting"                            unit="m3/s"     /> 
     200         <field id="qmelt"        long_name="ice wall melting"                              unit="m3/s"     /> 
     201         <field id="fwfisf"       long_name="Ice shelf melting"                             unit="Kg/m2/s"  /> 
    196202         <field id="qisf"         long_name="Ice Shelf Heat Flux"                           unit="W/m2"     /> 
    197203         <field id="isfgammat"    long_name="transfert coefficient for isf (temperature)"   unit="m/s"      /> 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/BDY/bdyvol.F90

    r4990 r5605  
    2424   USE in_out_manager  ! I/O manager 
    2525   USE sbc_oce         ! ocean surface boundary conditions 
     26   USE traicw 
    2627 
    2728   IMPLICIT NONE 
     
    9192      ! Calculate the cumulate surface Flux z_cflxemp (m3/s) over all the domain 
    9293      ! ----------------------------------------------------------------------- 
    93       z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+rdivisf*fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 
     94      z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+rdivisf*fwfisf(:,:) -qtot(:,:)) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 
    9495      IF( lk_mpp )   CALL mpp_sum( z_cflxemp )     ! sum over the global domain 
    9596 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/DOM/domhgr.F90

    r5552 r5605  
    318318         !                          ========== 
    319319         glam0 = 0.e0 
    320          gphi0 = - ppe2_m * 1.e-3 
     320         !gphi0 = - ppe2_m * 1.e-3  ! need to be restore before submission into the trunk 
     321         gphi0 = ppgphi0 - ppe2_m * 1.e-3 
    321322          
    322323#if defined key_agrif  
     
    649650      CALL iom_close( inum ) 
    650651       
    651 ! need to be define for the extended grid south of -80S 
    652 ! some point are undefined but you need to have e1 and e2 .NE. 0 
    653       WHERE (e1t==0.0_wp) 
    654          e1t=1.0e2 
    655       END WHERE 
    656       WHERE (e1v==0.0_wp) 
    657          e1v=1.0e2 
    658       END WHERE 
    659       WHERE (e1u==0.0_wp) 
    660          e1u=1.0e2 
    661       END WHERE 
    662       WHERE (e1f==0.0_wp) 
    663          e1f=1.0e2 
    664       END WHERE 
    665       WHERE (e2t==0.0_wp) 
    666          e2t=1.0e2 
    667       END WHERE 
    668       WHERE (e2v==0.0_wp) 
    669          e2v=1.0e2 
    670       END WHERE 
    671       WHERE (e2u==0.0_wp) 
    672          e2u=1.0e2 
    673       END WHERE 
    674       WHERE (e2f==0.0_wp) 
    675          e2f=1.0e2 
    676       END WHERE 
    677         
    678652    END SUBROUTINE hgr_read 
    679653     
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90

    r5516 r5605  
    2929   USE sbcrnf          ! river runoff  
    3030   USE sbcisf          ! ice shelf  
     31   USE traicw          ! calving face 
    3132   USE cla             ! cross land advection             (cla_div routine) 
    3233   USE in_out_manager  ! I/O manager 
     
    230231      IF( ln_rnf      )   CALL sbc_rnf_div( hdivn )          ! runoffs   (update hdivn field) 
    231232      IF( ln_divisf .AND. (nn_isf /= 0) )   CALL sbc_isf_div( hdivn )          ! ice shelf (update hdivn field) 
     233      IF( ln_traicw   )   CALL div_icw( hdivn )          ! ice shelf (update hdivn field) 
    232234      IF( nn_cla == 1 )   CALL cla_div    ( kt )             ! Cross Land Advection (Update Hor. divergence) 
    233235       
     
    329331      IF( ln_rnf      )   CALL sbc_rnf_div( hdivn )                            ! runoffs (update hdivn field) 
    330332      IF( ln_divisf .AND. (nn_isf .GT. 0) )   CALL sbc_isf_div( hdivn )          ! ice shelf (update hdivn field) 
     333      IF( ln_traicw   )   CALL div_icw( hdivn )          ! ice shelf (update hdivn field) 
    331334      IF( nn_cla == 1 )   CALL cla_div    ( kt )             ! Cross Land Advection (update hdivn field) 
    332335      ! 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r5436 r5605  
    2323   USE sbc_oce         ! surface boundary condition: ocean 
    2424   USE sbcisf          ! ice shelf variable (fwfisf) 
     25   USE traicw          ! ice shelf variable (fwfisf) 
    2526   USE dynspg_oce      ! surface pressure gradient variables 
    2627   USE phycst          ! physical constants 
     
    457458      ELSE 
    458459         zssh_frc(:,:) = zraur * z1_2 * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:)   & 
    459                 &                        + rdivisf * ( fwfisf(:,:) + fwfisf_b(:,:) )       ) 
     460                &                        + rdivisf * ( fwfisf(:,:) + fwfisf_b(:,:) )       & 
     461                                         - qtot(:,:) - qtot_b(:,:)                         ) 
    460462      ENDIF 
    461463#if defined key_asminc 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90

    r5120 r5605  
    2828   USE lbclnk          ! ocean lateral boundary conditions 
    2929   USE lib_fortran 
     30   USE traicw 
    3031 
    3132   IMPLICIT NONE 
     
    108109         ! 
    109110         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    110             z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) -  snwice_fmass(:,:) ) ) / area   ! sum over the global domain 
     111            z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) -qtot(:,:) - snwice_fmass(:,:) ) ) / area   ! sum over the global domain 
    111112            zcoef = z_fwf * rcp 
    112113            emp(:,:) = emp(:,:) - z_fwf              * tmask(:,:,1) 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r5503 r5605  
    364364                  END DO 
    365365                  nk_rnf(ji,jj) = jk 
     366               ELSEIF( h_rnf(ji,jj) == 0._wp    ) THEN   ;  nk_rnf(ji,jj) = 1 ! (need to be remove before sumition into the trunk) 
    366367               ELSEIF( h_rnf(ji,jj) == -1._wp   ) THEN   ;  nk_rnf(ji,jj) = 1 
    367368               ELSEIF( h_rnf(ji,jj) == -999._wp ) THEN   ;  nk_rnf(ji,jj) = mbkt(ji,jj) 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r5541 r5605  
    5656   !                   !! * Interface 
    5757   INTERFACE eos 
    58       MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d 
     58      MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d, eos_insitu_0d 
    5959   END INTERFACE 
    6060   ! 
     
    558558   END SUBROUTINE eos_insitu_2d 
    559559 
     560   SUBROUTINE eos_insitu_0d( pts, pdep, prd ) 
     561      !!---------------------------------------------------------------------- 
     562      !!                  ***  ROUTINE eos_insitu_2d  *** 
     563      !! 
     564      !! ** Purpose :   Compute the in situ density (ratio rho/rau0) from 
     565      !!      potential temperature and salinity using an equation of state 
     566      !!      defined through the namelist parameter nn_eos. * 2D field case 
     567      !! 
     568      !! ** Action  : - prd , the in situ density (no units) (unmasked) 
     569      !! 
     570      !!---------------------------------------------------------------------- 
     571      REAL(wp), DIMENSION( 2 ), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
     572      !                                                           ! 2 : salinity               [psu] 
     573      REAL(wp), INTENT(in   ) ::   pdep  ! depth                      [m] 
     574      REAL(wp), INTENT(  out) ::   prd   ! in situ density 
     575      ! 
     576      INTEGER  ::   ji, jj, jk                ! dummy loop indices 
     577      REAL(wp) ::   zt , zh , zs              ! local scalars 
     578      REAL(wp) ::   zn , zn0, zn1, zn2, zn3   !   -      - 
     579      !!---------------------------------------------------------------------- 
     580      ! 
     581      IF( nn_timing == 1 )   CALL timing_start('eos2d') 
     582      ! 
     583      prd = 0._wp 
     584      ! 
     585      SELECT CASE( nn_eos ) 
     586      ! 
     587      CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
     588         ! 
     589               ! 
     590               zh  = pdep * r1_Z0                                  ! depth 
     591               zt  = pts (jp_tem) * r1_T0                           ! temperature 
     592               zs  = SQRT( ABS( pts(jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
     593               ! 
     594               zn3 = EOS013*zt   & 
     595                  &   + EOS103*zs+EOS003 
     596                  ! 
     597               zn2 = (EOS022*zt   & 
     598                  &   + EOS112*zs+EOS012)*zt   & 
     599                  &   + (EOS202*zs+EOS102)*zs+EOS002 
     600 
     601               zn1 = (((EOS041*zt   & 
     602                  &   + EOS131*zs+EOS031)*zt   & 
     603                  &   + (EOS221*zs+EOS121)*zs+EOS021)*zt   & 
     604                  &   + ((EOS311*zs+EOS211)*zs+EOS111)*zs+EOS011)*zt   & 
     605                  &   + (((EOS401*zs+EOS301)*zs+EOS201)*zs+EOS101)*zs+EOS001 
     606                  ! 
     607               zn0 = (((((EOS060*zt   & 
     608                  &   + EOS150*zs+EOS050)*zt   & 
     609                  &   + (EOS240*zs+EOS140)*zs+EOS040)*zt   & 
     610                  &   + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt   & 
     611                  &   + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt   & 
     612                  &   + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt   & 
     613                  &   + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 
     614                  ! 
     615               zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
     616               ! 
     617               prd = zn * r1_rau0 - 1._wp               ! unmasked in situ density anomaly 
     618               ! 
     619      CASE( 1 )                !==  simplified EOS  ==! 
     620         ! 
     621               zt    = pts  (jp_tem)  - 10._wp 
     622               zs    = pts  (jp_sal)  - 35._wp 
     623               zh    = pdep                          ! depth at the partial step level 
     624               ! 
     625               zn =  - rn_a0 * ( 1._wp + 0.5_wp*rn_lambda1*zt + rn_mu1*zh ) * zt   & 
     626                  &  + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs - rn_mu2*zh ) * zs   & 
     627                  &  - rn_nu * zt * zs 
     628                  ! 
     629               prd = zn * r1_rau0               ! unmasked in situ density anomaly 
     630               ! 
     631      END SELECT 
     632      ! 
     633      IF( nn_timing == 1 )   CALL timing_stop('eos0d') 
     634      ! 
     635   END SUBROUTINE eos_insitu_0d 
    560636 
    561637   SUBROUTINE rab_3d( pts, pab ) 
     
    921997               pn2(ji,jj,jk) = grav * (  zaw * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) )     & 
    922998                  &                    - zbw * ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) )  )  & 
    923                   &            / fse3w(ji,jj,jk) * tmask(ji,jj,jk) 
     999                  &            / fse3w(ji,jj,jk) * wmask(ji,jj,jk) 
    9241000            END DO 
    9251001         END DO 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/TRA/tradmp.F90

    r5102 r5605  
    114114      ! 
    115115      CASE( 0 )                   !==  newtonian damping throughout the water column  ==! 
     116          resto = 0.0_wp                              ! need to be restore before submissionto the trunk 
     117          !WHERE (un(3:11,3:7,:) .GE. 1.e-2) 
     118          !   resto(3:11,3:7,:) = 1._wp/1440._wp 
     119          !END WHERE 
     120          WHERE (un(12,3:7,:) .GE. 1.e-2) 
     121             resto(12,3:7,:) = 1._wp/1440._wp 
     122          END WHERE 
    116123         DO jk = 1, jpkm1 
    117124            DO jj = 2, jpjm1 
     
    240247 
    241248         !Read in mask from file 
    242          CALL iom_open ( cn_resto, imask) 
    243          CALL iom_get  ( imask, jpdom_autoglo, 'resto', resto) 
    244          CALL iom_close( imask ) 
     249! need to be restore before submission to the trunk 
     250!         CALL iom_open ( cn_resto, imask) 
     251!         CALL iom_get  ( imask, jpdom_autoglo, 'resto', resto) 
     252!         CALL iom_close( imask ) 
     253          resto = 0.0_wp 
     254          WHERE (un(2:10,2,:) .LE. 1.e-3) 
     255             resto(2:10,2,:) = 1._wp/86400._wp 
     256          END WHERE 
    245257       ENDIF 
    246258 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90

    r5431 r5605  
    2626   USE trdtra          ! trends manager: tracers  
    2727   ! 
     28   USE traicw          ! ice wall parametrization 
    2829   USE in_out_manager  ! I/O manager 
    2930   USE prtctl          ! Print control 
     
    287288         END DO   
    288289      ENDIF 
     290 
     291 
     292      ! compute trend 
     293      IF ( ln_traicw ) THEN 
     294         tsa(:,:,:,1) = tsa(:,:,:,1) + 0.5_wp * ( ricw_tsc(:,:,:,1) + ricw_tsc_b(:,:,:,1) ) 
     295         tsa(:,:,:,2) = tsa(:,:,:,2) + 0.5_wp * ( ricw_tsc(:,:,:,2) + ricw_tsc_b(:,:,:,2) ) 
     296      END IF 
    289297  
    290298      IF( l_trdtra )   THEN                      ! send trends for further diagnostics 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r5536 r5605  
    422422      !                                     ! Active tracers 
    423423                            CALL tra_qsr_init   ! penetrative solar radiation qsr 
     424                            CALL tra_icw_init   ! penetrative solar radiation qsr 
    424425                            CALL tra_bbc_init   ! bottom heat flux 
    425426      IF( lk_trabbl     )   CALL tra_bbl_init   ! advective (and/or diffusive) bottom boundary layer scheme 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/step.F90

    r5510 r5605  
    120120                         CALL bn2    ( tsb, rab_b, rn2b ) ! before Brunt-Vaisala frequency 
    121121                         CALL bn2    ( tsn, rab_n, rn2  ) ! now    Brunt-Vaisala frequency 
     122      IF ( ln_traicw  )  CALL tra_icw( kstp )             ! name need to be changed the best way is a 3d runoff routine 
     123                                                          ! it should simplified this, sbcisf, sbciscpl, sbcrnf and trasbc 
    122124      ! 
    123125      !  VERTICAL PHYSICS 
  • branches/NERC/dev_r5589_marine_glacier_termini/NEMOGCM/NEMO/OPA_SRC/step_oce.F90

    r5501 r5605  
    3030 
    3131   USE traqsr           ! solar radiation penetration      (tra_qsr routine) 
     32   USE traicw           ! ice wall melting parametrisation (tra_icw routine) 
    3233   USE trasbc           ! surface boundary condition       (tra_sbc routine) 
    3334   USE trabbc           ! bottom boundary condition        (tra_bbc routine) 
Note: See TracChangeset for help on using the changeset viewer.