Opened 10 years ago
Closed 10 years ago
#667 closed bug (Fixed)
modify def_his.F/wrt_his.F for writing wetdry_mask_psi — at Version 1
| Reported by: | jcwarner | Owned by: | arango | 
|---|---|---|---|
| Priority: | major | Milestone: | Release ROMS/TOMS 3.7 | 
| Component: | Nonlinear | Version: | 3.7 | 
| Keywords: | Cc: | 
Description (last modified by )
Need to modify def_his.F to allow wetdry_psi_mask to be read during a restart and written out to the history NetCDF file. This is discussed on the forum but here are some details for modifications to def_his.F:
- In my solution, firstly add the declaration statement to line 55 in def_his.F:
integer :: p2dgrd(3)
- Then insert the following codes to line 301:
!
!  Define dimension vectors for staggered type variables at PSI-points.
!
        p2dgrd(1)=DimIDs( 4)
        p2dgrd(2)=DimIDs( 8)
        p2dgrd(3)=DimIDs(12)
- Then, insert the following codes to line 458 ( inside #ifdef WET_DRY ... #endif statement):
!
!  Define wet/dry mask on PSI-points.
!
        Vinfo( 1)=Vname(1,idPwet)
        Vinfo( 2)=Vname(2,idPwet)
        Vinfo( 3)=Vname(3,idPwet)
        Vinfo( 9)='land'
        Vinfo(10)='water'
        Vinfo(14)=Vname(4,idPwet)
        Vinfo(16)=Vname(1,idtime)
        Vinfo(22)='coordinates'
        Aval(5)=REAL(Iinfo(1,idPwet,ng),r8)
        status=def_var(ng, iNLM, HIS(ng)%ncid, HIS(ng)%Vid(idPwet),     &
     &                 NF_FOUT, nvd3, p2dgrd, Aval, Vinfo, ncname,      &
     &                 SetFillVal = .FALSE.)
        IF (exit_flag.ne.NoError) RETURN
- Similarly, insert the following codes to line 154 ( inside #ifdef WET_DRY ... #endif statement) in wrt_his.F:
!
!  Write out wet/dry mask at PSI-points.
!
      scale=1.0_r8
      gtype=gfactor*p2dvar
      status=nf_fwrite2d(ng, iNLM, HIS(ng)%ncid, HIS(ng)%Vid(idPwet),   &
     &                   HIS(ng)%Rindex, gtype,                         &
     &                   LBi, UBi, LBj, UBj, scale,                     &
# ifdef MASKING
     &                   GRID(ng) % pmask,                              &
# endif
     &                   GRID(ng) % pmask_wet,                          &
     &                   SetFillVal = .FALSE.)
      IF (status.ne.nf90_noerr) THEN
        IF (Master) THEN
          WRITE (stdout,10) TRIM(Vname(1,idPwet)), HIS(ng)%Rindex
        END IF
        exit_flag=3
        ioerror=status
        RETURN
      END IF
- Also need to add in def_his.F around line 2383:
          ELSE IF (TRIM(var_name(i)).eq.TRIM(Vname(1,idPwet))) THEN
            got_var(idPwet)=.TRUE.
            HIS(ng)%Vid(idPwet)=var_id(i)
- and near line 2786
        IF (.not.got_var(idPwet)) THEN
          IF (Master) WRITE (stdout,60) TRIM(Vname(1,idPwet)),          &
     &                                  TRIM(ncname)
          exit_flag=3
          RETURN
        END IF
      Change History (1)
comment:1 by , 10 years ago
| Description: | modified (diff) | 
|---|---|
| Resolution: | → Fixed | 
| Status: | new → closed | 
| Summary: | modify def_his for wetdry_mask_psi → modify def_his.F/wrt_his.F for writing wetdry_mask_psi | 
  Note:
 See   TracTickets
 for help on using tickets.
    

Yes, thank you. I missed to consider this possibility when I updated the restart procedure for wetting and drying. It is valid to restart the model from a history NetCDF record instead of a restart NetCDF record. When updated these codes months ago I was thinking about perfect restart (PERFECT_RESTART) and this can be only done with the restart NetCDF file.
Many thanks to Takashi Nakamura for bringing this to our attention.