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

Ignore:
Timestamp:
2020-06-10T13:13:39+02:00 (4 years ago)
Author:
jwhile
Message:

Bug fixes for 1D running

File:
1 edited

Legend:

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

    r10302 r13088  
    3333   USE oce, ONLY:           & ! active tracer variables 
    3434      & tsn 
    35    USE zdfmxl, ONLY :       & ! mixed layer depth  
     35   USE zdfmxl, ONLY :       & ! mixed layer depth 
    3636#if defined key_karaml 
    3737      & hmld_kara,          & 
    3838      & ln_kara,            & 
    39 #endif    
    40       & hmld,               &  
     39#endif 
     40      & hmld,               & 
    4141      & hmlp,               & 
    42       & hmlpt  
     42      & hmlpt 
    4343   USE asmpar, ONLY:        & ! assimilation parameters 
    4444      & c_asmbkg,           & 
     
    8989 
    9090   IMPLICIT NONE 
    91    PRIVATE                    
     91   PRIVATE 
    9292 
    9393   PUBLIC  asm_bgc_check_options  ! called by asm_inc_init in asminc.F90 
     
    290290 
    291291      ! Allocate and read increments 
    292        
     292 
    293293      IF ( ln_slchltotinc ) THEN 
    294294         ALLOCATE( slchltot_bkginc(jpi,jpj) ) 
    295295         CALL asm_bgc_read_incs_2d( knum, 'bckinslchltot', slchltot_bkginc ) 
    296296      ENDIF 
    297        
     297 
    298298      IF ( ln_slchldiainc ) THEN 
    299299         ALLOCATE( slchldia_bkginc(jpi,jpj) ) 
    300300         CALL asm_bgc_read_incs_2d( knum, 'bckinslchldia', slchldia_bkginc ) 
    301301      ENDIF 
    302        
     302 
    303303      IF ( ln_slchlnoninc ) THEN 
    304304         ALLOCATE( slchlnon_bkginc(jpi,jpj) ) 
    305305         CALL asm_bgc_read_incs_2d( knum, 'bckinslchlnon', slchlnon_bkginc ) 
    306306      ENDIF 
    307        
     307 
    308308      IF ( ln_schltotinc ) THEN 
    309309         ALLOCATE( schltot_bkginc(jpi,jpj) ) 
    310310         CALL asm_bgc_read_incs_2d( knum, 'bckinschltot', schltot_bkginc ) 
    311311      ENDIF 
    312        
     312 
    313313      IF ( ln_slphytotinc ) THEN 
    314314         ALLOCATE( slphytot_bkginc(jpi,jpj) ) 
    315315         CALL asm_bgc_read_incs_2d( knum, 'bckinslphytot', slphytot_bkginc ) 
    316316      ENDIF 
    317        
     317 
    318318      IF ( ln_slphydiainc ) THEN 
    319319         ALLOCATE( slphydia_bkginc(jpi,jpj) ) 
    320320         CALL asm_bgc_read_incs_2d( knum, 'bckinslphydia', slphydia_bkginc ) 
    321321      ENDIF 
    322        
     322 
    323323      IF ( ln_slphynoninc ) THEN 
    324324         ALLOCATE( slphynon_bkginc(jpi,jpj) ) 
     
    335335         CALL asm_bgc_read_incs_2d( knum, 'bckinspco2', sfco2_bkginc ) 
    336336      ENDIF 
    337        
     337 
    338338      IF ( ln_plchltotinc ) THEN 
    339339         ALLOCATE( plchltot_bkginc(jpi,jpj,jpk) ) 
    340340         CALL asm_bgc_read_incs_3d( knum, 'bckinplchltot', plchltot_bkginc ) 
    341341      ENDIF 
    342        
     342 
    343343      IF ( ln_pchltotinc ) THEN 
    344344         ALLOCATE( pchltot_bkginc(jpi,jpj,jpk) ) 
    345345         CALL asm_bgc_read_incs_3d( knum, 'bckinpchltot', pchltot_bkginc ) 
    346346      ENDIF 
    347        
     347 
    348348      IF ( ln_pno3inc ) THEN 
    349349         ALLOCATE( pno3_bkginc(jpi,jpj,jpk) ) 
    350350         CALL asm_bgc_read_incs_3d( knum, 'bckinpno3', pno3_bkginc ) 
    351351      ENDIF 
    352        
     352 
    353353      IF ( ln_psi4inc ) THEN 
    354354         ALLOCATE( psi4_bkginc(jpi,jpj,jpk) ) 
    355355         CALL asm_bgc_read_incs_3d( knum, 'bckinpsi4', psi4_bkginc ) 
    356356      ENDIF 
    357        
     357 
    358358      IF ( ln_pdicinc ) THEN 
    359359         ALLOCATE( pdic_bkginc(jpi,jpj,jpk) ) 
    360360         CALL asm_bgc_read_incs_3d( knum, 'bckinpdic', pdic_bkginc ) 
    361361      ENDIF 
    362        
     362 
    363363      IF ( ln_palkinc ) THEN 
    364364         ALLOCATE( palk_bkginc(jpi,jpj,jpk) ) 
    365365         CALL asm_bgc_read_incs_3d( knum, 'bckinpalk', palk_bkginc ) 
    366366      ENDIF 
    367        
     367 
    368368      IF ( ln_pphinc ) THEN 
    369369         ALLOCATE( pph_bkginc(jpi,jpj,jpk) ) 
    370370         CALL asm_bgc_read_incs_3d( knum, 'bckinpph', pph_bkginc ) 
    371371      ENDIF 
    372        
     372 
    373373      IF ( ln_po2inc ) THEN 
    374374         ALLOCATE( po2_bkginc(jpi,jpj,jpk) ) 
     
    377377 
    378378      ! Allocate balancing increments 
    379        
     379 
    380380      IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 
    381381         & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 
     
    388388#endif 
    389389      ENDIF 
    390        
     390 
    391391      IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
    392392#if defined key_top 
     
    443443      ! Initialise 
    444444      p_incs(:,:) = 0.0 
    445        
     445 
    446446      ! read from file 
    447447      CALL iom_get( knum, jpdom_autoglo, TRIM(cd_bgcname), p_incs(:,:), 1 ) 
    448        
     448 
    449449      ! Apply the masks 
    450450      p_incs(:,:) = p_incs(:,:) * tmask(:,:,1) 
    451        
     451 
    452452      ! Set missing increments to 0.0 rather than 1e+20 
    453453      ! to allow for differences in masks 
     
    481481      ! Initialise 
    482482      p_incs(:,:,:) = 0.0 
    483        
     483 
    484484      ! read from file 
    485485      CALL iom_get( knum, jpdom_autoglo, TRIM(cd_bgcname), p_incs(:,:,:), 1 ) 
    486        
     486 
    487487      ! Apply the masks 
    488488      p_incs(:,:,:) = p_incs(:,:,:) * tmask(:,:,:) 
    489        
     489 
    490490      ! Set missing increments to 0.0 rather than 1e+20 
    491491      ! to allow for differences in masks 
     
    538538         cchl_p_bkg(:,:,:) = 0.0 
    539539#endif 
    540           
     540 
    541541         !-------------------------------------------------------------------- 
    542542         ! Read background variables for phytoplankton assimilation 
     
    558558         CALL iom_get( inum, jpdom_autoglo, 'medusa_pds', tracer_bkg(:,:,:,jppds) ) 
    559559#endif 
    560           
     560 
    561561         IF ( ln_phytobal ) THEN 
    562562 
     
    602602 
    603603         CALL iom_close( inum ) 
    604           
     604 
    605605         DO jt = 1, jptra 
    606606            tracer_bkg(:,:,:,jt) = tracer_bkg(:,:,:,jt) * tmask(:,:,:) 
    607607         END DO 
    608        
     608 
    609609      ELSE IF ( ln_spco2inc .OR. ln_sfco2inc .OR. ln_pphinc ) THEN 
    610610 
     
    615615 
    616616         CALL iom_open( c_asmbkg, inum ) 
    617           
     617 
    618618#if defined key_hadocc 
    619619         CALL iom_get( inum, jpdom_autoglo, 'hadocc_dic', tracer_bkg(:,:,:,jp_had_dic) ) 
     
    626626 
    627627         CALL iom_close( inum ) 
    628           
     628 
    629629         DO jt = 1, jptra 
    630630            tracer_bkg(:,:,:,jt) = tracer_bkg(:,:,:,jt) * tmask(:,:,:) 
    631631         END DO 
    632632         mld_max_bkg(:,:) = mld_max_bkg(:,:) * tmask(:,:,1) 
    633        
     633 
    634634      ENDIF 
    635635#else 
     
    655655      !! 
    656656      !! ** Action  : 
    657       !!                    
     657      !! 
    658658      !! References : 
    659659      !! 
     
    669669      REAL(wp)          :: zdate         ! Date 
    670670      !!------------------------------------------------------------------------ 
    671       
     671 
    672672      ! Set things up 
    673673      zdate = REAL( ndastp ) 
     
    680680            &                    TRIM( c_asmbal ) // ' at timestep = ', kt 
    681681 
    682          ! Define the output file        
     682         ! Define the output file 
    683683         CALL iom_open( c_asmbal, inum, ldwrt = .TRUE., kiolib = jprstlib) 
    684684 
     
    767767            &                    TRIM( c_asmbal ) // ' at timestep = ', kt 
    768768      ENDIF 
    769                                   
     769 
    770770   END SUBROUTINE asm_bgc_bal_wri 
    771771 
     
    847847      !! ** Action  :   return non-log increments 
    848848      !! 
    849       !! References :    
     849      !! References : 
    850850      !!------------------------------------------------------------------------ 
    851851      !! 
     
    879879      !!------------------------------------------------------------------------ 
    880880      !!                    ***  ROUTINE phyto2d_asm_inc  *** 
    881       !!           
     881      !! 
    882882      !! ** Purpose : Apply the chlorophyll assimilation increments. 
    883883      !! 
     
    886886      !!              Direct initialization or Incremental Analysis Updating. 
    887887      !! 
    888       !! ** Action  :  
     888      !! ** Action  : 
    889889      !!------------------------------------------------------------------------ 
    890890      INTEGER,  INTENT(IN) :: kt        ! Current time step 
     
    914914#endif 
    915915      !!------------------------------------------------------------------------ 
    916        
     916 
    917917      IF ( kt <= nit000 ) THEN 
    918918 
     
    920920         ! Remember that two sets of non-log increments should not be 
    921921         ! expected to be in the same ratio as their log equivalents 
    922           
     922 
    923923         ! Total chlorophyll 
    924924         IF ( ln_slchltotinc ) THEN 
     
    10741074 
    10751075            IF(lwp) THEN 
    1076                WRITE(numout,*)  
     1076               WRITE(numout,*) 
    10771077               WRITE(numout,*) 'phyto2d_asm_inc : phyto2d IAU at time step = ', & 
    10781078                  &  kt,' with IAU weight = ', pwgtiau(it) 
     
    11051105         ENDIF 
    11061106 
    1107       ELSEIF ( ll_asmdin ) THEN  
     1107      ELSEIF ( ll_asmdin ) THEN 
    11081108 
    11091109         !-------------------------------------------------------------------- 
    11101110         ! Direct Initialization 
    11111111         !-------------------------------------------------------------------- 
    1112           
     1112 
    11131113         IF ( kt == nitdin_r ) THEN 
    11141114 
     
    11341134            END WHERE 
    11351135#endif 
    1136   
     1136 
    11371137            ! Do not deallocate arrays - needed by asm_bgc_bal_wri 
    11381138            ! which is called at end of model run 
     
    11501150      !!------------------------------------------------------------------------ 
    11511151      !!                    ***  ROUTINE phyto3d_asm_inc  *** 
    1152       !!           
     1152      !! 
    11531153      !! ** Purpose : Apply the profile chlorophyll assimilation increments. 
    11541154      !! 
     
    11561156      !!              Direct initialization or Incremental Analysis Updating. 
    11571157      !! 
    1158       !! ** Action  :  
     1158      !! ** Action  : 
    11591159      !!------------------------------------------------------------------------ 
    11601160      INTEGER,  INTENT(IN) :: kt        ! Current time step 
     
    12611261 
    12621262            IF(lwp) THEN 
    1263                WRITE(numout,*)  
     1263               WRITE(numout,*) 
    12641264               WRITE(numout,*) 'phyto3d_asm_inc : phyto3d IAU at time step = ', & 
    12651265                  &  kt,' with IAU weight = ', pwgtiau(it) 
     
    12921292         ENDIF 
    12931293 
    1294       ELSEIF ( ll_asmdin ) THEN  
     1294      ELSEIF ( ll_asmdin ) THEN 
    12951295 
    12961296         !-------------------------------------------------------------------- 
    12971297         ! Direct Initialization 
    12981298         !-------------------------------------------------------------------- 
    1299           
     1299 
    13001300         IF ( kt == nitdin_r ) THEN 
    13011301 
     
    13211321            END WHERE 
    13221322#endif 
    1323   
     1323 
    13241324            ! Do not deallocate arrays - needed by asm_bgc_bal_wri 
    13251325            ! which is called at end of model run 
     
    13381338      !!------------------------------------------------------------------------ 
    13391339      !!                    ***  ROUTINE pco2_asm_inc  *** 
    1340       !!           
     1340      !! 
    13411341      !! ** Purpose : Apply the pco2/fco2 assimilation increments. 
    13421342      !! 
     
    13451345      !!              Direct initialization or Incremental Analysis Updating. 
    13461346      !! 
    1347       !! ** Action  :  
     1347      !! ** Action  : 
    13481348      !!------------------------------------------------------------------------ 
    13491349      INTEGER, INTENT(IN)                   :: kt           ! Current time step 
     
    14951495               jkmax = jpk-1 
    14961496               DO jk = jpk-1, 1, -1 
     1497#if defined key_vvl 
    14971498                  IF ( ( zmld(ji,jj) >  gdepw_n(ji,jj,jk)   ) .AND. & 
    14981499                     & ( zmld(ji,jj) <= gdepw_n(ji,jj,jk+1) ) ) THEN 
     
    15001501                     jkmax = jk 
    15011502                  ENDIF 
     1503#else 
     1504                  IF ( ( zmld(ji,jj) >  gdepw_0(ji,jj,jk)   ) .AND. & 
     1505                     & ( zmld(ji,jj) <= gdepw_0(ji,jj,jk+1) ) ) THEN 
     1506                     zmld(ji,jj) = gdepw_0(ji,jj,jk+1) 
     1507                     jkmax = jk 
     1508                  ENDIF 
     1509#endif 
    15021510               END DO 
    15031511               ! 
     
    15261534 
    15271535            IF(lwp) THEN 
    1528                WRITE(numout,*)  
     1536               WRITE(numout,*) 
    15291537               IF ( ln_spco2inc ) THEN 
    15301538                  WRITE(numout,*) 'pco2_asm_inc : pco2 IAU at time step = ', & 
     
    15631571         ENDIF 
    15641572 
    1565       ELSEIF ( ll_asmdin ) THEN  
     1573      ELSEIF ( ll_asmdin ) THEN 
    15661574 
    15671575         !-------------------------------------------------------------------- 
    15681576         ! Direct Initialization 
    15691577         !-------------------------------------------------------------------- 
    1570           
     1578 
    15711579         IF ( kt == nitdin_r ) THEN 
    15721580 
     
    15921600            END WHERE 
    15931601#endif 
    1594   
     1602 
    15951603            ! Do not deallocate arrays - needed by asm_bgc_bal_wri 
    15961604            ! which is called at end of model run 
     
    16091617      !!------------------------------------------------------------------------ 
    16101618      !!                    ***  ROUTINE ph_asm_inc  *** 
    1611       !!           
     1619      !! 
    16121620      !! ** Purpose : Apply the pH assimilation increments. 
    16131621      !! 
     
    16161624      !!              Direct initialization or Incremental Analysis Updating. 
    16171625      !! 
    1618       !! ** Action  :  
     1626      !! ** Action  : 
    16191627      !!------------------------------------------------------------------------ 
    16201628      INTEGER,                          INTENT(IN) :: kt        ! Current time step 
     
    16261634      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: pt_bkginc ! T increments 
    16271635      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: ps_bkginc ! S increments 
    1628        
     1636 
    16291637      REAL(wp)                         :: zsearch = 10.0 ! Increment to DIC/alk in pH calculation 
    16301638      REAL(wp)                         :: DIC_IN, ALK_IN ! DIC/alk in pH calculation 
     
    16791687            sil_bkg_temp(:,:,:) = tracer_bkg(:,:,:,jpsil) 
    16801688         ENDIF 
    1681           
     1689 
    16821690         ! Account for pCO2 balancing if required 
    16831691         IF ( ln_sfco2inc .OR. ln_spco2inc ) THEN 
     
    16851693            alk_bkg_temp(:,:,:) = alk_bkg_temp(:,:,:) + pco2_balinc(:,:,:,jpalk) 
    16861694         ENDIF 
    1687           
     1695 
    16881696         ! Loop over grid points and calculate dpH/dDIC and dpH/dAlk 
    16891697         ! This requires three calls to the MOCSY carbonate package 
     
    17501758                     ph_balinc(ji,jj,jk,jpdic) = weight * dph_ddic 
    17511759                     ph_balinc(ji,jj,jk,jpalk) = weight * dph_dalk 
    1752                       
     1760 
    17531761                  ENDIF 
    1754                    
     1762 
    17551763               END DO 
    17561764            END DO 
     
    17581766 
    17591767      ENDIF 
    1760        
     1768 
    17611769      IF ( ll_asmiau ) THEN 
    17621770 
     
    17721780 
    17731781            IF(lwp) THEN 
    1774                WRITE(numout,*)  
     1782               WRITE(numout,*) 
    17751783               WRITE(numout,*) 'ph_asm_inc : pH IAU at time step = ', & 
    17761784                  &  kt,' with IAU weight = ', pwgtiau(it) 
     
    17941802         ENDIF 
    17951803 
    1796       ELSEIF ( ll_asmdin ) THEN  
     1804      ELSEIF ( ll_asmdin ) THEN 
    17971805 
    17981806         !-------------------------------------------------------------------- 
    17991807         ! Direct Initialization 
    18001808         !-------------------------------------------------------------------- 
    1801           
     1809 
    18021810         IF ( kt == nitdin_r ) THEN 
    18031811 
     
    18141822               trb(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) 
    18151823            END WHERE 
    1816   
     1824 
    18171825            ! Do not deallocate arrays - needed by asm_bgc_bal_wri 
    18181826            ! which is called at end of model run 
     
    18201828         ! 
    18211829      ENDIF 
    1822 #endif       
     1830#endif 
    18231831      ! 
    18241832   END SUBROUTINE ph_asm_inc 
     
    18311839      !!---------------------------------------------------------------------- 
    18321840      !!                    ***  ROUTINE dyn_asm_inc  *** 
    1833       !!           
     1841      !! 
    18341842      !! ** Purpose : Apply generic 3D biogeochemistry assimilation increments. 
    18351843      !! 
    18361844      !! ** Method  : Direct initialization or Incremental Analysis Updating. 
    18371845      !! 
    1838       !! ** Action  :  
     1846      !! ** Action  : 
    18391847      !!---------------------------------------------------------------------- 
    18401848      INTEGER,  INTENT(IN) :: kt        ! Current time step 
     
    19831991 
    19841992            IF(lwp) THEN 
    1985                WRITE(numout,*)  
     1993               WRITE(numout,*) 
    19861994               WRITE(numout,*) 'bgc3d_asm_inc : 3D BGC IAU at time step = ', & 
    19871995                  &  kt,' with IAU weight = ', pwgtiau(it) 
     
    20712079#endif 
    20722080            ENDIF 
    2073             
     2081 
    20742082            IF ( kt == nitiaufin_r ) THEN 
    20752083               IF ( ln_pno3inc ) DEALLOCATE( pno3_bkginc ) 
     
    20822090         ENDIF 
    20832091 
    2084       ELSEIF ( ll_asmdin ) THEN  
     2092      ELSEIF ( ll_asmdin ) THEN 
    20852093 
    20862094         !-------------------------------------------------------------------- 
    20872095         ! Direct Initialization 
    20882096         !-------------------------------------------------------------------- 
    2089           
     2097 
    20902098         IF ( kt == nitdin_r ) THEN 
    20912099 
     
    21792187#endif 
    21802188            ENDIF 
    2181   
     2189 
    21822190            IF ( ln_pno3inc ) DEALLOCATE( pno3_bkginc ) 
    21832191            IF ( ln_psi4inc ) DEALLOCATE( psi4_bkginc ) 
Note: See TracChangeset for help on using the changeset viewer.