NCF%FNAME=TRIM(OUTPUT_DIR)//"julian_obc.nc"
! ADD THE FILE ATTRIBUTES
ATT => NC_MAKE_ATT(name='type',values="FVCOM TIME SERIES ELEVATION FORCING FILE")
NCF => ADD(NCF,ATT)
ATT => NC_MAKE_ATT(name='title',values=TRIM(COMMENTS))
NCF => ADD(NCF,ATT)
# if defined (EQUI_TIDE)
ATT => NC_MAKE_ATT(name='components',values=TRIM(COMPONENTS))
NCF => ADD(NCF,ATT)
DIM_tidal_components => NC_MAKE_DIM(name='tidal_components',len=size(Eperiod))
VAR => NC_MAKE_AVAR(name='tide_period', values=Eperiod, DIM1= DIM_tidal_components)
ATT => NC_MAKE_ATT(name='long_name',values='tide angular period')
VAR => ADD(VAR,ATT)
ATT => NC_MAKE_ATT(name='units',values='seconds')
VAR => ADD(VAR,ATT)
NCF => ADD(NCF,VAR)
VAR => NC_MAKE_AVAR(name='equilibrium_tide_Eamp', values=EQI_AMP, DIM1= DIM_tidal_components)
ATT => NC_MAKE_ATT(name='long_name',values='equilibrium tidal elevation amplitude')
VAR => ADD(VAR,ATT)
ATT => NC_MAKE_ATT(name='units',values='meters')
VAR => ADD(VAR,ATT)
NCF => ADD(NCF,VAR)
VAR => NC_MAKE_AVAR(name='equilibrium_beta_love', values=EQI_BETA, DIM1= DIM_tidal_components)
ATT => NC_MAKE_ATT(name='formula',values='beta=1+klove-hlove')
VAR => ADD(VAR,ATT)
NCF => ADD(NCF,VAR)
VAR => NC_MAKE_AVAR(name='equilibrium_tide_type', &
& values=TIDE_TYPE, DIM1=DIM_DateStrLen, DIM2= DIM_tidal_components)
ATT => NC_MAKE_ATT(name='long_name',values='formula')
VAR => ADD(VAR,ATT)
ATT => NC_MAKE_ATT(name='units',values='beta=1+klove-hlove')
VAR => ADD(VAR,ATT)
NCF => ADD(NCF,VAR)
if(USE_REAL_WORLD_TIME) then
NOW = READ_DATETIME(time_origin,"YMD",TIMEZONE,status)
IF(status /= 1) call fatal_error &
&("could not parse time_origin or time_zone passed for spectral tidal forcing file?")
VAR => DATETIME_OBJECT &
&(DIMSTR=DIM_DateStrLen,&
& timezone=timezone)
! OVER-RIDE DEFAULT NAME
VAR%varname="time_origin"
NCF => ADD(NCF,VAR)
VAR1 => FIND_VAR(NCF,"time_origin",FOUND)
CALL UPDATE_DATETIME(VAR1,NOW)
else
CALL IDEAL_TIME_STRING2TIME(time_origin,BFLAG,NOW,IINT)
IF(BFLAG == 'step') CALL FATAL_ERROR&
&("You must specify a time, not a step, for this restart file", &
& "The Step will be set by the old restart file...")
! float time
VAR => FLOAT_TIME_OBJECT &
&(Use_MJD=use_real_world_time)
! OVER-RIDE DEFAULT NAME
VAR%varname="time_origin"
NCF => ADD(NCF,VAR)
VAR1 => FIND_VAR(NCF,"time_origin",FOUND)
CALL UPDATE_FLOAT_TIME(VAR1,NOW)
END IF
# endif
ATT => NC_MAKE_ATT(name='history',values="FILE CREATED: "//D//"T"//T)
NCF => ADD(NCF,ATT)
VAR => NC_MAKE_AVAR(name='obc_nodes', values=I_OBC_N, DIM1= DIM_nobc)
ATT => NC_MAKE_ATT(name='long_name',values='Open Boundary Node Number')
VAR => ADD(VAR,ATT)
ATT => NC_MAKE_ATT(name='grid',values='obc_grid')
VAR => ADD(VAR,ATT)
NCF => ADD(NCF,VAR)
NCF => ADD(NCF, TIME_FILE_OBJECT() )
! OPEN BOUNDARY ELEVATION
VAR => NC_MAKE_AVAR(name='elevation', values=LINE, DIM1=DIM_nobc, DIM2=DIM_time)
ATT => NC_MAKE_ATT(name='long_name',values='Open Boundary Elevation')
VAR => ADD(VAR,ATT)
ATT => NC_MAKE_ATT(name='units',values='meters')
VAR => ADD(VAR,ATT)
NCF => ADD(NCF,VAR)
ALLOCATE(NCF%FTIME)
NCF%FTIME%NEXT_STKCNT=0
CALL NC_WRITE_FILE(NCF)
NOW = START
DO I=1,NTIMES
CALL UPDATE_IODATA(NCF,NOW)
LINE(:) = ELEVATION(:,I)
NCF%FTIME%NEXT_STKCNT = NCF%FTIME%NEXT_STKCNT +1
CALL NC_WRITE_FILE(NCF)
NOW = NOW + STEP
END DO
RETURN
END SUBROUTINE WRITE_JULIAN
按照上述Fortran语言用python改写一个生成FVCOM的julian边界水位条件nc文件的代码
最新发布