Changeset 9322 for branches/UKMO
- Timestamp:
- 2018-02-12T14:37:32+01:00 (6 years ago)
- Location:
- branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/CONFIG/SHARED/namelist_ref
r9296 r9322 1287 1287 &nam_asminc ! assimilation increments ('key_asminc') 1288 1288 !----------------------------------------------------------------------- 1289 ln_bkgwri = .false. ! Logical switch for writing out background state 1290 ln_trainc = .false. ! Logical switch for applying tracer increments 1291 ln_dyninc = .false. ! Logical switch for applying velocity increments 1292 ln_sshinc = .false. ! Logical switch for applying SSH increments 1293 ln_asmdin = .false. ! Logical switch for Direct Initialization (DI) 1294 ln_asmiau = .false. ! Logical switch for Incremental Analysis Updating (IAU) 1295 ln_seaiceinc = .false. ! Logical switch for applying sea ice increments 1289 ln_bkgwri = .false. ! Logical switch for writing out background state 1290 ln_balwri = .false. ! Logical switch for writing out balancing increments 1291 ln_trainc = .false. ! Logical switch for applying tracer increments 1292 ln_dyninc = .false. ! Logical switch for applying velocity increments 1293 ln_sshinc = .false. ! Logical switch for applying SSH increments 1294 ln_asmdin = .false. ! Logical switch for Direct Initialization (DI) 1295 ln_asmiau = .false. ! Logical switch for Incremental Analysis Updating (IAU) 1296 ln_seaiceinc = .false. ! Logical switch for applying sea ice increments 1297 ln_phytobal = .false. ! Logical switch for phytoplankton multivariate balancing 1296 1298 ln_slchltotinc = .false. ! Logical switch for applying slchltot increments 1297 ln_slchltotbal = .false. ! Logical switch for applying slchltot multivariate balancing 1298 ln_sfco2inc = .false. ! Logical switch for applying sfCO2 increments 1299 ln_spco2inc = .false. ! Logical switch for applying spCO2 increments 1299 ln_slchldiainc = .false. ! Logical switch for applying slchldia increments 1300 ln_slchlnoninc = .false. ! Logical switch for applying slchlnon increments 1301 ln_schltotinc = .false. ! Logical switch for applying schltot increments 1302 ln_slphytotinc = .false. ! Logical switch for applying slphytot increments 1303 ln_slphydiainc = .false. ! Logical switch for applying slphydia increments 1304 ln_slphynoninc = .false. ! Logical switch for applying slphynon increments 1305 ln_sfco2inc = .false. ! Logical switch for applying sfCO2 increments 1306 ln_spco2inc = .false. ! Logical switch for applying spCO2 increments 1307 ln_plchltotinc = .false. ! Logical switch for applying plchltot increments 1308 ln_pchltotinc = .false. ! Logical switch for applying pchltot increments 1309 ln_pno3inc = .false. ! Logical switch for applying pno3 increments 1310 ln_psi4inc = .false. ! Logical switch for applying psi4 increments 1311 ln_pdicinc = .false. ! Logical switch for applying pdic increments 1312 ln_palkinc = .false. ! Logical switch for applying palk increments 1313 ln_pphinc = .false. ! Logical switch for applying pph increments 1314 ln_po2inc = .false. ! Logical switch for applying po2 increments 1300 1315 ln_temnofreeze = .false. ! Logical to not add increments if temperature would fall below freezing 1301 nitbkg = 0! Timestep of background in [0,nitend-nit000-1]1302 nitdin = 0! Timestep of background for DI in [0,nitend-nit000-1]1303 nitiaustr = 1! Timestep of start of IAU interval in [0,nitend-nit000-1]1304 nitiaufin = 15! Timestep of end of IAU interval in [0,nitend-nit000-1]1305 niaufn = 0! Type of IAU weighting function1306 ln_salfix = .false.! Logical switch for ensuring that the sa > salfixmin1307 salfixmin = -9999! Minimum salinity after applying the increments1308 nn_divdmp = 0! Number of iterations of divergence damping operator1309 mld_choice_bgc = 1 ! MLD criterion to use for biogeochemistry assimilation1310 rn_maxchlinc = -999.0 ! maximum absolute non-log chlorophyll increment from logchlassimilation1311 ! <= 0 implies no maximum applied (switch turned off)1312 ! > 0 implies maximum absolute chl increment capped at this value1316 nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] 1317 nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1] 1318 nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1] 1319 nitiaufin = 15 ! Timestep of end of IAU interval in [0,nitend-nit000-1] 1320 niaufn = 0 ! Type of IAU weighting function 1321 ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin 1322 salfixmin = -9999 ! Minimum salinity after applying the increments 1323 nn_divdmp = 0 ! Number of iterations of divergence damping operator 1324 mld_choice_bgc = 1 ! MLD criterion to use for biogeochemistry assimilation 1325 rn_maxchlinc = -999.0 ! maximum absolute non-log chlorophyll increment from ocean colour assimilation 1326 ! <= 0 implies no maximum applied (switch turned off) 1327 ! > 0 implies maximum absolute chl increment capped at this value 1313 1328 / 1314 1329 !----------------------------------------------------------------------- -
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90
r9297 r9322 19 19 !! asm_bgc_bal_wri : write out bgc balancing increments 20 20 !! asm_bgc_bkg_wri : write out bgc background 21 !! slchltot_asm_inc : apply the slchltot increment 22 !! spco2_asm_inc : apply the pCO2/fCO2 increment 21 !! phyto_asm_inc : apply the ocean colour increments 22 !! pco2_asm_inc : apply the pCO2/fCO2 increments 23 !! ph_asm_inc : apply the pH increments 24 !! bgc3d_asm_inc : apply the generic 3D BGC increments 23 25 !!--------------------------------------------------------------------------- 24 26 USE par_kind, ONLY: & ! kind parameters … … 85 87 PRIVATE 86 88 87 PUBLIC asm_bgc_check_options ! called by asm_inc_init in asminc.F90 88 PUBLIC asm_bgc_init_incs ! called by asm_inc_init in asminc.F90 89 PUBLIC asm_bgc_init_bkg ! called by asm_inc_init in asminc.F90 90 PUBLIC asm_bgc_bal_wri ! called by nemo_gcm in nemogcm.F90 91 PUBLIC asm_bgc_bkg_wri ! called by asm_bkg_wri in asmbkg.F90 92 PUBLIC slchltot_asm_inc ! called by bgc_asm_inc in asminc.F90 93 PUBLIC spco2_asm_inc ! called by bgc_asm_inc in asminc.F90 94 95 LOGICAL, PUBLIC :: ln_balwri = .FALSE. !: No output of balancing incs 96 LOGICAL, PUBLIC :: ln_slchltotinc = .FALSE. !: No slchltot increment 97 LOGICAL, PUBLIC :: ln_slchltotbal = .FALSE. !: No slchltot balancing 98 LOGICAL, PUBLIC :: ln_spco2inc = .FALSE. !: No pCO2 increment 99 LOGICAL, PUBLIC :: ln_sfco2inc = .FALSE. !: No fCO2 increment 89 PUBLIC asm_bgc_check_options ! called by asm_inc_init in asminc.F90 90 PUBLIC asm_bgc_init_incs ! called by asm_inc_init in asminc.F90 91 PRIVATE asm_bgc_read_incs_2d ! called by asm_bgc_init_incs 92 PRIVATE asm_bgc_read_incs_3d ! called by asm_bgc_init_incs 93 PUBLIC asm_bgc_init_bkg ! called by asm_inc_init in asminc.F90 94 PUBLIC asm_bgc_bal_wri ! called by nemo_gcm in nemogcm.F90 95 PUBLIC asm_bgc_bkg_wri ! called by asm_bkg_wri in asmbkg.F90 96 PUBLIC phyto_asm_inc ! called by bgc_asm_inc in asminc.F90 97 PUBLIC pco2_asm_inc ! called by bgc_asm_inc in asminc.F90 98 PUBLIC ph_asm_inc ! called by bgc_asm_inc in asminc.F90 99 PUBLIC bgc3d_asm_inc ! called by bgc_asm_inc in asminc.F90 100 101 LOGICAL, PUBLIC :: ln_balwri = .FALSE. !: No output of balancing incs 102 LOGICAL, PUBLIC :: ln_phytobal = .FALSE. !: No phytoplankton balancing 103 LOGICAL, PUBLIC :: ln_slchltotinc = .FALSE. !: No surface total log10(chlorophyll) increment 104 LOGICAL, PUBLIC :: ln_slchldiainc = .FALSE. !: No surface diatom log10(chlorophyll) increment 105 LOGICAL, PUBLIC :: ln_slchlnoninc = .FALSE. !: No surface non-diatom log10(chlorophyll) increment 106 LOGICAL, PUBLIC :: ln_schltotinc = .FALSE. !: No surface total chlorophyll increment 107 LOGICAL, PUBLIC :: ln_slphytotinc = .FALSE. !: No surface total log10(phyto C) increment 108 LOGICAL, PUBLIC :: ln_slphydiainc = .FALSE. !: No surface diatom log10(phyto C) increment 109 LOGICAL, PUBLIC :: ln_slphynoninc = .FALSE. !: No surface non-diatom log10(phyto C) increment 110 LOGICAL, PUBLIC :: ln_spco2inc = .FALSE. !: No surface pCO2 increment 111 LOGICAL, PUBLIC :: ln_sfco2inc = .FALSE. !: No surface fCO2 increment 112 LOGICAL, PUBLIC :: ln_plchltotinc = .FALSE. !: No profile total log10(chlorophyll) increment 113 LOGICAL, PUBLIC :: ln_pchltotinc = .FALSE. !: No profile total chlorophyll increment 114 LOGICAL, PUBLIC :: ln_pno3inc = .FALSE. !: No profile nitrate increment 115 LOGICAL, PUBLIC :: ln_psi4inc = .FALSE. !: No profile silicate increment 116 LOGICAL, PUBLIC :: ln_pdicinc = .FALSE. !: No profile dissolved inorganic carbon increment 117 LOGICAL, PUBLIC :: ln_palkinc = .FALSE. !: No profile alkalinity increment 118 LOGICAL, PUBLIC :: ln_pphinc = .FALSE. !: No profile pH increment 119 LOGICAL, PUBLIC :: ln_po2inc = .FALSE. !: No profile oxygen increment 100 120 101 121 INTEGER, PUBLIC :: mld_choice_bgc = 1 !: choice of mld for bgc assimilation … … 119 139 120 140 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: slchltot_bkginc ! slchltot inc 121 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: spco2_bkginc ! sp(/f)co2 inc 141 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: slchldia_bkginc ! slchldia inc 142 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: slchlnon_bkginc ! slchlnon inc 143 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: schltot_bkginc ! schltot inc 144 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: slphytot_bkginc ! slphytot inc 145 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: slphydia_bkginc ! slphydia inc 146 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: slphynon_bkginc ! slphynon inc 147 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: sfco2_bkginc ! sfco2 inc 148 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: spco2_bkginc ! spco2 inc 149 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: plchltot_bkginc ! plchltot inc 150 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: pchltot_bkginc ! pchltot inc 151 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: pno3_bkginc ! pno3 inc 152 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: psi4_bkginc ! psi4 inc 153 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: pdic_bkginc ! pdic inc 154 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: palk_bkginc ! palk inc 155 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: pph_bkginc ! pph inc 156 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: po2_bkginc ! po2 inc 122 157 #if defined key_top 123 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: slchltot_balinc ! Balancing incs from slchltot asm 124 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: spco2_balinc ! Balancing incs from sp(/f)co2 asm 158 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: phyto_balinc ! Balancing incs from ocean colour 159 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: pco2_balinc ! Balancing incs from spco2/sfco2 160 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: ph_balinc ! Balancing incs from pph 125 161 #endif 126 162 … … 133 169 #endif 134 170 #if defined key_hadocc 135 REAL(wp), DIMENSION(:,: ), ALLOCATABLE :: chl_bkg ! Background surfacechl136 REAL(wp), DIMENSION(:,: ), ALLOCATABLE :: cchl_p_bkg ! Background surfacec:chl171 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: chl_bkg ! Background chl 172 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: cchl_p_bkg ! Background c:chl 137 173 #endif 138 174 … … 152 188 !!------------------------------------------------------------------------ 153 189 154 IF ( ( ln_balwri ).AND.( .NOT. ln_slchltotinc ).AND. & 155 & ( .NOT. ln_spco2inc ).AND.( .NOT. ln_sfco2inc ) ) THEN 156 CALL ctl_warn( ' Balancing increments are only calculated for logchl and pCO2/fCO2', & 157 & ' Not assimilating logchl, pCO2 or fCO2, so ln_balwri will be set to .false.') 190 #if ! defined key_top || ( ! defined key_hadocc && ( ! defined key_medusa || ! defined key_foam_medusa ) ) 191 CALL ctl_stop( ' Attempting to assimilate biogeochemical observations', & 192 & ' but no compatible biogeochemical model is available' ) 193 #endif 194 195 #if defined key_hadocc 196 IF ( ln_slchldiainc .OR. ln_slchlnoninc .OR. ln_slphydiainc .OR. & 197 & ln_slphynoninc .OR. ln_psi4inc .OR. ln_pphinc .OR. ln_po2inc ) THEN 198 CALL ctl_stop( ' Cannot assimilate PFTs, Si4, pH or O2 into HadOCC' ) 199 ENDIF 200 #endif 201 202 IF ( ( ln_phytobal ).AND. & 203 & ( .NOT. ln_slchltotinc ).AND.( .NOT. ln_slchldiainc ).AND. & 204 & ( .NOT. ln_slchlnoninc ).AND.( .NOT. ln_schltotinc ).AND. & 205 & ( .NOT. ln_slphytotinc ).AND.( .NOT. ln_slphydiainc ).AND. & 206 & ( .NOT. ln_slphynoninc ) ) THEN 207 CALL ctl_warn( ' Cannot calculate phytoplankton balancing increments', & 208 & ' if not assimilating ocean colour,', & 209 & ' so ln_phytobal will be set to .false.') 210 ln_phytobal = .FALSE. 211 ENDIF 212 213 IF ( ( ln_balwri ).AND.( .NOT. ln_phytobal ).AND. & 214 & ( .NOT. ln_spco2inc ).AND.( .NOT. ln_sfco2inc ).AND.( .NOT. ln_pphinc ) ) THEN 215 CALL ctl_warn( ' Balancing increments are only calculated for ocean colour', & 216 & ' with ln_phytobal, or for pCO2, fCO2, or pH.', & 217 & ' Not the case, so ln_balwri will be set to .false.') 158 218 ln_balwri = .FALSE. 159 219 ENDIF 160 220 161 IF ( ( ln_slchltotbal ).AND.( .NOT. ln_slchltotinc ) ) THEN 162 CALL ctl_warn( ' Cannot calculate logchl balancing increments if not assimilating logchl', & 163 & ' Not assimilating logchl, so ln_slchltotbal will be set to .false.') 164 ln_slchltotbal = .FALSE. 165 ENDIF 166 167 IF ( ( ln_spco2inc ).AND.( ln_sfco2inc ) ) THEN 221 IF ( ln_spco2inc .AND. ln_sfco2inc ) THEN 168 222 CALL ctl_stop( ' Can only assimilate pCO2 OR fCO2, not both' ) 169 223 ENDIF 170 224 225 IF ( ln_slchltotinc .AND. ln_schltotinc ) THEN 226 CALL ctl_stop( ' Can only assimilate surface log10(chlorophyll) or chlorophyll, not both' ) 227 ENDIF 228 229 IF ( ln_plchltotinc .AND. ln_pchltotinc ) THEN 230 CALL ctl_stop( ' Can only assimilate profile log10(chlorophyll) or chlorophyll, not both' ) 231 ENDIF 232 233 IF ( ( ln_slchltotinc .OR. ln_schltotinc ) .AND. & 234 & ( ln_slchldiainc .OR. ln_slchlnoninc ) ) THEN 235 CALL ctl_stop( ' Can only assimilate total or PFT surface chlorophyll, not both' ) 236 ENDIF 237 238 IF ( ln_slphytotinc .AND. ( ln_slphydiainc .OR. ln_slphynoninc ) ) THEN 239 CALL ctl_stop( ' Can only assimilate total or PFT surface phytoplankton carbon, not both' ) 240 ENDIF 241 171 242 END SUBROUTINE asm_bgc_check_options 172 243 … … 192 263 !!------------------------------------------------------------------------ 193 264 265 ! Allocate and read increments 266 194 267 IF ( ln_slchltotinc ) THEN 195 268 ALLOCATE( slchltot_bkginc(jpi,jpj) ) 196 slchltot_bkginc(:,:) = 0.0 269 CALL asm_bgc_read_incs_2d( knum, 'bckinslchltot', slchltot_bkginc ) 270 ENDIF 271 272 IF ( ln_slchldiainc ) THEN 273 ALLOCATE( slchldia_bkginc(jpi,jpj) ) 274 CALL asm_bgc_read_incs_2d( knum, 'bckinslchldia', slchldia_bkginc ) 275 ENDIF 276 277 IF ( ln_slchlnoninc ) THEN 278 ALLOCATE( slchlnon_bkginc(jpi,jpj) ) 279 CALL asm_bgc_read_incs_2d( knum, 'bckinslchlnon', slchlnon_bkginc ) 280 ENDIF 281 282 IF ( ln_schltotinc ) THEN 283 ALLOCATE( schltot_bkginc(jpi,jpj) ) 284 CALL asm_bgc_read_incs_2d( knum, 'bckinschltot', schltot_bkginc ) 285 ENDIF 286 287 IF ( ln_slphytotinc ) THEN 288 ALLOCATE( slphytot_bkginc(jpi,jpj) ) 289 CALL asm_bgc_read_incs_2d( knum, 'bckinslphytot', slphytot_bkginc ) 290 ENDIF 291 292 IF ( ln_slphydiainc ) THEN 293 ALLOCATE( slphydia_bkginc(jpi,jpj) ) 294 CALL asm_bgc_read_incs_2d( knum, 'bckinslphydia', slphydia_bkginc ) 295 ENDIF 296 297 IF ( ln_slphynoninc ) THEN 298 ALLOCATE( slphynon_bkginc(jpi,jpj) ) 299 CALL asm_bgc_read_incs_2d( knum, 'bckinslphynon', slphynon_bkginc ) 300 ENDIF 301 302 IF ( ln_sfco2inc ) THEN 303 ALLOCATE( sfco2_bkginc(jpi,jpj) ) 304 CALL asm_bgc_read_incs_2d( knum, 'bckinsfco2', sfco2_bkginc ) 305 ENDIF 306 307 IF ( ln_spco2inc ) THEN 308 ALLOCATE( spco2_bkginc(jpi,jpj) ) 309 CALL asm_bgc_read_incs_2d( knum, 'bckinspco2', sfco2_bkginc ) 310 ENDIF 311 312 IF ( ln_plchltotinc ) THEN 313 ALLOCATE( plchltot_bkginc(jpi,jpj,jpk) ) 314 CALL asm_bgc_read_incs_3d( knum, 'bckinplchltot', plchltot_bkginc ) 315 ENDIF 316 317 IF ( ln_pchltotinc ) THEN 318 ALLOCATE( pchltot_bkginc(jpi,jpj,jpk) ) 319 CALL asm_bgc_read_incs_3d( knum, 'bckinpchltot', pchltot_bkginc ) 320 ENDIF 321 322 IF ( ln_pno3inc ) THEN 323 ALLOCATE( pno3_bkginc(jpi,jpj,jpk) ) 324 CALL asm_bgc_read_incs_3d( knum, 'bckinpno3', pno3_bkginc ) 325 ENDIF 326 327 IF ( ln_psi4inc ) THEN 328 ALLOCATE( psi4_bkginc(jpi,jpj,jpk) ) 329 CALL asm_bgc_read_incs_3d( knum, 'bckinpsi4', psi4_bkginc ) 330 ENDIF 331 332 IF ( ln_pdicinc ) THEN 333 ALLOCATE( pdic_bkginc(jpi,jpj,jpk) ) 334 CALL asm_bgc_read_incs_3d( knum, 'bckinpdic', pdic_bkginc ) 335 ENDIF 336 337 IF ( ln_palkinc ) THEN 338 ALLOCATE( palk_bkginc(jpi,jpj,jpk) ) 339 CALL asm_bgc_read_incs_3d( knum, 'bckinpalk', palk_bkginc ) 340 ENDIF 341 342 IF ( ln_pphinc ) THEN 343 ALLOCATE( pph_bkginc(jpi,jpj,jpk) ) 344 CALL asm_bgc_read_incs_3d( knum, 'bckinpph', pph_bkginc ) 345 ENDIF 346 347 IF ( ln_po2inc ) THEN 348 ALLOCATE( po2_bkginc(jpi,jpj,jpk) ) 349 CALL asm_bgc_read_incs_3d( knum, 'bckinpo2', po2_bkginc ) 350 ENDIF 351 352 ! Allocate balancing increments 353 354 IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 355 & ln_schltotinc .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 356 & ln_slphynoninc ) THEN 197 357 #if defined key_top 198 ALLOCATE( slchltot_balinc(jpi,jpj,jpk,jptra) ) 199 slchltot_balinc(:,:,:,:) = 0.0 200 #endif 201 ENDIF 358 ALLOCATE( phyto_balinc(jpi,jpj,jpk,jptra) ) 359 phyto_balinc(:,:,:,:) = 0.0 360 #else 361 CALL ctl_stop( ' key_top must be set for balancing increments' ) 362 #endif 363 ENDIF 364 202 365 IF ( ln_spco2inc .OR. ln_sfco2inc ) THEN 203 ALLOCATE( spco2_bkginc(jpi,jpj) )204 spco2_bkginc(:,:) = 0.0205 366 #if defined key_top 206 ALLOCATE( spco2_balinc(jpi,jpj,jpk,jptra) ) 207 spco2_balinc(:,:,:,:) = 0.0 208 #endif 209 ENDIF 210 211 IF ( ln_slchltotinc ) THEN 212 CALL iom_get( knum, jpdom_autoglo, 'bckinslchltot', slchltot_bkginc(:,:), 1 ) 213 ! Apply the masks 214 slchltot_bkginc(:,:) = slchltot_bkginc(:,:) * tmask(:,:,1) 215 ! Set missing increments to 0.0 rather than 1e+20 216 ! to allow for differences in masks 217 WHERE( ABS( slchltot_bkginc(:,:) ) > 1.0e+10 ) slchltot_bkginc(:,:) = 0.0 218 ENDIF 219 220 IF ( ln_spco2inc .OR. ln_sfco2inc ) THEN 221 IF ( ln_spco2inc ) THEN 222 CALL iom_get( knum, jpdom_autoglo, 'bckinspco2', spco2_bkginc(:,:), 1 ) 223 ELSE IF ( ln_sfco2inc ) THEN 224 CALL iom_get( knum, jpdom_autoglo, 'bckinsfco2', spco2_bkginc(:,:), 1 ) 225 ENDIF 226 ! Apply the masks 227 spco2_bkginc(:,:) = spco2_bkginc(:,:) * tmask(:,:,1) 228 ! Set missing increments to 0.0 rather than 1e+20 229 ! to allow for differences in masks 230 WHERE( ABS( spco2_bkginc(:,:) ) > 1.0e+10 ) spco2_bkginc(:,:) = 0.0 367 ALLOCATE( pco2_balinc(jpi,jpj,jpk,jptra) ) 368 pco2_balinc(:,:,:,:) = 0.0 369 #else 370 CALL ctl_stop( ' key_top must be set for balancing increments' ) 371 #endif 372 ENDIF 373 374 IF ( ln_pphinc ) THEN 375 #if defined key_top 376 ALLOCATE( ph_balinc(jpi,jpj,jpk,jptra) ) 377 ph_balinc(:,:,:,:) = 0.0 378 #else 379 CALL ctl_stop( ' key_top must be set for balancing increments' ) 380 #endif 231 381 ENDIF 232 382 233 383 END SUBROUTINE asm_bgc_init_incs 384 385 !!=========================================================================== 386 !!=========================================================================== 387 !!=========================================================================== 388 389 SUBROUTINE asm_bgc_read_incs_2d( knum, cd_bgcname, p_incs ) 390 !!------------------------------------------------------------------------ 391 !! *** ROUTINE asm_bgc_init_incs *** 392 !! 393 !! ** Purpose : read 2d bgc increments 394 !! 395 !! ** Method : read increments from file 396 !! 397 !! ** Action : read increments from file 398 !! 399 !! References : asm_inc_init 400 !!------------------------------------------------------------------------ 401 !! 402 INTEGER, INTENT(in ) :: knum ! i/o unit 403 CHARACTER(LEN=13), INTENT(in ) :: cd_bgcname ! variable 404 REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: p_incs ! increments 405 !! 406 !!------------------------------------------------------------------------ 407 408 ! Initialise 409 p_incs(:,:) = 0.0 410 411 ! read from file 412 CALL iom_get( knum, jpdom_autoglo, TRIM(cd_bgcname), p_incs(:,:), 1 ) 413 414 ! Apply the masks 415 p_incs(:,:) = p_incs(:,:) * tmask(:,:,1) 416 417 ! Set missing increments to 0.0 rather than 1e+20 418 ! to allow for differences in masks 419 WHERE( ABS( p_incs(:,:) ) > 1.0e+10 ) p_incs(:,:) = 0.0 420 421 END SUBROUTINE asm_bgc_read_incs_2d 422 423 !!=========================================================================== 424 !!=========================================================================== 425 !!=========================================================================== 426 427 SUBROUTINE asm_bgc_read_incs_3d( knum, cd_bgcname, p_incs ) 428 !!------------------------------------------------------------------------ 429 !! *** ROUTINE asm_bgc_init_incs *** 430 !! 431 !! ** Purpose : read 3d bgc increments 432 !! 433 !! ** Method : read increments from file 434 !! 435 !! ** Action : read increments from file 436 !! 437 !! References : asm_inc_init 438 !!------------------------------------------------------------------------ 439 !! 440 INTEGER, INTENT(in ) :: knum ! i/o unit 441 CHARACTER(LEN=13), INTENT(in ) :: cd_bgcname ! variable 442 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( out) :: p_incs ! increments 443 !! 444 !!------------------------------------------------------------------------ 445 446 ! Initialise 447 p_incs(:,:,:) = 0.0 448 449 ! read from file 450 CALL iom_get( knum, jpdom_autoglo, TRIM(cd_bgcname), p_incs(:,:,:), 1 ) 451 452 ! Apply the masks 453 p_incs(:,:,:) = p_incs(:,:,:) * tmask(:,:,:) 454 455 ! Set missing increments to 0.0 rather than 1e+20 456 ! to allow for differences in masks 457 WHERE( ABS( p_incs(:,:,:) ) > 1.0e+10 ) p_incs(:,:,:) = 0.0 458 459 END SUBROUTINE asm_bgc_read_incs_3d 234 460 235 461 !!=========================================================================== … … 255 481 !!------------------------------------------------------------------------ 256 482 257 #if defined key_hadocc || (defined key_medusa && defined key_foam_medusa) 258 IF ( ln_slchltotinc ) THEN 483 #if defined key_top && ( defined key_hadocc || (defined key_medusa && defined key_foam_medusa) ) 484 IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 485 & ln_schltotinc .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 486 & ln_slphynoninc .OR. ln_plchltotinc .OR. ln_pchltotinc ) THEN 259 487 260 488 ALLOCATE( pgrow_avg_bkg(jpi,jpj) ) … … 270 498 271 499 #if defined key_hadocc 272 ALLOCATE( chl_bkg(jpi,jpj ) )273 ALLOCATE( cchl_p_bkg(jpi,jpj ) )274 chl_bkg(:,: ) = 0.0275 cchl_p_bkg(:,: ) = 0.0500 ALLOCATE( chl_bkg(jpi,jpj,jpk) ) 501 ALLOCATE( cchl_p_bkg(jpi,jpj,jpk) ) 502 chl_bkg(:,:,:) = 0.0 503 cchl_p_bkg(:,:,:) = 0.0 276 504 #endif 277 505 278 506 !-------------------------------------------------------------------- 279 ! Read background variables for slchltotassimilation507 ! Read background variables for phytoplankton assimilation 280 508 ! Some only required if performing balancing 281 509 !-------------------------------------------------------------------- … … 286 514 CALL iom_get( inum, jpdom_autoglo, 'hadocc_chl', chl_bkg ) 287 515 CALL iom_get( inum, jpdom_autoglo, 'hadocc_cchl', cchl_p_bkg ) 288 chl_bkg(:,: ) = chl_bkg(:,:) * tmask(:,:,1)289 cchl_p_bkg(:,: ) = cchl_p_bkg(:,:) * tmask(:,:,1)516 chl_bkg(:,:,:) = chl_bkg(:,:,:) * tmask(:,:,:) 517 cchl_p_bkg(:,:,:) = cchl_p_bkg(:,:,:) * tmask(:,:,:) 290 518 #elif defined key_medusa 291 519 CALL iom_get( inum, jpdom_autoglo, 'medusa_chn', tracer_bkg(:,:,:,jpchn) ) … … 293 521 #endif 294 522 295 IF ( ln_ slchltotbal ) THEN523 IF ( ln_phytobal ) THEN 296 524 297 525 CALL iom_get( inum, jpdom_autoglo, 'pgrow_avg', pgrow_avg_bkg ) … … 344 572 END DO 345 573 346 ELSE IF ( ln_spco2inc .OR. ln_sfco2inc ) THEN574 ELSE IF ( ln_spco2inc .OR. ln_sfco2inc .OR. ln_pphinc ) THEN 347 575 348 576 ALLOCATE( tracer_bkg(jpi,jpj,jpk,jptra) ) … … 370 598 371 599 ENDIF 600 #else 601 CALL ctl_stop( ' asm_bgc_init_bkg: key_top and a compatible biogeochemical model required' ) 372 602 #endif 373 603 … … 423 653 IF ( ln_slchltotinc ) THEN 424 654 #if defined key_medusa 425 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_chn', slchltot_balinc(:,:,:,jpchn) )426 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_chd', slchltot_balinc(:,:,:,jpchd) )427 IF ( ln_ slchltotbal ) THEN428 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phn', slchltot_balinc(:,:,:,jpphn) )429 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phd', slchltot_balinc(:,:,:,jpphd) )430 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_pds', slchltot_balinc(:,:,:,jppds) )431 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zmi', slchltot_balinc(:,:,:,jpzmi) )432 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zme', slchltot_balinc(:,:,:,jpzme) )433 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_din', slchltot_balinc(:,:,:,jpdin) )434 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_sil', slchltot_balinc(:,:,:,jpsil) )435 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_fer', slchltot_balinc(:,:,:,jpfer) )436 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_det', slchltot_balinc(:,:,:,jpdet) )437 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dtc', slchltot_balinc(:,:,:,jpdtc) )438 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dic', slchltot_balinc(:,:,:,jpdic) )439 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_alk', slchltot_balinc(:,:,:,jpalk) )440 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_oxy', slchltot_balinc(:,:,:,jpoxy) )655 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_chn', phyto_balinc(:,:,:,jpchn) ) 656 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_chd', phyto_balinc(:,:,:,jpchd) ) 657 IF ( ln_phytobal ) THEN 658 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phn', phyto_balinc(:,:,:,jpphn) ) 659 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phd', phyto_balinc(:,:,:,jpphd) ) 660 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_pds', phyto_balinc(:,:,:,jppds) ) 661 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zmi', phyto_balinc(:,:,:,jpzmi) ) 662 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zme', phyto_balinc(:,:,:,jpzme) ) 663 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_din', phyto_balinc(:,:,:,jpdin) ) 664 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_sil', phyto_balinc(:,:,:,jpsil) ) 665 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_fer', phyto_balinc(:,:,:,jpfer) ) 666 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_det', phyto_balinc(:,:,:,jpdet) ) 667 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dtc', phyto_balinc(:,:,:,jpdtc) ) 668 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dic', phyto_balinc(:,:,:,jpdic) ) 669 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_alk', phyto_balinc(:,:,:,jpalk) ) 670 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_oxy', phyto_balinc(:,:,:,jpoxy) ) 441 671 ENDIF 442 672 #elif defined key_hadocc 443 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phy', slchltot_balinc(:,:,:,jp_had_phy) )444 IF ( ln_ slchltotbal ) THEN445 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_nut', slchltot_balinc(:,:,:,jp_had_nut) )446 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zoo', slchltot_balinc(:,:,:,jp_had_zoo) )447 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_det', slchltot_balinc(:,:,:,jp_had_pdn) )448 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dic', slchltot_balinc(:,:,:,jp_had_dic) )449 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_alk', slchltot_balinc(:,:,:,jp_had_alk) )673 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phy', phyto_balinc(:,:,:,jp_had_phy) ) 674 IF ( ln_phytobal ) THEN 675 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_nut', phyto_balinc(:,:,:,jp_had_nut) ) 676 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zoo', phyto_balinc(:,:,:,jp_had_zoo) ) 677 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_det', phyto_balinc(:,:,:,jp_had_pdn) ) 678 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dic', phyto_balinc(:,:,:,jp_had_dic) ) 679 CALL iom_rstput( kt, kt, inum, 'logchl_balinc_alk', phyto_balinc(:,:,:,jp_had_alk) ) 450 680 ENDIF 451 681 #endif … … 454 684 IF ( ln_spco2inc ) THEN 455 685 #if defined key_medusa 456 CALL iom_rstput( kt, kt, inum, 'pco2_balinc_dic', spco2_balinc(:,:,:,jpdic) )457 CALL iom_rstput( kt, kt, inum, 'pco2_balinc_alk', spco2_balinc(:,:,:,jpalk) )686 CALL iom_rstput( kt, kt, inum, 'pco2_balinc_dic', pco2_balinc(:,:,:,jpdic) ) 687 CALL iom_rstput( kt, kt, inum, 'pco2_balinc_alk', pco2_balinc(:,:,:,jpalk) ) 458 688 #elif defined key_hadocc 459 CALL iom_rstput( kt, kt, inum, 'pco2_balinc_dic', spco2_balinc(:,:,:,jp_had_dic) )460 CALL iom_rstput( kt, kt, inum, 'pco2_balinc_alk', spco2_balinc(:,:,:,jp_had_alk) )689 CALL iom_rstput( kt, kt, inum, 'pco2_balinc_dic', pco2_balinc(:,:,:,jp_had_dic) ) 690 CALL iom_rstput( kt, kt, inum, 'pco2_balinc_alk', pco2_balinc(:,:,:,jp_had_alk) ) 461 691 #endif 462 692 ELSE IF ( ln_sfco2inc ) THEN 463 693 #if defined key_medusa 464 CALL iom_rstput( kt, kt, inum, 'fco2_balinc_dic', spco2_balinc(:,:,:,jpdic) )465 CALL iom_rstput( kt, kt, inum, 'fco2_balinc_alk', spco2_balinc(:,:,:,jpalk) )694 CALL iom_rstput( kt, kt, inum, 'fco2_balinc_dic', pco2_balinc(:,:,:,jpdic) ) 695 CALL iom_rstput( kt, kt, inum, 'fco2_balinc_alk', pco2_balinc(:,:,:,jpalk) ) 466 696 #elif defined key_hadocc 467 CALL iom_rstput( kt, kt, inum, 'fco2_balinc_dic', spco2_balinc(:,:,:,jp_had_dic) )468 CALL iom_rstput( kt, kt, inum, 'fco2_balinc_alk', spco2_balinc(:,:,:,jp_had_alk) )697 CALL iom_rstput( kt, kt, inum, 'fco2_balinc_dic', pco2_balinc(:,:,:,jp_had_dic) ) 698 CALL iom_rstput( kt, kt, inum, 'fco2_balinc_alk', pco2_balinc(:,:,:,jp_had_alk) ) 469 699 #endif 470 700 ENDIF … … 514 744 CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_dic' , trn(:,:,:,jp_had_dic) ) 515 745 CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_alk' , trn(:,:,:,jp_had_alk) ) 516 CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_chl' , HADOCC_CHL(:,:, 1) )517 CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_cchl' , cchl_p(:,:, 1) )746 CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_chl' , HADOCC_CHL(:,:,:) ) 747 CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_cchl' , cchl_p(:,:,:) ) 518 748 #elif defined key_medusa && defined key_foam_medusa 519 749 CALL iom_rstput( kt, nitbkg_r, knum, 'pgrow_avg' , pgrow_avg ) … … 544 774 !!=========================================================================== 545 775 546 SUBROUTINE slchltot_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau )547 !!------------------------------------------------------------------------ 548 !! *** ROUTINE logchl_asm_inc ***776 SUBROUTINE phyto_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau ) 777 !!------------------------------------------------------------------------ 778 !! *** ROUTINE phyto_asm_inc *** 549 779 !! 550 780 !! ** Purpose : Apply the chlorophyll assimilation increments. … … 568 798 !!------------------------------------------------------------------------ 569 799 800 IF ( ln_slchldiainc .OR. ln_slchlnoninc .OR. & 801 & ln_schltotinc .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 802 & ln_slphynoninc ) THEN 803 CALL ctl_stop( ' No PFT assimilation quite yet' ) 804 ENDIF 805 570 806 IF ( kt <= nit000 ) THEN 571 807 … … 574 810 #if defined key_medusa && defined key_foam_medusa 575 811 CALL asm_logchl_bal_medusa( slchltot_bkginc, zincper, mld_choice_bgc, & 576 & rn_maxchlinc, ln_ slchltotbal, ll_asmdin, &812 & rn_maxchlinc, ln_phytobal, ll_asmdin, & 577 813 & pgrow_avg_bkg, ploss_avg_bkg, & 578 814 & phyt_avg_bkg, mld_max_bkg, & 579 & tracer_bkg, slchltot_balinc )815 & tracer_bkg, phyto_balinc ) 580 816 #elif defined key_hadocc 581 817 CALL asm_logchl_bal_hadocc( slchltot_bkginc, zincper, mld_choice_bgc, & 582 & rn_maxchlinc, ln_ slchltotbal, ll_asmdin, &818 & rn_maxchlinc, ln_phytobal, ll_asmdin, & 583 819 & pgrow_avg_bkg, ploss_avg_bkg, & 584 820 & phyt_avg_bkg, mld_max_bkg, & 585 & chl_bkg , cchl_p_bkg,&586 & tracer_bkg, slchltot_balinc )821 & chl_bkg(:,:,1), cchl_p_bkg(:,:,1), & 822 & tracer_bkg, phyto_balinc ) 587 823 #else 588 824 CALL ctl_stop( 'Attempting to assimilate slchltot, ', & … … 617 853 DO jk = 1, jpkm1 618 854 trn(:,:,jk,jp_msa0:jp_msa1) = trn(:,:,jk,jp_msa0:jp_msa1) + & 619 & slchltot_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt855 & phyto_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 620 856 trb(:,:,jk,jp_msa0:jp_msa1) = trb(:,:,jk,jp_msa0:jp_msa1) + & 621 & slchltot_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt857 & phyto_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 622 858 END DO 623 859 #elif defined key_hadocc 624 860 DO jk = 1, jpkm1 625 861 trn(:,:,jk,jp_had0:jp_had1) = trn(:,:,jk,jp_had0:jp_had1) + & 626 & slchltot_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt862 & phyto_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 627 863 trb(:,:,jk,jp_had0:jp_had1) = trb(:,:,jk,jp_had0:jp_had1) + & 628 & slchltot_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt864 & phyto_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 629 865 END DO 630 866 #endif … … 650 886 & ' Background state is taken from model rather than background file' ) 651 887 trn(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) + & 652 & slchltot_balinc(:,:,:,jp_msa0:jp_msa1)888 & phyto_balinc(:,:,:,jp_msa0:jp_msa1) 653 889 trb(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) 654 890 #elif defined key_hadocc … … 658 894 & ' Background state is taken from model rather than background file' ) 659 895 trn(:,:,:,jp_had0:jp_had1) = trn(:,:,:,jp_had0:jp_had1) + & 660 & slchltot_balinc(:,:,:,jp_had0:jp_had1)896 & phyto_balinc(:,:,:,jp_had0:jp_had1) 661 897 trb(:,:,:,jp_had0:jp_had1) = trn(:,:,:,jp_had0:jp_had1) 662 898 #endif … … 668 904 ENDIF 669 905 ! 670 END SUBROUTINE slchltot_asm_inc671 672 !!=========================================================================== 673 !!=========================================================================== 674 !!=========================================================================== 675 676 SUBROUTINE spco2_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau, &677 & 906 END SUBROUTINE phyto_asm_inc 907 908 !!=========================================================================== 909 !!=========================================================================== 910 !!=========================================================================== 911 912 SUBROUTINE pco2_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau, & 913 & ll_trainc, pt_bkginc, ps_bkginc ) 678 914 !!------------------------------------------------------------------------ 679 915 !! *** ROUTINE pco2_asm_inc *** … … 733 969 DO jj = 1, jpj 734 970 DO ji = 1, jpi 735 CALL f2pCO2( s pco2_bkginc(ji,jj), tsn(ji,jj,1,1), patm, phyd, 1, pco2_bkginc_temp(ji,jj) )971 CALL f2pCO2( sfco2_bkginc(ji,jj), tsn(ji,jj,1,1), patm, phyd, 1, pco2_bkginc_temp(ji,jj) ) 736 972 END DO 737 973 END DO … … 739 975 ! If assimilating fCO2, then convert to pCO2 using temperature 740 976 ! See flux_gas.F90 within HadOCC for details of calculation 741 pco2_bkginc_temp(:,:) = s pco2_bkginc(:,:) / &977 pco2_bkginc_temp(:,:) = sfco2_bkginc(:,:) / & 742 978 & EXP((zcoef_fco2_1 + & 743 979 & zcoef_fco2_2 * (tsn(:,:,1,1)+rt0) - & … … 762 998 #if defined key_medusa 763 999 ! Account for logchl balancing if required 764 IF ( ln_slchltotinc .AND. ln_ slchltotbal ) THEN765 dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jpdic) + slchltot_balinc(:,:,1,jpdic)766 alk_bkg_temp(:,:) = tracer_bkg(:,:,1,jpalk) + slchltot_balinc(:,:,1,jpalk)1000 IF ( ln_slchltotinc .AND. ln_phytobal ) THEN 1001 dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jpdic) + phyto_balinc(:,:,1,jpdic) 1002 alk_bkg_temp(:,:) = tracer_bkg(:,:,1,jpalk) + phyto_balinc(:,:,1,jpalk) 767 1003 ELSE 768 1004 dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jpdic) … … 772 1008 CALL asm_pco2_bal( pco2_bkginc_temp(:,:), dic_bkg_temp(:,:), alk_bkg_temp(:,:), & 773 1009 & tem_bkg_temp(:,:), sal_bkg_temp(:,:), & 774 & spco2_balinc(:,:,1,jpdic), spco2_balinc(:,:,1,jpalk) )1010 & pco2_balinc(:,:,1,jpdic), pco2_balinc(:,:,1,jpalk) ) 775 1011 776 1012 #elif defined key_hadocc 777 1013 ! Account for slchltot balancing if required 778 IF ( ln_slchltotinc .AND. ln_ slchltotbal ) THEN779 dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_dic) + slchltot_balinc(:,:,1,jp_had_dic)780 alk_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_alk) + slchltot_balinc(:,:,1,jp_had_alk)1014 IF ( ln_slchltotinc .AND. ln_phytobal ) THEN 1015 dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_dic) + phyto_balinc(:,:,1,jp_had_dic) 1016 alk_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_alk) + phyto_balinc(:,:,1,jp_had_alk) 781 1017 ELSE 782 1018 dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_dic) … … 786 1022 CALL asm_pco2_bal( pco2_bkginc_temp(:,:), dic_bkg_temp(:,:), alk_bkg_temp(:,:), & 787 1023 & tem_bkg_temp(:,:), sal_bkg_temp(:,:), & 788 & spco2_balinc(:,:,1,jp_had_dic), spco2_balinc(:,:,1,jp_had_alk) )1024 & pco2_balinc(:,:,1,jp_had_dic), pco2_balinc(:,:,1,jp_had_alk) ) 789 1025 790 1026 #else … … 844 1080 #if defined key_top 845 1081 DO jk = 2, jkmax 846 spco2_balinc(ji,jj,jk,:) = spco2_balinc(ji,jj,1,:)1082 pco2_balinc(ji,jj,jk,:) = pco2_balinc(ji,jj,1,:) 847 1083 END DO 848 1084 #endif … … 883 1119 DO jk = 1, jpkm1 884 1120 trn(:,:,jk,jp_msa0:jp_msa1) = trn(:,:,jk,jp_msa0:jp_msa1) + & 885 & spco2_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt1121 & pco2_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 886 1122 trb(:,:,jk,jp_msa0:jp_msa1) = trb(:,:,jk,jp_msa0:jp_msa1) + & 887 & spco2_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt1123 & pco2_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 888 1124 END DO 889 1125 #elif defined key_hadocc 890 1126 DO jk = 1, jpkm1 891 1127 trn(:,:,jk,jp_had0:jp_had1) = trn(:,:,jk,jp_had0:jp_had1) + & 892 & spco2_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt1128 & pco2_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 893 1129 trb(:,:,jk,jp_had0:jp_had1) = trb(:,:,jk,jp_had0:jp_had1) + & 894 & spco2_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt1130 & pco2_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 895 1131 END DO 896 1132 #endif … … 917 1153 & ' Background state is taken from model rather than background file' ) 918 1154 trn(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) + & 919 & spco2_balinc(:,:,:,jp_msa0:jp_msa1)1155 & pco2_balinc(:,:,:,jp_msa0:jp_msa1) 920 1156 trb(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) 921 1157 #elif defined key_hadocc … … 925 1161 & ' Background state is taken from model rather than background file' ) 926 1162 trn(:,:,:,jp_had0:jp_had1) = trn(:,:,:,jp_had0:jp_had1) + & 927 & spco2_balinc(:,:,:,jp_had0:jp_had1)1163 & pco2_balinc(:,:,:,jp_had0:jp_had1) 928 1164 trb(:,:,:,jp_had0:jp_had1) = trn(:,:,:,jp_had0:jp_had1) 929 1165 #endif … … 935 1171 ENDIF 936 1172 ! 937 END SUBROUTINE spco2_asm_inc 1173 END SUBROUTINE pco2_asm_inc 1174 1175 !!=========================================================================== 1176 !!=========================================================================== 1177 !!=========================================================================== 1178 1179 SUBROUTINE ph_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau, & 1180 & ll_trainc, pt_bkginc, ps_bkginc ) 1181 !!------------------------------------------------------------------------ 1182 !! *** ROUTINE ph_asm_inc *** 1183 !! 1184 !! ** Purpose : Apply the pH assimilation increments. 1185 !! 1186 !! ** Method : Calculate increments to state variables using carbon 1187 !! balancing. 1188 !! Direct initialization or Incremental Analysis Updating. 1189 !! 1190 !! ** Action : 1191 !!------------------------------------------------------------------------ 1192 INTEGER, INTENT(IN) :: kt ! Current time step 1193 LOGICAL, INTENT(IN) :: ll_asmdin ! Flag for direct initialisation 1194 LOGICAL, INTENT(IN) :: ll_asmiau ! Flag for incremental analysis update 1195 INTEGER, INTENT(IN) :: kcycper ! Dimension of pwgtiau 1196 REAL(wp), DIMENSION(kcycper), INTENT(IN) :: pwgtiau ! IAU weights 1197 LOGICAL, INTENT(IN) :: ll_trainc ! Flag for T/S increments 1198 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: pt_bkginc ! T increments 1199 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: ps_bkginc ! S increments 1200 !!------------------------------------------------------------------------ 1201 1202 CALL ctl_stop( ' pH balancing not yet implemented' ) 1203 1204 ! 1205 END SUBROUTINE ph_asm_inc 1206 1207 !!=========================================================================== 1208 !!=========================================================================== 1209 !!=========================================================================== 1210 1211 SUBROUTINE bgc3d_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau ) 1212 !!---------------------------------------------------------------------- 1213 !! *** ROUTINE dyn_asm_inc *** 1214 !! 1215 !! ** Purpose : Apply generic 3D biogeochemistry assimilation increments. 1216 !! 1217 !! ** Method : Direct initialization or Incremental Analysis Updating. 1218 !! 1219 !! ** Action : 1220 !!---------------------------------------------------------------------- 1221 INTEGER, INTENT(IN) :: kt ! Current time step 1222 LOGICAL, INTENT(IN) :: ll_asmdin ! Flag for direct initialisation 1223 LOGICAL, INTENT(IN) :: ll_asmiau ! Flag for incremental analysis update 1224 INTEGER, INTENT(IN) :: kcycper ! Dimension of pwgtiau 1225 REAL(wp), DIMENSION(kcycper), INTENT(IN) :: pwgtiau ! IAU weights 1226 ! 1227 INTEGER :: jk ! Loop counter 1228 INTEGER :: it ! Index 1229 REAL(wp) :: zincwgt ! IAU weight for current time step 1230 REAL(wp) :: zincper ! IAU interval in seconds 1231 !!---------------------------------------------------------------------- 1232 1233 IF ( ll_asmiau ) THEN 1234 1235 !-------------------------------------------------------------------- 1236 ! Incremental Analysis Updating 1237 !-------------------------------------------------------------------- 1238 1239 IF ( ( kt >= nitiaustr_r ).AND.( kt <= nitiaufin_r ) ) THEN 1240 1241 it = kt - nit000 + 1 1242 !zincwgt = pwgtiau(it) / rdt ! IAU weight for the current time step 1243 zincwgt = pwgtiau(it) ! IAU weight for the current time step 1244 ! Check which we should use both here and for all others 1245 1246 IF(lwp) THEN 1247 WRITE(numout,*) 1248 WRITE(numout,*) 'bgc3d_asm_inc : 3D BGC IAU at time step = ', & 1249 & kt,' with IAU weight = ', pwgtiau(it) 1250 WRITE(numout,*) '~~~~~~~~~~~~' 1251 ENDIF 1252 1253 ! Update the 3D BGC variables 1254 ! Add directly to trn and trb, rather than to tra, because tra gets 1255 ! reset to zero at the start of trc_stp, called after this routine 1256 ! Don't apply increments if they'll take concentrations negative 1257 1258 IF ( ln_pno3inc ) THEN 1259 #if defined key_hadocc 1260 WHERE( pno3_bkginc(:,:,:) > 0.0_wp .OR. & 1261 & trn(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) * zincwgt > 0.0_wp ) 1262 trn(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) * zincwgt 1263 trb(:,:,:,jp_had_nut) = trb(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) * zincwgt 1264 END WHERE 1265 #elif defined key_medusa && defined key_foam_medusa 1266 WHERE( pno3_bkginc(:,:,:) > 0.0_wp .OR. & 1267 & trn(:,:,:,jpdin) + pno3_bkginc(:,:,:) * zincwgt > 0.0_wp ) 1268 trn(:,:,:,jpdin) = trn(:,:,:,jpdin) + pno3_bkginc(:,:,:) * zincwgt 1269 trb(:,:,:,jpdin) = trb(:,:,:,jpdin) + pno3_bkginc(:,:,:) * zincwgt 1270 END WHERE 1271 #else 1272 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1273 #endif 1274 ENDIF 1275 1276 IF ( ln_psi4inc ) THEN 1277 #if defined key_medusa && defined key_foam_medusa 1278 WHERE( psi4_bkginc(:,:,:) > 0.0_wp .OR. & 1279 & trn(:,:,:,jpsil) + psi4_bkginc(:,:,:) * zincwgt > 0.0_wp ) 1280 trn(:,:,:,jpsil) = trn(:,:,:,jpsil) + psi4_bkginc(:,:,:) * zincwgt 1281 trb(:,:,:,jpsil) = trb(:,:,:,jpsil) + psi4_bkginc(:,:,:) * zincwgt 1282 END WHERE 1283 #else 1284 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1285 #endif 1286 ENDIF 1287 1288 IF ( ln_pdicinc ) THEN 1289 #if defined key_hadocc 1290 WHERE( pdic_bkginc(:,:,:) > 0.0_wp .OR. & 1291 & trn(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) * zincwgt > 0.0_wp ) 1292 trn(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) * zincwgt 1293 trb(:,:,:,jp_had_dic) = trb(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) * zincwgt 1294 END WHERE 1295 #elif defined key_medusa && defined key_foam_medusa 1296 WHERE( pdic_bkginc(:,:,:) > 0.0_wp .OR. & 1297 & trn(:,:,:,jpdic) + pdic_bkginc(:,:,:) * zincwgt > 0.0_wp ) 1298 trn(:,:,:,jpdic) = trn(:,:,:,jpdic) + pdic_bkginc(:,:,:) * zincwgt 1299 trb(:,:,:,jpdic) = trb(:,:,:,jpdic) + pdic_bkginc(:,:,:) * zincwgt 1300 END WHERE 1301 #else 1302 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1303 #endif 1304 ENDIF 1305 1306 IF ( ln_palkinc ) THEN 1307 #if defined key_hadocc 1308 WHERE( palk_bkginc(:,:,:) > 0.0_wp .OR. & 1309 & trn(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) * zincwgt > 0.0_wp ) 1310 trn(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) * zincwgt 1311 trb(:,:,:,jp_had_alk) = trb(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) * zincwgt 1312 END WHERE 1313 #elif defined key_medusa && defined key_foam_medusa 1314 WHERE( palk_bkginc(:,:,:) > 0.0_wp .OR. & 1315 & trn(:,:,:,jpalk) + palk_bkginc(:,:,:) * zincwgt > 0.0_wp ) 1316 trn(:,:,:,jpalk) = trn(:,:,:,jpalk) + palk_bkginc(:,:,:) * zincwgt 1317 trb(:,:,:,jpalk) = trb(:,:,:,jpalk) + palk_bkginc(:,:,:) * zincwgt 1318 END WHERE 1319 #else 1320 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1321 #endif 1322 ENDIF 1323 1324 IF ( ln_po2inc ) THEN 1325 #if defined key_medusa && defined key_foam_medusa 1326 WHERE( po2_bkginc(:,:,:) > 0.0_wp .OR. & 1327 & trn(:,:,:,jpoxy) + po2_bkginc(:,:,:) * zincwgt > 0.0_wp ) 1328 trn(:,:,:,jpoxy) = trn(:,:,:,jpoxy) + po2_bkginc(:,:,:) * zincwgt 1329 trb(:,:,:,jpoxy) = trb(:,:,:,jpoxy) + po2_bkginc(:,:,:) * zincwgt 1330 END WHERE 1331 #else 1332 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1333 #endif 1334 ENDIF 1335 1336 IF ( kt == nitiaufin_r ) THEN 1337 IF ( ln_pno3inc ) DEALLOCATE( pno3_bkginc ) 1338 IF ( ln_psi4inc ) DEALLOCATE( psi4_bkginc ) 1339 IF ( ln_pdicinc ) DEALLOCATE( pdic_bkginc ) 1340 IF ( ln_palkinc ) DEALLOCATE( palk_bkginc ) 1341 IF ( ln_po2inc ) DEALLOCATE( po2_bkginc ) 1342 ENDIF 1343 1344 ENDIF 1345 1346 ELSEIF ( ll_asmdin ) THEN 1347 1348 !-------------------------------------------------------------------- 1349 ! Direct Initialization 1350 !-------------------------------------------------------------------- 1351 1352 IF ( kt == nitdin_r ) THEN 1353 1354 neuler = 0 ! Force Euler forward step 1355 1356 ! Initialize the now fields with the background + increment 1357 ! Background currently is what the model is initialised with 1358 #if defined key_hadocc 1359 CALL ctl_warn( ' Doing direct initialisation of HadOCC with 3D BGC assimilation', & 1360 & ' Background state is taken from model rather than background file' ) 1361 #elif defined key_medusa && defined key_foam_medusa 1362 CALL ctl_warn( ' Doing direct initialisation of MEDUSA with 3D BGC assimilation', & 1363 & ' Background state is taken from model rather than background file' ) 1364 #endif 1365 1366 trn(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) + & 1367 & pco2_balinc(:,:,:,jp_msa0:jp_msa1) 1368 trb(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) 1369 1370 IF ( ln_pno3inc ) THEN 1371 #if defined key_hadocc 1372 WHERE( pno3_bkginc(:,:,:) > 0.0_wp .OR. & 1373 & trn(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) > 0.0_wp ) 1374 trn(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) 1375 trb(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) 1376 END WHERE 1377 #elif defined key_medusa && defined key_foam_medusa 1378 WHERE( pno3_bkginc(:,:,:) > 0.0_wp .OR. & 1379 & trn(:,:,:,jpdin) + pno3_bkginc(:,:,:) > 0.0_wp ) 1380 trn(:,:,:,jpdin) = trn(:,:,:,jpdin) + pno3_bkginc(:,:,:) 1381 trb(:,:,:,jpdin) = trn(:,:,:,jpdin) 1382 END WHERE 1383 #else 1384 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1385 #endif 1386 ENDIF 1387 1388 IF ( ln_psi4inc ) THEN 1389 #if defined key_medusa && defined key_foam_medusa 1390 WHERE( psi4_bkginc(:,:,:) > 0.0_wp .OR. & 1391 & trn(:,:,:,jpsil) + psi4_bkginc(:,:,:) > 0.0_wp ) 1392 trn(:,:,:,jpsil) = trn(:,:,:,jpsil) + psi4_bkginc(:,:,:) 1393 trb(:,:,:,jpsil) = trn(:,:,:,jpsil) 1394 END WHERE 1395 #else 1396 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1397 #endif 1398 ENDIF 1399 1400 IF ( ln_pdicinc ) THEN 1401 #if defined key_hadocc 1402 WHERE( pdic_bkginc(:,:,:) > 0.0_wp .OR. & 1403 & trn(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) > 0.0_wp ) 1404 trn(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) 1405 trb(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) 1406 END WHERE 1407 #elif defined key_medusa && defined key_foam_medusa 1408 WHERE( pdic_bkginc(:,:,:) > 0.0_wp .OR. & 1409 & trn(:,:,:,jpdic) + pdic_bkginc(:,:,:) > 0.0_wp ) 1410 trn(:,:,:,jpdic) = trn(:,:,:,jpdic) + pdic_bkginc(:,:,:) 1411 trb(:,:,:,jpdic) = trn(:,:,:,jpdic) 1412 END WHERE 1413 #else 1414 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1415 #endif 1416 ENDIF 1417 1418 IF ( ln_palkinc ) THEN 1419 #if defined key_hadocc 1420 WHERE( palk_bkginc(:,:,:) > 0.0_wp .OR. & 1421 & trn(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) > 0.0_wp ) 1422 trn(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) 1423 trb(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) 1424 END WHERE 1425 #elif defined key_medusa && defined key_foam_medusa 1426 WHERE( palk_bkginc(:,:,:) > 0.0_wp .OR. & 1427 & trn(:,:,:,jpalk) + palk_bkginc(:,:,:) > 0.0_wp ) 1428 trn(:,:,:,jpalk) = trn(:,:,:,jpalk) + palk_bkginc(:,:,:) 1429 trb(:,:,:,jpalk) = trn(:,:,:,jpalk) 1430 END WHERE 1431 #else 1432 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1433 #endif 1434 ENDIF 1435 1436 IF ( ln_po2inc ) THEN 1437 #if defined key_medusa && defined key_foam_medusa 1438 WHERE( po2_bkginc(:,:,:) > 0.0_wp .OR. & 1439 & trn(:,:,:,jpoxy) + po2_bkginc(:,:,:) > 0.0_wp ) 1440 trn(:,:,:,jpoxy) = trn(:,:,:,jpoxy) + po2_bkginc(:,:,:) 1441 trb(:,:,:,jpoxy) = trn(:,:,:,jpoxy) 1442 END WHERE 1443 #else 1444 CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 1445 #endif 1446 ENDIF 1447 1448 IF ( ln_pno3inc ) DEALLOCATE( pno3_bkginc ) 1449 IF ( ln_psi4inc ) DEALLOCATE( psi4_bkginc ) 1450 IF ( ln_pdicinc ) DEALLOCATE( pdic_bkginc ) 1451 IF ( ln_palkinc ) DEALLOCATE( palk_bkginc ) 1452 IF ( ln_po2inc ) DEALLOCATE( po2_bkginc ) 1453 ENDIF 1454 ! 1455 ENDIF 1456 ! 1457 END SUBROUTINE bgc3d_asm_inc 938 1458 939 1459 !!=========================================================================== -
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
r9296 r9322 138 138 NAMELIST/nam_asminc/ ln_bkgwri, ln_balwri, & 139 139 & ln_trainc, ln_dyninc, ln_sshinc, & 140 & ln_slchltotinc, ln_slchltotbal, & 141 & ln_spco2inc, ln_sfco2inc, & 140 & ln_phytobal, ln_slchltotinc, ln_slchldiainc, & 141 & ln_slchlnoninc, ln_schltotinc, ln_slphytotinc, & 142 & ln_slphydiainc, ln_slphynoninc, ln_spco2inc, & 143 & ln_sfco2inc, ln_plchltotinc, ln_pchltotinc, & 144 & ln_pno3inc, ln_psi4inc, ln_pdicinc, ln_palkinc, & 145 & ln_pphinc, ln_po2inc, & 142 146 & ln_asmdin, ln_asmiau, & 143 147 & nitbkg, nitdin, nitiaustr, nitiaufin, niaufn, & … … 167 171 WRITE(numout,*) 'asm_inc_init : Assimilation increment initialization :' 168 172 WRITE(numout,*) '~~~~~~~~~~~~' 169 WRITE(numout,*) ' Namelist nam asm: set assimilation increment parameters'173 WRITE(numout,*) ' Namelist nam_asminc : set assimilation increment parameters' 170 174 WRITE(numout,*) ' Logical switch for writing out background state ln_bkgwri = ', ln_bkgwri 171 175 WRITE(numout,*) ' Logical switch for writing out balancing increments ln_balwri = ', ln_balwri … … 175 179 WRITE(numout,*) ' Logical switch for Direct Initialization (DI) ln_asmdin = ', ln_asmdin 176 180 WRITE(numout,*) ' Logical switch for applying sea ice increments ln_seaiceinc = ', ln_seaiceinc 181 WRITE(numout,*) ' Logical switch for phytoplankton balancing ln_phytobal = ', ln_phytobal 177 182 WRITE(numout,*) ' Logical switch for applying slchltot increments ln_slchltotinc = ', ln_slchltotinc 178 WRITE(numout,*) ' Logical switch for slchltot multivariate balancing ln_slchltotbal = ', ln_slchltotbal 179 WRITE(numout,*) ' Logical switch for applying pCO2 increments ln_spco2inc = ', ln_spco2inc 180 WRITE(numout,*) ' Logical switch for applying fCO2 increments ln_sfco2inc = ', ln_sfco2inc 183 WRITE(numout,*) ' Logical switch for applying slchldia increments ln_slchldiainc = ', ln_slchldiainc 184 WRITE(numout,*) ' Logical switch for applying slchlnon increments ln_slchlnoninc = ', ln_slchlnoninc 185 WRITE(numout,*) ' Logical switch for applying schltot increments ln_schltotinc = ', ln_schltotinc 186 WRITE(numout,*) ' Logical switch for applying slphytot increments ln_slphytotinc = ', ln_slphytotinc 187 WRITE(numout,*) ' Logical switch for applying slphydia increments ln_slphydiainc = ', ln_slphydiainc 188 WRITE(numout,*) ' Logical switch for applying slphynon increments ln_slphynoninc = ', ln_slphynoninc 189 WRITE(numout,*) ' Logical switch for applying spco2 increments ln_spco2inc = ', ln_spco2inc 190 WRITE(numout,*) ' Logical switch for applying sfco2 increments ln_sfco2inc = ', ln_sfco2inc 191 WRITE(numout,*) ' Logical switch for applying plchltot increments ln_plchltotinc = ', ln_plchltotinc 192 WRITE(numout,*) ' Logical switch for applying pchltot increments ln_pchltotinc = ', ln_pchltotinc 193 WRITE(numout,*) ' Logical switch for applying pno3 increments ln_pno3inc = ', ln_pno3inc 194 WRITE(numout,*) ' Logical switch for applying psi4 increments ln_psi4inc = ', ln_psi4inc 195 WRITE(numout,*) ' Logical switch for applying pdic increments ln_pdicinc = ', ln_pdicinc 196 WRITE(numout,*) ' Logical switch for applying palk increments ln_palkinc = ', ln_palkinc 197 WRITE(numout,*) ' Logical switch for applying pph increments ln_pphinc = ', ln_pphinc 198 WRITE(numout,*) ' Logical switch for applying po2 increments ln_po2inc = ', ln_po2inc 181 199 WRITE(numout,*) ' Logical switch for Incremental Analysis Updating (IAU) ln_asmiau = ', ln_asmiau 182 200 WRITE(numout,*) ' Timestep of background in [0,nitend-nit000-1] nitbkg = ', nitbkg … … 226 244 ENDIF 227 245 228 IF ( ln_slchltotinc .OR. ln_spco2inc .OR. ln_sfco2inc ) THEN 246 IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 247 & ln_schltotinc .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 248 & ln_slphynoninc .OR. ln_spco2inc .OR. ln_sfco2inc .OR. & 249 & ln_plchltotinc .OR. ln_pchltotinc .OR. ln_pno3inc .OR. & 250 & ln_psi4inc .OR. ln_pdicinc .OR. ln_palkinc .OR. & 251 & ln_pphinc .OR. ln_po2inc ) THEN 229 252 lk_bgcinc = .TRUE. 230 253 ENDIF … … 1208 1231 icycper = SIZE( wgtiau ) 1209 1232 1210 IF( ln_slchltotinc ) THEN 1211 CALL slchltot_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau ) 1233 ! Ocean colour variables first (chlorophyll profiles?) 1234 IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 1235 & ln_schltotinc .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 1236 & ln_slphynoninc ) THEN 1237 CALL phyto_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau ) 1212 1238 ENDIF 1213 1239 1240 IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 1241 CALL ctl_stop( 'Not worked out what to do about profile chl yet' ) 1242 ENDIF 1243 1244 ! Surface pCO2/fCO2 next 1214 1245 IF( ln_sfco2inc .OR. ln_spco2inc ) THEN 1215 CALL spco2_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau, & 1216 & ln_trainc, t_bkginc, s_bkginc ) 1246 CALL pco2_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau, & 1247 & ln_trainc, t_bkginc, s_bkginc ) 1248 ENDIF 1249 1250 ! Profile pH next 1251 IF( ln_pphinc ) THEN 1252 CALL ph_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau, & 1253 & ln_trainc, t_bkginc, s_bkginc ) 1254 ENDIF 1255 1256 ! Remaining bgc profile variables 1257 IF ( ln_pno3inc .OR. ln_psi4inc .OR. ln_pdicinc .OR. & 1258 & ln_palkinc .OR. ln_po2inc ) THEN 1259 CALL bgc3d_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau ) 1217 1260 ENDIF 1218 1261
Note: See TracChangeset
for help on using the changeset viewer.