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 9292 for branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC – NEMO

Ignore:
Timestamp:
2018-01-30T19:41:58+01:00 (6 years ago)
Author:
dford
Message:

Merge in changes from dev_r5518_GO6_package_asm_surf_bgc_v2.

Location:
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/air_sea.F90

    r9257 r9292  
    7777                                   zn_dms_chd, zn_dms_chn, zn_dms_din,    & 
    7878                                   zn_dms_mld, zn_dms_qsr,                & 
     79# if defined key_foam_medusa 
     80                                   f2_pco2w, f2_fco2w,                    & 
     81# endif 
    7982                                   xnln, xnld  
    8083      USE trc,               ONLY: med_diag 
     
    8790#  else 
    8891      USE trcco2_medusa,     ONLY: trc_co2_medusa 
     92#   if defined key_foam_medusa 
     93      USE mocsy_mainmod,     ONLY: p2fCO2 
     94#   endif 
    8995#  endif 
    9096      USE trcdms_medusa,     ONLY: trc_dms_medusa 
     
    330336                     iters, ' AT (', ji, ', ', jj, ', 1) AT ', kt 
    331337               endif 
     338#    if defined key_foam_medusa 
     339               !! DAF (Aug 2017): calculate fCO2 for observation operator 
     340               CALL p2fCO2( f_pco2w, ztmp, f_pp0, 0.0, 1, f_fco2w ) 
     341#    endif 
    332342            ENDIF 
    333343         ENDDO 
     
    509519                              CO2flux_conv 
    510520               !! ENDIF 
     521#   if defined key_foam_medusa 
     522               !! DAF (Aug 2017): Save pCO2 and fCO2 for observation operator 
     523               f2_pco2w(ji,jj) = f_pco2w(ji,jj) 
     524               f2_fco2w(ji,jj) = f_pco2w(ji,jj) 
     525#   endif 
    511526               IF ( lk_iomput ) THEN 
    512527                  IF( med_diag%ATM_PCO2%dgsave ) THEN 
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90

    r9114 r9292  
    4848                                   f3_co3, f3_h2co3, f3_hco3,           & 
    4949                                   f3_omarg, f3_omcal, f3_pH,           & 
     50# if defined key_foam_medusa 
     51                                   mld_max, pgrow_avg,                  & 
     52                                   ploss_avg, phyt_avg,                 & 
     53# endif 
    5054                                   za_sed_c, za_sed_ca, za_sed_fe,      & 
    5155                                   za_sed_n, za_sed_si,                 & 
     
    5761      USE trc,               ONLY: med_diag, nittrc000, trn  
    5862      USE trcnam_trp,        ONLY: ln_trcadv_cen2, ln_trcadv_tvd 
     63# if defined key_foam_medusa 
     64      USE zdfmxl,            ONLY: hmld 
     65# endif 
    5966  
    6067      !! time (integer timestep) 
     
    115122# endif       
    116123 
     124# if defined key_foam_medusa 
     125!!---------------------------------------------------------------------- 
     126!! Diagnostics required for ocean colour assimilation: 
     127!! Mixed layer average phytoplankton growth, loss and concentration 
     128!! Maximum mixed layer depth 
     129!!---------------------------------------------------------------------- 
     130!! 
     131      DO jj = 2,jpjm1 
     132         DO ji = 2,jpim1 
     133            IF ( hmld(ji,jj) .GT. 0.0 ) THEN 
     134               pgrow_avg(ji,jj) = pgrow_avg(ji,jj) / hmld(ji,jj) 
     135               ploss_avg(ji,jj) = ploss_avg(ji,jj) / hmld(ji,jj) 
     136               phyt_avg(ji,jj)  = phyt_avg(ji,jj)  / hmld(ji,jj) 
     137               IF ( hmld(ji,jj) .GT. mld_max(ji,jj) ) THEN 
     138                  mld_max(ji,jj) = hmld(ji,jj) 
     139               ENDIF 
     140            ENDIF 
     141         END DO 
     142      END DO 
     143# endif 
     144 
    117145#  if defined key_debug_medusa 
    118146         !! AXY (12/07/17) 
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90

    r9257 r9292  
    3535      USE bio_medusa_mod 
    3636      USE par_oce,           ONLY: jpi, jpj, jpk 
     37# if defined key_foam_medusa 
     38      USE sms_medusa,        ONLY: jdms, pgrow_avg, ploss_avg, phyt_avg, mld_max 
     39# else 
    3740      USE sms_medusa,        ONLY: jdms 
     41# endif 
    3842      USE trc,               ONLY: ln_diatrc, med_diag, nittrc000  
    3943      USE in_out_manager,    ONLY: lwp 
     
    192196      fslowsinkc(:,:) = 0.0 
    193197# endif       
     198      !! 
     199# if defined key_foam_medusa 
     200      pgrow_avg(:,:) = 0.0 
     201      ploss_avg(:,:) = 0.0 
     202      phyt_avg(:,:)  = 0.0 
     203      IF( kt == nittrc000 ) THEN 
     204         mld_max(:,:) = 0.0 
     205      ENDIF 
     206# endif 
    194207      !! 
    195208      !! allocate and initiate 2D diag 
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/plankton.F90

    r8441 r9292  
    3636                                   fdpn, fdpn2, fdzme, fdzme2,             & 
    3737                                   fdzmi, fdzmi2, fsdiss, fsin,            & 
     38# if defined key_foam_medusa 
     39                                   fdep1, fprn, fprd,                      & 
     40                                   fgmepd, fgmepn, fgmipn,                 & 
     41# endif 
    3842                                   zphd, zphn, zpds, zzme, zzmi 
     43# if defined key_foam_medusa 
     44      USE dom_oce,           ONLY: e3t_0, e3t_n, gdepw_0, gdepw_n, tmask 
     45      USE par_kind,          ONLY: wp 
     46# else 
    3947      USE dom_oce,           ONLY: tmask 
     48# endif 
    4049      USE par_oce,           ONLY: jpim1, jpjm1 
    4150      USE phytoplankton_mod, ONLY: phytoplankton 
    4251      USE sms_medusa,        ONLY: jmpd, jmpn, jmzme, jmzmi,               & 
     52# if defined key_foam_medusa 
     53                                   pgrow_avg, ploss_avg, phyt_avg,         & 
     54# endif 
    4355                                   xkphd, xkphn, xkzme, xkzmi,             & 
    4456                                   xmetapd, xmetapn, xmetazme, xmetazmi,   & 
    4557                                   xmpd, xmpn, xmzme, xmzmi, xsdiss 
     58# if defined key_foam_medusa 
     59      USE zdfmxl,            ONLY: hmld 
     60# endif 
    4661      USE zooplankton_mod,   ONLY: zooplankton 
     62 
     63# if defined key_foam_medusa 
     64   !!* Substitution 
     65#  include "domzgr_substitute.h90" 
     66# endif 
    4767 
    4868      !! Level 
     
    5070 
    5171      INTEGER :: ji, jj 
     72 
     73# if defined key_foam_medusa 
     74      REAL(wp) :: fq0 
     75# endif 
    5276 
    5377      !!------------------------------------------------------------------- 
     
    188212      ENDDO 
    189213 
     214# if defined key_foam_medusa 
     215      !! Mixed layer averages for ocean colour assimilation 
     216      !! 
     217      DO jj = 2,jpjm1 
     218         DO ji = 2,jpim1 
     219            IF (tmask(ji,jj,jk) == 1) THEN 
     220               if (fdep1(ji,jj).le.hmld(ji,jj)) then 
     221                  !! this level is entirely in the mixed layer 
     222                  fq0 = 1.0 
     223               elseif (fsdepw(ji,jj,jk).ge.hmld(ji,jj)) then 
     224                  !! this level is entirely below the mixed layer 
     225                  fq0 = 0.0 
     226               else 
     227                  !! this level straddles the mixed layer 
     228                  fq0 = (hmld(ji,jj) - fsdepw(ji,jj,jk)) / fse3t(ji,jj,jk) 
     229               endif 
     230               !! 
     231               pgrow_avg(ji,jj) = pgrow_avg(ji,jj) +                   & 
     232                                  (((fprn(ji,jj) * zphn(ji,jj)) +      & 
     233                                    (fprd(ji,jj) * zphd(ji,jj))  ) *   & 
     234                                   fse3t(ji,jj,jk) * fq0) 
     235               ploss_avg(ji,jj) = ploss_avg(ji,jj) +                   & 
     236                                  ((fgmepd(ji,jj) + fdpd(ji,jj) +      & 
     237                                    fdpd2(ji,jj)                +      & 
     238                                    fgmepn(ji,jj) + fdpn(ji,jj) +      & 
     239                                    fdpn2(ji,jj)  + fgmipn(ji,jj) ) *  & 
     240                                   fse3t(ji,jj,jk) * fq0) 
     241               phyt_avg(ji,jj)  = phyt_avg(ji,jj)  +                   & 
     242                                  ((zphn(ji,jj) + zphd(ji,jj)) *       & 
     243                                   fse3t(ji,jj,jk) * fq0) 
     244            ENDIF 
     245         ENDDO 
     246      ENDDO 
     247# endif 
     248 
    190249   END SUBROUTINE plankton 
    191250 
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/sms_medusa.F90

    r9258 r9292  
    212212   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: f2_ccd_arg  !: 2D aragonite CCD depth 
    213213!! 
     214#if defined key_foam_medusa 
     215!! 2D fields of pCO2 and fCO2 for observation operator 
     216   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: f2_pco2w    !: 2D pCO2 
     217   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: f2_fco2w    !: 2D fCO2 
     218!! 
     219#endif 
    214220!! 2D fields of organic and inorganic material sedimented on the seafloor 
    215221   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: zb_sed_n    !: 2D organic nitrogen   (before) 
     
    391397      & 926.4960, 935.7040 / 
    392398# endif 
     399# if defined key_foam_medusa 
     400   REAL(wp) ::   xobs_xco2a   !: Observed atmospheric xCO2, read in 
     401# endif 
    393402#endif 
    394403 
     
    441450   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   :: cmask       !: ??? 
    442451 
     452#if defined key_foam_medusa 
     453!!---------------------------------------------------------------------- 
     454!! Parameters required for ocean colour assimilation 
     455!!---------------------------------------------------------------------- 
     456!! 
     457   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: pgrow_avg  !: Mixed layer average phytoplankton growth 
     458   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ploss_avg  !: Mixed layer average phytoplankton loss 
     459   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: phyt_avg   !: Mixed layer average phytoplankton 
     460   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: mld_max    !: Maximum mixed layer depth 
     461!! 
     462#endif 
     463 
    443464   !!---------------------------------------------------------------------- 
    444465   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    453474      !!---------------------------------------------------------------------- 
    454475      USE lib_mpp , ONLY: ctl_warn 
    455       INTEGER ::   ierr(8)        ! Local variables 
     476      INTEGER ::   ierr(9)        ! Local variables 
    456477      !!---------------------------------------------------------------------- 
    457478      ierr(:) = 0 
     
    463484      !* 2D and 3D fields of carbonate system parameters 
    464485      ALLOCATE( f2_ccd_cal(jpi,jpj)  , f2_ccd_arg(jpi,jpj)  ,       & 
     486#  if defined key_foam_medusa 
     487                f2_pco2w(jpi,jpj)    , f2_fco2w(jpi,jpj)    ,       & 
     488#  endif 
    465489         &      f3_pH(jpi,jpj,jpk)   , f3_h2co3(jpi,jpj,jpk),       & 
    466490         &      f3_hco3(jpi,jpj,jpk) , f3_co3(jpi,jpj,jpk)  ,       & 
     
    511535         &      ffln(jpi,jpj,jpk)    , fflf(jpi,jpj,jpk)    ,       & 
    512536         &      ffls(jpi,jpj,jpk)    , cmask(jpi,jpj)       ,    STAT=ierr(8) )  
     537# if defined key_foam_medusa 
     538      ALLOCATE( pgrow_avg(jpi,jpj)   , ploss_avg(jpi,jpj)   ,       & 
     539         &      phyt_avg(jpi,jpj)    , mld_max(jpi,jpj)     ,    STAT=ierr(9) ) 
     540# endif 
    513541#endif 
    514542      ! 
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcbio_medusa.F90

    r9257 r9292  
    102102      !! JPALM (27-06-2016): add lk_oasis for CO2 and DMS coupling with atm 
    103103      USE sbc_oce,                    ONLY: lk_oasis 
     104# if defined key_foam_medusa 
     105      USE sms_medusa,                 ONLY: hist_pco2, xobs_xco2a,          & 
     106                                            pgrow_avg, ploss_avg,           & 
     107                                            phyt_avg, mld_max 
     108# else 
    104109      USE sms_medusa,                 ONLY: hist_pco2 
     110# endif 
    105111      USE trc,                        ONLY: ln_rsttr, nittrc000, trn 
    106112      USE bio_medusa_init_mod,        ONLY: bio_medusa_init 
     
    319325         f_xco2a(:,:) = fq4 
    320326      endif 
     327#  if defined key_foam_medusa 
     328      IF ( xobs_xco2a > 0.0 ) THEN 
     329         IF(lwp) WRITE(numout,*) ' using observed atm pCO2 = ', xobs_xco2a 
     330         f_xco2a(:,:) = xobs_xco2a 
     331      ELSE 
     332         IF(lwp) WRITE(numout,*) ' xobs_xco2a <= 0 so using default atm pCO2' 
     333      ENDIF 
     334#  endif 
    321335#  if defined key_axy_pi_co2 
    322336      !! OCMIP pre-industrial pCO2 
     
    358372      !!          x * 30d + 1*rdt(i.e: mod = rdt)    
    359373      !!          ++ need to pass carb-chem output var through restarts 
     374#if defined key_foam_medusa 
     375      !! DAF (Aug 2017): For FOAM we want to run daily 
     376      If ( (kt == nittrc000 .AND. .NOT.ln_rsttr) .OR.                        & 
     377           (mod(kt*rdt,86400.) == rdt) ) THEN 
     378#else 
    360379      If ( (kt == nittrc000 .AND. .NOT.ln_rsttr) .OR.                        & 
    361380           ((86400*mod(nn_date0,100) + mod(kt*rdt,2592000.)) == rdt) ) THEN 
    362          !!--------------------------------------------------------------- 
     381#endif 
     382         !!---------------------------------------------------------------------- 
    363383         !! Calculate the carbonate chemistry for the whole ocean on the first 
    364384         !! simulation timestep and every month subsequently; the resulting 3D 
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcnam_medusa.F90

    r9258 r9292  
    9090#if defined key_roam 
    9191      NAMELIST/natroam/ xthetaphy,xthetazoo,xthetanit,        & 
     92# if defined key_foam_medusa 
     93      &    xobs_xco2a,                                        & 
     94# endif 
    9295      &    xthetarem,xo2min  
    9396#endif 
     
    490493         &   ' key_debug_medusa                                                       = INACTIVE' 
    491494# endif 
     495#if defined key_foam_medusa 
     496         WRITE(numout,*)     & 
     497         &   ' key_foam_medusa                                                        = ACTIVE' 
     498#else 
     499         WRITE(numout,*)     & 
     500         &   ' key_foam_medusa                                                        = INACTIVE' 
     501#endif 
    492502         WRITE(numout,*) ' ' 
    493503 
     
    10301040      xthetarem = 0. 
    10311041      xo2min    = 0. 
     1042# if defined key_foam_medusa 
     1043      xobs_xco2a = 0. 
     1044# endif 
    10321045 
    10331046      !READ(numnatm,natroam) 
     
    10491062!!       xthetarem :  oxygen consumption by carbon remineralisation 
    10501063!!       xo2min    :  oxygen minimum concentration 
     1064# if defined key_foam_medusa 
     1065!!       xobs_xco2a : observed atmospheric xCO2 
     1066# endif 
    10511067 
    10521068      IF(lwp) THEN 
     
    10661082          WRITE(numout,*)     & 
    10671083          &   ' oxygen minimum concentration                               xo2min      = ', xo2min 
     1084# if defined key_foam_medusa 
     1085          WRITE(numout,*)     & 
     1086          &   ' observed atmospheric xCO2                                  xobs_xco2a  = ', xobs_xco2a 
     1087# endif 
    10681088       ENDIF 
    10691089 
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/trcrst.F90

    r9262 r9292  
    4545   USE oce,     ONLY: CO2Flux_out_cpl, DMS_out_cpl, chloro_out_cpl  !! Coupling variable 
    4646   USE trcstat 
     47#if defined key_foam_medusa 
     48   USE obs_const, ONLY: obfillflt  ! Observation operator fill value 
     49#endif 
    4750 
    4851   IMPLICIT NONE 
     
    338341         IF(lwp) WRITE(numout,*) 'Or don t start from uncomplete restart...'  
    339342      ENDIF 
     343      ! 
     344#  if defined key_foam_medusa 
     345      !! 2D fields of pCO2 and fCO2 for observation operator on first timestep 
     346      IF( iom_varid( numrtr, 'PCO2W', ldstop = .FALSE. ) > 0 ) THEN 
     347         IF(lwp) WRITE(numout,*) ' MEDUSA pCO2 present - reading in ...' 
     348         CALL iom_get( numrtr, jpdom_autoglo, 'PCO2W',  f2_pco2w(:,:)  ) 
     349         CALL iom_get( numrtr, jpdom_autoglo, 'FCO2W',  f2_fco2w(:,:)  ) 
     350      ELSE 
     351         IF(lwp) WRITE(numout,*) ' MEDUSA pCO2 absent - setting to fill ...' 
     352         f2_pco2w(:,:) = obfillflt * tmask(:,:,1) 
     353         f2_fco2w(:,:) = obfillflt * tmask(:,:,1) 
     354      ENDIF 
     355#  endif 
    340356# endif 
    341  
     357# if defined key_foam_medusa 
     358      !! Fields for ocean colour assimilation on first timestep 
     359      IF( iom_varid( numrtr, 'pgrow_avg', ldstop = .FALSE. ) > 0 ) THEN 
     360         IF(lwp) WRITE(numout,*) ' MEDUSA pgrow_avg present - reading in ...' 
     361         CALL iom_get( numrtr, jpdom_autoglo, 'pgrow_avg',  pgrow_avg(:,:)  ) 
     362         CALL iom_get( numrtr, jpdom_autoglo, 'ploss_avg',  ploss_avg(:,:)  ) 
     363         CALL iom_get( numrtr, jpdom_autoglo, 'phyt_avg',   phyt_avg(:,:)   ) 
     364         CALL iom_get( numrtr, jpdom_autoglo, 'mld_max',    mld_max(:,:)    ) 
     365      ELSE 
     366         IF(lwp) WRITE(numout,*) ' MEDUSA pgrow_avg absent - setting to zero ...' 
     367         pgrow_avg(:,:) = 0.0 
     368         ploss_avg(:,:) = 0.0 
     369         phyt_avg(:,:)  = 0.0 
     370         mld_max(:,:)   = 0.0 
     371      ENDIF 
     372# endif 
    342373 
    343374#endif 
     
    510541      call trc_rst_dia_stat( f2_ccd_arg(:,:),'CCD_ARG') 
    511542      !! 
     543#  if defined key_foam_medusa 
     544      !! Fields for observation operator on first timestep 
     545      IF(lwp) WRITE(numout,*) ' MEDUSA OBS fields - writing out ...' 
     546      CALL iom_rstput( kt, nitrst, numrtw, 'PCO2W', f2_pco2w(:,:)  ) 
     547      CALL iom_rstput( kt, nitrst, numrtw, 'FCO2W', f2_fco2w(:,:)  ) 
     548#  endif 
     549# endif 
     550# if defined key_foam_medusa 
     551      !! Fields for assimilation on first timestep 
     552      IF(lwp) WRITE(numout,*) ' MEDUSA ASM fields - writing out ...' 
     553      CALL iom_rstput( kt, nitrst, numrtw, 'pgrow_avg', pgrow_avg(:,:) ) 
     554      CALL iom_rstput( kt, nitrst, numrtw, 'ploss_avg', ploss_avg(:,:) ) 
     555      CALL iom_rstput( kt, nitrst, numrtw, 'phyt_avg',  phyt_avg(:,:)  ) 
     556      CALL iom_rstput( kt, nitrst, numrtw, 'mld_max',   mld_max(:,:)   ) 
    512557# endif 
    513558!! 
Note: See TracChangeset for help on using the changeset viewer.