Changeset 6983 for branches/UKMO/dev_r5518_v3.4_asm_nemovar_community_bgc_ersem/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
- Timestamp:
- 2016-10-04T16:26:51+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_v3.4_asm_nemovar_community_bgc_ersem/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
r6661 r6983 22 22 !! ssh_asm_inc : Apply the SSH increment 23 23 !! seaice_asm_inc : Apply the seaice increment 24 !! logchl_asm_inc : Apply the logchl increment 24 25 !!---------------------------------------------------------------------- 25 26 USE wrk_nemo ! Memory Allocation … … 52 53 USE bdy_oce, ONLY: bdytmask 53 54 #endif 55 #if defined key_fabm 56 USE asmlogchlbal_ersem, ONLY: & 57 & asm_logchl_bal_ersem 58 USE trc, ONLY: & 59 & trn, & 60 & trb 61 USE par_fabm 62 #elif defined key_medusa && defined key_foam_medusa 63 USE asmlogchlbal_medusa, ONLY: & 64 & asm_logchl_bal_medusa 65 USE trc, ONLY: & 66 & trn, & 67 & trb 68 USE par_medusa 69 #elif defined key_hadocc 70 USE asmlogchlbal_hadocc, ONLY: & 71 & asm_logchl_bal_hadocc 72 USE trc, ONLY: & 73 & trn, & 74 & trb 75 USE par_hadocc 76 #endif 54 77 55 78 IMPLICIT NONE … … 62 85 PUBLIC ssh_asm_inc !: Apply the SSH increment 63 86 PUBLIC seaice_asm_inc !: Apply the seaice increment 87 PUBLIC logchl_asm_inc !: Apply the seaice increment 64 88 65 89 #if defined key_asminc … … 69 93 #endif 70 94 LOGICAL, PUBLIC :: ln_bkgwri = .FALSE. !: No output of the background state fields 95 LOGICAL, PUBLIC :: ln_balwri = .FALSE. !: No output of the assimilation balancing increments 71 96 LOGICAL, PUBLIC :: ln_asmiau = .FALSE. !: No applying forcing with an assimilation increment 72 97 LOGICAL, PUBLIC :: ln_asmdin = .FALSE. !: No direct initialization … … 74 99 LOGICAL, PUBLIC :: ln_dyninc = .FALSE. !: No dynamics (u and v) assimilation increments 75 100 LOGICAL, PUBLIC :: ln_sshinc = .FALSE. !: No sea surface height assimilation increment 76 LOGICAL, PUBLIC :: ln_seaiceinc !: No sea ice concentration increment 101 LOGICAL, PUBLIC :: ln_seaiceinc = .FALSE. !: No sea ice concentration increment 102 LOGICAL, PUBLIC :: ln_logchltotinc = .FALSE. !: No total log10(chlorophyll) increment 103 LOGICAL, PUBLIC :: ln_logchlpftinc = .FALSE. !: No PFT log10(chlorophyll) increment 77 104 LOGICAL, PUBLIC :: ln_salfix = .FALSE. !: Apply minimum salinity check 78 105 LOGICAL, PUBLIC :: ln_temnofreeze = .FALSE. !: Don't allow the temperature to drop below freezing … … 100 127 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: seaice_bkginc ! Increment to the background sea ice conc 101 128 129 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_bkginc !: Increment to background logchl 130 #if defined key_fabm 131 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_chl1 !: Increment to ERSEM diatom chl from logchl 132 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_chl2 !: Increment to ERSEM nanophy chl from logchl 133 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_chl3 !: Increment to ERSEM picophy chl from logchl 134 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_chl4 !: Increment to ERSEM microphy chl from logchl 135 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p1c !: Increment to ERSEM diatom c from logchl 136 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p1n !: Increment to ERSEM diatom n from logchl 137 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p1p !: Increment to ERSEM diatom p from logchl 138 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p1s !: Increment to ERSEM diatom s from logchl 139 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p2c !: Increment to ERSEM nanophy c from logchl 140 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p2n !: Increment to ERSEM nanophy n from logchl 141 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p2p !: Increment to ERSEM nanophy p from logchl 142 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p3c !: Increment to ERSEM picophy c from logchl 143 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p3n !: Increment to ERSEM picophy n from logchl 144 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p3p !: Increment to ERSEM picophy p from logchl 145 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p4c !: Increment to ERSEM microphy c from logchl 146 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p4n !: Increment to ERSEM microphy n from logchl 147 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p4p !: Increment to ERSEM microphy p from logchl 148 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z4c !: Increment to ERSEM mesozoo c from logchl 149 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z5c !: Increment to ERSEM microzoo c from logchl 150 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z5n !: Increment to ERSEM microzoo n from logchl 151 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z5p !: Increment to ERSEM microzoo p from logchl 152 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z6c !: Increment to ERSEM het flag c from logchl 153 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z6n !: Increment to ERSEM het flag n from logchl 154 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z6p !: Increment to ERSEM het flag p from logchl 155 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_n1p !: Increment to ERSEM phosphate from logchl 156 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_n3n !: Increment to ERSEM nitrate from logchl 157 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_n4n !: Increment to ERSEM ammonium from logchl 158 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_n5s !: Increment to ERSEM silicate from logchl 159 #elif defined key_medusa && defined key_foam_medusa 160 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_chn !: Increment to MEDUSA nondiatom chl from logchl 161 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_chd !: Increment to MEDUSA diatom chl from logchl 162 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_phn !: Increment to MEDUSA nondiatom n from logchl 163 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_phd !: Increment to MEDUSA diatom n from logchl 164 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_pds !: Increment to MEDUSA diatom s from logchl 165 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_zmi !: Increment to MEDUSA microzoop n from logchl 166 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_zme !: Increment to MEDUSA mesozoop n from logchl 167 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_din !: Increment to MEDUSA nitrate from logchl 168 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_sil !: Increment to MEDUSA silicate from logchl 169 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_fer !: Increment to MEDUSA iron from logchl 170 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_det !: Increment to MEDUSA detritus n from logchl 171 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_dtc !: Increment to MEDUSA detritus c from logchl 172 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_dic !: Increment to MEDUSA dic from logchl 173 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_alk !: Increment to MEDUSA alkalinity from logchl 174 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_oxy !: Increment to MEDUSA oxygen from logchl 175 #elif defined key_hadocc 176 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_nut !: Increment to HadOCC nutrient from logchl 177 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_phy !: Increment to HadOCC phytoplankton from logchl 178 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_zoo !: Increment to HadOCC zooplankton from logchl 179 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_det !: Increment to HadOCC detritus from logchl 180 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_dic !: Increment to HadOCC DIC from logchl 181 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_alk !: Increment to HadOCC alkalinity from logchl 182 #endif 183 102 184 INTEGER :: mld_choice = 4 !: choice of mld criteria to use for physics assimilation 103 185 !: 1) hmld - Turbocline/mixing depth [W points] … … 106 188 !: 4) hmld_tref - Temperature criterion (0.2 K change from surface) [T points] 107 189 190 INTEGER :: mld_choice_bgc = 5 !: choice of mld criteria to use for physics assimilation 191 !: 1) hmld - Turbocline/mixing depth [W points] 192 !: 2) hmlp - Density criterion (0.01 kg/m^3 change from 10m) [W points] 193 !: 3) hmld_kara - Kara MLD [Interpolated] 194 !: 4) hmld_tref - Temperature criterion (0.2 K change from surface) [T points] 195 !: 5) hmlpt - Density criterion (0.01 kg/m^3 change from 10m) [T points] 196 197 INTEGER :: nn_asmpfts = 0 !: number of logchl PFTs assimilated 108 198 109 199 !! * Substitutions … … 157 247 LOGICAL :: lk_surft ! Logical: T => Increments file contains surft variable 158 248 ! so only apply surft increments. 249 ! 250 CHARACTER(LEN=2) :: cl_pftstr 159 251 !! 160 NAMELIST/nam_asminc/ ln_bkgwri, 252 NAMELIST/nam_asminc/ ln_bkgwri, ln_balwri, & 161 253 & ln_trainc, ln_dyninc, ln_sshinc, & 254 & ln_logchltotinc, ln_logchlpftinc, & 162 255 & ln_asmdin, ln_asmiau, & 163 256 & nitbkg, nitdin, nitiaustr, nitiaufin, niaufn, & 164 & ln_salfix, salfixmin, nn_divdmp, mld_choice 257 & ln_salfix, salfixmin, nn_divdmp, mld_choice, & 258 & mld_choice_bgc 165 259 !!---------------------------------------------------------------------- 166 260 … … 171 265 ! Set default values 172 266 ln_bkgwri = .FALSE. 267 ln_balwri = .FALSE. 173 268 ln_trainc = .FALSE. 174 269 ln_dyninc = .FALSE. 175 270 ln_sshinc = .FALSE. 176 271 ln_seaiceinc = .FALSE. 272 ln_logchltotinc = .FALSE. 273 ln_logchlpftinc = .FALSE. 177 274 ln_asmdin = .FALSE. 178 275 ln_asmiau = .TRUE. … … 185 282 nitiaufin = 150 186 283 niaufn = 0 284 #if defined key_fabm 285 nn_asmpfts = 4 286 #elif defined key_medusa && defined key_foam_medusa 287 nn_asmpfts = 2 288 #elif defined key_hadocc 289 nn_asmpfts = 1 290 #else 291 nn_asmpfts = 0 292 #endif 187 293 188 294 REWIND( numnam_ref ) ! Namelist nam_asminc in reference namelist : Assimilation increment … … 194 300 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_asminc in configuration namelist', lwp ) 195 301 IF(lwm) WRITE ( numond, nam_asminc ) 302 303 IF ( ln_logchltotinc ) THEN 304 nn_asmpfts = 1 305 ELSE IF ( .NOT.( ln_logchlpftinc ) ) THEN 306 nn_asmpfts = 0 307 ENDIF 196 308 197 309 ! Control print … … 202 314 WRITE(numout,*) ' Namelist namasm : set assimilation increment parameters' 203 315 WRITE(numout,*) ' Logical switch for writing out background state ln_bkgwri = ', ln_bkgwri 316 WRITE(numout,*) ' Logical switch for writing out balancing increments ln_balwri = ', ln_balwri 204 317 WRITE(numout,*) ' Logical switch for applying tracer increments ln_trainc = ', ln_trainc 205 318 WRITE(numout,*) ' Logical switch for applying velocity increments ln_dyninc = ', ln_dyninc … … 207 320 WRITE(numout,*) ' Logical switch for Direct Initialization (DI) ln_asmdin = ', ln_asmdin 208 321 WRITE(numout,*) ' Logical switch for applying sea ice increments ln_seaiceinc = ', ln_seaiceinc 322 WRITE(numout,*) ' Logical switch for applying total logchl incs ln_logchltotinc = ', ln_logchltotinc 323 WRITE(numout,*) ' Logical switch for applying PFT logchl incs ln_logchlpftinc = ', ln_logchlpftinc 324 WRITE(numout,*) ' Number of logchl PFTs assimilated nn_asmpfts = ', nn_asmpfts 209 325 WRITE(numout,*) ' Logical switch for Incremental Analysis Updating (IAU) ln_asmiau = ', ln_asmiau 210 326 WRITE(numout,*) ' Timestep of background in [0,nitend-nit000-1] nitbkg = ', nitbkg … … 216 332 WRITE(numout,*) ' Minimum salinity after applying the increments salfixmin = ', salfixmin 217 333 WRITE(numout,*) ' Choice of MLD for physics assimilation mld_choice = ', mld_choice 334 WRITE(numout,*) ' Choice of MLD for BGC assimilation mld_choice_bgc = ', mld_choice_bgc 218 335 ENDIF 219 336 … … 263 380 264 381 IF ( ( ( .NOT. ln_asmdin ).AND.( .NOT. ln_asmiau ) ) & 265 .AND.( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ) .OR. ( ln_seaiceinc) )) & 266 & CALL ctl_stop( ' One or more of ln_trainc, ln_dyninc, ln_sshinc and ln_seaiceinc is set to .true.', & 382 & .AND.( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ).OR.( ln_seaiceinc ).OR. & 383 & ( ln_logchltotinc ).OR.( ln_logchlpftinc ) )) & 384 & CALL ctl_stop( ' One or more of ln_trainc, ln_dyninc, ln_sshinc, ln_seaiceinc,', & 385 & ' ln_logchltotinc, and ln_logchlpftinc is set to .true.', & 267 386 & ' but ln_asmdin and ln_asmiau are both set to .false. :', & 268 387 & ' Inconsistent options') … … 273 392 274 393 IF ( ( .NOT. ln_trainc ).AND.( .NOT. ln_dyninc ).AND.( .NOT. ln_sshinc ).AND.( .NOT. ln_seaiceinc ) & 275 & ) & 276 & CALL ctl_warn( ' ln_trainc, ln_dyninc, ln_sshinc and ln_seaiceinc are set to .false. :', & 394 & .AND.( .NOT. ln_logchltotinc ).AND.( .NOT. ln_logchlpftinc ) ) & 395 & CALL ctl_warn( ' ln_trainc, ln_dyninc, ln_sshinc, ln_seaiceinc,', & 396 & ' ln_logchltotinc, and ln_logchlpftinc are set to .false. :', & 277 397 & ' The assimilation increments are not applied') 278 398 … … 294 414 & ' Background time step for Direct Initialization is outside', & 295 415 & ' the cycle interval') 416 417 IF ( ( ln_logchltotinc ).AND.( ln_logchlpftinc ) ) THEN 418 CALL ctl_stop( ' ln_logchltotinc and ln_logchlpftinc both set:', & 419 & ' These options are not compatible') 420 ENDIF 421 422 IF ( ( ln_balwri ).AND.( .NOT. ( ( ln_logchltotinc ).OR.( ln_logchlpftinc ) ) ) ) THEN 423 CALL ctl_warn( ' Balancing increments are only calculated for logchl', & 424 & ' Not assimilating logchl, so ln_balwri will be set to .false.') 425 ln_balwri = .FALSE. 426 ENDIF 296 427 297 428 IF ( nstop > 0 ) RETURN ! if there are any errors then go no further … … 396 527 ssh_iau(:,:) = 0.0 397 528 #endif 398 IF ( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ).OR.( ln_seaiceinc ) ) THEN 529 IF ( ( ln_logchltotinc ).OR.( ln_logchlpftinc ) ) THEN 530 IF ( ln_logchltotinc ) THEN 531 ALLOCATE( logchl_bkginc(jpi,jpj,1)) 532 ELSE IF ( ln_logchlpftinc ) THEN 533 ALLOCATE( logchl_bkginc(jpi,jpj,nn_asmpfts)) 534 ENDIF 535 logchl_bkginc(:,:,:) = 0.0 536 #if defined key_fabm 537 ALLOCATE( logchl_balinc_ersem_chl1(jpi,jpj,jpk) ) 538 ALLOCATE( logchl_balinc_ersem_chl2(jpi,jpj,jpk) ) 539 ALLOCATE( logchl_balinc_ersem_chl3(jpi,jpj,jpk) ) 540 ALLOCATE( logchl_balinc_ersem_chl4(jpi,jpj,jpk) ) 541 ALLOCATE( logchl_balinc_ersem_p1c(jpi,jpj,jpk) ) 542 ALLOCATE( logchl_balinc_ersem_p1n(jpi,jpj,jpk) ) 543 ALLOCATE( logchl_balinc_ersem_p1p(jpi,jpj,jpk) ) 544 ALLOCATE( logchl_balinc_ersem_p1s(jpi,jpj,jpk) ) 545 ALLOCATE( logchl_balinc_ersem_p2c(jpi,jpj,jpk) ) 546 ALLOCATE( logchl_balinc_ersem_p2n(jpi,jpj,jpk) ) 547 ALLOCATE( logchl_balinc_ersem_p2p(jpi,jpj,jpk) ) 548 ALLOCATE( logchl_balinc_ersem_p3c(jpi,jpj,jpk) ) 549 ALLOCATE( logchl_balinc_ersem_p3n(jpi,jpj,jpk) ) 550 ALLOCATE( logchl_balinc_ersem_p3p(jpi,jpj,jpk) ) 551 ALLOCATE( logchl_balinc_ersem_p4c(jpi,jpj,jpk) ) 552 ALLOCATE( logchl_balinc_ersem_p4n(jpi,jpj,jpk) ) 553 ALLOCATE( logchl_balinc_ersem_p4p(jpi,jpj,jpk) ) 554 ALLOCATE( logchl_balinc_ersem_z4c(jpi,jpj,jpk) ) 555 ALLOCATE( logchl_balinc_ersem_z5c(jpi,jpj,jpk) ) 556 ALLOCATE( logchl_balinc_ersem_z5n(jpi,jpj,jpk) ) 557 ALLOCATE( logchl_balinc_ersem_z5p(jpi,jpj,jpk) ) 558 ALLOCATE( logchl_balinc_ersem_z6c(jpi,jpj,jpk) ) 559 ALLOCATE( logchl_balinc_ersem_z6n(jpi,jpj,jpk) ) 560 ALLOCATE( logchl_balinc_ersem_z6p(jpi,jpj,jpk) ) 561 ALLOCATE( logchl_balinc_ersem_n1p(jpi,jpj,jpk) ) 562 ALLOCATE( logchl_balinc_ersem_n3n(jpi,jpj,jpk) ) 563 ALLOCATE( logchl_balinc_ersem_n4n(jpi,jpj,jpk) ) 564 ALLOCATE( logchl_balinc_ersem_n5s(jpi,jpj,jpk) ) 565 logchl_balinc_ersem_chl1(:,:,:) = 0.0 566 logchl_balinc_ersem_chl2(:,:,:) = 0.0 567 logchl_balinc_ersem_chl3(:,:,:) = 0.0 568 logchl_balinc_ersem_chl4(:,:,:) = 0.0 569 logchl_balinc_ersem_p1c(:,:,:) = 0.0 570 logchl_balinc_ersem_p1n(:,:,:) = 0.0 571 logchl_balinc_ersem_p1p(:,:,:) = 0.0 572 logchl_balinc_ersem_p1s(:,:,:) = 0.0 573 logchl_balinc_ersem_p2c(:,:,:) = 0.0 574 logchl_balinc_ersem_p2n(:,:,:) = 0.0 575 logchl_balinc_ersem_p2p(:,:,:) = 0.0 576 logchl_balinc_ersem_p3c(:,:,:) = 0.0 577 logchl_balinc_ersem_p3n(:,:,:) = 0.0 578 logchl_balinc_ersem_p3p(:,:,:) = 0.0 579 logchl_balinc_ersem_p4c(:,:,:) = 0.0 580 logchl_balinc_ersem_p4n(:,:,:) = 0.0 581 logchl_balinc_ersem_p4p(:,:,:) = 0.0 582 logchl_balinc_ersem_z4c(:,:,:) = 0.0 583 logchl_balinc_ersem_z5c(:,:,:) = 0.0 584 logchl_balinc_ersem_z5n(:,:,:) = 0.0 585 logchl_balinc_ersem_z5p(:,:,:) = 0.0 586 logchl_balinc_ersem_z6c(:,:,:) = 0.0 587 logchl_balinc_ersem_z6n(:,:,:) = 0.0 588 logchl_balinc_ersem_z6p(:,:,:) = 0.0 589 logchl_balinc_ersem_n1p(:,:,:) = 0.0 590 logchl_balinc_ersem_n3n(:,:,:) = 0.0 591 logchl_balinc_ersem_n4n(:,:,:) = 0.0 592 logchl_balinc_ersem_n5s(:,:,:) = 0.0 593 #elif defined key_medusa && defined key_foam_medusa 594 ALLOCATE( logchl_balinc_medusa_chn(jpi,jpj,jpk) ) 595 ALLOCATE( logchl_balinc_medusa_chd(jpi,jpj,jpk) ) 596 ALLOCATE( logchl_balinc_medusa_phn(jpi,jpj,jpk) ) 597 ALLOCATE( logchl_balinc_medusa_phd(jpi,jpj,jpk) ) 598 ALLOCATE( logchl_balinc_medusa_pds(jpi,jpj,jpk) ) 599 ALLOCATE( logchl_balinc_medusa_zmi(jpi,jpj,jpk) ) 600 ALLOCATE( logchl_balinc_medusa_zme(jpi,jpj,jpk) ) 601 ALLOCATE( logchl_balinc_medusa_din(jpi,jpj,jpk) ) 602 ALLOCATE( logchl_balinc_medusa_sil(jpi,jpj,jpk) ) 603 ALLOCATE( logchl_balinc_medusa_fer(jpi,jpj,jpk) ) 604 ALLOCATE( logchl_balinc_medusa_det(jpi,jpj,jpk) ) 605 ALLOCATE( logchl_balinc_medusa_dtc(jpi,jpj,jpk) ) 606 ALLOCATE( logchl_balinc_medusa_dic(jpi,jpj,jpk) ) 607 ALLOCATE( logchl_balinc_medusa_alk(jpi,jpj,jpk) ) 608 ALLOCATE( logchl_balinc_medusa_oxy(jpi,jpj,jpk) ) 609 logchl_balinc_medusa_chn(:,:,:) = 0.0 610 logchl_balinc_medusa_chd(:,:,:) = 0.0 611 logchl_balinc_medusa_phn(:,:,:) = 0.0 612 logchl_balinc_medusa_phd(:,:,:) = 0.0 613 logchl_balinc_medusa_pds(:,:,:) = 0.0 614 logchl_balinc_medusa_zmi(:,:,:) = 0.0 615 logchl_balinc_medusa_zme(:,:,:) = 0.0 616 logchl_balinc_medusa_din(:,:,:) = 0.0 617 logchl_balinc_medusa_sil(:,:,:) = 0.0 618 logchl_balinc_medusa_fer(:,:,:) = 0.0 619 logchl_balinc_medusa_det(:,:,:) = 0.0 620 logchl_balinc_medusa_dtc(:,:,:) = 0.0 621 logchl_balinc_medusa_dic(:,:,:) = 0.0 622 logchl_balinc_medusa_alk(:,:,:) = 0.0 623 logchl_balinc_medusa_oxy(:,:,:) = 0.0 624 #elif defined key_hadocc 625 ALLOCATE( logchl_balinc_hadocc_nut(jpi,jpj,jpk) ) 626 ALLOCATE( logchl_balinc_hadocc_phy(jpi,jpj,jpk) ) 627 ALLOCATE( logchl_balinc_hadocc_zoo(jpi,jpj,jpk) ) 628 ALLOCATE( logchl_balinc_hadocc_det(jpi,jpj,jpk) ) 629 ALLOCATE( logchl_balinc_hadocc_dic(jpi,jpj,jpk) ) 630 ALLOCATE( logchl_balinc_hadocc_alk(jpi,jpj,jpk) ) 631 logchl_balinc_hadocc_nut(:,:,:) = 0.0 632 logchl_balinc_hadocc_phy(:,:,:) = 0.0 633 logchl_balinc_hadocc_zoo(:,:,:) = 0.0 634 logchl_balinc_hadocc_det(:,:,:) = 0.0 635 logchl_balinc_hadocc_dic(:,:,:) = 0.0 636 logchl_balinc_hadocc_alk(:,:,:) = 0.0 637 #endif 638 ENDIF 639 IF ( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ).OR.( ln_seaiceinc ) & 640 & .OR.( ln_logchltotinc ).OR.( ln_logchlpftinc ) ) THEN 399 641 400 642 !-------------------------------------------------------------------- … … 527 769 ! to allow for differences in masks 528 770 WHERE( ABS( seaice_bkginc(:,:) ) > 1.0e+10 ) seaice_bkginc(:,:) = 0.0 771 ENDIF 772 773 IF ( ln_logchltotinc ) THEN 774 CALL iom_get( inum, jpdom_autoglo, 'bckinlogchl', logchl_bkginc(:,:,1), 1 ) 775 ! Apply the masks 776 logchl_bkginc(:,:,1) = logchl_bkginc(:,:,1) * tmask(:,:,1) 777 ! Set missing increments to 0.0 rather than 1e+20 778 ! to allow for differences in masks 779 WHERE( ABS( logchl_bkginc(:,:,1) ) > 1.0e+10 ) logchl_bkginc(:,:,1) = 0.0 780 ENDIF 781 782 IF ( ln_logchlpftinc ) THEN 783 DO jt = 1, nn_asmpfts 784 WRITE(cl_pftstr,'(I2.2)') jt 785 CALL iom_get( inum, jpdom_autoglo, 'bckinlogchl'//cl_pftstr, logchl_bkginc(:,:,jt), 1 ) 786 ! Apply the masks 787 logchl_bkginc(:,:,jt) = logchl_bkginc(:,:,jt) * tmask(:,:,1) 788 ! Set missing increments to 0.0 rather than 1e+20 789 ! to allow for differences in masks 790 WHERE( ABS( logchl_bkginc(:,:,jt) ) > 1.0e+10 ) logchl_bkginc(:,:,jt) = 0.0 791 END DO 529 792 ENDIF 530 793 … … 1256 1519 1257 1520 END SUBROUTINE seaice_asm_inc 1521 1522 SUBROUTINE logchl_asm_inc( kt ) 1523 !!---------------------------------------------------------------------- 1524 !! *** ROUTINE logchl_asm_inc *** 1525 !! 1526 !! ** Purpose : Apply the chlorophyll assimilation increments. 1527 !! 1528 !! ** Method : Calculate increments to state variables using nitrogen 1529 !! balancing. 1530 !! Direct initialization or Incremental Analysis Updating. 1531 !! 1532 !! ** Action : 1533 !!---------------------------------------------------------------------- 1534 INTEGER, INTENT(IN) :: kt ! Current time step 1535 ! 1536 INTEGER :: jk ! Loop counter 1537 INTEGER :: it ! Index 1538 REAL(wp) :: zincwgt ! IAU weight for current time step 1539 REAL(wp) :: zincper ! IAU interval in seconds 1540 !!---------------------------------------------------------------------- 1541 1542 IF ( kt <= nit000 ) THEN 1543 1544 zincper = (nitiaufin_r - nitiaustr_r + 1) * rdt 1545 1546 #if defined key_fabm 1547 CALL asm_logchl_bal_ersem( ln_logchlpftinc, nn_asmpfts, & 1548 & mld_choice_bgc, logchl_bkginc, & 1549 & logchl_balinc_ersem_chl1, logchl_balinc_ersem_chl2, & 1550 & logchl_balinc_ersem_chl3, logchl_balinc_ersem_chl4, & 1551 & logchl_balinc_ersem_p1c, logchl_balinc_ersem_p1n, & 1552 & logchl_balinc_ersem_p1p, logchl_balinc_ersem_p1s, & 1553 & logchl_balinc_ersem_p2c, logchl_balinc_ersem_p2n, & 1554 & logchl_balinc_ersem_p2p, logchl_balinc_ersem_p3c, & 1555 & logchl_balinc_ersem_p3n, logchl_balinc_ersem_p3p, & 1556 & logchl_balinc_ersem_p4c, logchl_balinc_ersem_p4n, & 1557 & logchl_balinc_ersem_p4p, logchl_balinc_ersem_z4c, & 1558 & logchl_balinc_ersem_z5c, logchl_balinc_ersem_z5n, & 1559 & logchl_balinc_ersem_z5p, logchl_balinc_ersem_z6c, & 1560 & logchl_balinc_ersem_z6n, logchl_balinc_ersem_z6p, & 1561 & logchl_balinc_ersem_n1p, logchl_balinc_ersem_n3n, & 1562 & logchl_balinc_ersem_n4n, logchl_balinc_ersem_n5s ) 1563 #elif defined key_medusa && defined key_foam_medusa 1564 !CALL asm_logchl_bal_medusa() 1565 CALL ctl_stop( 'Attempting to assimilate logchl into MEDUSA, ', & 1566 & 'but not fully implemented yet' ) 1567 #elif defined key_hadocc 1568 !CALL asm_logchl_bal_hadocc() 1569 CALL ctl_stop( 'Attempting to assimilate logchl into HadOCC, ', & 1570 & 'but not fully implemented yet' ) 1571 #else 1572 CALL ctl_stop( 'Attempting to assimilate logchl, ', & 1573 & 'but not defined a biogeochemical model' ) 1574 #endif 1575 1576 ENDIF 1577 1578 IF ( ln_asmiau ) THEN 1579 1580 !-------------------------------------------------------------------- 1581 ! Incremental Analysis Updating 1582 !-------------------------------------------------------------------- 1583 1584 IF ( ( kt >= nitiaustr_r ).AND.( kt <= nitiaufin_r ) ) THEN 1585 1586 it = kt - nit000 + 1 1587 zincwgt = wgtiau(it) ! IAU weight for the current time step 1588 ! note this is not a tendency so should not be divided by rdt 1589 1590 IF(lwp) THEN 1591 WRITE(numout,*) 1592 WRITE(numout,*) 'logchl_asm_inc : logchl IAU at time step = ', & 1593 & kt,' with IAU weight = ', wgtiau(it) 1594 WRITE(numout,*) '~~~~~~~~~~~~' 1595 ENDIF 1596 1597 ! Update the biogeochemical tendencies 1598 #if defined key_fabm 1599 DO jk = 1, jpkm1 1600 ! Add directly to trn and trb, rather than to tra, as not a tendency 1601 trn(:,:,jk,jp_fabm_m1+jp_fabm_chl1) = trn(:,:,jk,jp_fabm_m1+jp_fabm_chl1) + & 1602 & logchl_balinc_ersem_chl1(:,:,jk) * zincwgt 1603 trn(:,:,jk,jp_fabm_m1+jp_fabm_chl2) = trn(:,:,jk,jp_fabm_m1+jp_fabm_chl2) + & 1604 & logchl_balinc_ersem_chl2(:,:,jk) * zincwgt 1605 trn(:,:,jk,jp_fabm_m1+jp_fabm_chl3) = trn(:,:,jk,jp_fabm_m1+jp_fabm_chl3) + & 1606 & logchl_balinc_ersem_chl3(:,:,jk) * zincwgt 1607 trn(:,:,jk,jp_fabm_m1+jp_fabm_chl4) = trn(:,:,jk,jp_fabm_m1+jp_fabm_chl4) + & 1608 & logchl_balinc_ersem_chl4(:,:,jk) * zincwgt 1609 trn(:,:,jk,jp_fabm_m1+jp_fabm_p1c) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p1c) + & 1610 & logchl_balinc_ersem_p1c(:,:,jk) * zincwgt 1611 trn(:,:,jk,jp_fabm_m1+jp_fabm_p1n) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p1n) + & 1612 & logchl_balinc_ersem_p1n(:,:,jk) * zincwgt 1613 trn(:,:,jk,jp_fabm_m1+jp_fabm_p1p) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p1p) + & 1614 & logchl_balinc_ersem_p1p(:,:,jk) * zincwgt 1615 trn(:,:,jk,jp_fabm_m1+jp_fabm_p1s) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p1s) + & 1616 & logchl_balinc_ersem_p1s(:,:,jk) * zincwgt 1617 trn(:,:,jk,jp_fabm_m1+jp_fabm_p2c) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p2c) + & 1618 & logchl_balinc_ersem_p2c(:,:,jk) * zincwgt 1619 trn(:,:,jk,jp_fabm_m1+jp_fabm_p2n) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p2n) + & 1620 & logchl_balinc_ersem_p2n(:,:,jk) * zincwgt 1621 trn(:,:,jk,jp_fabm_m1+jp_fabm_p2p) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p2p) + & 1622 & logchl_balinc_ersem_p2p(:,:,jk) * zincwgt 1623 trn(:,:,jk,jp_fabm_m1+jp_fabm_p3c) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p3c) + & 1624 & logchl_balinc_ersem_p3c(:,:,jk) * zincwgt 1625 trn(:,:,jk,jp_fabm_m1+jp_fabm_p3n) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p3n) + & 1626 & logchl_balinc_ersem_p3n(:,:,jk) * zincwgt 1627 trn(:,:,jk,jp_fabm_m1+jp_fabm_p3p) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p3p) + & 1628 & logchl_balinc_ersem_p3p(:,:,jk) * zincwgt 1629 trn(:,:,jk,jp_fabm_m1+jp_fabm_p4c) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p4c) + & 1630 & logchl_balinc_ersem_p4c(:,:,jk) * zincwgt 1631 trn(:,:,jk,jp_fabm_m1+jp_fabm_p4n) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p4n) + & 1632 & logchl_balinc_ersem_p4n(:,:,jk) * zincwgt 1633 trn(:,:,jk,jp_fabm_m1+jp_fabm_p4p) = trn(:,:,jk,jp_fabm_m1+jp_fabm_p4p) + & 1634 & logchl_balinc_ersem_p4p(:,:,jk) * zincwgt 1635 trn(:,:,jk,jp_fabm_m1+jp_fabm_z4c) = trn(:,:,jk,jp_fabm_m1+jp_fabm_z4c) + & 1636 & logchl_balinc_ersem_z4c(:,:,jk) * zincwgt 1637 trn(:,:,jk,jp_fabm_m1+jp_fabm_z5c) = trn(:,:,jk,jp_fabm_m1+jp_fabm_z5c) + & 1638 & logchl_balinc_ersem_z5c(:,:,jk) * zincwgt 1639 trn(:,:,jk,jp_fabm_m1+jp_fabm_z5n) = trn(:,:,jk,jp_fabm_m1+jp_fabm_z5n) + & 1640 & logchl_balinc_ersem_z5n(:,:,jk) * zincwgt 1641 trn(:,:,jk,jp_fabm_m1+jp_fabm_z5p) = trn(:,:,jk,jp_fabm_m1+jp_fabm_z5p) + & 1642 & logchl_balinc_ersem_z5p(:,:,jk) * zincwgt 1643 trn(:,:,jk,jp_fabm_m1+jp_fabm_z6c) = trn(:,:,jk,jp_fabm_m1+jp_fabm_z6c) + & 1644 & logchl_balinc_ersem_z6c(:,:,jk) * zincwgt 1645 trn(:,:,jk,jp_fabm_m1+jp_fabm_z6n) = trn(:,:,jk,jp_fabm_m1+jp_fabm_z6n) + & 1646 & logchl_balinc_ersem_z6n(:,:,jk) * zincwgt 1647 trn(:,:,jk,jp_fabm_m1+jp_fabm_z6p) = trn(:,:,jk,jp_fabm_m1+jp_fabm_z6p) + & 1648 & logchl_balinc_ersem_z6p(:,:,jk) * zincwgt 1649 trn(:,:,jk,jp_fabm_m1+jp_fabm_n1p) = trn(:,:,jk,jp_fabm_m1+jp_fabm_n1p) + & 1650 & logchl_balinc_ersem_n1p(:,:,jk) * zincwgt 1651 trn(:,:,jk,jp_fabm_m1+jp_fabm_n3n) = trn(:,:,jk,jp_fabm_m1+jp_fabm_n3n) + & 1652 & logchl_balinc_ersem_n3n(:,:,jk) * zincwgt 1653 trn(:,:,jk,jp_fabm_m1+jp_fabm_n4n) = trn(:,:,jk,jp_fabm_m1+jp_fabm_n4n) + & 1654 & logchl_balinc_ersem_n4n(:,:,jk) * zincwgt 1655 trn(:,:,jk,jp_fabm_m1+jp_fabm_n5s) = trn(:,:,jk,jp_fabm_m1+jp_fabm_n5s) + & 1656 & logchl_balinc_ersem_n5s(:,:,jk) * zincwgt 1657 1658 trb(:,:,jk,jp_fabm_m1+jp_fabm_chl1) = trb(:,:,jk,jp_fabm_m1+jp_fabm_chl1) + & 1659 & logchl_balinc_ersem_chl1(:,:,jk) * zincwgt 1660 trb(:,:,jk,jp_fabm_m1+jp_fabm_chl2) = trb(:,:,jk,jp_fabm_m1+jp_fabm_chl2) + & 1661 & logchl_balinc_ersem_chl2(:,:,jk) * zincwgt 1662 trb(:,:,jk,jp_fabm_m1+jp_fabm_chl3) = trb(:,:,jk,jp_fabm_m1+jp_fabm_chl3) + & 1663 & logchl_balinc_ersem_chl3(:,:,jk) * zincwgt 1664 trb(:,:,jk,jp_fabm_m1+jp_fabm_chl4) = trb(:,:,jk,jp_fabm_m1+jp_fabm_chl4) + & 1665 & logchl_balinc_ersem_chl4(:,:,jk) * zincwgt 1666 trb(:,:,jk,jp_fabm_m1+jp_fabm_p1c) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p1c) + & 1667 & logchl_balinc_ersem_p1c(:,:,jk) * zincwgt 1668 trb(:,:,jk,jp_fabm_m1+jp_fabm_p1n) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p1n) + & 1669 & logchl_balinc_ersem_p1n(:,:,jk) * zincwgt 1670 trb(:,:,jk,jp_fabm_m1+jp_fabm_p1p) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p1p) + & 1671 & logchl_balinc_ersem_p1p(:,:,jk) * zincwgt 1672 trb(:,:,jk,jp_fabm_m1+jp_fabm_p1s) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p1s) + & 1673 & logchl_balinc_ersem_p1s(:,:,jk) * zincwgt 1674 trb(:,:,jk,jp_fabm_m1+jp_fabm_p2c) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p2c) + & 1675 & logchl_balinc_ersem_p2c(:,:,jk) * zincwgt 1676 trb(:,:,jk,jp_fabm_m1+jp_fabm_p2n) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p2n) + & 1677 & logchl_balinc_ersem_p2n(:,:,jk) * zincwgt 1678 trb(:,:,jk,jp_fabm_m1+jp_fabm_p2p) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p2p) + & 1679 & logchl_balinc_ersem_p2p(:,:,jk) * zincwgt 1680 trb(:,:,jk,jp_fabm_m1+jp_fabm_p3c) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p3c) + & 1681 & logchl_balinc_ersem_p3c(:,:,jk) * zincwgt 1682 trb(:,:,jk,jp_fabm_m1+jp_fabm_p3n) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p3n) + & 1683 & logchl_balinc_ersem_p3n(:,:,jk) * zincwgt 1684 trb(:,:,jk,jp_fabm_m1+jp_fabm_p3p) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p3p) + & 1685 & logchl_balinc_ersem_p3p(:,:,jk) * zincwgt 1686 trb(:,:,jk,jp_fabm_m1+jp_fabm_p4c) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p4c) + & 1687 & logchl_balinc_ersem_p4c(:,:,jk) * zincwgt 1688 trb(:,:,jk,jp_fabm_m1+jp_fabm_p4n) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p4n) + & 1689 & logchl_balinc_ersem_p4n(:,:,jk) * zincwgt 1690 trb(:,:,jk,jp_fabm_m1+jp_fabm_p4p) = trb(:,:,jk,jp_fabm_m1+jp_fabm_p4p) + & 1691 & logchl_balinc_ersem_p4p(:,:,jk) * zincwgt 1692 trb(:,:,jk,jp_fabm_m1+jp_fabm_z4c) = trb(:,:,jk,jp_fabm_m1+jp_fabm_z4c) + & 1693 & logchl_balinc_ersem_z4c(:,:,jk) * zincwgt 1694 trb(:,:,jk,jp_fabm_m1+jp_fabm_z5c) = trb(:,:,jk,jp_fabm_m1+jp_fabm_z5c) + & 1695 & logchl_balinc_ersem_z5c(:,:,jk) * zincwgt 1696 trb(:,:,jk,jp_fabm_m1+jp_fabm_z5n) = trb(:,:,jk,jp_fabm_m1+jp_fabm_z5n) + & 1697 & logchl_balinc_ersem_z5n(:,:,jk) * zincwgt 1698 trb(:,:,jk,jp_fabm_m1+jp_fabm_z5p) = trb(:,:,jk,jp_fabm_m1+jp_fabm_z5p) + & 1699 & logchl_balinc_ersem_z5p(:,:,jk) * zincwgt 1700 trb(:,:,jk,jp_fabm_m1+jp_fabm_z6c) = trb(:,:,jk,jp_fabm_m1+jp_fabm_z6c) + & 1701 & logchl_balinc_ersem_z6c(:,:,jk) * zincwgt 1702 trb(:,:,jk,jp_fabm_m1+jp_fabm_z6n) = trb(:,:,jk,jp_fabm_m1+jp_fabm_z6n) + & 1703 & logchl_balinc_ersem_z6n(:,:,jk) * zincwgt 1704 trb(:,:,jk,jp_fabm_m1+jp_fabm_z6p) = trb(:,:,jk,jp_fabm_m1+jp_fabm_z6p) + & 1705 & logchl_balinc_ersem_z6p(:,:,jk) * zincwgt 1706 trb(:,:,jk,jp_fabm_m1+jp_fabm_n1p) = trb(:,:,jk,jp_fabm_m1+jp_fabm_n1p) + & 1707 & logchl_balinc_ersem_n1p(:,:,jk) * zincwgt 1708 trb(:,:,jk,jp_fabm_m1+jp_fabm_n3n) = trb(:,:,jk,jp_fabm_m1+jp_fabm_n3n) + & 1709 & logchl_balinc_ersem_n3n(:,:,jk) * zincwgt 1710 trb(:,:,jk,jp_fabm_m1+jp_fabm_n4n) = trb(:,:,jk,jp_fabm_m1+jp_fabm_n4n) + & 1711 & logchl_balinc_ersem_n4n(:,:,jk) * zincwgt 1712 trb(:,:,jk,jp_fabm_m1+jp_fabm_n5s) = trb(:,:,jk,jp_fabm_m1+jp_fabm_n5s) + & 1713 & logchl_balinc_ersem_n5s(:,:,jk) * zincwgt 1714 END DO 1715 1716 #elif defined key_medusa && defined key_foam_medusa 1717 DO jk = 1, jpkm1 1718 ! Add directly to trn and trb, rather than to tra, as not a tendency 1719 trn(:,:,jk,jpchn) = trn(:,:,jk,jpchn) + logchl_balinc_medusa_chn(:,:,jk) * zincwgt 1720 trn(:,:,jk,jpchd) = trn(:,:,jk,jpchd) + logchl_balinc_medusa_chd(:,:,jk) * zincwgt 1721 trn(:,:,jk,jpphn) = trn(:,:,jk,jpphn) + logchl_balinc_medusa_phn(:,:,jk) * zincwgt 1722 trn(:,:,jk,jpphd) = trn(:,:,jk,jpphd) + logchl_balinc_medusa_phd(:,:,jk) * zincwgt 1723 trn(:,:,jk,jpzmi) = trn(:,:,jk,jpzmi) + logchl_balinc_medusa_zmi(:,:,jk) * zincwgt 1724 trn(:,:,jk,jpzme) = trn(:,:,jk,jpzme) + logchl_balinc_medusa_zme(:,:,jk) * zincwgt 1725 trn(:,:,jk,jpdin) = trn(:,:,jk,jpdin) + logchl_balinc_medusa_din(:,:,jk) * zincwgt 1726 trn(:,:,jk,jpsil) = trn(:,:,jk,jpsil) + logchl_balinc_medusa_sil(:,:,jk) * zincwgt 1727 trn(:,:,jk,jpfer) = trn(:,:,jk,jpfer) + logchl_balinc_medusa_fer(:,:,jk) * zincwgt 1728 trn(:,:,jk,jpdet) = trn(:,:,jk,jpdet) + logchl_balinc_medusa_det(:,:,jk) * zincwgt 1729 trn(:,:,jk,jppds) = trn(:,:,jk,jppds) + logchl_balinc_medusa_pds(:,:,jk) * zincwgt 1730 trn(:,:,jk,jpdtc) = trn(:,:,jk,jpdtc) + logchl_balinc_medusa_dtc(:,:,jk) * zincwgt 1731 trn(:,:,jk,jpdic) = trn(:,:,jk,jpdic) + logchl_balinc_medusa_dic(:,:,jk) * zincwgt 1732 trn(:,:,jk,jpalk) = trn(:,:,jk,jpalk) + logchl_balinc_medusa_alk(:,:,jk) * zincwgt 1733 trn(:,:,jk,jpoxy) = trn(:,:,jk,jpoxy) + logchl_balinc_medusa_oxy(:,:,jk) * zincwgt 1734 1735 trb(:,:,jk,jpchn) = trb(:,:,jk,jpchn) + logchl_balinc_medusa_chn(:,:,jk) * zincwgt 1736 trb(:,:,jk,jpchd) = trb(:,:,jk,jpchd) + logchl_balinc_medusa_chd(:,:,jk) * zincwgt 1737 trb(:,:,jk,jpphn) = trb(:,:,jk,jpphn) + logchl_balinc_medusa_phn(:,:,jk) * zincwgt 1738 trb(:,:,jk,jpphd) = trb(:,:,jk,jpphd) + logchl_balinc_medusa_phd(:,:,jk) * zincwgt 1739 trb(:,:,jk,jpzmi) = trb(:,:,jk,jpzmi) + logchl_balinc_medusa_zmi(:,:,jk) * zincwgt 1740 trb(:,:,jk,jpzme) = trb(:,:,jk,jpzme) + logchl_balinc_medusa_zme(:,:,jk) * zincwgt 1741 trb(:,:,jk,jpdin) = trb(:,:,jk,jpdin) + logchl_balinc_medusa_din(:,:,jk) * zincwgt 1742 trb(:,:,jk,jpsil) = trb(:,:,jk,jpsil) + logchl_balinc_medusa_sil(:,:,jk) * zincwgt 1743 trb(:,:,jk,jpfer) = trb(:,:,jk,jpfer) + logchl_balinc_medusa_fer(:,:,jk) * zincwgt 1744 trb(:,:,jk,jpdet) = trb(:,:,jk,jpdet) + logchl_balinc_medusa_det(:,:,jk) * zincwgt 1745 trb(:,:,jk,jppds) = trb(:,:,jk,jppds) + logchl_balinc_medusa_pds(:,:,jk) * zincwgt 1746 trb(:,:,jk,jpdtc) = trb(:,:,jk,jpdtc) + logchl_balinc_medusa_dtc(:,:,jk) * zincwgt 1747 trb(:,:,jk,jpdic) = trb(:,:,jk,jpdic) + logchl_balinc_medusa_dic(:,:,jk) * zincwgt 1748 trb(:,:,jk,jpalk) = trb(:,:,jk,jpalk) + logchl_balinc_medusa_alk(:,:,jk) * zincwgt 1749 trb(:,:,jk,jpoxy) = trb(:,:,jk,jpoxy) + logchl_balinc_medusa_oxy(:,:,jk) * zincwgt 1750 END DO 1751 1752 #elif defined key_hadocc 1753 DO jk = 1, jpkm1 1754 ! Add directly to trn and trb, rather than to tra, as not a tendency 1755 trn(:,:,jk,jp_had_nut) = trn(:,:,jk,jp_had_nut) + logchl_balinc_hadocc_nut(:,:,jk) * zincwgt 1756 trn(:,:,jk,jp_had_phy) = trn(:,:,jk,jp_had_phy) + logchl_balinc_hadocc_phy(:,:,jk) * zincwgt 1757 trn(:,:,jk,jp_had_zoo) = trn(:,:,jk,jp_had_zoo) + logchl_balinc_hadocc_zoo(:,:,jk) * zincwgt 1758 trn(:,:,jk,jp_had_pdn) = trn(:,:,jk,jp_had_pdn) + logchl_balinc_hadocc_det(:,:,jk) * zincwgt 1759 trn(:,:,jk,jp_had_dic) = trn(:,:,jk,jp_had_dic) + logchl_balinc_hadocc_dic(:,:,jk) * zincwgt 1760 trn(:,:,jk,jp_had_alk) = trn(:,:,jk,jp_had_alk) + logchl_balinc_hadocc_alk(:,:,jk) * zincwgt 1761 1762 trb(:,:,jk,jp_had_nut) = trb(:,:,jk,jp_had_nut) + logchl_balinc_hadocc_nut(:,:,jk) * zincwgt 1763 trb(:,:,jk,jp_had_phy) = trb(:,:,jk,jp_had_phy) + logchl_balinc_hadocc_phy(:,:,jk) * zincwgt 1764 trb(:,:,jk,jp_had_zoo) = trb(:,:,jk,jp_had_zoo) + logchl_balinc_hadocc_zoo(:,:,jk) * zincwgt 1765 trb(:,:,jk,jp_had_pdn) = trb(:,:,jk,jp_had_pdn) + logchl_balinc_hadocc_det(:,:,jk) * zincwgt 1766 trb(:,:,jk,jp_had_dic) = trb(:,:,jk,jp_had_dic) + logchl_balinc_hadocc_dic(:,:,jk) * zincwgt 1767 trb(:,:,jk,jp_had_alk) = trb(:,:,jk,jp_had_alk) + logchl_balinc_hadocc_alk(:,:,jk) * zincwgt 1768 END DO 1769 #endif 1770 1771 ! Do not deallocate arrays - needed by asm_bal_wri 1772 ! which is called at end of model run 1773 1774 ENDIF 1775 1776 ELSEIF ( ln_asmdin ) THEN 1777 1778 !-------------------------------------------------------------------- 1779 ! Direct Initialization 1780 !-------------------------------------------------------------------- 1781 1782 IF ( kt == nitdin_r ) THEN 1783 1784 neuler = 0 ! Force Euler forward step 1785 1786 #if defined key_fabm 1787 ! Initialize the now fields with the background + increment 1788 ! Background currently is what the model is initialised with 1789 CALL ctl_warn( ' Doing direct initialisation of ERSEM with chlorophyll assimilation', & 1790 & ' Background state is taken from model rather than background file' ) 1791 trn(:,:,:,jp_fabm_m1+jp_fabm_chl1) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl1) + & 1792 & logchl_balinc_ersem_chl1(:,:,:) 1793 trn(:,:,:,jp_fabm_m1+jp_fabm_chl2) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl2) + & 1794 & logchl_balinc_ersem_chl2(:,:,:) 1795 trn(:,:,:,jp_fabm_m1+jp_fabm_chl3) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl3) + & 1796 & logchl_balinc_ersem_chl3(:,:,:) 1797 trn(:,:,:,jp_fabm_m1+jp_fabm_chl4) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl4) + & 1798 & logchl_balinc_ersem_chl4(:,:,:) 1799 trn(:,:,:,jp_fabm_m1+jp_fabm_p1c) = trn(:,:,:,jp_fabm_m1+jp_fabm_p1c) + & 1800 & logchl_balinc_ersem_p1c(:,:,:) 1801 trn(:,:,:,jp_fabm_m1+jp_fabm_p1n) = trn(:,:,:,jp_fabm_m1+jp_fabm_p1n) + & 1802 & logchl_balinc_ersem_p1n(:,:,:) 1803 trn(:,:,:,jp_fabm_m1+jp_fabm_p1p) = trn(:,:,:,jp_fabm_m1+jp_fabm_p1p) + & 1804 & logchl_balinc_ersem_p1p(:,:,:) 1805 trn(:,:,:,jp_fabm_m1+jp_fabm_p1s) = trn(:,:,:,jp_fabm_m1+jp_fabm_p1s) + & 1806 & logchl_balinc_ersem_p1s(:,:,:) 1807 trn(:,:,:,jp_fabm_m1+jp_fabm_p2c) = trn(:,:,:,jp_fabm_m1+jp_fabm_p2c) + & 1808 & logchl_balinc_ersem_p2c(:,:,:) 1809 trn(:,:,:,jp_fabm_m1+jp_fabm_p2n) = trn(:,:,:,jp_fabm_m1+jp_fabm_p2n) + & 1810 & logchl_balinc_ersem_p2n(:,:,:) 1811 trn(:,:,:,jp_fabm_m1+jp_fabm_p2p) = trn(:,:,:,jp_fabm_m1+jp_fabm_p2p) + & 1812 & logchl_balinc_ersem_p2p(:,:,:) 1813 trn(:,:,:,jp_fabm_m1+jp_fabm_p3c) = trn(:,:,:,jp_fabm_m1+jp_fabm_p3c) + & 1814 & logchl_balinc_ersem_p3c(:,:,:) 1815 trn(:,:,:,jp_fabm_m1+jp_fabm_p3n) = trn(:,:,:,jp_fabm_m1+jp_fabm_p3n) + & 1816 & logchl_balinc_ersem_p3n(:,:,:) 1817 trn(:,:,:,jp_fabm_m1+jp_fabm_p3p) = trn(:,:,:,jp_fabm_m1+jp_fabm_p3p) + & 1818 & logchl_balinc_ersem_p3p(:,:,:) 1819 trn(:,:,:,jp_fabm_m1+jp_fabm_p4c) = trn(:,:,:,jp_fabm_m1+jp_fabm_p4c) + & 1820 & logchl_balinc_ersem_p4c(:,:,:) 1821 trn(:,:,:,jp_fabm_m1+jp_fabm_p4n) = trn(:,:,:,jp_fabm_m1+jp_fabm_p4n) + & 1822 & logchl_balinc_ersem_p4n(:,:,:) 1823 trn(:,:,:,jp_fabm_m1+jp_fabm_p4p) = trn(:,:,:,jp_fabm_m1+jp_fabm_p4p) + & 1824 & logchl_balinc_ersem_p4p(:,:,:) 1825 trn(:,:,:,jp_fabm_m1+jp_fabm_z4c) = trn(:,:,:,jp_fabm_m1+jp_fabm_z4c) + & 1826 & logchl_balinc_ersem_z4c(:,:,:) 1827 trn(:,:,:,jp_fabm_m1+jp_fabm_z5c) = trn(:,:,:,jp_fabm_m1+jp_fabm_z5c) + & 1828 & logchl_balinc_ersem_z5c(:,:,:) 1829 trn(:,:,:,jp_fabm_m1+jp_fabm_z5n) = trn(:,:,:,jp_fabm_m1+jp_fabm_z5n) + & 1830 & logchl_balinc_ersem_z5n(:,:,:) 1831 trn(:,:,:,jp_fabm_m1+jp_fabm_z5p) = trn(:,:,:,jp_fabm_m1+jp_fabm_z5p) + & 1832 & logchl_balinc_ersem_z5p(:,:,:) 1833 trn(:,:,:,jp_fabm_m1+jp_fabm_z6c) = trn(:,:,:,jp_fabm_m1+jp_fabm_z6c) + & 1834 & logchl_balinc_ersem_z6c(:,:,:) 1835 trn(:,:,:,jp_fabm_m1+jp_fabm_z6n) = trn(:,:,:,jp_fabm_m1+jp_fabm_z6n) + & 1836 & logchl_balinc_ersem_z6n(:,:,:) 1837 trn(:,:,:,jp_fabm_m1+jp_fabm_z6p) = trn(:,:,:,jp_fabm_m1+jp_fabm_z6p) + & 1838 & logchl_balinc_ersem_z6p(:,:,:) 1839 trn(:,:,:,jp_fabm_m1+jp_fabm_n1p) = trn(:,:,:,jp_fabm_m1+jp_fabm_n1p) + & 1840 & logchl_balinc_ersem_n1p(:,:,:) 1841 trn(:,:,:,jp_fabm_m1+jp_fabm_n3n) = trn(:,:,:,jp_fabm_m1+jp_fabm_n3n) + & 1842 & logchl_balinc_ersem_n3n(:,:,:) 1843 trn(:,:,:,jp_fabm_m1+jp_fabm_n4n) = trn(:,:,:,jp_fabm_m1+jp_fabm_n4n) + & 1844 & logchl_balinc_ersem_n4n(:,:,:) 1845 trn(:,:,:,jp_fabm_m1+jp_fabm_n5s) = trn(:,:,:,jp_fabm_m1+jp_fabm_n5s) + & 1846 & logchl_balinc_ersem_n5s(:,:,:) 1847 1848 trb(:,:,:,jp_fabm_m1+jp_fabm_chl1) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl1) 1849 trb(:,:,:,jp_fabm_m1+jp_fabm_chl2) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl2) 1850 trb(:,:,:,jp_fabm_m1+jp_fabm_chl3) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl3) 1851 trb(:,:,:,jp_fabm_m1+jp_fabm_chl4) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl4) 1852 trb(:,:,:,jp_fabm_m1+jp_fabm_p1c) = trn(:,:,:,jp_fabm_m1+jp_fabm_p1c) 1853 trb(:,:,:,jp_fabm_m1+jp_fabm_p1n) = trn(:,:,:,jp_fabm_m1+jp_fabm_p1n) 1854 trb(:,:,:,jp_fabm_m1+jp_fabm_p1p) = trn(:,:,:,jp_fabm_m1+jp_fabm_p1p) 1855 trb(:,:,:,jp_fabm_m1+jp_fabm_p1s) = trn(:,:,:,jp_fabm_m1+jp_fabm_p1s) 1856 trb(:,:,:,jp_fabm_m1+jp_fabm_p2c) = trn(:,:,:,jp_fabm_m1+jp_fabm_p2c) 1857 trb(:,:,:,jp_fabm_m1+jp_fabm_p2n) = trn(:,:,:,jp_fabm_m1+jp_fabm_p2n) 1858 trb(:,:,:,jp_fabm_m1+jp_fabm_p2p) = trn(:,:,:,jp_fabm_m1+jp_fabm_p2p) 1859 trb(:,:,:,jp_fabm_m1+jp_fabm_p3c) = trn(:,:,:,jp_fabm_m1+jp_fabm_p3c) 1860 trb(:,:,:,jp_fabm_m1+jp_fabm_p3n) = trn(:,:,:,jp_fabm_m1+jp_fabm_p3n) 1861 trb(:,:,:,jp_fabm_m1+jp_fabm_p3p) = trn(:,:,:,jp_fabm_m1+jp_fabm_p3p) 1862 trb(:,:,:,jp_fabm_m1+jp_fabm_p4c) = trn(:,:,:,jp_fabm_m1+jp_fabm_p4c) 1863 trb(:,:,:,jp_fabm_m1+jp_fabm_p4n) = trn(:,:,:,jp_fabm_m1+jp_fabm_p4n) 1864 trb(:,:,:,jp_fabm_m1+jp_fabm_p4p) = trn(:,:,:,jp_fabm_m1+jp_fabm_p4p) 1865 trb(:,:,:,jp_fabm_m1+jp_fabm_z4c) = trn(:,:,:,jp_fabm_m1+jp_fabm_z4c) 1866 trb(:,:,:,jp_fabm_m1+jp_fabm_z5c) = trn(:,:,:,jp_fabm_m1+jp_fabm_z5c) 1867 trb(:,:,:,jp_fabm_m1+jp_fabm_z5n) = trn(:,:,:,jp_fabm_m1+jp_fabm_z5n) 1868 trb(:,:,:,jp_fabm_m1+jp_fabm_z5p) = trn(:,:,:,jp_fabm_m1+jp_fabm_z5p) 1869 trb(:,:,:,jp_fabm_m1+jp_fabm_z6c) = trn(:,:,:,jp_fabm_m1+jp_fabm_z6c) 1870 trb(:,:,:,jp_fabm_m1+jp_fabm_z6n) = trn(:,:,:,jp_fabm_m1+jp_fabm_z6n) 1871 trb(:,:,:,jp_fabm_m1+jp_fabm_z6p) = trn(:,:,:,jp_fabm_m1+jp_fabm_z6p) 1872 trb(:,:,:,jp_fabm_m1+jp_fabm_n1p) = trn(:,:,:,jp_fabm_m1+jp_fabm_n1p) 1873 trb(:,:,:,jp_fabm_m1+jp_fabm_n3n) = trn(:,:,:,jp_fabm_m1+jp_fabm_n3n) 1874 trb(:,:,:,jp_fabm_m1+jp_fabm_n4n) = trn(:,:,:,jp_fabm_m1+jp_fabm_n4n) 1875 trb(:,:,:,jp_fabm_m1+jp_fabm_n5s) = trn(:,:,:,jp_fabm_m1+jp_fabm_n5s) 1876 1877 #elif defined key_medusa && defined key_foam_medusa 1878 ! Initialize the now fields with the background + increment 1879 ! Background currently is what the model is initialised with 1880 CALL ctl_warn( ' Doing direct initialisation of MEDUSA with chlorophyll assimilation', & 1881 & ' Background state is taken from model rather than background file' ) 1882 trn(:,:,:,jpchn) = trn(:,:,:,jpchn) + logchl_balinc_medusa_chn(:,:,:) 1883 trn(:,:,:,jpchd) = trn(:,:,:,jpchd) + logchl_balinc_medusa_chd(:,:,:) 1884 trn(:,:,:,jpphn) = trn(:,:,:,jpphn) + logchl_balinc_medusa_phn(:,:,:) 1885 trn(:,:,:,jpphd) = trn(:,:,:,jpphd) + logchl_balinc_medusa_phd(:,:,:) 1886 trn(:,:,:,jpzmi) = trn(:,:,:,jpzmi) + logchl_balinc_medusa_zmi(:,:,:) 1887 trn(:,:,:,jpzme) = trn(:,:,:,jpzme) + logchl_balinc_medusa_zme(:,:,:) 1888 trn(:,:,:,jpdin) = trn(:,:,:,jpdin) + logchl_balinc_medusa_din(:,:,:) 1889 trn(:,:,:,jpsil) = trn(:,:,:,jpsil) + logchl_balinc_medusa_sil(:,:,:) 1890 trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + logchl_balinc_medusa_fer(:,:,:) 1891 trn(:,:,:,jpdet) = trn(:,:,:,jpdet) + logchl_balinc_medusa_det(:,:,:) 1892 trn(:,:,:,jppds) = trn(:,:,:,jppds) + logchl_balinc_medusa_pds(:,:,:) 1893 trn(:,:,:,jpdtc) = trn(:,:,:,jpdtc) + logchl_balinc_medusa_dtc(:,:,:) 1894 trn(:,:,:,jpdic) = trn(:,:,:,jpdic) + logchl_balinc_medusa_dic(:,:,:) 1895 trn(:,:,:,jpalk) = trn(:,:,:,jpalk) + logchl_balinc_medusa_alk(:,:,:) 1896 trn(:,:,:,jpoxy) = trn(:,:,:,jpoxy) + logchl_balinc_medusa_oxy(:,:,:) 1897 1898 trb(:,:,:,jpchn) = trn(:,:,:,jpchn) 1899 trb(:,:,:,jpchd) = trn(:,:,:,jpchd) 1900 trb(:,:,:,jpphn) = trn(:,:,:,jpphn) 1901 trb(:,:,:,jpphd) = trn(:,:,:,jpphd) 1902 trb(:,:,:,jpzmi) = trn(:,:,:,jpzmi) 1903 trb(:,:,:,jpzme) = trn(:,:,:,jpzme) 1904 trb(:,:,:,jpdin) = trn(:,:,:,jpdin) 1905 trb(:,:,:,jpsil) = trn(:,:,:,jpsil) 1906 trb(:,:,:,jpfer) = trn(:,:,:,jpfer) 1907 trb(:,:,:,jpdet) = trn(:,:,:,jpdet) 1908 trb(:,:,:,jppds) = trn(:,:,:,jppds) 1909 trb(:,:,:,jpdtc) = trn(:,:,:,jpdtc) 1910 trb(:,:,:,jpdic) = trn(:,:,:,jpdic) 1911 trb(:,:,:,jpalk) = trn(:,:,:,jpalk) 1912 trb(:,:,:,jpoxy) = trn(:,:,:,jpoxy) 1913 1914 #elif defined key_hadocc 1915 ! Initialize the now fields with the background + increment 1916 ! Background currently is what the model is initialised with 1917 CALL ctl_warn( ' Doing direct initialisation of HadOCC with chlorophyll assimilation', & 1918 & ' Background state is taken from model rather than background file' ) 1919 trn(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) + logchl_balinc_hadocc_nut(:,:,:) 1920 trn(:,:,:,jp_had_phy) = trn(:,:,:,jp_had_phy) + logchl_balinc_hadocc_phy(:,:,:) 1921 trn(:,:,:,jp_had_zoo) = trn(:,:,:,jp_had_zoo) + logchl_balinc_hadocc_zoo(:,:,:) 1922 trn(:,:,:,jp_had_pdn) = trn(:,:,:,jp_had_pdn) + logchl_balinc_hadocc_det(:,:,:) 1923 trn(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) + logchl_balinc_hadocc_dic(:,:,:) 1924 trn(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) + logchl_balinc_hadocc_alk(:,:,:) 1925 1926 trb(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) 1927 trb(:,:,:,jp_had_phy) = trn(:,:,:,jp_had_phy) 1928 trb(:,:,:,jp_had_zoo) = trn(:,:,:,jp_had_zoo) 1929 trb(:,:,:,jp_had_pdn) = trn(:,:,:,jp_had_pdn) 1930 trb(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) 1931 trb(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) 1932 #endif 1933 1934 ! Do not deallocate arrays - needed by asm_bal_wri 1935 ! which is called at end of model run 1936 ENDIF 1937 ! 1938 ENDIF 1939 ! 1940 END SUBROUTINE logchl_asm_inc 1258 1941 1259 1942 !!======================================================================
Note: See TracChangeset
for help on using the changeset viewer.