Changeset 11455 for branches/UKMO/dev_r5518_obs_oper_update_addclim/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90
- Timestamp:
- 2019-08-19T17:36:23+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_obs_oper_update_addclim/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90
r11449 r11455 29 29 USE obs_mpp ! MPP support routines for observation diagnostics 30 30 USE lib_mpp ! MPP routines 31 USE diaobs, ONLY: &32 & ln_output_clim33 31 34 32 IMPLICIT NONE … … 97 95 INTEGER :: je 98 96 INTEGER :: iadd 99 INTEGER :: iadd_ exp ! expected additional variables97 INTEGER :: iadd_clm ! 1 if climatology present 100 98 INTEGER :: iext 101 99 REAL(wp) :: zpres … … 104 102 ! Set up number of additional variables to be ouput: 105 103 ! Hx, CLIM, ... 106 iadd_ exp = 1 ! Hx107 IF ( ln_output_clim ) iadd_exp = iadd_exp +1104 iadd_clm = 0 105 IF ( profdata%lclim ) iadd_clm = 1 108 106 109 107 IF ( PRESENT( padd ) ) THEN … … 132 130 clfiletype='profb' 133 131 CALL alloc_obfbdata( fbdata, 2, profdata%nprof, ilevel, & 134 & iadd_exp+ iadd, 1 + iext, .TRUE. )132 & 1 + iadd_clm + iadd, 1 + iext, .TRUE. ) 135 133 fbdata%cname(1) = profdata%cvars(1) 136 134 fbdata%cname(2) = profdata%cvars(2) … … 148 146 fbdata%caddunit(1,1) = 'Degrees centigrade' 149 147 fbdata%caddunit(1,2) = 'PSU' 150 IF ( ln_output_clim ) THEN148 IF ( profdata%lclim ) THEN 151 149 fbdata%caddlong(2,1) = 'Climatology interpolated potential temperature' 152 150 fbdata%caddlong(2,2) = 'Climatology interpolated practical salinity' … … 161 159 END DO 162 160 DO ja = 1, iadd 163 fbdata%caddname( iadd_exp+ja) = padd%cdname(ja)161 fbdata%caddname(1+iadd_clm+ja) = padd%cdname(ja) 164 162 DO jvar = 1, 2 165 fbdata%caddlong( iadd_exp+ja,jvar) = padd%cdlong(ja,jvar)166 fbdata%caddunit( iadd_exp+ja,jvar) = padd%cdunit(ja,jvar)163 fbdata%caddlong(1+iadd_clm+ja,jvar) = padd%cdlong(ja,jvar) 164 fbdata%caddunit(1+iadd_clm+ja,jvar) = padd%cdunit(ja,jvar) 167 165 END DO 168 166 END DO … … 172 170 clfiletype='velfb' 173 171 CALL alloc_obfbdata( fbdata, 2, profdata%nprof, ilevel, & 174 & iadd_exp+ iadd, 0, .TRUE. )172 & 1 + iadd_clm + iadd, 0, .TRUE. ) 175 173 fbdata%cname(1) = profdata%cvars(1) 176 174 fbdata%cname(2) = profdata%cvars(2) … … 188 186 fbdata%caddunit(1,1) = 'm/s' 189 187 fbdata%caddunit(1,2) = 'm/s' 190 IF ( ln_output_clim ) THEN188 IF ( profdata%lclim ) THEN 191 189 fbdata%caddlong(2,1) = 'Climatology interpolated zonal velocity' 192 190 fbdata%caddlong(2,2) = 'Climatology interpolated meridional velocity' … … 197 195 fbdata%cgrid(2) = 'V' 198 196 DO ja = 1, iadd 199 fbdata%caddname( iadd_exp+ja) = padd%cdname(ja)200 fbdata%caddlong( iadd_exp+ja,1) = padd%cdlong(ja,1)201 fbdata%caddunit( iadd_exp+ja,1) = padd%cdunit(ja,1)197 fbdata%caddname(1+iadd_clm+ja) = padd%cdname(ja) 198 fbdata%caddlong(1+iadd_clm+ja,1) = padd%cdlong(ja,1) 199 fbdata%caddunit(1+iadd_clm+ja,1) = padd%cdunit(ja,1) 202 200 END DO 203 201 … … 270 268 & ( TRIM(profdata%cvars(1)) /= 'UVEL' ) ) THEN 271 269 CALL alloc_obfbdata( fbdata, 1, profdata%nprof, ilevel, & 272 & iadd_expt+ iadd, iext, .TRUE. )270 & 1 + iadd_clm + iadd, iext, .TRUE. ) 273 271 fbdata%cname(1) = profdata%cvars(1) 274 272 fbdata%coblong(1) = cllongname … … 276 274 fbdata%caddlong(1,1) = 'Model interpolated ' // TRIM(cllongname) 277 275 fbdata%caddunit(1,1) = clunits 278 IF ( ln_output_clim ) THEN276 IF ( profdata%lclim ) THEN 279 277 fbdata%caddlong(2,1) = 'Climatological interpolated ' // TRIM(cllongname) 280 278 fbdata%caddunit(2,1) = clunits … … 287 285 END DO 288 286 DO ja = 1, iadd 289 fbdata%caddname( iadd_expt+ja) = padd%cdname(ja)290 fbdata%caddlong( iadd_expt+ja,1) = padd%cdlong(ja,1)291 fbdata%caddunit( iadd_expt+ja,1) = padd%cdunit(ja,1)287 fbdata%caddname(1+iadd_clm+ja) = padd%cdname(ja) 288 fbdata%caddlong(1+iadd_clm+ja,1) = padd%cdlong(ja,1) 289 fbdata%caddunit(1+iadd_clm+ja,1) = padd%cdunit(ja,1) 292 290 END DO 293 291 ENDIF 294 292 295 293 fbdata%caddname(1) = 'Hx' 296 IF ( ln_output_clim ) fbdata%caddname(2) = 'CLM'294 IF ( profdata%lclim ) fbdata%caddname(1+iadd_clm) = 'CLM' 297 295 298 296 WRITE(clfname, FMT="(A,'_fdbk_',I4.4,'.nc')") TRIM(clfiletype), nproc … … 348 346 DO jk = profdata%npvsta(jo,jvar), profdata%npvend(jo,jvar) 349 347 ik = profdata%var(jvar)%nvlidx(jk) 350 fbdata%padd(ik,jo,1,jvar) = profdata%var(jvar)%vmod(jk)351 IF ( ln_output_clim ) THEN352 fbdata%padd(ik,jo,2,jvar) = profdata%var(jvar)%vclm(jk)353 ENDIF354 348 fbdata%pob(ik,jo,jvar) = profdata%var(jvar)%vobs(jk) 355 349 fbdata%pdep(ik,jo) = profdata%var(jvar)%vdep(jk) … … 365 359 ENDIF 366 360 fbdata%iobsk(ik,jo,jvar) = profdata%var(jvar)%mvk(jk) 361 362 fbdata%padd(ik,jo,1,jvar) = profdata%var(jvar)%vmod(jk) 363 IF ( profdata%lclim ) THEN 364 fbdata%padd(ik,jo,1+iadd_clm,jvar) = profdata%var(jvar)%vclm(jk) 365 ENDIF 367 366 DO ja = 1, iadd 368 fbdata%padd(ik,jo, iadd_exp+ja,jvar) = &367 fbdata%padd(ik,jo,1+iadd_clm+ja,jvar) = & 369 368 & profdata%var(jvar)%vext(jk,padd%ipoint(ja)) 370 369 END DO … … 449 448 INTEGER :: je 450 449 INTEGER :: iadd 451 INTEGER :: iadd_exp452 450 INTEGER :: iext 453 451 INTEGER :: indx_std 454 452 INTEGER :: iadd_std 455 INTEGER :: iadd_clm 453 INTEGER :: iadd_clm 454 INTEGER :: iadd_mdt 455 456 IF ( PRESENT( pext ) ) THEN 457 iext = pext%inum 458 ELSE 459 iext = 0 460 ENDIF 456 461 457 462 458 463 ! Set up number of additional variables to be ouput: 459 ! Hx, CLIM, ... 460 iadd_exp = 1 ! Hx 461 IF ( ln_output_clim ) iadd_exp = iadd_exp + 1 464 ! Hx, CLM, STD, MDT... 462 465 463 466 IF ( PRESENT( padd ) ) THEN … … 466 469 iadd = 0 467 470 ENDIF 468 469 IF ( PRESENT( pext ) ) THEN 470 iext = pext%inum 471 ELSE 472 iext = 0 473 ENDIF 474 471 475 472 iadd_std = 0 476 473 indx_std = -1 … … 485 482 486 483 iadd_clm = 0 484 IF ( surfdata%lclim ) iadd_clm = 1 485 486 iadd_mdt = 0 487 IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) iadd_mdt = 1 487 488 488 489 CALL init_obfbdata( fbdata ) … … 496 497 497 498 CALL alloc_obfbdata( fbdata, 1, surfdata%nsurf, 1, & 498 & 2 + iadd + iadd_std, 1 + iext, .TRUE. ) 499 & 1 + iadd_mdt + iadd_std + iadd, & 500 & 1 + iext, .TRUE. ) 499 501 500 502 clfiletype = 'slafb' … … 517 519 fbdata%cgrid(1) = 'T' 518 520 DO ja = 1, iadd 519 fbdata%caddname( 2+iadd_std+ja) = padd%cdname(ja)520 fbdata%caddlong( 2+iadd_std+ja,1) = padd%cdlong(ja,1)521 fbdata%caddunit( 2+iadd_std+ja,1) = padd%cdunit(ja,1)521 fbdata%caddname(1+iadd_mdt+iadd_std+ja) = padd%cdname(ja) 522 fbdata%caddlong(1+iadd_mdt+iadd_std+ja,1) = padd%cdlong(ja,1) 523 fbdata%caddunit(1+iadd_mdt+iadd_std+ja,1) = padd%cdunit(ja,1) 522 524 END DO 523 525 … … 528 530 clunits = 'Degree centigrade' 529 531 clgrid = 'T' 530 IF ( ln_output_clim ) iadd_clm = 1531 532 532 533 CASE('ICECONC') … … 543 544 clunits = 'psu' 544 545 clgrid = 'T' 545 IF ( ln_output_clim ) iadd_clm = 1546 546 547 547 CASE('SLCHLTOT','LOGCHL','LogChl','logchl') … … 655 655 656 656 CALL alloc_obfbdata( fbdata, 1, surfdata%nsurf, 1, & 657 & 1 + iadd + iadd_std + iadd_clm, iext, .TRUE. )657 & 1 + iadd_std + iadd_clm + iadd, iext, .TRUE. ) 658 658 659 659 fbdata%cname(1) = surfdata%cvars(1) … … 673 673 fbdata%cgrid(1) = clgrid 674 674 DO ja = 1, iadd 675 fbdata%caddname(1+iadd_ std+iadd_clm+ja) = padd%cdname(ja)676 fbdata%caddlong(1+iadd_ std+iadd_clm+ja,1) = padd%cdlong(ja,1)677 fbdata%caddunit(1+iadd_ std+iadd_clm+ja,1) = padd%cdunit(ja,1)675 fbdata%caddname(1+iadd_mdt+iadd_std+iadd_clm+ja) = padd%cdname(ja) 676 fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm+ja,1) = padd%cdlong(ja,1) 677 fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm+ja,1) = padd%cdunit(ja,1) 678 678 END DO 679 679 … … 682 682 fbdata%caddname(1) = 'Hx' 683 683 IF ( indx_std /= -1 ) THEN 684 IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) iadd_std = iadd_std + 1 685 fbdata%caddname(1+iadd_std) = surfdata%cext(indx_std) 686 fbdata%caddlong(1+iadd_std,1) = 'Obs error standard deviation' 687 fbdata%caddunit(1+iadd_std,1) = fbdata%cobunit(1) 688 ENDIF 689 690 IF ( ln_output_clim .AND. ( iadd_clm > 0 ) ) THEN 691 fbdata%caddname(1+iadd_std+iadd_clm) = 'CLM' 692 fbdata%caddlong(1+iadd_std+iadd_clm,1) = 'Climatology' 693 fbdata%caddunit(1+iadd_std+iadd_clm,1) = fbdata%cobunit(1) 684 fbdata%caddname(1+iadd_mdt+iadd_std) = surfdata%cext(indx_std) 685 fbdata%caddlong(1+iadd_mdt+iadd_std,1) = 'Obs error standard deviation' 686 fbdata%caddunit(1+iadd_mdt+iadd_std,1) = fbdata%cobunit(1) 687 ENDIF 688 689 IF ( surfdata%lclim ) THEN 690 fbdata%caddname(1+iadd_mdt+iadd_std+iadd_clm) = 'CLM' 691 fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm,1) = 'Climatology' 692 fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm,1) = fbdata%cobunit(1) 694 693 ENDIF 695 694 … … 741 740 & fbdata%ptim(jo), & 742 741 & krefdate = 19500101 ) 743 fbdata%padd(1,jo,1,1) = surfdata%rmod(jo,1) 744 IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) THEN 745 fbdata%padd(1,jo,2,1) = surfdata%rext(jo,1) 746 ENDIF 747 IF ( ln_output_clim .AND. ( iadd_clm > 0 ) ) THEN 748 fbdata%padd(1,jo,2,1) = surfdata%rclm(jo,1) 749 ENDIF 750 742 751 743 fbdata%pob(1,jo,1) = surfdata%robs(jo,1) 752 744 fbdata%pdep(1,jo) = 0.0 … … 764 756 ENDIF 765 757 fbdata%iobsk(1,jo,1) = 0 766 IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) fbdata%pext(1,jo,1) = surfdata%rext(jo,2) 758 759 ! Additional variables. 760 ! Hx is always the first additional variable 761 fbdata%padd(1,jo,1,1) = surfdata%rmod(jo,1) 762 ! MDT is output as an additional variable if SLA obs type 763 IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) THEN 764 fbdata%padd(1,jo,1+iadd_mdt,1) = surfdata%rext(jo,1) 765 ENDIF 766 ! STD is output as an additional variable if available 767 767 IF ( indx_std /= -1 ) THEN 768 fbdata%padd(1,jo,1+iadd_ std,1) = surfdata%rext(jo,indx_std)768 fbdata%padd(1,jo,1+iadd_mdt+iadd_std,1) = surfdata%rext(jo,indx_std) 769 769 ENDIF 770 ! CLM is output as an additional variable if available 771 IF ( surfdata%lclim ) THEN 772 fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm,1) = surfdata%rclm(jo,1) 773 ENDIF 774 ! Then other additional variables are output 775 DO ja = 1, iadd 776 fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm+ja,1) = & 777 & surfdata%rext(jo,padd%ipoint(ja)) 778 END DO 770 779 771 DO ja = 1, iadd 772 fbdata%padd(1,jo,2+iadd_std+ja,1) = & 773 & surfdata%rext(jo,padd%ipoint(ja)) 774 END DO 780 ! Extra variables 781 IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) fbdata%pext(1,jo,1) = surfdata%rext(jo,2) 775 782 DO je = 1, iext 776 783 fbdata%pext(1,jo,1+je) = &
Note: See TracChangeset
for help on using the changeset viewer.