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 9073 for branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/air_sea.F90 – NEMO

Ignore:
Timestamp:
2017-12-15T12:48:47+01:00 (6 years ago)
Author:
jpalmier
Message:

add all micro boil checks and securities

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/air_sea.F90

    r9070 r9073  
    6161# endif 
    6262                                   zchd, zchn, zdin, zsil 
    63       USE dom_oce,           ONLY: e3t_0, e3t_n, gphit, tmask 
     63      USE dom_oce,           ONLY: e3t_0, e3t_n, gphit, tmask, mig, mjg 
    6464# if defined key_iomput 
    6565      USE iom,               ONLY: lk_iomput 
     
    9090      USE trcoxy_medusa,     ONLY: trc_oxy_medusa 
    9191# endif 
     92      USE lib_mpp,           ONLY: ctl_stop 
     93      USE trcstat  
    9294 
    9395   !!* Substitution 
     
    121123 
    122124# if defined key_roam 
     125      !! init 
     126      f_fco2w(:,:)       = 0.0 
     127      f_fco2atm(:,:)     = 0.0 
     128      f_schmidtco2(:,:)  = 0.0 
     129      f_kwco2(:,:)       = 0.0 
     130      f_co2starair(:,:)  = 0.0 
     131      f_dpco2(:,:)       = 0.0 
     132      f_rhosw(:,:)       = 0.0 
     133      f_K0(:,:)          = 0.0 
     134      !! air pressure (atm); ultimately this will use air  
     135      !! pressure at the base of the UKESM1 atmosphere  
     136      !!                                      
     137      f_pp0(:,:)   = 1.0 
     138 
     139 
    123140      !!----------------------------------------------------------- 
    124141      !! Air-sea gas exchange 
     
    133150         DO ji = 2,jpim1 
    134151            !! OPEN wet point IF..THEN loop 
    135             if (tmask(ji,jj,1) == 1) then 
     152            IF (tmask(ji,jj,1) == 1) then 
    136153               IF (lk_oasis) THEN 
    137154                  !! use 2D atm xCO2 from atm coupling 
    138155                  f_xco2a(ji,jj) = PCO2a_in_cpl(ji,jj) 
     156                  !!!  
     157                  !!! Jpalm test on atm xCO2 
     158                  IF ( (f_xco2a(ji,jj) > 1500 ).OR.(f_xco2a(ji,jj) < 100 ) ) THEN 
     159                    IF(lwp) THEN  
     160                       WRITE(numout,*) ' atm xCO2 = ',f_xco2a(ji,jj),          & 
     161                                       ' -- ji =', mig(ji),' jj = ', mjg(jj) 
     162                       CALL ctl_stop( 'MEDUSA - Air-Sea :', 'unrealistic atm xCO2 ' ) 
     163                    ENDIF  
     164                 ENDIF  
    139165               ENDIF 
    140166               !! 
     
    161187               'air-sea: carb-chem kt = ', kt 
    162188               CALL flush(numout) 
     189               !! JPALM add carb print: 
     190               call trc_rst_dia_stat(f_xco2a(:,:), 'f_xco2a') 
     191               call trc_rst_dia_stat(wndm(:,:), 'wndm') 
     192               call trc_rst_dia_stat(f_kw660(:,:), 'f_kw660') 
     193               call trc_rst_dia_stat(ztmp(:,:), 'ztmp') 
     194               call trc_rst_dia_stat(zsal(:,:), 'zsal') 
     195               call trc_rst_dia_stat(zalk(:,:), 'zalk') 
     196               call trc_rst_dia_stat(zdic(:,:), 'zdic') 
     197               call trc_rst_dia_stat(zsil(:,:), 'zsil') 
     198               call trc_rst_dia_stat(zpho(:,:), 'zpho') 
    163199#   endif 
    164200      DO jj = 2,jpjm1 
    165201         DO ji = 2,jpim1 
    166202            if (tmask(ji,jj,1) == 1) then 
    167                !! air pressure (atm); ultimately this will use air  
    168                !! pressure at the base of the UKESM1 atmosphere  
    169                !!                                      
    170                f_pp0(ji,jj)   = 1.0 
    171                !! 
    172                !! IF(lwp) WRITE(numout,*) ' MEDUSA ztmp    =', ztmp(ji,jj) 
    173                !! IF(lwp) WRITE(numout,*) ' MEDUSA wndm    =', wndm(ji,jj) 
    174                !! IF(lwp) WRITE(numout,*) ' MEDUSA fr_i    =', fr_i(ji,jj) 
    175203               !! 
    176204#  if defined key_axy_carbchem 
    177205#   if defined key_mocsy 
     206               !! Jpalm -- 12-09-2017 -- add extra check after reccurent 
     207               !!          carbonate failure in the coupled run. 
     208               !!          must be associated to air-sea flux or air xCO2...i 
     209               !!          Check MOCSY inputs 
     210               IF ( (zsal(ji,jj) > 75.0 ).OR.(zsal(ji,jj) < 0.0 ) .OR.        & 
     211                    (ztmp(ji,jj) > 50.0 ).OR.(ztmp(ji,jj) < -20.0 ) .OR.      & 
     212                    (zalk(ji,jj) > 35.0E2 ).OR.(zalk(ji,jj) <= 0.0 ) .OR.     & 
     213                    (zdic(ji,jj) > 35.0E2 ).OR.(zdic(ji,jj) <= 0.0 ) .OR.     & 
     214                    (f_kw660(ji,jj) > 1.0E-2 ).OR.(f_kw660(ji,jj) < 0.0 ) ) THEN 
     215                  IF(lwp) THEN  
     216                      WRITE(numout,*) ' surface T = ',ztmp(ji,jj) 
     217                      WRITE(numout,*) ' surface S = ',zsal(ji,jj) 
     218                      WRITE(numout,*) ' surface ALK = ',zalk(ji,jj) 
     219                      WRITE(numout,*) ' surface DIC = ',zdic(ji,jj) 
     220                      WRITE(numout,*) ' KW660 = ',f_kw660(ji,jj) 
     221                      WRITE(numout,*) ' atm xCO2 = ',f_xco2a(ji,jj)    
     222                      WRITE(numout,*) ' surface pco2w  = ',f_pco2w(ji,jj) 
     223                      WRITE(numout,*) ' surface fco2w  = ',f_fco2w(ji,jj) 
     224                      WRITE(numout,*) ' surface fco2a  = ',f_fco2atm(ji,jj) 
     225                      WRITE(numout,*) ' surface co2flx = ',f_co2flux(ji,jj) 
     226                      WRITE(numout,*) ' surface dpco2  = ',f_dpco2(ji,jj) 
     227                      WRITE(numout,*) ' MOCSY input: ji =', mig(ji),' jj = ', mjg(jj),  & 
     228                                       ' kt = ', kt  
     229                      WRITE(numout,*) 'MEDUSA - Air-Sea INPUT: unrealistic surface Carb. Chemistry' 
     230                      CALL ctl_stop( 'MEDUSA - Air-Sea INPUT: ',             & 
     231                                     'unrealistic surface Carb. Chemistry -- INPUTS' ) 
     232                  ENDIF      
     233               ENDIF      
    178234               !! 
    179235               !! AXY (22/06/15): use Orr & Epitalon (2015) MOCSY-2 carbonate 
     
    200256               f_TALK(ji,jj) = (zalk(ji,jj) / f_rhosw(ji,jj)) * 1000. 
    201257               f_dcf(ji,jj)  = f_rhosw(ji,jj) 
     258               !! Jpalm -- 12-09-2017 -- add extra check after reccurent 
     259               !!          carbonate failure in the coupled run. 
     260               !!          must be associated to air-sea flux or air xCO2...i 
     261               !!          Check MOCSY inputs 
     262              IF ( (f_pco2w(ji,jj) > 1.E4 ).OR.(f_pco2w(ji,jj) < 0.0 ) .OR.     & 
     263                   (f_fco2w(ji,jj) > 1.E4 ).OR.(f_fco2w(ji,jj) < 0.0 ) .OR.     &    
     264                   (f_fco2atm(ji,jj) > 1.E4 ).OR.(f_fco2atm(ji,jj) < 0.0 ) .OR.     & 
     265                   (f_co2flux(ji,jj) > 1.E-2 ).OR.(f_co2flux(ji,jj) < -1.E-2 ) .OR.     & 
     266                   (f_dpco2(ji,jj) > 1.E4 ).OR.(f_dpco2(ji,jj) < -1.E4 ) ) THEN 
     267                 IF(lwp) THEN  
     268                     WRITE(numout,*) ' surface T = ',ztmp(ji,jj) 
     269                     WRITE(numout,*) ' surface S = ',zsal(ji,jj) 
     270                     WRITE(numout,*) ' surface ALK = ',zalk(ji,jj) 
     271                     WRITE(numout,*) ' surface DIC = ',zdic(ji,jj) 
     272                     WRITE(numout,*) ' KW660 = ',f_kw660(ji,jj) 
     273                     WRITE(numout,*) ' atm xCO2 = ',f_xco2a(ji,jj)    
     274                     WRITE(numout,*) ' surface pco2w  = ',f_pco2w(ji,jj) 
     275                     WRITE(numout,*) ' surface fco2w  = ',f_fco2w(ji,jj) 
     276                     WRITE(numout,*) ' surface fco2a  = ',f_fco2atm(ji,jj) 
     277                     WRITE(numout,*) ' surface co2flx = ',f_co2flux(ji,jj) 
     278                     WRITE(numout,*) ' surface dpco2  = ',f_dpco2(ji,jj) 
     279                     WRITE(numout,*) ' MOCSY output: ji =', mig(ji),' jj = ', mjg(jj),  & 
     280                                       ' kt = ', kt      
     281                     WRITE(numout,*) 'MEDUSA - Air-Sea OUTPUT: unrealistic surface Carb. Chemistry' 
     282                     CALL ctl_stop( 'MEDUSA - Air-Sea OUTPUT: ',            & 
     283                                    'unrealistic surface Carb. Chemistry -- OUTPUTS' ) 
     284                 ENDIF      
     285              ENDIF      
    202286            ENDIF 
    203287         ENDDO 
    204288      ENDDO 
    205289 
     290#   if defined key_debug_medusa 
     291               !! JPALM add carb print: 
     292               call trc_rst_dia_stat(f_pco2w(:,:), 'f_pco2w') 
     293               call trc_rst_dia_stat(f_fco2w(:,:), 'f_fco2w') 
     294               call trc_rst_dia_stat(f_fco2atm(:,:), 'f_fco2atm') 
     295               call trc_rst_dia_stat(f_schmidtco2(:,:), 'f_schmidtco2') 
     296               call trc_rst_dia_stat(f_kwco2(:,:), 'f_kwco2') 
     297               call trc_rst_dia_stat(f_co2starair(:,:), 'f_co2starair') 
     298               call trc_rst_dia_stat(f_co2flux(:,:), 'f_co2flux') 
     299               call trc_rst_dia_stat(f_dpco2(:,:), 'f_dpco2') 
     300#   endif 
    206301#   else    
    207302 
Note: See TracChangeset for help on using the changeset viewer.