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 13355 for branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90 – NEMO

Ignore:
Timestamp:
2020-07-30T12:12:41+02:00 (4 years ago)
Author:
jwhile
Message:

Merged in changes to fix 1d running - documented in UKMO ocean utils ticket 367

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90

    r13316 r13355  
    3535   USE oce, ONLY:           & ! active tracer variables 
    3636      & tsn 
    37    USE zdfmxl, ONLY :       & ! mixed layer depth  
     37   USE zdfmxl, ONLY :       & ! mixed layer depth 
    3838#if defined key_karaml 
    3939      & hmld_kara,          & 
    4040      & ln_kara,            & 
    41 #endif    
    42       & hmld,               &  
     41#endif 
     42      & hmld,               & 
    4343      & hmlp,               & 
    44       & hmlpt  
     44      & hmlpt 
    4545   USE asmpar, ONLY:        & ! assimilation parameters 
    4646      & c_asmbkg,           & 
     
    9797 
    9898   IMPLICIT NONE 
    99    PRIVATE                    
     99   PRIVATE 
    100100 
    101101   PUBLIC  asm_bgc_check_options  ! called by asm_inc_init in asminc.F90 
     
    304304 
    305305      ! Allocate and read increments 
    306        
     306 
    307307      IF ( ln_slchltotinc ) THEN 
    308308         ALLOCATE( slchltot_bkginc(jpi,jpj) ) 
    309309         CALL asm_bgc_read_incs_2d( knum, 'bckinslchltot', slchltot_bkginc ) 
    310310      ENDIF 
    311        
     311 
    312312      IF ( ln_slchldiainc ) THEN 
    313313         ALLOCATE( slchldia_bkginc(jpi,jpj) ) 
    314314         CALL asm_bgc_read_incs_2d( knum, 'bckinslchldia', slchldia_bkginc ) 
    315315      ENDIF 
    316        
     316 
    317317      IF ( ln_slchlnoninc ) THEN 
    318318         ALLOCATE( slchlnon_bkginc(jpi,jpj) ) 
    319319         CALL asm_bgc_read_incs_2d( knum, 'bckinslchlnon', slchlnon_bkginc ) 
    320320      ENDIF 
    321        
     321 
    322322      IF ( ln_schltotinc ) THEN 
    323323         ALLOCATE( schltot_bkginc(jpi,jpj) ) 
    324324         CALL asm_bgc_read_incs_2d( knum, 'bckinschltot', schltot_bkginc ) 
    325325      ENDIF 
    326        
     326 
    327327      IF ( ln_slphytotinc ) THEN 
    328328         ALLOCATE( slphytot_bkginc(jpi,jpj) ) 
    329329         CALL asm_bgc_read_incs_2d( knum, 'bckinslphytot', slphytot_bkginc ) 
    330330      ENDIF 
    331        
     331 
    332332      IF ( ln_slphydiainc ) THEN 
    333333         ALLOCATE( slphydia_bkginc(jpi,jpj) ) 
    334334         CALL asm_bgc_read_incs_2d( knum, 'bckinslphydia', slphydia_bkginc ) 
    335335      ENDIF 
    336        
     336 
    337337      IF ( ln_slphynoninc ) THEN 
    338338         ALLOCATE( slphynon_bkginc(jpi,jpj) ) 
     
    349349         CALL asm_bgc_read_incs_2d( knum, 'bckinspco2', sfco2_bkginc ) 
    350350      ENDIF 
    351        
     351 
    352352      IF ( ln_plchltotinc ) THEN 
    353353         ALLOCATE( plchltot_bkginc(jpi,jpj,jpk) ) 
    354354         CALL asm_bgc_read_incs_3d( knum, 'bckinplchltot', plchltot_bkginc ) 
    355355      ENDIF 
    356        
     356 
    357357      IF ( ln_pchltotinc ) THEN 
    358358         ALLOCATE( pchltot_bkginc(jpi,jpj,jpk) ) 
    359359         CALL asm_bgc_read_incs_3d( knum, 'bckinpchltot', pchltot_bkginc ) 
    360360      ENDIF 
    361        
     361 
    362362      IF ( ln_pno3inc ) THEN 
    363363         ALLOCATE( pno3_bkginc(jpi,jpj,jpk) ) 
    364364         CALL asm_bgc_read_incs_3d( knum, 'bckinpno3', pno3_bkginc ) 
    365365      ENDIF 
    366        
     366 
    367367      IF ( ln_psi4inc ) THEN 
    368368         ALLOCATE( psi4_bkginc(jpi,jpj,jpk) ) 
    369369         CALL asm_bgc_read_incs_3d( knum, 'bckinpsi4', psi4_bkginc ) 
    370370      ENDIF 
    371        
     371 
    372372      IF ( ln_pdicinc ) THEN 
    373373         ALLOCATE( pdic_bkginc(jpi,jpj,jpk) ) 
    374374         CALL asm_bgc_read_incs_3d( knum, 'bckinpdic', pdic_bkginc ) 
    375375      ENDIF 
    376        
     376 
    377377      IF ( ln_palkinc ) THEN 
    378378         ALLOCATE( palk_bkginc(jpi,jpj,jpk) ) 
    379379         CALL asm_bgc_read_incs_3d( knum, 'bckinpalk', palk_bkginc ) 
    380380      ENDIF 
    381        
     381 
    382382      IF ( ln_pphinc ) THEN 
    383383         ALLOCATE( pph_bkginc(jpi,jpj,jpk) ) 
    384384         CALL asm_bgc_read_incs_3d( knum, 'bckinpph', pph_bkginc ) 
    385385      ENDIF 
    386        
     386 
    387387      IF ( ln_po2inc ) THEN 
    388388         ALLOCATE( po2_bkginc(jpi,jpj,jpk) ) 
     
    391391 
    392392      ! Allocate balancing increments 
    393        
     393 
    394394      IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 
    395395         & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 
     
    402402#endif 
    403403      ENDIF 
    404        
     404 
    405405      IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
    406406#if defined key_top 
     
    457457      ! Initialise 
    458458      p_incs(:,:) = 0.0 
    459        
     459 
    460460      ! read from file 
    461461      CALL iom_get( knum, jpdom_autoglo, TRIM(cd_bgcname), p_incs(:,:), 1 ) 
    462        
     462 
    463463      ! Apply the masks 
    464464      p_incs(:,:) = p_incs(:,:) * tmask(:,:,1) 
    465        
     465 
    466466      ! Set missing increments to 0.0 rather than 1e+20 
    467467      ! to allow for differences in masks 
     
    495495      ! Initialise 
    496496      p_incs(:,:,:) = 0.0 
    497        
     497 
    498498      ! read from file 
    499499      CALL iom_get( knum, jpdom_autoglo, TRIM(cd_bgcname), p_incs(:,:,:), 1 ) 
    500        
     500 
    501501      ! Apply the masks 
    502502      p_incs(:,:,:) = p_incs(:,:,:) * tmask(:,:,:) 
    503        
     503 
    504504      ! Set missing increments to 0.0 rather than 1e+20 
    505505      ! to allow for differences in masks 
     
    558558         cchl_p_bkg(:,:,:) = 0.0 
    559559#endif 
    560           
     560 
    561561         !-------------------------------------------------------------------- 
    562562         ! Read background variables for phytoplankton assimilation 
     
    578578         CALL iom_get( inum, jpdom_autoglo, 'medusa_pds', tracer_bkg(:,:,:,jppds) ) 
    579579#endif 
    580           
     580 
    581581         IF ( ln_phytobal ) THEN 
    582582 
     
    628628 
    629629         CALL iom_close( inum ) 
    630           
     630 
    631631         DO jt = 1, jptra 
    632632            tracer_bkg(:,:,:,jt) = tracer_bkg(:,:,:,jt) * tmask(:,:,:) 
    633633         END DO 
    634        
     634 
    635635      ELSE IF ( ln_spco2inc .OR. ln_sfco2inc .OR. ln_pphinc ) THEN 
    636636 
     
    641641 
    642642         CALL iom_open( c_asmbkg, inum ) 
    643           
     643 
    644644#if defined key_hadocc 
    645645         CALL iom_get( inum, jpdom_autoglo, 'hadocc_dic', tracer_bkg(:,:,:,jp_had_dic) ) 
     
    652652 
    653653         CALL iom_close( inum ) 
    654           
     654 
    655655         DO jt = 1, jptra 
    656656            tracer_bkg(:,:,:,jt) = tracer_bkg(:,:,:,jt) * tmask(:,:,:) 
    657657         END DO 
    658658         mld_max_bkg(:,:) = mld_max_bkg(:,:) * tmask(:,:,1) 
    659        
     659 
    660660      ENDIF 
    661661#else 
     
    681681      !! 
    682682      !! ** Action  : 
    683       !!                    
     683      !! 
    684684      !! References : 
    685685      !! 
     
    695695      REAL(wp)          :: zdate         ! Date 
    696696      !!------------------------------------------------------------------------ 
    697       
     697 
    698698      ! Set things up 
    699699      zdate = REAL( ndastp ) 
     
    706706            &                    TRIM( c_asmbal ) // ' at timestep = ', kt 
    707707 
    708          ! Define the output file        
     708         ! Define the output file 
    709709         CALL iom_open( c_asmbal, inum, ldwrt = .TRUE., kiolib = jprstlib) 
    710710 
     
    812812            &                    TRIM( c_asmbal ) // ' at timestep = ', kt 
    813813      ENDIF 
    814                                   
     814 
    815815   END SUBROUTINE asm_bgc_bal_wri 
    816816 
     
    893893      !! ** Action  :   return non-log increments 
    894894      !! 
    895       !! References :    
     895      !! References : 
    896896      !!------------------------------------------------------------------------ 
    897897      !! 
     
    970970      !!------------------------------------------------------------------------ 
    971971      !!                    ***  ROUTINE phyto2d_asm_inc  *** 
    972       !!           
     972      !! 
    973973      !! ** Purpose : Apply the chlorophyll assimilation increments. 
    974974      !! 
     
    977977      !!              Direct initialization or Incremental Analysis Updating. 
    978978      !! 
    979       !! ** Action  :  
     979      !! ** Action  : 
    980980      !!------------------------------------------------------------------------ 
    981981      INTEGER,  INTENT(IN) :: kt        ! Current time step 
     
    10081008      REAL(wp), DIMENSION(jpi,jpj,1) :: zphyt_avg_bkg  ! Local phyt_avg_bkg 
    10091009      !!------------------------------------------------------------------------ 
    1010        
     1010 
    10111011      IF ( kt <= nit000 ) THEN 
    10121012 
     
    10141014         ! Remember that two sets of non-log increments should not be 
    10151015         ! expected to be in the same ratio as their log equivalents 
    1016           
     1016 
    10171017         ! Total chlorophyll 
    10181018         IF ( ln_slchltotinc ) THEN 
     
    11741174 
    11751175            IF(lwp) THEN 
    1176                WRITE(numout,*)  
     1176               WRITE(numout,*) 
    11771177               WRITE(numout,*) 'phyto2d_asm_inc : phyto2d IAU at time step = ', & 
    11781178                  &  kt,' with IAU weight = ', pwgtiau(it) 
     
    12051205         ENDIF 
    12061206 
    1207       ELSEIF ( ll_asmdin ) THEN  
     1207      ELSEIF ( ll_asmdin ) THEN 
    12081208 
    12091209         !-------------------------------------------------------------------- 
    12101210         ! Direct Initialization 
    12111211         !-------------------------------------------------------------------- 
    1212           
     1212 
    12131213         IF ( kt == nitdin_r ) THEN 
    12141214 
     
    12341234            END WHERE 
    12351235#endif 
    1236   
     1236 
    12371237            ! Do not deallocate arrays - needed by asm_bgc_bal_wri 
    12381238            ! which is called at end of model run 
     
    12501250      !!------------------------------------------------------------------------ 
    12511251      !!                    ***  ROUTINE phyto3d_asm_inc  *** 
    1252       !!           
     1252      !! 
    12531253      !! ** Purpose : Apply the profile chlorophyll assimilation increments. 
    12541254      !! 
     
    12561256      !!              Direct initialization or Incremental Analysis Updating. 
    12571257      !! 
    1258       !! ** Action  :  
     1258      !! ** Action  : 
    12591259      !!------------------------------------------------------------------------ 
    12601260      INTEGER,  INTENT(IN) :: kt        ! Current time step 
     
    13401340 
    13411341            IF(lwp) THEN 
    1342                WRITE(numout,*)  
     1342               WRITE(numout,*) 
    13431343               WRITE(numout,*) 'phyto3d_asm_inc : phyto3d IAU at time step = ', & 
    13441344                  &  kt,' with IAU weight = ', pwgtiau(it) 
     
    13711371         ENDIF 
    13721372 
    1373       ELSEIF ( ll_asmdin ) THEN  
     1373      ELSEIF ( ll_asmdin ) THEN 
    13741374 
    13751375         !-------------------------------------------------------------------- 
    13761376         ! Direct Initialization 
    13771377         !-------------------------------------------------------------------- 
    1378           
     1378 
    13791379         IF ( kt == nitdin_r ) THEN 
    13801380 
     
    14001400            END WHERE 
    14011401#endif 
    1402   
     1402 
    14031403            ! Do not deallocate arrays - needed by asm_bgc_bal_wri 
    14041404            ! which is called at end of model run 
     
    14171417      !!------------------------------------------------------------------------ 
    14181418      !!                    ***  ROUTINE pco2_asm_inc  *** 
    1419       !!           
     1419      !! 
    14201420      !! ** Purpose : Apply the pco2/fco2 assimilation increments. 
    14211421      !! 
     
    14241424      !!              Direct initialization or Incremental Analysis Updating. 
    14251425      !! 
    1426       !! ** Action  :  
     1426      !! ** Action  : 
    14271427      !!------------------------------------------------------------------------ 
    14281428      INTEGER, INTENT(IN)                   :: kt           ! Current time step 
     
    15861586               jkmax = jpk-1 
    15871587               DO jk = jpk-1, 1, -1 
     1588#if defined key_vvl 
    15881589                  IF ( ( zmld(ji,jj) >  gdepw_n(ji,jj,jk)   ) .AND. & 
    15891590                     & ( zmld(ji,jj) <= gdepw_n(ji,jj,jk+1) ) ) THEN 
     
    15911592                     jkmax = jk 
    15921593                  ENDIF 
     1594#else 
     1595                  IF ( ( zmld(ji,jj) >  gdepw_0(ji,jj,jk)   ) .AND. & 
     1596                     & ( zmld(ji,jj) <= gdepw_0(ji,jj,jk+1) ) ) THEN 
     1597                     zmld(ji,jj) = gdepw_0(ji,jj,jk+1) 
     1598                     jkmax = jk 
     1599                  ENDIF 
     1600#endif 
    15931601               END DO 
    15941602               ! 
     
    16171625 
    16181626            IF(lwp) THEN 
    1619                WRITE(numout,*)  
     1627               WRITE(numout,*) 
    16201628               IF ( ln_spco2inc ) THEN 
    16211629                  WRITE(numout,*) 'pco2_asm_inc : pco2 IAU at time step = ', & 
     
    16541662         ENDIF 
    16551663 
    1656       ELSEIF ( ll_asmdin ) THEN  
     1664      ELSEIF ( ll_asmdin ) THEN 
    16571665 
    16581666         !-------------------------------------------------------------------- 
    16591667         ! Direct Initialization 
    16601668         !-------------------------------------------------------------------- 
    1661           
     1669 
    16621670         IF ( kt == nitdin_r ) THEN 
    16631671 
     
    16831691            END WHERE 
    16841692#endif 
    1685   
     1693 
    16861694            ! Do not deallocate arrays - needed by asm_bgc_bal_wri 
    16871695            ! which is called at end of model run 
     
    17001708      !!------------------------------------------------------------------------ 
    17011709      !!                    ***  ROUTINE ph_asm_inc  *** 
    1702       !!           
     1710      !! 
    17031711      !! ** Purpose : Apply the pH assimilation increments. 
    17041712      !! 
     
    17071715      !!              Direct initialization or Incremental Analysis Updating. 
    17081716      !! 
    1709       !! ** Action  :  
     1717      !! ** Action  : 
    17101718      !!------------------------------------------------------------------------ 
    17111719      INTEGER,                          INTENT(IN) :: kt        ! Current time step 
     
    17171725      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: pt_bkginc ! T increments 
    17181726      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: ps_bkginc ! S increments 
    1719        
     1727 
    17201728      REAL(wp)                         :: zsearch = 10.0 ! Increment to DIC/alk in pH calculation 
    17211729      REAL(wp)                         :: DIC_IN, ALK_IN ! DIC/alk in pH calculation 
     
    17781786            sil_bkg_temp(:,:,:) = tracer_bkg(:,:,:,jpsil) 
    17791787         ENDIF 
    1780           
     1788 
    17811789         ! Account for pCO2 balancing if required 
    17821790         IF ( ln_sfco2inc .OR. ln_spco2inc ) THEN 
     
    17841792            alk_bkg_temp(:,:,:) = alk_bkg_temp(:,:,:) + pco2_balinc(:,:,:,jpalk) 
    17851793         ENDIF 
    1786           
     1794 
    17871795         ! Loop over grid points and calculate dpH/dDIC and dpH/dAlk 
    17881796         ! This requires three calls to the MOCSY carbonate package 
     
    18491857                     ph_balinc(ji,jj,jk,jpdic) = weight * dph_ddic 
    18501858                     ph_balinc(ji,jj,jk,jpalk) = weight * dph_dalk 
    1851                       
     1859 
    18521860                  ENDIF 
    1853                    
     1861 
    18541862               END DO 
    18551863            END DO 
     
    18571865 
    18581866      ENDIF 
    1859        
     1867 
    18601868      IF ( ll_asmiau ) THEN 
    18611869 
     
    18711879 
    18721880            IF(lwp) THEN 
    1873                WRITE(numout,*)  
     1881               WRITE(numout,*) 
    18741882               WRITE(numout,*) 'ph_asm_inc : pH IAU at time step = ', & 
    18751883                  &  kt,' with IAU weight = ', pwgtiau(it) 
     
    18931901         ENDIF 
    18941902 
    1895       ELSEIF ( ll_asmdin ) THEN  
     1903      ELSEIF ( ll_asmdin ) THEN 
    18961904 
    18971905         !-------------------------------------------------------------------- 
    18981906         ! Direct Initialization 
    18991907         !-------------------------------------------------------------------- 
    1900           
     1908 
    19011909         IF ( kt == nitdin_r ) THEN 
    19021910 
     
    19131921               trb(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) 
    19141922            END WHERE 
    1915   
     1923 
    19161924            ! Do not deallocate arrays - needed by asm_bgc_bal_wri 
    19171925            ! which is called at end of model run 
     
    19191927         ! 
    19201928      ENDIF 
    1921 #endif       
     1929#endif 
    19221930      ! 
    19231931   END SUBROUTINE ph_asm_inc 
     
    19301938      !!---------------------------------------------------------------------- 
    19311939      !!                    ***  ROUTINE dyn_asm_inc  *** 
    1932       !!           
     1940      !! 
    19331941      !! ** Purpose : Apply generic 3D biogeochemistry assimilation increments. 
    19341942      !! 
    19351943      !! ** Method  : Direct initialization or Incremental Analysis Updating. 
    19361944      !! 
    1937       !! ** Action  :  
     1945      !! ** Action  : 
    19381946      !!---------------------------------------------------------------------- 
    19391947      INTEGER,  INTENT(IN) :: kt        ! Current time step 
     
    20822090 
    20832091            IF(lwp) THEN 
    2084                WRITE(numout,*)  
     2092               WRITE(numout,*) 
    20852093               WRITE(numout,*) 'bgc3d_asm_inc : 3D BGC IAU at time step = ', & 
    20862094                  &  kt,' with IAU weight = ', pwgtiau(it) 
     
    21702178#endif 
    21712179            ENDIF 
    2172             
     2180 
    21732181            IF ( kt == nitiaufin_r ) THEN 
    21742182               IF ( ln_pno3inc ) DEALLOCATE( pno3_bkginc ) 
     
    21812189         ENDIF 
    21822190 
    2183       ELSEIF ( ll_asmdin ) THEN  
     2191      ELSEIF ( ll_asmdin ) THEN 
    21842192 
    21852193         !-------------------------------------------------------------------- 
    21862194         ! Direct Initialization 
    21872195         !-------------------------------------------------------------------- 
    2188           
     2196 
    21892197         IF ( kt == nitdin_r ) THEN 
    21902198 
     
    22782286#endif 
    22792287            ENDIF 
    2280   
     2288 
    22812289            IF ( ln_pno3inc ) DEALLOCATE( pno3_bkginc ) 
    22822290            IF ( ln_psi4inc ) DEALLOCATE( psi4_bkginc ) 
Note: See TracChangeset for help on using the changeset viewer.